|
|
@@ -1,72 +1,20 @@
|
|
|
module systolicFilterBlock # (
|
|
|
- parameter CoeffCount = 25
|
|
|
+ parameter CoeffCount = 65
|
|
|
)
|
|
|
(
|
|
|
input Clk_i,
|
|
|
input Rst_i,
|
|
|
input [17:0] Data_i,
|
|
|
+ input CoefDataVal_i,
|
|
|
+ input [17:0] CoefData_i,
|
|
|
input DataNd_i,
|
|
|
output [47:0] Data_o,
|
|
|
output DataValid_o
|
|
|
);
|
|
|
|
|
|
- wire signed [17:0] coeff[0:CoeffCount-1];
|
|
|
+ reg signed [17:0] coeff[0:CoeffCount-1];
|
|
|
+
|
|
|
|
|
|
- // assign coeff[0] = 18'h3e6c9;
|
|
|
- // assign coeff[1] = 18'h3c349;
|
|
|
- // assign coeff[2] = 18'h3cfde;
|
|
|
- // assign coeff[3] = 18'h3f440;
|
|
|
- // assign coeff[4] = 18'h05e4b;
|
|
|
- // assign coeff[5] = 18'h0e79f;
|
|
|
- // assign coeff[6] = 18'h172aa;
|
|
|
- // assign coeff[7] = 18'h1c760;
|
|
|
- // assign coeff[8] = 18'h1c760;
|
|
|
- // assign coeff[9] = 18'h172aa;
|
|
|
- // assign coeff[10] = 18'h0e79f;
|
|
|
- // assign coeff[11] = 18'h05e4b;
|
|
|
- // assign coeff[12] = 18'h3f440;
|
|
|
- // assign coeff[13] = 18'h3cfde;
|
|
|
- // assign coeff[14] = 18'h3c349;
|
|
|
- // assign coeff[15] = 18'h3e6c9;
|
|
|
-
|
|
|
- assign coeff[0] = 18'h000db;
|
|
|
- assign coeff[1] = 18'h001f5;
|
|
|
- assign coeff[2] = 18'h000ee;
|
|
|
- assign coeff[3] = 18'h3fbe4;
|
|
|
- assign coeff[4] = 18'h3f5ef;
|
|
|
- assign coeff[5] = 18'h3f642;
|
|
|
- assign coeff[6] = 18'h3ff5b;
|
|
|
- assign coeff[7] = 18'h0085c;
|
|
|
- assign coeff[8] = 18'h0051e;
|
|
|
- assign coeff[9] = 18'h3f76d;
|
|
|
- assign coeff[10] = 18'h3f1c7;
|
|
|
- assign coeff[11] = 18'h000d9;
|
|
|
- assign coeff[12] = 18'h014f2;
|
|
|
- assign coeff[13] = 18'h00f01;
|
|
|
- assign coeff[14] = 18'h3eb66;
|
|
|
- assign coeff[15] = 18'h3d5bc;
|
|
|
- assign coeff[16] = 18'h000cc;
|
|
|
- assign coeff[17] = 18'h066cd;
|
|
|
- assign coeff[18] = 18'h0becc;
|
|
|
- assign coeff[19] = 18'h0becc;
|
|
|
- assign coeff[20] = 18'h066cd;
|
|
|
- assign coeff[21] = 18'h000cc;
|
|
|
- assign coeff[22] = 18'h3d5bc;
|
|
|
- assign coeff[23] = 18'h3eb66;
|
|
|
- assign coeff[24] = 18'h00f01;
|
|
|
- assign coeff[25] = 18'h014f2;
|
|
|
- assign coeff[26] = 18'h000d9;
|
|
|
- assign coeff[27] = 18'h3f1c7;
|
|
|
- assign coeff[28] = 18'h3f76d;
|
|
|
- assign coeff[29] = 18'h0051e;
|
|
|
- assign coeff[30] = 18'h0085c;
|
|
|
- assign coeff[31] = 18'h3ff5b;
|
|
|
- assign coeff[32] = 18'h3f642;
|
|
|
- assign coeff[33] = 18'h3f5ef;
|
|
|
- assign coeff[34] = 18'h3fbe4;
|
|
|
- assign coeff[35] = 18'h000ee;
|
|
|
- assign coeff[36] = 18'h001f5;
|
|
|
- assign coeff[37] = 18'h000db;
|
|
|
|
|
|
wire signed [17:0] dataIn = Data_i;
|
|
|
reg [3:0] ndShReg;
|
|
|
@@ -83,6 +31,28 @@ module systolicFilterBlock # (
|
|
|
reg signed [34:0] multResult[0:CoeffCount-1];
|
|
|
reg signed [47:0] sumResult[0:CoeffCount-1];
|
|
|
|
|
|
+ reg [8:0] addrCnt;
|
|
|
+
|
|
|
+
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (!Rst_i) begin
|
|
|
+ if (CoefDataVal_i) begin
|
|
|
+ addrCnt <= addrCnt+1;
|
|
|
+ end else begin
|
|
|
+ addrCnt <= 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ addrCnt <= 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ always @(*) begin
|
|
|
+ if (!Rst_i) begin
|
|
|
+ if (CoefDataVal_i) begin
|
|
|
+ coeff[addrCnt] = CoefData_i;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
|
|
|
genvar i;
|
|
|
generate
|