1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
// ----------------------------------------------------------------------
// HLS HDL: Verilog Netlister
// HLS Version: 2011a.126 Production Release
// HLS Date: Wed Aug 8 00:52:07 PDT 2012
//
// Generated by: mg3115@EEWS104A-015
// Generated date: Tue Mar 01 15:39:39 2016
// ----------------------------------------------------------------------
//
// ------------------------------------------------------------------
// Design Unit: dot_product_core
// ------------------------------------------------------------------
module dot_product_core (
clk, en, arst_n, input_a_rsc_mgc_in_wire_d, input_b_rsc_mgc_in_wire_d, output_rsc_mgc_out_stdreg_d
);
input clk;
input en;
input arst_n;
input [7:0] input_a_rsc_mgc_in_wire_d;
input [7:0] input_b_rsc_mgc_in_wire_d;
output [7:0] output_rsc_mgc_out_stdreg_d;
reg [7:0] output_rsc_mgc_out_stdreg_d;
// Interconnect Declarations
reg exit_MAC_lpi;
reg [7:0] acc_sva_1;
reg [2:0] i_1_sva_1;
wire [2:0] MAC_acc_itm;
wire [3:0] nl_MAC_acc_itm;
wire [7:0] acc_sva_2;
wire [8:0] nl_acc_sva_2;
wire [2:0] i_1_sva_2;
wire [3:0] nl_i_1_sva_2;
// Interconnect Declarations for Component Instantiations
assign nl_acc_sva_2 = (acc_sva_1 & (signext_8_1(~ exit_MAC_lpi))) + conv_s2s_16_8(input_a_rsc_mgc_in_wire_d
* input_b_rsc_mgc_in_wire_d);
assign acc_sva_2 = nl_acc_sva_2[7:0];
assign nl_i_1_sva_2 = (i_1_sva_1 & (signext_3_1(~ exit_MAC_lpi))) + 3'b1;
assign i_1_sva_2 = nl_i_1_sva_2[2:0];
assign nl_MAC_acc_itm = i_1_sva_2 + 3'b11;
assign MAC_acc_itm = nl_MAC_acc_itm[2:0];
always @(posedge clk or negedge arst_n) begin
if ( ~ arst_n ) begin
output_rsc_mgc_out_stdreg_d <= 8'b0;
acc_sva_1 <= 8'b0;
i_1_sva_1 <= 3'b0;
exit_MAC_lpi <= 1'b1;
end
else begin
if ( en ) begin
output_rsc_mgc_out_stdreg_d <= MUX_v_8_2_2({acc_sva_2 , output_rsc_mgc_out_stdreg_d},
MAC_acc_itm[2]);
acc_sva_1 <= acc_sva_2;
i_1_sva_1 <= i_1_sva_2;
exit_MAC_lpi <= ~ (MAC_acc_itm[2]);
end
end
end
function [7:0] signext_8_1;
input [0:0] vector;
begin
signext_8_1= {{7{vector[0]}}, vector};
end
endfunction
function [2:0] signext_3_1;
input [0:0] vector;
begin
signext_3_1= {{2{vector[0]}}, vector};
end
endfunction
function [7:0] MUX_v_8_2_2;
input [15:0] inputs;
input [0:0] sel;
reg [7:0] result;
begin
case (sel)
1'b0 : begin
result = inputs[15:8];
end
1'b1 : begin
result = inputs[7:0];
end
default : begin
result = inputs[15:8];
end
endcase
MUX_v_8_2_2 = result;
end
endfunction
function signed [7:0] conv_s2s_16_8 ;
input signed [15:0] vector ;
begin
conv_s2s_16_8 = vector[7:0];
end
endfunction
endmodule
// ------------------------------------------------------------------
// Design Unit: dot_product
// Generated from file(s):
// 2) $PROJECT_HOME/../student_files_2015/student_files_2015/prj1/dot_product_source/dot_product.cpp
// ------------------------------------------------------------------
module dot_product (
input_a_rsc_z, input_b_rsc_z, output_rsc_z, clk, en, arst_n
);
input [7:0] input_a_rsc_z;
input [7:0] input_b_rsc_z;
output [7:0] output_rsc_z;
input clk;
input en;
input arst_n;
// Interconnect Declarations
wire [7:0] input_a_rsc_mgc_in_wire_d;
wire [7:0] input_b_rsc_mgc_in_wire_d;
wire [7:0] output_rsc_mgc_out_stdreg_d;
// Interconnect Declarations for Component Instantiations
mgc_in_wire #(.rscid(1),
.width(8)) input_a_rsc_mgc_in_wire (
.d(input_a_rsc_mgc_in_wire_d),
.z(input_a_rsc_z)
);
mgc_in_wire #(.rscid(2),
.width(8)) input_b_rsc_mgc_in_wire (
.d(input_b_rsc_mgc_in_wire_d),
.z(input_b_rsc_z)
);
mgc_out_stdreg #(.rscid(3),
.width(8)) output_rsc_mgc_out_stdreg (
.d(output_rsc_mgc_out_stdreg_d),
.z(output_rsc_z)
);
dot_product_core dot_product_core_inst (
.clk(clk),
.en(en),
.arst_n(arst_n),
.input_a_rsc_mgc_in_wire_d(input_a_rsc_mgc_in_wire_d),
.input_b_rsc_mgc_in_wire_d(input_b_rsc_mgc_in_wire_d),
.output_rsc_mgc_out_stdreg_d(output_rsc_mgc_out_stdreg_d)
);
endmodule
|