Compare commits
9 Commits
6e386a2743
...
eba7fac84d
Author | SHA1 | Date |
---|---|---|
|
eba7fac84d | |
|
e14d9494b0 | |
|
487aa20517 | |
|
4a451196fd | |
|
69b80e4575 | |
|
3e00afece0 | |
|
5fbf171cbe | |
|
dea52768ee | |
|
832408d29b |
|
@ -71,7 +71,6 @@ assign ab_pow_im[2] = abb_im;
|
||||||
assign ab_pow_im[1] = ab_im;
|
assign ab_pow_im[1] = ab_im;
|
||||||
assign ab_pow_im[0] = a_im;
|
assign ab_pow_im[0] = a_im;
|
||||||
|
|
||||||
|
|
||||||
wire signed [temp_var_width-1 :0] x_re [0:7];
|
wire signed [temp_var_width-1 :0] x_re [0:7];
|
||||||
wire signed [temp_var_width-1 :0] x_im [0:7];
|
wire signed [temp_var_width-1 :0] x_im [0:7];
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
module IIR_top #(
|
module IIR_top #(
|
||||||
parameter data_out_width = 23
|
parameter data_out_width = 23
|
||||||
,parameter temp_var_width = data_out_width + 14
|
,parameter temp_var_width = data_out_width + 14
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
module TailCorr_top #(
|
module TailCorr_top #(
|
||||||
parameter temp_var_width = 22
|
parameter temp_var_width = 22
|
||||||
)
|
)
|
||||||
|
@ -175,6 +176,7 @@ wire signed [temp_var_width+2:0] sum_IIRout_p4;
|
||||||
wire signed [temp_var_width+2:0] sum_IIRout_p5;
|
wire signed [temp_var_width+2:0] sum_IIRout_p5;
|
||||||
wire signed [temp_var_width+2:0] sum_IIRout_p6;
|
wire signed [temp_var_width+2:0] sum_IIRout_p6;
|
||||||
wire signed [temp_var_width+2:0] sum_IIRout_p7;
|
wire signed [temp_var_width+2:0] sum_IIRout_p7;
|
||||||
|
|
||||||
reg signed [15:0] din_p0_r [16:0];
|
reg signed [15:0] din_p0_r [16:0];
|
||||||
reg signed [15:0] din_p1_r [16:0];
|
reg signed [15:0] din_p1_r [16:0];
|
||||||
reg signed [15:0] din_p2_r [16:0];
|
reg signed [15:0] din_p2_r [16:0];
|
||||||
|
@ -183,6 +185,7 @@ reg signed [15:0] din_p4_r [16:0];
|
||||||
reg signed [15:0] din_p5_r [16:0];
|
reg signed [15:0] din_p5_r [16:0];
|
||||||
reg signed [15:0] din_p6_r [16:0];
|
reg signed [15:0] din_p6_r [16:0];
|
||||||
reg signed [15:0] din_p7_r [16:0];
|
reg signed [15:0] din_p7_r [16:0];
|
||||||
|
|
||||||
reg signed [15:0] IIRin_p0_r [1 :0]; // iirin_x(8n-7)
|
reg signed [15:0] IIRin_p0_r [1 :0]; // iirin_x(8n-7)
|
||||||
reg signed [15:0] IIRin_p1_r [3 :0]; // iirin_x(8n-22)
|
reg signed [15:0] IIRin_p1_r [3 :0]; // iirin_x(8n-22)
|
||||||
reg signed [15:0] IIRin_p2_r [5 :0]; // iirin_x(8n-37)
|
reg signed [15:0] IIRin_p2_r [5 :0]; // iirin_x(8n-37)
|
||||||
|
@ -270,6 +273,7 @@ always @(posedge clk or negedge rstn) begin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
/*
|
/*
|
||||||
wire signed [15:0] din_p0_r1;
|
wire signed [15:0] din_p0_r1;
|
||||||
wire signed [15:0] din_p1_r1;
|
wire signed [15:0] din_p1_r1;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
module diff_p
|
module diff_p
|
||||||
|
|
||||||
(
|
(
|
||||||
|
@ -122,38 +123,90 @@ if(rstn==1'b0)begin
|
||||||
diff_p5_r1 <= 0;
|
diff_p5_r1 <= 0;
|
||||||
diff_p6_r1 <= 0;
|
diff_p6_r1 <= 0;
|
||||||
diff_p7_r1 <= 0;
|
diff_p7_r1 <= 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
wire [15:0] din_wire [0:3];
|
||||||
|
|
||||||
|
assign din_wire[0] = din0;
|
||||||
|
assign din_wire[1] = din1;
|
||||||
|
assign din_wire[2] = din2;
|
||||||
|
assign din_wire[3] = din3;
|
||||||
|
|
||||||
|
|
||||||
|
wire [3:0] vldo_temp;
|
||||||
|
wire signed [15:0] dinp_r0 [7:0];
|
||||||
|
genvar i;
|
||||||
|
generate
|
||||||
|
for (i = 0; i < 4; i = i + 1) begin: s2p_inst
|
||||||
|
s2p_2 inst_s2p_2 (
|
||||||
|
.clk (clk),
|
||||||
|
.rst_n (rstn),
|
||||||
|
.din (din_wire[i]),
|
||||||
|
.en (vldi),
|
||||||
|
.dout0 (dinp_r0[i]),
|
||||||
|
.dout1 (dinp_r0[i+4]),
|
||||||
|
.vldo (vldo_temp[i])
|
||||||
|
);
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
assign vldo = vldo_temp[0];
|
||||||
|
|
||||||
|
reg signed [15:0] dinp_r1 [0:7];
|
||||||
|
integer j;
|
||||||
|
always @(posedge clk or negedge rstn) begin
|
||||||
|
if (!rstn) begin
|
||||||
|
for (j = 0; j < 8; j = j + 1) begin
|
||||||
|
dinp_r1[j] <= 'h0;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else if (en) begin
|
else if (en) begin
|
||||||
diff_p0_r1 <= din_p0_r0 - din_p7_r1;
|
for (j = 0; j < 8; j = j + 1) begin
|
||||||
diff_p1_r1 <= din_p1_r0 - din_p0_r0;
|
dinp_r1[j] <= dinp_r0[j];
|
||||||
diff_p2_r1 <= din_p2_r0 - din_p1_r0;
|
|
||||||
diff_p3_r1 <= din_p3_r0 - din_p2_r0;
|
|
||||||
diff_p4_r1 <= din_p4_r0 - din_p3_r0;
|
|
||||||
diff_p5_r1 <= din_p5_r0 - din_p4_r0;
|
|
||||||
diff_p6_r1 <= din_p6_r0 - din_p5_r0;
|
|
||||||
diff_p7_r1 <= din_p7_r0 - din_p6_r0;
|
|
||||||
end
|
end
|
||||||
else begin
|
|
||||||
diff_p0_r1 <= diff_p0_r1;
|
|
||||||
diff_p1_r1 <= diff_p1_r1;
|
|
||||||
diff_p2_r1 <= diff_p2_r1;
|
|
||||||
diff_p3_r1 <= diff_p3_r1;
|
|
||||||
diff_p4_r1 <= diff_p4_r1;
|
|
||||||
diff_p5_r1 <= diff_p5_r1;
|
|
||||||
diff_p6_r1 <= diff_p6_r1;
|
|
||||||
diff_p7_r1 <= diff_p7_r1;
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assign diff_p0 = diff_p0_r1;
|
wire signed [15:0] diffp_r0 [0:7];
|
||||||
assign diff_p1 = diff_p1_r1;
|
generate
|
||||||
assign diff_p2 = diff_p2_r1;
|
for (i = 0; i < 8; i = i + 1) begin: diff_assign
|
||||||
assign diff_p3 = diff_p3_r1;
|
if (i == 0)
|
||||||
assign diff_p4 = diff_p4_r1;
|
assign diffp_r0[i] = dinp_r0[i] - dinp_r1[7];
|
||||||
assign diff_p5 = diff_p5_r1;
|
else
|
||||||
assign diff_p6 = diff_p6_r1;
|
assign diffp_r0[i] = dinp_r0[i] - dinp_r0[i-1];
|
||||||
assign diff_p7 = diff_p7_r1;
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
assign dout_p0 = dinp_r1[0];
|
||||||
|
assign dout_p1 = dinp_r1[1];
|
||||||
|
assign dout_p2 = dinp_r1[2];
|
||||||
|
assign dout_p3 = dinp_r1[3];
|
||||||
|
assign dout_p4 = dinp_r1[4];
|
||||||
|
assign dout_p5 = dinp_r1[5];
|
||||||
|
assign dout_p6 = dinp_r1[6];
|
||||||
|
assign dout_p7 = dinp_r1[7];
|
||||||
|
|
||||||
|
reg signed [15:0] diffp_r1 [0:7];
|
||||||
|
always @(posedge clk or negedge rstn) begin
|
||||||
|
if (!rstn) begin
|
||||||
|
for (j = 0; j < 8; j = j + 1) begin
|
||||||
|
diffp_r1[j] <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else if (en) begin
|
||||||
|
for (j = 0; j < 8; j = j + 1) begin
|
||||||
|
diffp_r1[j] <= diffp_r0[j];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign diff_p0 = diffp_r1[0];
|
||||||
|
assign diff_p1 = diffp_r1[1];
|
||||||
|
assign diff_p2 = diffp_r1[2];
|
||||||
|
assign diff_p3 = diffp_r1[3];
|
||||||
|
assign diff_p4 = diffp_r1[4];
|
||||||
|
assign diff_p5 = diffp_r1[5];
|
||||||
|
assign diff_p6 = diffp_r1[6];
|
||||||
|
assign diff_p7 = diffp_r1[7];
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
|
@ -1,326 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2018-2020 Nuclei System Technology, Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
//
|
|
||||||
// Designer : Bob Hu
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// All of the general DFF and Latch modules
|
|
||||||
//
|
|
||||||
// ====================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
|
||||||
// Default reset value is 1
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
`define DISABLE_SV_ASSERTION
|
|
||||||
`define dly #0.2
|
|
||||||
module sirv_gnrl_dfflrs # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
input lden,
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk,
|
|
||||||
input rst_n
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_n)
|
|
||||||
begin : DFFLRS_PROC
|
|
||||||
if (rst_n == 1'b0)
|
|
||||||
qout_r <= {DW{1'b1}};
|
|
||||||
else if (lden == 1'b1)
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
`ifndef FPGA_SOURCE//{
|
|
||||||
`ifndef DISABLE_SV_ASSERTION//{
|
|
||||||
//synopsys translate_off
|
|
||||||
sirv_gnrl_xchecker # (
|
|
||||||
.DW(1)
|
|
||||||
) sirv_gnrl_xchecker(
|
|
||||||
.i_dat(lden),
|
|
||||||
.clk (clk)
|
|
||||||
);
|
|
||||||
//synopsys translate_on
|
|
||||||
`endif//}
|
|
||||||
`endif//}
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
|
||||||
// Default reset value is 0
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_dfflr # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
input lden,
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk,
|
|
||||||
input rst_n
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_n)
|
|
||||||
begin : DFFLR_PROC
|
|
||||||
if (rst_n == 1'b0)
|
|
||||||
qout_r <= {DW{1'b0}};
|
|
||||||
else if (lden == 1'b1)
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
`ifndef FPGA_SOURCE//{
|
|
||||||
`ifndef DISABLE_SV_ASSERTION//{
|
|
||||||
//synopsys translate_off
|
|
||||||
sirv_gnrl_xchecker # (
|
|
||||||
.DW(1)
|
|
||||||
) sirv_gnrl_xchecker(
|
|
||||||
.i_dat(lden),
|
|
||||||
.clk (clk)
|
|
||||||
);
|
|
||||||
//synopsys translate_on
|
|
||||||
`endif//}
|
|
||||||
`endif//}
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
|
||||||
// Default reset value is input
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_dfflrd # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
input [DW-1:0] init,
|
|
||||||
input lden,
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk,
|
|
||||||
input rst_n
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_n)
|
|
||||||
begin : DFFLR_PROC
|
|
||||||
if (rst_n == 1'b0)
|
|
||||||
qout_r <= init;
|
|
||||||
else if (lden == 1'b1)
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
`ifndef FPGA_SOURCE//{
|
|
||||||
`ifndef DISABLE_SV_ASSERTION//{
|
|
||||||
//synopsys translate_off
|
|
||||||
sirv_gnrl_xchecker # (
|
|
||||||
.DW(1)
|
|
||||||
) sirv_gnrl_xchecker(
|
|
||||||
.i_dat(lden),
|
|
||||||
.clk (clk)
|
|
||||||
);
|
|
||||||
//synopsys translate_on
|
|
||||||
`endif//}
|
|
||||||
`endif//}
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Load-enable, no reset
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_dffl # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
input lden,
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk)
|
|
||||||
begin : DFFL_PROC
|
|
||||||
if (lden == 1'b1)
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
`ifndef FPGA_SOURCE//{
|
|
||||||
`ifndef DISABLE_SV_ASSERTION//{
|
|
||||||
//synopsys translate_off
|
|
||||||
sirv_gnrl_xchecker # (
|
|
||||||
.DW(1)
|
|
||||||
) sirv_gnrl_xchecker(
|
|
||||||
.i_dat(lden),
|
|
||||||
.clk (clk)
|
|
||||||
);
|
|
||||||
//synopsys translate_on
|
|
||||||
`endif//}
|
|
||||||
`endif//}
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
|
||||||
// Default reset value is 1
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_dffrs # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk,
|
|
||||||
input rst_n
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_n)
|
|
||||||
begin : DFFRS_PROC
|
|
||||||
if (rst_n == 1'b0)
|
|
||||||
qout_r <= {DW{1'b1}};
|
|
||||||
else
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
|
||||||
// Default reset value is 0
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_dffr # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout,
|
|
||||||
|
|
||||||
input clk,
|
|
||||||
input rst_n
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_n)
|
|
||||||
begin : DFFR_PROC
|
|
||||||
if (rst_n == 1'b0)
|
|
||||||
qout_r <= {DW{1'b0}};
|
|
||||||
else
|
|
||||||
qout_r <= `dly dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
endmodule
|
|
||||||
// ===========================================================================
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Verilog module for general latch
|
|
||||||
//
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
module sirv_gnrl_ltch # (
|
|
||||||
parameter DW = 32
|
|
||||||
) (
|
|
||||||
|
|
||||||
//input test_mode,
|
|
||||||
input lden,
|
|
||||||
input [DW-1:0] dnxt,
|
|
||||||
output [DW-1:0] qout
|
|
||||||
);
|
|
||||||
|
|
||||||
reg [DW-1:0] qout_r;
|
|
||||||
|
|
||||||
always @ *
|
|
||||||
begin : LTCH_PROC
|
|
||||||
if (lden == 1'b1)
|
|
||||||
qout_r <= dnxt;
|
|
||||||
end
|
|
||||||
|
|
||||||
//assign qout = test_mode ? dnxt : qout_r;
|
|
||||||
assign qout = qout_r;
|
|
||||||
|
|
||||||
`ifndef FPGA_SOURCE//{
|
|
||||||
`ifndef DISABLE_SV_ASSERTION//{
|
|
||||||
//synopsys translate_off
|
|
||||||
always_comb
|
|
||||||
begin
|
|
||||||
CHECK_THE_X_VALUE:
|
|
||||||
assert (lden !== 1'bx)
|
|
||||||
else $fatal ("\n Error: Oops, detected a X value!!! This should never happen. \n");
|
|
||||||
end
|
|
||||||
|
|
||||||
//synopsys translate_on
|
|
||||||
`endif//}
|
|
||||||
`endif//}
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
Loading…
Reference in New Issue