add coefficient generation module and z_dsp; remove interpolation module and other files; suggest further simplification of RTL code using for-loops
This commit is contained in:
		
							parent
							
								
									e42378b1ab
								
							
						
					
					
						commit
						a0f18c5a21
					
				
							
								
								
									
										487446
									
								
								edf/z_dsp_en_Test.edf
								
								
								
								
							
							
						
						
									
										487446
									
								
								edf/z_dsp_en_Test.edf
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,357 +0,0 @@ | ||||||
| //////////////////////////////////////////////////////////////////////////////// |  | ||||||
| // |  | ||||||
| //       This confidential and proprietary software may be used only |  | ||||||
| //     as authorized by a licensing agreement from Synopsys Inc. |  | ||||||
| //     In the event of publication, the following notice is applicable: |  | ||||||
| // |  | ||||||
| //                    (C) COPYRIGHT 2002 - 2018 SYNOPSYS INC. |  | ||||||
| //                           ALL RIGHTS RESERVED |  | ||||||
| // |  | ||||||
| //       The entire notice above must be reproduced on all authorized |  | ||||||
| //     copies. |  | ||||||
| // |  | ||||||
| // AUTHOR:    Rajeev Huralikoppi         Feb 15, 2002 |  | ||||||
| // |  | ||||||
| // VERSION:   Verilog Simulation Architecture |  | ||||||
| // |  | ||||||
| // DesignWare_version: 4e25d03d |  | ||||||
| // DesignWare_release: O-2018.06-DWBB_201806.3 |  | ||||||
| // |  | ||||||
| //////////////////////////////////////////////////////////////////////////////// |  | ||||||
| //----------------------------------------------------------------------------- |  | ||||||
| // ABSTRACT:   An n stage pipelined multipler simulation model  |  | ||||||
| // |  | ||||||
| //      Parameters      Valid Values    Description |  | ||||||
| //      ==========      =========       ===========   |  | ||||||
| //      a_width         >= 1            default: none |  | ||||||
| //                                      Word length of a |  | ||||||
| // |  | ||||||
| //      b_width         >= 1            default: none |  | ||||||
| //                                      Word length of b |  | ||||||
| // |  | ||||||
| //      num_stages      >= 2            default: 2 |  | ||||||
| //                                      Number of pipelined stages |  | ||||||
| // |  | ||||||
| //      stall_mode      0 or 1          default: 1 |  | ||||||
| //                                      Stall mode |  | ||||||
| //                                        0 => non-stallable |  | ||||||
| //                                        1 => stallable |  | ||||||
| // |  | ||||||
| //      rst_mode        0 to 2          default: 1 |  | ||||||
| //                                      Reset mode |  | ||||||
| //                                        0 => no reset |  | ||||||
| //                                        1 => asynchronous reset |  | ||||||
| //                                        2 => synchronous reset |  | ||||||
| // |  | ||||||
| //      op_iso_mode     0 to 4         default: 0 |  | ||||||
| //                                     Type of operand isolation |  | ||||||
| //                                       If 'stall_mode' is '0', this parameter is ignored and no isolation is applied |  | ||||||
| //                                       0 => Follow intent defined by Power Compiler user setting |  | ||||||
| //                                       1 => no operand isolation |  | ||||||
| //                                       2 => 'and' gate operand isolaton |  | ||||||
| //                                       3 => 'or' gate operand isolation |  | ||||||
| //                                       4 => preferred isolation style: 'and' |  | ||||||
| // |  | ||||||
| // |  | ||||||
| //      Input Ports     Size            Description |  | ||||||
| //      ===========     ====            ============  |  | ||||||
| //      clk             1               Clock  |  | ||||||
| //      rst_n           1               Reset, active low |  | ||||||
| //      en              1               Register enable, active high |  | ||||||
| //      tc              1               2's complement control |  | ||||||
| //      a               a_width         Multiplier |  | ||||||
| //      b               b_width         Multiplicand |  | ||||||
| //       |  | ||||||
| //      product         a_width+b_width Product (a*b) |  | ||||||
| // |  | ||||||
| // MODIFIED: |  | ||||||
| //              RJK  05/14/15   Updated model to work with less propagated 'X's |  | ||||||
| //                              so as to be more friendly with VCS-NLP |  | ||||||
| // |  | ||||||
| //              RJK  05/28/13   Updated documentation in comments to properly |  | ||||||
| //                              describe the "en" input (STAR 9000627580) |  | ||||||
| // |  | ||||||
| //              DLL  02/01/08   Enhanced abstract and added "op_iso_mode" parameter |  | ||||||
| //                              and related code. |  | ||||||
| //            |  | ||||||
| //              DLL  11/14/05   Changed legality checking of 'num_stages' |  | ||||||
| //                              parameter along with its abstract "Valid Values" |  | ||||||
| // |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
| module DW_mult_pipe (clk,rst_n,en,tc,a,b,product); |  | ||||||
|     |  | ||||||
|    parameter integer a_width = 2; |  | ||||||
|    parameter integer b_width = 2; |  | ||||||
|    parameter integer num_stages = 2; |  | ||||||
|    parameter integer stall_mode = 1; |  | ||||||
|    parameter integer rst_mode = 1; |  | ||||||
|    parameter integer op_iso_mode = 0; |  | ||||||
| 
 |  | ||||||
|     |  | ||||||
|    input clk; |  | ||||||
|    input rst_n; |  | ||||||
|    input [a_width-1 : 0] a; |  | ||||||
|    input [b_width-1 : 0] b; |  | ||||||
|    input tc; |  | ||||||
|    input en; |  | ||||||
|     |  | ||||||
|    output [a_width+b_width-1: 0] product; |  | ||||||
| 
 |  | ||||||
|    reg [a_width-1 : 0]  a_reg  [0 : num_stages-2]; |  | ||||||
|    reg [b_width-1 : 0]  b_reg  [0 : num_stages-2]; |  | ||||||
|    reg                  tc_reg [0 : num_stages-2]; |  | ||||||
| 
 |  | ||||||
|   // synopsys translate_off |  | ||||||
|   //--------------------------------------------------------------------------- |  | ||||||
|   // Behavioral model |  | ||||||
|   //---------------------------------------------------------------------------    |  | ||||||
|     |  | ||||||
| generate |  | ||||||
|   if (rst_mode == 0) begin : GEN_RSM_EQ_0 |  | ||||||
| 
 |  | ||||||
|     if (stall_mode == 0) begin : GEN_RM0_SM0 |  | ||||||
|       always @(posedge clk) begin: rm0_sm0_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 
 |  | ||||||
| 	for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	   if (i == 0) begin |  | ||||||
| 	      a_reg[0]  <= a; |  | ||||||
| 	      b_reg[0]  <= b; |  | ||||||
| 	      tc_reg[0] <= tc; |  | ||||||
| 	   end else begin |  | ||||||
| 	      a_reg[i]  <= a_reg[i-1]; |  | ||||||
| 	      b_reg[i]  <= b_reg[i-1]; |  | ||||||
| 	      tc_reg[i] <= tc_reg[i-1]; |  | ||||||
| 	   end |  | ||||||
| 	end	  // for (i= 0; i < num_stages-1; i++) |  | ||||||
|       end // block: rm0_pipe_reg_PROC |  | ||||||
|     end else begin : GEN_RM0_SM1 |  | ||||||
|       always @(posedge clk) begin: rm0_sm1_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 
 |  | ||||||
| 	for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	   if (i == 0) begin |  | ||||||
| 	      a_reg[0]  <= (en == 1'b0)? a_reg[0] : ((en == 1'b1)? a : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[0]  <= (en == 1'b0)? b_reg[0] : ((en == 1'b1)? b : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[0] <= (en == 1'b0)? tc_reg[0]: ((en == 1'b1)? tc: 1'bx); |  | ||||||
| 	   end else begin |  | ||||||
| 	      a_reg[i]  <= (en == 1'b0)? a_reg[i] : ((en == 1'b1)? a_reg[i-1] : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[i]  <= (en == 1'b0)? b_reg[i] : ((en == 1'b1)? b_reg[i-1] : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[i] <= (en == 1'b0)? tc_reg[i]: ((en == 1'b1)? tc_reg[i-1]: 1'bx); |  | ||||||
| 	   end |  | ||||||
|         end |  | ||||||
|       end |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|   end else if (rst_mode == 1) begin : GEN_RM_EQ_1 |  | ||||||
| 
 |  | ||||||
|     if (stall_mode == 0) begin : GEN_RM1_SM0 |  | ||||||
|       always @(posedge clk or negedge rst_n) begin: rm1_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 	  |  | ||||||
| 	if (rst_n == 1'b0) begin |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'b0}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'b0}}; |  | ||||||
| 	    tc_reg[i] <= 1'b0; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else if  (rst_n == 1'b1) begin |  | ||||||
| 	  for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	     if (i == 0) begin |  | ||||||
| 		a_reg[0]  <= a; |  | ||||||
| 		b_reg[0]  <= b; |  | ||||||
| 		tc_reg[0] <= tc; |  | ||||||
| 	     end else begin |  | ||||||
| 		a_reg[i]  <= a_reg[i-1]; |  | ||||||
| 		b_reg[i]  <= b_reg[i-1]; |  | ||||||
| 		tc_reg[i] <= tc_reg[i-1]; |  | ||||||
| 	     end |  | ||||||
| 	  end	  // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else begin // rst_n not 1'b0 and not 1'b1 |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'bx}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'bx}}; |  | ||||||
| 	    tc_reg[i] <= 1'bx; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end |  | ||||||
|       end // block: rm1_pipe_reg_PROC |  | ||||||
|     end else begin : GEN_RM1_SM1 |  | ||||||
|       always @(posedge clk or negedge rst_n) begin: rm1_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 	  |  | ||||||
| 	if (rst_n == 1'b0) begin |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'b0}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'b0}}; |  | ||||||
| 	    tc_reg[i] <= 1'b0; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else if  (rst_n == 1'b1) begin |  | ||||||
| 	  for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	    if (i == 0) begin |  | ||||||
| 	      a_reg[0]  <= (en == 1'b0)? a_reg[0] : ((en == 1'b1)? a : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[0]  <= (en == 1'b0)? b_reg[0] : ((en == 1'b1)? b : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[0] <= (en == 1'b0)? tc_reg[0]: ((en == 1'b1)? tc: 1'bx); |  | ||||||
| 	    end else begin |  | ||||||
| 	      a_reg[i]  <= (en == 1'b0)? a_reg[i] : ((en == 1'b1)? a_reg[i-1] : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[i]  <= (en == 1'b0)? b_reg[i] : ((en == 1'b1)? b_reg[i-1] : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[i] <= (en == 1'b0)? tc_reg[i]: ((en == 1'b1)? tc_reg[i-1]: 1'bx); |  | ||||||
| 	    end |  | ||||||
| 	  end	  // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else begin // rst_n not 1'b0 and not 1'b1 |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'bx}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'bx}}; |  | ||||||
| 	    tc_reg[i] <= 1'bx; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end |  | ||||||
|       end // block: rm1_pipe_reg_PROC |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|   end else begin : GEN_RM_GT_1 |  | ||||||
| 
 |  | ||||||
|     if (stall_mode == 0) begin : GEN_RM2_SM0 |  | ||||||
|       always @(posedge clk) begin: rm2_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 	  |  | ||||||
| 	if (rst_n == 1'b0) begin |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'b0}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'b0}}; |  | ||||||
| 	    tc_reg[i] <= 1'b0; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else if  (rst_n == 1'b1) begin |  | ||||||
| 	  for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	     if (i == 0) begin |  | ||||||
| 		a_reg[0]  <= a; |  | ||||||
| 		b_reg[0]  <= b; |  | ||||||
| 		tc_reg[0] <= tc; |  | ||||||
| 	     end else begin |  | ||||||
| 		a_reg[i]  <= a_reg[i-1]; |  | ||||||
| 		b_reg[i]  <= b_reg[i-1]; |  | ||||||
| 		tc_reg[i] <= tc_reg[i-1]; |  | ||||||
| 	     end |  | ||||||
| 	  end	  // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else begin // rst_n not 1'b0 and not 1'b1 |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'bx}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'bx}}; |  | ||||||
| 	    tc_reg[i] <= 1'bx; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end |  | ||||||
|       end // block: rm2_pipe_reg_PROC |  | ||||||
|     end else begin : GEN_RM2_SM1 |  | ||||||
|       always @(posedge clk) begin: rm2_pipe_reg_PROC |  | ||||||
| 	integer i; |  | ||||||
| 	  |  | ||||||
| 	if (rst_n == 1'b0) begin |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'b0}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'b0}}; |  | ||||||
| 	    tc_reg[i] <= 1'b0; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else if  (rst_n == 1'b1) begin |  | ||||||
| 	  for(i= 0; i < num_stages-1; i=i+1) begin  |  | ||||||
| 	    if (i == 0) begin |  | ||||||
| 	      a_reg[0]  <= (en == 1'b0)? a_reg[0] : ((en == 1'b1)? a : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[0]  <= (en == 1'b0)? b_reg[0] : ((en == 1'b1)? b : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[0] <= (en == 1'b0)? tc_reg[0]: ((en == 1'b1)? tc: 1'bx); |  | ||||||
| 	    end else begin |  | ||||||
| 	      a_reg[i]  <= (en == 1'b0)? a_reg[i] : ((en == 1'b1)? a_reg[i-1] : {a_width{1'bx}}); |  | ||||||
| 	      b_reg[i]  <= (en == 1'b0)? b_reg[i] : ((en == 1'b1)? b_reg[i-1] : {b_width{1'bx}}); |  | ||||||
| 	      tc_reg[i] <= (en == 1'b0)? tc_reg[i]: ((en == 1'b1)? tc_reg[i-1]: 1'bx); |  | ||||||
| 	    end |  | ||||||
| 	  end	  // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end else begin // rst_n not 1'b0 and not 1'b1 |  | ||||||
| 	  for (i= 0; i < num_stages-1; i=i+1) begin |  | ||||||
| 	    a_reg[i]  <= {a_width{1'bx}}; |  | ||||||
| 	    b_reg[i]  <= {b_width{1'bx}}; |  | ||||||
| 	    tc_reg[i] <= 1'bx; |  | ||||||
| 	  end // for (i= 0; i < num_stages-1; i++) |  | ||||||
| 	end |  | ||||||
|       end // block: rm2_pipe_reg_PROC |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|   end |  | ||||||
| endgenerate |  | ||||||
|     |  | ||||||
|    DW02_mult #(a_width, b_width) |  | ||||||
|       U1 (.A(a_reg[num_stages-2]), |  | ||||||
| 	  .B(b_reg[num_stages-2]), |  | ||||||
| 	  .TC(tc_reg[num_stages-2]), |  | ||||||
| 	  .PRODUCT(product)); |  | ||||||
|  //--------------------------------------------------------------------------- |  | ||||||
|   // Parameter legality check and initializations |  | ||||||
|   //--------------------------------------------------------------------------- |  | ||||||
|    |  | ||||||
|   |  | ||||||
|   initial begin : parameter_check |  | ||||||
|     integer param_err_flg; |  | ||||||
| 
 |  | ||||||
|     param_err_flg = 0; |  | ||||||
|      |  | ||||||
|      |  | ||||||
|     if (a_width < 1) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter a_width (lower bound: 1)", |  | ||||||
| 	a_width ); |  | ||||||
|     end |  | ||||||
|      |  | ||||||
|     if (b_width < 1) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter b_width (lower bound: 1)", |  | ||||||
| 	b_width ); |  | ||||||
|     end |  | ||||||
|      |  | ||||||
|     if (num_stages < 2) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter num_stages (lower bound: 2)", |  | ||||||
| 	num_stages ); |  | ||||||
|     end    |  | ||||||
|      |  | ||||||
|     if ( (stall_mode < 0) || (stall_mode > 1) ) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter stall_mode (legal range: 0 to 1)", |  | ||||||
| 	stall_mode ); |  | ||||||
|     end    |  | ||||||
|      |  | ||||||
|     if ( (rst_mode < 0) || (rst_mode > 2) ) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter rst_mode (legal range: 0 to 2)", |  | ||||||
| 	rst_mode ); |  | ||||||
|     end |  | ||||||
|      |  | ||||||
|     if ( (op_iso_mode < 0) || (op_iso_mode > 4) ) begin |  | ||||||
|       param_err_flg = 1; |  | ||||||
|       $display( |  | ||||||
| 	"ERROR: %m :\n  Invalid value (%d) for parameter op_iso_mode (legal range: 0 to 4)", |  | ||||||
| 	op_iso_mode ); |  | ||||||
|     end |  | ||||||
|    |  | ||||||
|     if ( param_err_flg == 1) begin |  | ||||||
|       $display( |  | ||||||
|         "%m :\n  Simulation aborted due to invalid parameter value(s)"); |  | ||||||
|       $finish; |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|   end // parameter_check  |  | ||||||
| 
 |  | ||||||
|   |  | ||||||
|   //--------------------------------------------------------------------------- |  | ||||||
|   // Report unknown clock inputs |  | ||||||
|   //--------------------------------------------------------------------------- |  | ||||||
|    |  | ||||||
|   always @ (clk) begin : clk_monitor  |  | ||||||
|     if ( (clk !== 1'b0) && (clk !== 1'b1) && ($time > 0) ) |  | ||||||
|       $display( "WARNING: %m :\n  at time = %t, detected unknown value, %b, on clk input.", |  | ||||||
|                 $time, clk ); |  | ||||||
|     end // clk_monitor  |  | ||||||
|      |  | ||||||
|   // synopsys translate_on    |  | ||||||
| endmodule // |  | ||||||
							
								
								
									
										150
									
								
								rtl/nco/coef_c.v
								
								
								
								
							
							
						
						
									
										150
									
								
								rtl/nco/coef_c.v
								
								
								
								
							|  | @ -1,150 +0,0 @@ | ||||||
| module	COEF_C( |  | ||||||
| 			index	,	 |  | ||||||
| 			C0_C	, |  | ||||||
| 			C1_C	, |  | ||||||
| 			C2_C	 			 |  | ||||||
| 		); |  | ||||||
| input	[4:0]		index; |  | ||||||
| 
 |  | ||||||
| output	[17:0]	C0_C; |  | ||||||
| output	[11:0]	C1_C; |  | ||||||
| output	[5:0]	C2_C; |  | ||||||
| 
 |  | ||||||
| reg	[17:0]	C0_C; |  | ||||||
| reg	[11:0]	C1_C; |  | ||||||
| reg	[5:0]	C2_C; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //------------------------ |  | ||||||
| //----C0_C  OK |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C0_C	=18'h3ffff; |  | ||||||
| 			5'd 1   :	C0_C	=18'h3ffb1; |  | ||||||
| 			5'd 2   :	C0_C	=18'h3fec4; |  | ||||||
| 			5'd 3   :	C0_C	=18'h3fd3a; |  | ||||||
| 			5'd 4   :	C0_C	=18'h3fb12; |  | ||||||
| 			5'd 5   :	C0_C	=18'h3f84d; |  | ||||||
| 			5'd 6   :	C0_C	=18'h3f4eb; |  | ||||||
| 			5'd 7   :	C0_C	=18'h3f0ed; |  | ||||||
| 			5'd 8   :	C0_C	=18'h3ec53; |  | ||||||
| 			5'd 9   :	C0_C	=18'h3e71e; |  | ||||||
| 			5'd10   :	C0_C	=18'h3e150; |  | ||||||
| 			5'd11   :	C0_C	=18'h3dae8; |  | ||||||
| 			5'd12   :	C0_C	=18'h3d3e8; |  | ||||||
| 			5'd13   :	C0_C	=18'h3cc51; |  | ||||||
| 			5'd14   :	C0_C	=18'h3c424; |  | ||||||
| 			5'd15   :	C0_C	=18'h3bb62; |  | ||||||
| 			5'd16   :	C0_C	=18'h3b20d; |  | ||||||
| 			5'd17   :	C0_C	=18'h3a827; |  | ||||||
| 			5'd18   :	C0_C	=18'h39daf; |  | ||||||
| 			5'd19   :	C0_C	=18'h392a9; |  | ||||||
| 			5'd20   :	C0_C	=18'h38716; |  | ||||||
| 			5'd21   :	C0_C	=18'h37af8; |  | ||||||
| 			5'd22   :	C0_C	=18'h36e50; |  | ||||||
| 			5'd23   :	C0_C	=18'h36121; |  | ||||||
| 			5'd24   :	C0_C	=18'h3536d; |  | ||||||
| 			5'd25   :	C0_C	=18'h34535; |  | ||||||
| 			5'd26   :	C0_C	=18'h3367c; |  | ||||||
| 			5'd27   :	C0_C	=18'h32744; |  | ||||||
| 			5'd28   :	C0_C	=18'h31790; |  | ||||||
| 			5'd29   :	C0_C	=18'h30762; |  | ||||||
| 			5'd30   :	C0_C	=18'h2f6bc; |  | ||||||
| 			5'd31   :	C0_C	=18'h2e5a1; |  | ||||||
| 		//	default	:	C0_C	=	C0_C; |  | ||||||
| 		endcase		 |  | ||||||
| 	 |  | ||||||
| end |  | ||||||
|       |  | ||||||
| //------------------------ |  | ||||||
| //----C1_C OK |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C1_C	=12'd   0; |  | ||||||
| 			5'd 1   :	C1_C	=12'd  79; |  | ||||||
| 			5'd 2   :	C1_C	=12'd 158; |  | ||||||
| 			5'd 3   :	C1_C	=12'd 237; |  | ||||||
| 			5'd 4   :	C1_C	=12'd 315; |  | ||||||
| 			5'd 5   :	C1_C	=12'd 394; |  | ||||||
| 			5'd 6   :	C1_C	=12'd 472; |  | ||||||
| 			5'd 7   :	C1_C	=12'd 550; |  | ||||||
| 			5'd 8   :	C1_C	=12'd 628; |  | ||||||
| 			5'd 9   :	C1_C	=12'd 705; |  | ||||||
| 			5'd10   :	C1_C	=12'd 782; |  | ||||||
| 			5'd11   :	C1_C	=12'd 858; |  | ||||||
| 			5'd12   :	C1_C	=12'd 934; |  | ||||||
| 			5'd13   :	C1_C	=12'd1009; |  | ||||||
| 			5'd14   :	C1_C	=12'd1084; |  | ||||||
| 			5'd15   :	C1_C	=12'd1158; |  | ||||||
| 			5'd16   :	C1_C	=12'd1231; |  | ||||||
| 			5'd17   :	C1_C	=12'd1304; |  | ||||||
| 			5'd18   :	C1_C	=12'd1376; |  | ||||||
| 			5'd19   :	C1_C	=12'd1446; |  | ||||||
| 			5'd20   :	C1_C	=12'd1517; |  | ||||||
| 			5'd21   :	C1_C	=12'd1586; |  | ||||||
| 			5'd22   :	C1_C	=12'd1654; |  | ||||||
| 			5'd23   :	C1_C	=12'd1721; |  | ||||||
| 			5'd24   :	C1_C	=12'd1787; |  | ||||||
| 			5'd25   :	C1_C	=12'd1852; |  | ||||||
| 			5'd26   :	C1_C	=12'd1916; |  | ||||||
| 			5'd27   :	C1_C	=12'd1979; |  | ||||||
| 			5'd28   :	C1_C	=12'd2041; |  | ||||||
| 			5'd29   :	C1_C	=12'd2101; |  | ||||||
| 			5'd30   :	C1_C	=12'd2161; |  | ||||||
| 			5'd31   :	C1_C	=12'd2218; |  | ||||||
| 		//	default	:	C1_C	= C1_C; |  | ||||||
| 		endcase |  | ||||||
| 	 |  | ||||||
| end            |  | ||||||
| //------------------------ |  | ||||||
| //----C2_C |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C2_C	=6'd39; |  | ||||||
| 			5'd 1   :	C2_C	=6'd39; |  | ||||||
| 			5'd 2   :	C2_C	=6'd39; |  | ||||||
| 			5'd 3   :	C2_C	=6'd39; |  | ||||||
| 			5'd 4   :	C2_C	=6'd39; |  | ||||||
| 			5'd 5   :	C2_C	=6'd39; |  | ||||||
| 			5'd 6   :	C2_C	=6'd39; |  | ||||||
| 			5'd 7   :	C2_C	=6'd39; |  | ||||||
| 			5'd 8   :	C2_C	=6'd39; |  | ||||||
| 			5'd 9   :	C2_C	=6'd38; |  | ||||||
| 			5'd10   :	C2_C	=6'd38; |  | ||||||
| 			5'd11   :	C2_C	=6'd38; |  | ||||||
| 			5'd12   :	C2_C	=6'd38; |  | ||||||
| 			5'd13   :	C2_C	=6'd37; |  | ||||||
| 			5'd14   :	C2_C	=6'd37; |  | ||||||
| 			5'd15   :	C2_C	=6'd37; |  | ||||||
| 			5'd16   :	C2_C	=6'd36; |  | ||||||
| 			5'd17   :	C2_C	=6'd36; |  | ||||||
| 			5'd18   :	C2_C	=6'd35; |  | ||||||
| 			5'd19   :	C2_C	=6'd35; |  | ||||||
| 			5'd20   :	C2_C	=6'd35; |  | ||||||
| 			5'd21   :	C2_C	=6'd34; |  | ||||||
| 			5'd22   :	C2_C	=6'd34; |  | ||||||
| 			5'd23   :	C2_C	=6'd33; |  | ||||||
| 			5'd24   :	C2_C	=6'd33; |  | ||||||
| 			5'd25   :	C2_C	=6'd32; |  | ||||||
| 			5'd26   :	C2_C	=6'd31; |  | ||||||
| 			5'd27   :	C2_C	=6'd31; |  | ||||||
| 			5'd28   :	C2_C	=6'd30; |  | ||||||
| 			5'd29   :	C2_C	=6'd30; |  | ||||||
| 			5'd30   :	C2_C	=6'd29; |  | ||||||
| 			5'd31   :	C2_C	=6'd28; |  | ||||||
| 		//	default	:	C2_C	=	C2_C; |  | ||||||
| 		endcase |  | ||||||
|  	 |  | ||||||
| 
 |  | ||||||
| end       |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
							
								
								
									
										155
									
								
								rtl/nco/coef_s.v
								
								
								
								
							
							
						
						
									
										155
									
								
								rtl/nco/coef_s.v
								
								
								
								
							|  | @ -1,155 +0,0 @@ | ||||||
| module	COEF_S( |  | ||||||
| 
 |  | ||||||
| 			index	, |  | ||||||
| 			C0_S	, |  | ||||||
| 			C1_S	, |  | ||||||
| 			C2_S	 |  | ||||||
| 		 			 |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| input	[4:0]		index; |  | ||||||
| 
 |  | ||||||
| output	[17:0]	C0_S; |  | ||||||
| output	[11:0]	C1_S; |  | ||||||
| output	[4:0]	C2_S; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[17:0]	C0_S; |  | ||||||
| reg	[11:0]	C1_S; |  | ||||||
| reg	[4:0]	C2_S; |  | ||||||
| 
 |  | ||||||
| //------------------------ |  | ||||||
| //----C0_S |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C0_S	=18'd     0; |  | ||||||
| 			5'd 1   :	C0_S	=18'd  6433; |  | ||||||
| 			5'd 2   :	C0_S	=18'd 12863; |  | ||||||
| 			5'd 3   :	C0_S	=18'd 19284; |  | ||||||
| 			5'd 4   :	C0_S	=18'd 25695; |  | ||||||
| 			5'd 5   :	C0_S	=18'd 32089; |  | ||||||
| 			5'd 6   :	C0_S	=18'd 38464; |  | ||||||
| 			5'd 7   :	C0_S	=18'd 44817; |  | ||||||
| 			5'd 8   :	C0_S	=18'd 51142; |  | ||||||
| 			5'd 9   :	C0_S	=18'd 57436; |  | ||||||
| 			5'd10   :	C0_S	=18'd 63696; |  | ||||||
| 			5'd11   :	C0_S	=18'd 69917; |  | ||||||
| 			5'd12   :	C0_S	=18'd 76096; |  | ||||||
| 			5'd13   :	C0_S	=18'd 82230; |  | ||||||
| 			5'd14   :	C0_S	=18'd 88314; |  | ||||||
| 			5'd15   :	C0_S	=18'd 94344; |  | ||||||
| 			5'd16   :	C0_S	=18'd100318; |  | ||||||
| 			5'd17   :	C0_S	=18'd106232; |  | ||||||
| 			5'd18   :	C0_S	=18'd112081; |  | ||||||
| 			5'd19   :	C0_S	=18'd117863; |  | ||||||
| 			5'd20   :	C0_S	=18'd123574; |  | ||||||
| 			5'd21   :	C0_S	=18'd129210; |  | ||||||
| 			5'd22   :	C0_S	=18'd134769; |  | ||||||
| 			5'd23   :	C0_S	=18'd140246; |  | ||||||
| 			5'd24   :	C0_S	=18'd145639; |  | ||||||
| 			5'd25   :	C0_S	=18'd150945; |  | ||||||
| 			5'd26   :	C0_S	=18'd156159; |  | ||||||
| 			5'd27   :	C0_S	=18'd161279; |  | ||||||
| 			5'd28   :	C0_S	=18'd166302; |  | ||||||
| 			5'd29   :	C0_S	=18'd171225; |  | ||||||
| 			5'd30   :	C0_S	=18'd176045; |  | ||||||
| 			5'd31   :	C0_S	=18'd180759; |  | ||||||
| 		//	default	:	C0_S	=	C0_S; |  | ||||||
| 		endcase		 |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| //------------------------ |  | ||||||
| 
 |  | ||||||
|       |  | ||||||
| //------------------------ |  | ||||||
| //----C1_S OK |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C1_S	=12'd3217; |  | ||||||
| 			5'd 1   :	C1_S	=12'd3216; |  | ||||||
| 			5'd 2   :	C1_S	=12'd3213; |  | ||||||
| 			5'd 3   :	C1_S	=12'd3208; |  | ||||||
| 			5'd 4   :	C1_S	=12'd3202; |  | ||||||
| 			5'd 5   :	C1_S	=12'd3193; |  | ||||||
| 			5'd 6   :	C1_S	=12'd3182; |  | ||||||
| 			5'd 7   :	C1_S	=12'd3170; |  | ||||||
| 			5'd 8   :	C1_S	=12'd3155; |  | ||||||
| 			5'd 9   :	C1_S	=12'd3139; |  | ||||||
| 			5'd10   :	C1_S	=12'd3121; |  | ||||||
| 			5'd11   :	C1_S	=12'd3101; |  | ||||||
| 			5'd12   :	C1_S	=12'd3079; |  | ||||||
| 			5'd13   :	C1_S	=12'd3055; |  | ||||||
| 			5'd14   :	C1_S	=12'd3029; |  | ||||||
| 			5'd15   :	C1_S	=12'd3002; |  | ||||||
| 			5'd16   :	C1_S	=12'd2972; |  | ||||||
| 			5'd17   :	C1_S	=12'd2941; |  | ||||||
| 			5'd18   :	C1_S	=12'd2908; |  | ||||||
| 			5'd19   :	C1_S	=12'd2874; |  | ||||||
| 			5'd20   :	C1_S	=12'd2837; |  | ||||||
| 			5'd21   :	C1_S	=12'd2799; |  | ||||||
| 			5'd22   :	C1_S	=12'd2759; |  | ||||||
| 			5'd23   :	C1_S	=12'd2718; |  | ||||||
| 			5'd24   :	C1_S	=12'd2675; |  | ||||||
| 			5'd25   :	C1_S	=12'd2630; |  | ||||||
| 			5'd26   :	C1_S	=12'd2584; |  | ||||||
| 			5'd27   :	C1_S	=12'd2536; |  | ||||||
| 			5'd28   :	C1_S	=12'd2487; |  | ||||||
| 			5'd29   :	C1_S	=12'd2436; |  | ||||||
| 			5'd30   :	C1_S	=12'd2384; |  | ||||||
| 			5'd31   :	C1_S	=12'd2330; |  | ||||||
| 		//	default	:	C1_S	=	C1_S; |  | ||||||
| 		endcase		 |  | ||||||
| 
 |  | ||||||
| end      |  | ||||||
|          |  | ||||||
| //------------------------ |  | ||||||
| //----C2_S |  | ||||||
| always@(*) |  | ||||||
| begin |  | ||||||
| 
 |  | ||||||
| 		case(index) |  | ||||||
| 			5'd 0	:	C2_S	=5'd 0; |  | ||||||
| 			5'd 1   :	C2_S	=5'd 1; |  | ||||||
| 			5'd 2   :	C2_S	=5'd 2; |  | ||||||
| 			5'd 3   :	C2_S	=5'd 3; |  | ||||||
| 			5'd 4   :	C2_S	=5'd 4; |  | ||||||
| 			5'd 5   :	C2_S	=5'd 5; |  | ||||||
| 			5'd 6   :	C2_S	=5'd 6; |  | ||||||
| 			5'd 7   :	C2_S	=5'd 7; |  | ||||||
| 			5'd 8   :	C2_S	=5'd 8; |  | ||||||
| 			5'd 9   :	C2_S	=5'd 9; |  | ||||||
| 			5'd10   :	C2_S	=5'd10; |  | ||||||
| 			5'd11   :	C2_S	=5'd11; |  | ||||||
| 			5'd12   :	C2_S	=5'd12; |  | ||||||
| 			5'd13   :	C2_S	=5'd13; |  | ||||||
| 			5'd14   :	C2_S	=5'd14; |  | ||||||
| 			5'd15   :	C2_S	=5'd15; |  | ||||||
| 			5'd16   :	C2_S	=5'd16; |  | ||||||
| 			5'd17   :	C2_S	=5'd16; |  | ||||||
| 			5'd18   :	C2_S	=5'd17; |  | ||||||
| 			5'd19   :	C2_S	=5'd18; |  | ||||||
| 			5'd20   :	C2_S	=5'd19; |  | ||||||
| 			5'd21   :	C2_S	=5'd20; |  | ||||||
| 			5'd22   :	C2_S	=5'd21; |  | ||||||
| 			5'd23   :	C2_S	=5'd22; |  | ||||||
| 			5'd24   :	C2_S	=5'd22; |  | ||||||
| 			5'd25   :	C2_S	=5'd23; |  | ||||||
| 			5'd26   :	C2_S	=5'd24; |  | ||||||
| 			5'd27   :	C2_S	=5'd25; |  | ||||||
| 			5'd28   :	C2_S	=5'd25; |  | ||||||
| 			5'd29   :	C2_S	=5'd26; |  | ||||||
| 			5'd30   :	C2_S	=5'd27; |  | ||||||
| 			5'd31   :	C2_S	=5'd28; |  | ||||||
| 		//	default	:	C2_S	=	C2_S; |  | ||||||
| 		endcase |  | ||||||
| 
 |  | ||||||
| end    |  | ||||||
|      |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
							
								
								
									
										144
									
								
								rtl/nco/cos_op.v
								
								
								
								
							
							
						
						
									
										144
									
								
								rtl/nco/cos_op.v
								
								
								
								
							|  | @ -1,144 +0,0 @@ | ||||||
| module COS_OP( |  | ||||||
| 		clk		, |  | ||||||
| 		rstn		, |  | ||||||
| 		pha_map		, |  | ||||||
| 		pha_indx_msb	, |  | ||||||
| 		cos_op_o |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| input		clk; |  | ||||||
| input           rstn; |  | ||||||
| input	[18:0]	pha_map; |  | ||||||
| output	[2:0]	pha_indx_msb; |  | ||||||
| output	[14:0]	cos_op_o; |  | ||||||
| 
 |  | ||||||
| wire	[2:0]	pha_indx_msb_w; |  | ||||||
| assign          pha_indx_msb_w=pha_map[18:16]; |  | ||||||
| 
 |  | ||||||
| wire	[15:0]	pha_indx_lsb; |  | ||||||
| assign          pha_indx_lsb=pha_map[15:0]; |  | ||||||
| wire	[15:0]	pha_op; |  | ||||||
| assign          pha_op=pha_indx_msb_w[0]?(~pha_indx_lsb):pha_indx_lsb; |  | ||||||
| 
 |  | ||||||
| wire	[4:0]	indx; |  | ||||||
| assign          indx=pha_op[15:11]; |  | ||||||
| wire	[10:0]	x_w; |  | ||||||
| assign          x_w=pha_op[10:0]; |  | ||||||
| wire	[17:0]	c0; |  | ||||||
| wire	[11:0]	c1; |  | ||||||
| wire	[5:0]	c2; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| COEF_C	coef_c_inst1( |  | ||||||
| 			.index(indx)	, |  | ||||||
| 			.C0_C(c0)	, |  | ||||||
| 			.C1_C(c1)	, |  | ||||||
| 			.C2_C(c2)			 |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| reg[17:0]	c0_r1; |  | ||||||
| reg[17:0]       c0_r2; |  | ||||||
| reg[17:0]       c0_r3; |  | ||||||
| reg[17:0]       c0_r4; |  | ||||||
| reg[17:0]       c0_r5; |  | ||||||
| reg[17:0]       c0_r6; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		c0_r1<=c0; |  | ||||||
| 		c0_r2<=c0_r1; |  | ||||||
| 		c0_r3<=c0_r2; |  | ||||||
| 		c0_r4<=c0_r3; |  | ||||||
| 		c0_r5<=c0_r4; |  | ||||||
| 		c0_r6<=c0_r5; |  | ||||||
| 		end |  | ||||||
| reg	[11:0]	c1_r1; |  | ||||||
| reg     [11:0]  c1_r2; |  | ||||||
| reg	[11:0]	c1_r3; |  | ||||||
| always@(posedge clk) |  | ||||||
|                begin |  | ||||||
| 	           c1_r1<=c1; |  | ||||||
|                    c1_r2<=c1_r1; |  | ||||||
| 	           c1_r3<=c1_r2; |  | ||||||
|                end |  | ||||||
| reg	[5:0]	c2_r1; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		c2_r1<=c2; |  | ||||||
| reg[10:0]	x_r1; |  | ||||||
| reg[10:0]       x_r2; |  | ||||||
| reg[10:0]	x_r3; |  | ||||||
| reg[10:0]       x_r4; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		x_r1<=x_w; |  | ||||||
| 		x_r2<=x_r1; |  | ||||||
| 		x_r3<=x_r2; |  | ||||||
| 		x_r4<=x_r3; |  | ||||||
| 		end |  | ||||||
| 
 |  | ||||||
| wire    [16:0]      c2x; |  | ||||||
| 
 |  | ||||||
| DW_mult_pipe #(11,6,2,0,1) inst_mult_0( |  | ||||||
| 				.clk		(clk	), |  | ||||||
| 				.rst_n		(rstn	), |  | ||||||
| 				.en		(1'b1	), |  | ||||||
| 				.a		(x_r1	), |  | ||||||
| 				.b		(c2_r1	), |  | ||||||
| 				.tc		(1'b0	), |  | ||||||
| 				.product	(c2x	) |  | ||||||
| 				); |  | ||||||
| 
 |  | ||||||
| wire	[5:0]	c2x_w; |  | ||||||
| assign          c2x_w=c2x[10]?(c2x[16:11]+6'd1):c2x[16:11]; |  | ||||||
| 
 |  | ||||||
| reg	[11:0]	c2xc1; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1<=c1_r2+c2x_w; |  | ||||||
| wire    [22:0]  c2xc1x; |  | ||||||
| DW_mult_pipe #(11,12,3,0,1) inst_mult_1( |  | ||||||
| 				.clk		(clk	), |  | ||||||
| 				.rst_n		(rstn	), |  | ||||||
| 				.en		(1'b1	), |  | ||||||
| 				.a		(x_r3	), |  | ||||||
| 				.b		(c2xc1	), |  | ||||||
| 				.tc		(1'b0	), |  | ||||||
| 				.product	(c2xc1x	) |  | ||||||
| 				); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	[12:0]	c2xc1x_w; |  | ||||||
| assign          c2xc1x_w=c2xc1x[9]?(c2xc1x[22:10]+13'd1):c2xc1x[22:10]; |  | ||||||
| reg	[12:0]	c2xc1x_r; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1x_r<=c2xc1x_w; |  | ||||||
| wire [17:0]	c2xc1xc0; |  | ||||||
| assign		c2xc1xc0 =c0_r6-c2xc1x_r; |  | ||||||
| 
 |  | ||||||
| wire[15:0]      c2xc1xc0_w1; |  | ||||||
| assign          c2xc1xc0_w1=c2xc1xc0[2]?({1'b0,c2xc1xc0[17:3]}+15'd1):{1'b0,c2xc1xc0[17:3]}; |  | ||||||
| 
 |  | ||||||
| wire[14:0]	c2xc1xc0_w; |  | ||||||
| assign          c2xc1xc0_w=(c2xc1xc0_w1>=15'd32767)?15'd32767:c2xc1xc0_w1[14:0]; |  | ||||||
| reg	[14:0]	c2xc1xc0_r; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1xc0_r<=c2xc1xc0_w; |  | ||||||
| assign		cos_op_o=c2xc1xc0_r; |  | ||||||
| reg[2:0] 	pha_indx_msb_r1; |  | ||||||
| reg[2:0]        pha_indx_msb_r2; |  | ||||||
| reg[2:0]        pha_indx_msb_r3; |  | ||||||
| reg[2:0]        pha_indx_msb_r4; |  | ||||||
| reg[2:0]        pha_indx_msb_r5; |  | ||||||
| reg[2:0]        pha_indx_msb_r6; |  | ||||||
| reg[2:0]        pha_indx_msb_r7; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		pha_indx_msb_r1<=pha_indx_msb_w; |  | ||||||
| 		pha_indx_msb_r2<=pha_indx_msb_r1;	 |  | ||||||
| 		pha_indx_msb_r3<=pha_indx_msb_r2; |  | ||||||
| 		pha_indx_msb_r4<=pha_indx_msb_r3; |  | ||||||
| 		pha_indx_msb_r5<=pha_indx_msb_r4; |  | ||||||
| 		pha_indx_msb_r6<=pha_indx_msb_r5; |  | ||||||
| 		pha_indx_msb_r7<=pha_indx_msb_r6; |  | ||||||
| 		end |  | ||||||
| 	 |  | ||||||
| assign			pha_indx_msb=pha_indx_msb_r7; |  | ||||||
| endmodule |  | ||||||
|  | @ -1,51 +0,0 @@ | ||||||
| module  NCO( |  | ||||||
|                     clk, |  | ||||||
|                     rstn, |  | ||||||
|                     phase_manual_clr, |  | ||||||
|                     phase_auto_clr, |  | ||||||
|                     fcw, |  | ||||||
|                     pha, |  | ||||||
| 
 |  | ||||||
|                     cos, |  | ||||||
|                      |  | ||||||
|                     sin |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| input               clk; |  | ||||||
| input               rstn; |  | ||||||
| input               phase_manual_clr; |  | ||||||
| input               phase_auto_clr; |  | ||||||
| input   [47:0]      fcw; |  | ||||||
| input   [15:0]      pha; |  | ||||||
| 
 |  | ||||||
| output   [15:0]     cos;          |  | ||||||
| output   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	      clr_acc; |  | ||||||
| wire	      clr_fix; |  | ||||||
| assign        clr_acc = phase_auto_clr | phase_manual_clr;     |  | ||||||
| assign        clr_fix = phase_manual_clr; |  | ||||||
| 
 |  | ||||||
| wire		[15:0]	    s1_i_o; |  | ||||||
| wire		[15:0]	    s2_i_o; |  | ||||||
| wire		[15:0]	    s3_i_o; |  | ||||||
| 
 |  | ||||||
| P_NCO		inst_p_nco( |  | ||||||
|                  			.clk		(clk	        ), |  | ||||||
|                  			.rstn		(rstn	        ), |  | ||||||
|                  			.clr		(clr_fix        ), |  | ||||||
|                  			.clr_acc	(clr_acc        ), |  | ||||||
|                  			.pha		(pha	        ), |  | ||||||
| 		 			.s1		(s1_i_o	        ), |  | ||||||
| 		 			.s2		(s2_i_o	        ), |  | ||||||
| 		 			.s3		(s3_i_o	        ), |  | ||||||
| 		 			.s1_o		(s1_i_o	        ), |  | ||||||
| 		 			.s2_o		(s2_i_o	        ), |  | ||||||
| 		 			.s3_o		(s3_i_o	        ), |  | ||||||
|      		 			.fcw		(fcw	        ), |  | ||||||
|                  			.cos		(cos	        ), |  | ||||||
|                  			.sin		(sin	        )                                       |  | ||||||
| 
 |  | ||||||
| 				); |  | ||||||
| endmodule                    |  | ||||||
|  | @ -1,62 +0,0 @@ | ||||||
| module  P_NCO( |  | ||||||
|                  		clk, |  | ||||||
|                  		rstn, |  | ||||||
|                  		clr, |  | ||||||
|                  		clr_acc, |  | ||||||
|                  		pha, |  | ||||||
| 
 |  | ||||||
| 		 		s1, |  | ||||||
| 		 		s2, |  | ||||||
| 		 		s3, |  | ||||||
| 		 		 |  | ||||||
| 		 		s1_o, |  | ||||||
| 		 		s2_o, |  | ||||||
| 		 		s3_o, |  | ||||||
| 
 |  | ||||||
|                                 fcw, |  | ||||||
| 
 |  | ||||||
|                                 cos, |  | ||||||
|                                 sin |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| input               clk; |  | ||||||
| input               rstn; |  | ||||||
| input               clr; |  | ||||||
| input               clr_acc; |  | ||||||
| input   [15:0]      pha; |  | ||||||
| 
 |  | ||||||
| input	[15:0]	    s1; |  | ||||||
| input	[15:0]	    s2; |  | ||||||
| input	[15:0]	    s3; |  | ||||||
| 
 |  | ||||||
| output	[15:0]	    s1_o;	 |  | ||||||
| output	[15:0]	    s2_o; |  | ||||||
| output	[15:0]	    s3_o; |  | ||||||
| 
 |  | ||||||
| output   [15:0]     cos; |  | ||||||
| output   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| input     [47:0]      fcw; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[15:0]		pha_r; |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 	if(!rstn) |  | ||||||
| 		pha_r	<=	16'd0; |  | ||||||
| 	else |  | ||||||
| 		pha_r	<=	pha; |  | ||||||
| 
 |  | ||||||
| wire	[18:0]	pha0; |  | ||||||
| 
 |  | ||||||
| PIPE3_ACC_48BIT	inst_pipe(.clk(clk),.rstn(rstn),.in(fcw),.clr(clr_acc),.ptw(pha),.s_o_1(s1_o),.s_o_2(s2_o),.s_o_3(s3_o),.s_i_1(s1),.s_i_2(s2),.s_i_3(s3),.out(pha0)); |  | ||||||
| 
 |  | ||||||
| PH2AMP inst_ph2amp_0( |  | ||||||
|        		.clk(clk)	, |  | ||||||
|        		.rstn(rstn)	, |  | ||||||
|                 .pha_map(pha0)  , |  | ||||||
|        		.sin_o(sin)	, |  | ||||||
|        		.cos_o(cos)	 |  | ||||||
|        		); |  | ||||||
| 
 |  | ||||||
| endmodule                    |  | ||||||
|  | @ -1,83 +0,0 @@ | ||||||
| module PH2AMP( |  | ||||||
| 			clk	, |  | ||||||
| 			rstn	, |  | ||||||
|                         pha_map , |  | ||||||
| 			sin_o	, |  | ||||||
| 			cos_o	 |  | ||||||
| 			); |  | ||||||
| input			clk; |  | ||||||
| input                   rstn; |  | ||||||
| input   [18:0]          pha_map; |  | ||||||
| 
 |  | ||||||
| output	[15:0]		sin_o; |  | ||||||
| output  [15:0]          cos_o; |  | ||||||
| 
 |  | ||||||
| //wire	[2:0]		pha_indx_msb_s; |  | ||||||
| wire	[14:0]		sin_w;	 |  | ||||||
| SIN_OP inst_sin_op( |  | ||||||
| 			.clk(clk), |  | ||||||
| 			.rstn(rstn), |  | ||||||
| 			.pha_map(pha_map), |  | ||||||
| 		//	.pha_indx_msb(pha_indx_msb_s), |  | ||||||
| 			.sin_op_o(sin_w) |  | ||||||
| 		); |  | ||||||
| wire	[2:0]		pha_indx_msb_c; |  | ||||||
| wire	[14:0]		cos_w;	 |  | ||||||
| COS_OP inst_cos_op( |  | ||||||
| 			.clk(clk)		, |  | ||||||
| 			.rstn(rstn)		, |  | ||||||
| 			.pha_map(pha_map)	, |  | ||||||
| 			.pha_indx_msb(pha_indx_msb_c), |  | ||||||
| 			.cos_op_o(cos_w) |  | ||||||
| 		); |  | ||||||
| wire[15:0]	cos_w_1; |  | ||||||
| wire[15:0]      sin_w_1; |  | ||||||
| wire[15:0]	cos_w_0; |  | ||||||
| wire[15:0]      sin_w_0;//0:-,1:+ |  | ||||||
| 
 |  | ||||||
| assign          cos_w_1={1'b0,cos_w}; |  | ||||||
| assign          sin_w_1={1'b0,sin_w}; |  | ||||||
| assign          cos_w_0=(cos_w_1==16'd0)?16'd0:~cos_w_1+16'd1; |  | ||||||
| assign          sin_w_0=(sin_w_1==16'd0)?16'd0:~sin_w_1+16'd1; |  | ||||||
| 
 |  | ||||||
| reg[15:0]	cos_tmp; |  | ||||||
| reg[15:0]       sin_tmp; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			case(pha_indx_msb_c)//synopsys parallel_case |  | ||||||
| 			3'b000:begin |  | ||||||
| 					cos_tmp<=cos_w_1; |  | ||||||
| 					sin_tmp<=sin_w_1; |  | ||||||
| 			       end |  | ||||||
| 			3'b001:begin |  | ||||||
| 					cos_tmp<=sin_w_1; |  | ||||||
| 					sin_tmp<=cos_w_1; |  | ||||||
| 			        end |  | ||||||
| 			3'b010:begin |  | ||||||
| 					cos_tmp<=sin_w_0; |  | ||||||
| 					sin_tmp<=cos_w_1; |  | ||||||
| 				end |  | ||||||
| 			3'b011:begin |  | ||||||
| 					cos_tmp<=cos_w_0; |  | ||||||
| 					sin_tmp<=sin_w_1; |  | ||||||
| 				end |  | ||||||
| 			3'b100:begin |  | ||||||
| 					cos_tmp<=cos_w_0; |  | ||||||
| 					sin_tmp<=sin_w_0; |  | ||||||
| 				end |  | ||||||
| 			3'b101:begin |  | ||||||
| 					cos_tmp<=sin_w_0; |  | ||||||
| 					sin_tmp<=cos_w_0; |  | ||||||
| 				end |  | ||||||
| 			3'b110:begin |  | ||||||
| 					cos_tmp<=sin_w_1; |  | ||||||
| 					sin_tmp<=cos_w_0; |  | ||||||
| 				end |  | ||||||
| 			3'b111:begin |  | ||||||
| 					cos_tmp<=cos_w_1; |  | ||||||
| 					sin_tmp<=sin_w_0; |  | ||||||
| 				end |  | ||||||
| 			endcase |  | ||||||
| 
 |  | ||||||
| assign			sin_o=sin_tmp; |  | ||||||
| assign			cos_o=cos_tmp; |  | ||||||
| endmodule |  | ||||||
|  | @ -1,64 +0,0 @@ | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module	PIPE3_ACC_48BIT( |  | ||||||
| 	clk, |  | ||||||
| 	rstn, |  | ||||||
| 	in, |  | ||||||
| 	clr, |  | ||||||
| 	ptw,	 |  | ||||||
| 	s_i_1, |  | ||||||
| 	s_i_2, |  | ||||||
| 	s_i_3, |  | ||||||
| 	s_o_1, |  | ||||||
| 	s_o_2, |  | ||||||
| 	s_o_3, |  | ||||||
| 	out |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| //--- |  | ||||||
| 
 |  | ||||||
|   input			clk; |  | ||||||
|   input			rstn; |  | ||||||
|   input		[47:0]	in; |  | ||||||
|   input			clr; |  | ||||||
|   input		[15:0]	ptw; |  | ||||||
| 
 |  | ||||||
|   input		[15:0]	s_i_1; |  | ||||||
|   input		[15:0]	s_i_2; |  | ||||||
|   input		[15:0]	s_i_3; |  | ||||||
| 
 |  | ||||||
|   output	[15:0]	s_o_1; |  | ||||||
|   output	[15:0]	s_o_2; |  | ||||||
|   output	[15:0]	s_o_3; |  | ||||||
|   output	[18:0]	out; |  | ||||||
| 
 |  | ||||||
| //---------------------------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
|  reg	[47:0]	acc; |  | ||||||
|    always@(posedge clk or negedge rstn) |  | ||||||
|       if(!rstn) |  | ||||||
| 		acc<=48'h0; |  | ||||||
|       else if(clr) |  | ||||||
| 	      	acc<=48'h0; |  | ||||||
|       else |  | ||||||
| 	      	acc<={s_i_1,s_i_2,s_i_3}+in; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //---------------------------------------------------------------------------------------------------- |  | ||||||
|   wire	[15:0]	s1; |  | ||||||
|   wire	[15:0]	s2; |  | ||||||
|   wire	[15:0]	s3; |  | ||||||
| 
 |  | ||||||
|   assign	s_o_1 = acc[47:32]; |  | ||||||
|   assign	s_o_2 = acc[31:16]; |  | ||||||
|   assign	s_o_3 = acc[15:0]; |  | ||||||
| 
 |  | ||||||
|   wire[18:0]	pha_w; |  | ||||||
|   assign          pha_w=acc[47:29]; |  | ||||||
|   reg[18:0]	pha_r; |  | ||||||
|   always@(posedge clk) |  | ||||||
| 			pha_r<=pha_w+{ptw,3'b0}; |  | ||||||
| 
 |  | ||||||
|  assign	out=pha_r; |  | ||||||
| //END |  | ||||||
| endmodule |  | ||||||
|  | @ -1,50 +0,0 @@ | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| module	PIPE3_ADD_48BIT( |  | ||||||
| 	clk, |  | ||||||
| 	rstn, |  | ||||||
| 	in, |  | ||||||
| 	clr, |  | ||||||
| 	ptw, |  | ||||||
| 	s1, |  | ||||||
| 	s2, |  | ||||||
| 	s3, |  | ||||||
| 	out |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| //--- |  | ||||||
| 
 |  | ||||||
|   input			clk; |  | ||||||
|   input			rstn; |  | ||||||
|   input		[47:0]	in; |  | ||||||
|   input			clr; |  | ||||||
|   input		[15:0]	ptw; |  | ||||||
| 
 |  | ||||||
|   input		[15:0]	s1; |  | ||||||
|   input		[15:0]	s2; |  | ||||||
|   input		[15:0]	s3; |  | ||||||
|   output	[18:0]	out; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //---------------------------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
|  reg	[47:0]	acc; |  | ||||||
|    always@(posedge clk or negedge rstn) |  | ||||||
|       if(!rstn) |  | ||||||
| 		acc<=48'h0; |  | ||||||
|       else if(clr) |  | ||||||
| 	      	acc<=48'h0; |  | ||||||
|       else |  | ||||||
| 	      	acc<={s1,s2,s3}+in; |  | ||||||
| //--- |  | ||||||
| 
 |  | ||||||
| wire[18:0]	pha_w; |  | ||||||
| assign          pha_w=acc[47:29]; |  | ||||||
| reg[18:0]	pha_r; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			pha_r<=pha_w+{ptw,3'b0}; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  assign	out=pha_r; |  | ||||||
| //END |  | ||||||
| endmodule |  | ||||||
							
								
								
									
										144
									
								
								rtl/nco/sin_op.v
								
								
								
								
							
							
						
						
									
										144
									
								
								rtl/nco/sin_op.v
								
								
								
								
							|  | @ -1,144 +0,0 @@ | ||||||
| module SIN_OP( |  | ||||||
| 		clk, |  | ||||||
| 		rstn, |  | ||||||
| 		pha_map, |  | ||||||
| 	//	pha_indx_msb, |  | ||||||
| 		sin_op_o |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| input		clk; |  | ||||||
| input		rstn; |  | ||||||
| input[18:0]	pha_map; |  | ||||||
| //output	[2:0]	pha_indx_msb; |  | ||||||
| output	[14:0]	sin_op_o; |  | ||||||
| 
 |  | ||||||
| wire	[2:0]	pha_indx_msb_w; |  | ||||||
| assign          pha_indx_msb_w=pha_map[18:16]; |  | ||||||
| 
 |  | ||||||
| wire	[15:0]	pha_indx_lsb; |  | ||||||
| assign          pha_indx_lsb=pha_map[15:0]; |  | ||||||
| wire	[15:0]	pha_op; |  | ||||||
| assign          pha_op=pha_indx_msb_w[0]?(~pha_indx_lsb):pha_indx_lsb; |  | ||||||
| 
 |  | ||||||
| wire	[4:0]	indx; |  | ||||||
| assign          indx=pha_op[15:11]; |  | ||||||
| wire	[10:0]	x_w; |  | ||||||
| assign          x_w=pha_op[10:0]; |  | ||||||
| wire	[17:0]	c0; |  | ||||||
| wire	[11:0]	c1; |  | ||||||
| wire	[4:0]	c2; |  | ||||||
| 
 |  | ||||||
| COEF_S	coef_s_inst1( |  | ||||||
| 			.index(indx)	, |  | ||||||
| 			.C0_S(c0)	, |  | ||||||
| 			.C1_S(c1)	, |  | ||||||
| 			.C2_S(c2)			 |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| reg[17:0]	c0_r1; |  | ||||||
| reg[17:0]       c0_r2; |  | ||||||
| reg[17:0]       c0_r3; |  | ||||||
| reg[17:0]       c0_r4; |  | ||||||
| reg[17:0]       c0_r5; |  | ||||||
| reg[17:0]       c0_r6; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		c0_r1<=c0; |  | ||||||
| 		c0_r2<=c0_r1; |  | ||||||
| 		c0_r3<=c0_r2; |  | ||||||
| 		c0_r4<=c0_r3; |  | ||||||
| 		c0_r5<=c0_r4; |  | ||||||
| 		c0_r6<=c0_r5; |  | ||||||
| 		end |  | ||||||
| reg	[11:0]	c1_r1; |  | ||||||
| reg     [11:0]  c1_r2; |  | ||||||
| reg	[11:0]	c1_r3; |  | ||||||
| always@(posedge clk) |  | ||||||
|                begin |  | ||||||
| 	           c1_r1<=c1; |  | ||||||
|                    c1_r2<=c1_r1; |  | ||||||
| 	           c1_r3<=c1_r2; |  | ||||||
|                end |  | ||||||
| reg	[4:0]	c2_r1; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		c2_r1<=c2; |  | ||||||
| reg[10:0]	x_r1; |  | ||||||
| reg[10:0]       x_r2; |  | ||||||
| reg[10:0]	x_r3; |  | ||||||
| reg[10:0]       x_r4; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		x_r1<=x_w; |  | ||||||
| 		x_r2<=x_r1; |  | ||||||
| 		x_r3<=x_r2; |  | ||||||
| 		x_r4<=x_r3; |  | ||||||
| 		end |  | ||||||
| 
 |  | ||||||
| wire    [15:0]      c2x; |  | ||||||
| 
 |  | ||||||
| DW_mult_pipe #(11,5,2,0,1) inst_mult_0( |  | ||||||
| 				.clk		(clk	), |  | ||||||
| 				.rst_n		(rstn	), |  | ||||||
| 				.en		(1'b1	), |  | ||||||
| 				.a		(x_r1	), |  | ||||||
| 				.b		(c2_r1	), |  | ||||||
| 				.tc		(1'b0	), |  | ||||||
| 				.product	(c2x	) |  | ||||||
| 				); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	[4:0]	c2x_w; |  | ||||||
| assign          c2x_w=c2x[10]?(c2x[15:11]+5'd1):c2x[15:11]; |  | ||||||
| reg	[11:0]	c2xc1; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1<=c1_r2-c2x_w; |  | ||||||
| 
 |  | ||||||
| wire    [22:0]  c2xc1x; |  | ||||||
| 
 |  | ||||||
| DW_mult_pipe #(11,12,3,0,1) inst_mult_1( |  | ||||||
| 				.clk		(clk	), |  | ||||||
| 				.rst_n		(rstn	), |  | ||||||
| 				.en		(1'b1	), |  | ||||||
| 				.a		(x_r3	), |  | ||||||
| 				.b		(c2xc1	), |  | ||||||
| 				.tc		(1'b0	), |  | ||||||
| 				.product	(c2xc1x	) |  | ||||||
| 				); |  | ||||||
| 
 |  | ||||||
| wire	[12:0]	c2xc1x_w; |  | ||||||
| assign          c2xc1x_w=c2xc1x[9]?(c2xc1x[22:10]+13'd1):c2xc1x[22:10]; |  | ||||||
| reg	[12:0]	c2xc1x_r; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1x_r<=c2xc1x_w; |  | ||||||
| wire[17:0]	c2xc1xc0; |  | ||||||
| assign		c2xc1xc0=c0_r6+c2xc1x_r; |  | ||||||
| wire	[14:0]	c2xc1xc0_w; |  | ||||||
| assign          c2xc1xc0_w=c2xc1xc0[2]?(c2xc1xc0[17:3]+13'd1):c2xc1xc0[17:3]; |  | ||||||
| reg	[14:0]	c2xc1xc0_r; |  | ||||||
| always@(posedge clk) |  | ||||||
| 			c2xc1xc0_r<=c2xc1xc0_w; |  | ||||||
| 
 |  | ||||||
| assign		sin_op_o=c2xc1xc0_r; |  | ||||||
| /* |  | ||||||
| reg[2:0] 	pha_indx_msb_r1; |  | ||||||
| reg[2:0]        pha_indx_msb_r2; |  | ||||||
| reg[2:0]        pha_indx_msb_r3; |  | ||||||
| reg[2:0]        pha_indx_msb_r4; |  | ||||||
| reg[2:0]        pha_indx_msb_r5; |  | ||||||
| reg[2:0]        pha_indx_msb_r6; |  | ||||||
| reg[2:0]        pha_indx_msb_r7; |  | ||||||
| always@(posedge clk) |  | ||||||
| 		begin |  | ||||||
| 		pha_indx_msb_r1<=pha_indx_msb_w; |  | ||||||
| 		pha_indx_msb_r2<=pha_indx_msb_r1;	 |  | ||||||
| 		pha_indx_msb_r3<=pha_indx_msb_r2; |  | ||||||
| 		pha_indx_msb_r4<=pha_indx_msb_r3; |  | ||||||
| 		pha_indx_msb_r5<=pha_indx_msb_r4; |  | ||||||
| 		pha_indx_msb_r6<=pha_indx_msb_r5; |  | ||||||
| 		pha_indx_msb_r7<=pha_indx_msb_r6; |  | ||||||
| 		end |  | ||||||
| 	 |  | ||||||
| end |  | ||||||
| assign			pha_indx_msb=pha_indx_msb_r7; |  | ||||||
| */ |  | ||||||
| endmodule |  | ||||||
|  | @ -0,0 +1,311 @@ | ||||||
|  | //+FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Company:  | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  File Name             :    IIR_Filter.v | ||||||
|  | //  Department            :     | ||||||
|  | //  Author                :    thfu | ||||||
|  | //  Author's Tel          :      | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Relese History | ||||||
|  | //  Version     Date            Author          Description | ||||||
|  | //  0.4         2024-05-28      thfu | ||||||
|  | //2024-05-28 10:22:49  | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Keywords            :        | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Parameter | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Purpose                 : | ||||||
|  | //                       | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Target Device:         | ||||||
|  | //  Tool versions:         | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Reuse Issues | ||||||
|  | //  Reset Strategy:  | ||||||
|  | //  Clock Domains:  | ||||||
|  | //  Critical Timing: | ||||||
|  | //  Asynchronous I/F: | ||||||
|  | //  Synthesizable (y/n):  | ||||||
|  | //  Other: | ||||||
|  | //-FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | module  CoefGen #( | ||||||
|  |  parameter  data_in_width       = 32  | ||||||
|  | ,parameter  coef_width          = 32  | ||||||
|  | ,parameter  frac_data_out_width = 20//X for in,5 | ||||||
|  | ,parameter  frac_coef_width     = 31//division | ||||||
|  | ) | ||||||
|  | ( | ||||||
|  |  input	 rstn | ||||||
|  | ,input	 clk | ||||||
|  | ,input	 [5:0] vldi   | ||||||
|  | ,input    signed	[coef_width-1   :0]   a_re    [5:0] | ||||||
|  | ,input    signed	[coef_width-1   :0]   a_im    [5:0] | ||||||
|  | ,input    signed	[coef_width-1   :0]   b_re    [5:0] | ||||||
|  | ,input    signed	[coef_width-1   :0]   b_im    [5:0] | ||||||
|  | 
 | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ao_re         [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ao_im         [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_re         [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_im         [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   abb_re        [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   abb_im        [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow3_re    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow3_im    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow4_re    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow4_im    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow5_re    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow5_im    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow6_re    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow6_im    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow7_re    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   ab_pow7_im    [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   b_pow8_re     [5:0]     | ||||||
|  | ,output   reg signed	[coef_width-1   :0]   b_pow8_im     [5:0]     | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | reg  [5:0]  vldi_r1; | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         vldi_r1 <= 'h0; | ||||||
|  |     end | ||||||
|  |     else if(vldi)begin | ||||||
|  |         vldi_r1 <= vldi; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg vldi_or_r1; | ||||||
|  | wire  vldi_or = | vldi;   | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         vldi_or_r1 <= 'h0; | ||||||
|  |     end | ||||||
|  |     else  begin | ||||||
|  |         vldi_or_r1 <= vldi_or; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg 	signed	[data_in_width-1:0]    a_re_r1; | ||||||
|  | reg 	signed	[data_in_width-1:0]    a_im_r1; | ||||||
|  | reg 	signed	[data_in_width-1:0]    b_re_r1; | ||||||
|  | reg 	signed	[data_in_width-1:0]    b_im_r1; | ||||||
|  | 
 | ||||||
|  | genvar i; | ||||||
|  | generate | ||||||
|  |     for (i = 0; i < 6; i = i + 1) begin  | ||||||
|  |         always  @(posedge clk or negedge rstn)begin | ||||||
|  |             if(rstn==1'b0)begin | ||||||
|  |                 a_re_r1 <= 'h0; | ||||||
|  |                 a_im_r1 <= 'h0; | ||||||
|  |                 b_re_r1 <= 'h0; | ||||||
|  |                 b_im_r1 <= 'h0; | ||||||
|  |             end | ||||||
|  |             else if(vldi[i]) begin | ||||||
|  |                 a_re_r1 <= a_re[i]; | ||||||
|  |                 a_im_r1 <= a_im[i]; | ||||||
|  |                 b_re_r1 <= b_re[i]; | ||||||
|  |                 b_im_r1 <= b_im[i]; | ||||||
|  |             end | ||||||
|  |             else  begin | ||||||
|  |                 a_re_r1 <= a_re_r1; | ||||||
|  |                 a_im_r1 <= a_im_r1; | ||||||
|  |                 b_re_r1 <= b_re_r1; | ||||||
|  |                 b_im_r1 <= b_im_r1; | ||||||
|  |             end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | endgenerate | ||||||
|  | 
 | ||||||
|  | reg en; | ||||||
|  | reg en_r1; | ||||||
|  | reg en_r2; | ||||||
|  | reg [3:0] cnt0; | ||||||
|  | wire add_cnt0; | ||||||
|  | wire end_cnt0; | ||||||
|  | always @(posedge clk or negedge rstn)begin | ||||||
|  |     if(!rstn)begin | ||||||
|  |         cnt0 <= 0; | ||||||
|  |     end | ||||||
|  |     else if(add_cnt0)begin | ||||||
|  |         if(end_cnt0) | ||||||
|  |             cnt0 <= 0; | ||||||
|  |         else | ||||||
|  |             cnt0 <= cnt0 + 1; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | assign add_cnt0 = en; | ||||||
|  | assign end_cnt0 = add_cnt0 && cnt0== 8-1; | ||||||
|  | 
 | ||||||
|  | wire    en_l; | ||||||
|  | wire    en_h; | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         en <= 0; | ||||||
|  |     end | ||||||
|  |     else if(en_h)begin | ||||||
|  |         en <= 1; | ||||||
|  |     end | ||||||
|  |     else if(en_l)begin | ||||||
|  |         en <= 0; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | assign    en_h = vldi_or == 1 && vldi_or_r1 == 0 && cnt0 == 0; | ||||||
|  | assign    en_l = end_cnt0; | ||||||
|  | 
 | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         en_r1 <= 'h0; | ||||||
|  |         en_r2 <= 'h0; | ||||||
|  |     end | ||||||
|  |     else  begin | ||||||
|  |         en_r1 <= en; | ||||||
|  |         en_r2 <= en_r1; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg 	signed	[data_in_width-1:0]   bin_re; | ||||||
|  | reg 	signed	[data_in_width-1:0]   bin_im; | ||||||
|  | wire 	signed	[data_in_width-1:0]   bout_re; | ||||||
|  | wire 	signed	[data_in_width-1:0]   bout_im; | ||||||
|  | always  @(*)begin | ||||||
|  |     if(en_r1) begin | ||||||
|  |         bin_re <= bout_re; | ||||||
|  |         bin_im <= bout_im; | ||||||
|  |     end | ||||||
|  |     else  begin | ||||||
|  |         bin_re <= 32'd2147483647; | ||||||
|  |         bin_im <= 0; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | mult_C | ||||||
|  | #( | ||||||
|  |  .A_width(data_in_width)  | ||||||
|  | ,.B_width(data_in_width)  | ||||||
|  | ,.C_width(coef_width)  | ||||||
|  | ,.D_width(coef_width)  | ||||||
|  | ,.frac_coef_width(frac_coef_width)  | ||||||
|  | ) | ||||||
|  | inst_c1         ( | ||||||
|  |                                             .clk	(clk    	), | ||||||
|  |                                             .rstn	(rstn   	), | ||||||
|  |                                             .en		(en     	), | ||||||
|  |                                             .a		(bin_re		), | ||||||
|  |                                             .b		(bin_im		), | ||||||
|  |                                             .c		(b_re_r1    	), | ||||||
|  |                                             .d		(b_im_r1    	), | ||||||
|  |                                             .Re		(bout_re     	), | ||||||
|  |                                             .Im		(bout_im     	) | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
|  | reg [3:1] cnt1; | ||||||
|  | wire add_cnt1; | ||||||
|  | wire end_cnt1; | ||||||
|  | always @(posedge clk or negedge rstn)begin  | ||||||
|  |     if(!rstn)begin | ||||||
|  |         cnt1 <= 0; | ||||||
|  |     end | ||||||
|  |     else if(add_cnt1)begin | ||||||
|  |         if(end_cnt1) | ||||||
|  |             cnt1 <= 0; | ||||||
|  |         else | ||||||
|  |             cnt1 <= cnt1 + 1; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | assign add_cnt1 = end_cnt0; | ||||||
|  | assign end_cnt1 = add_cnt1 && cnt1== 7-1; | ||||||
|  |   | ||||||
|  | wire	signed	[data_in_width-1:0] 	 abo_re; | ||||||
|  | wire	signed	[data_in_width-1:0]	 abo_im; | ||||||
|  | mult_C | ||||||
|  | #( | ||||||
|  |  .A_width(data_in_width)  | ||||||
|  | ,.B_width(data_in_width)  | ||||||
|  | ,.C_width(coef_width)  | ||||||
|  | ,.D_width(coef_width)  | ||||||
|  | ,.frac_coef_width(frac_coef_width)  | ||||||
|  | ) | ||||||
|  | inst_c2         ( | ||||||
|  |                                             .clk	(clk    	), | ||||||
|  |                                             .rstn	(rstn   	), | ||||||
|  |                                             .en		(en     	), | ||||||
|  |                                             .a		(bin_re		), | ||||||
|  |                                             .b		(bin_im		), | ||||||
|  |                                             .c		(a_re_r1        ), | ||||||
|  |                                             .d		(a_im_r1        ), | ||||||
|  |                                             .Re		(abo_re   	), | ||||||
|  |                                             .Im		(abo_im   	) | ||||||
|  | 	        ); | ||||||
|  | 
 | ||||||
|  | generate | ||||||
|  |     for (i = 0; i < 6; i = i + 1) begin  | ||||||
|  |         always  @(posedge clk or negedge rstn)begin | ||||||
|  |             if(rstn==1'b0)begin | ||||||
|  |                 ao_re[i]      <= 0;    | ||||||
|  |                 ao_im[i]      <= 0;    | ||||||
|  |                 ab_re[i]      <= 0;    | ||||||
|  |                 ab_im[i]      <= 0;    | ||||||
|  |                 abb_re[i]     <= 0;    | ||||||
|  |                 abb_im[i]     <= 0;    | ||||||
|  |                 ab_pow3_re[i] <= 0;    | ||||||
|  |                 ab_pow3_im[i] <= 0;    | ||||||
|  |                 ab_pow4_re[i] <= 0;    | ||||||
|  |                 ab_pow4_im[i] <= 0;    | ||||||
|  |                 ab_pow5_re[i] <= 0;    | ||||||
|  |                 ab_pow5_im[i] <= 0;    | ||||||
|  |                 ab_pow6_re[i] <= 0;    | ||||||
|  |                 ab_pow6_im[i] <= 0;    | ||||||
|  |                 ab_pow7_re[i] <= 0;    | ||||||
|  |                 ab_pow7_im[i] <= 0;    | ||||||
|  |                 b_pow8_re[i]  <= 0;    | ||||||
|  |                 b_pow8_im[i]  <= 0;    | ||||||
|  |             end | ||||||
|  |             else if(vldi_r1[i] && en_r1) begin | ||||||
|  |                 if(add_cnt0 && cnt0 == 1 && en_r1)begin | ||||||
|  |                     ao_re[i]      <= abo_re;    | ||||||
|  |                     ao_im[i]      <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 2 && en_r1)begin | ||||||
|  |                     ab_re[i]      <= abo_re;    | ||||||
|  |                     ab_im[i]      <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 3 && en_r1)begin | ||||||
|  |                     abb_re[i]      <= abo_re;    | ||||||
|  |                     abb_im[i]      <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 4 && en_r1)begin | ||||||
|  |                     ab_pow3_re[i]     <= abo_re;    | ||||||
|  |                     ab_pow3_im[i]     <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 5 && en_r1)begin | ||||||
|  |                     ab_pow4_re[i]     <= abo_re;    | ||||||
|  |                     ab_pow4_im[i]     <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 6 && en_r1)begin | ||||||
|  |                     ab_pow5_re[i]     <= abo_re;    | ||||||
|  |                     ab_pow5_im[i]     <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(add_cnt0 && cnt0 == 7 && en_r1)begin | ||||||
|  |                     ab_pow6_re[i]     <= abo_re;    | ||||||
|  |                     ab_pow6_im[i]     <= abo_im;    | ||||||
|  |                 end | ||||||
|  |                 else if(cnt0 == 0 && en_r1)begin | ||||||
|  |                     ab_pow7_re[i]     <= abo_re;    | ||||||
|  |                     ab_pow7_im[i]     <= abo_im;    | ||||||
|  |                     b_pow8_re[i]     <= bin_re;    | ||||||
|  |                     b_pow8_im[i]     <= bin_im;    | ||||||
|  |                 end | ||||||
|  |             end | ||||||
|  | //            else  begin | ||||||
|  | //            end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | endgenerate | ||||||
|  | 
 | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | @ -72,186 +72,44 @@ module  IIR_Filter_p8 #( | ||||||
| ,output  signed	[data_in_width-1:0]   dout | ,output  signed	[data_in_width-1:0]   dout | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  | wire   signed	[data_in_width-1   :0]   dinp  [7:0] = {dinp7,dinp6,dinp5,dinp4,dinp3,dinp2,dinp1,dinp0}; | ||||||
|  | wire   signed	[coef_width-1   :0]   ab_pow_re  [7:0] = {ab_pow7_re, ab_pow6_re,ab_pow5_re,ab_pow4_re,ab_pow3_re,abb_re,ab_re,a_re}; | ||||||
|  | wire   signed	[coef_width-1   :0]   ab_pow_im  [7:0] = {ab_pow7_im, ab_pow6_im,ab_pow5_im,ab_pow4_im,ab_pow3_im,abb_im,ab_im,a_im}; | ||||||
| 
 | 
 | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0] 	 x1_re; | wire signed [data_in_width+frac_data_out_width-1:0] x_re [0:7]; | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]	 x1_im; | wire signed [data_in_width+frac_data_out_width-1:0] x_im [0:7]; | ||||||
| mult_C |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c1         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp0		), |  | ||||||
|                                             .b		(16'b0		), |  | ||||||
|                                             .c		({a_re,{frac_data_out_width{1'b0}}}), |  | ||||||
|                                             .d		({a_im,{frac_data_out_width{1'b0}}}), |  | ||||||
|                                             .Re		(x1_re   	),//a*x*dinp0 |  | ||||||
|                                             .Im		(x1_im   	) |  | ||||||
| 	        ); |  | ||||||
| 
 | 
 | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x2_re; | genvar i; | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x2_im; | generate | ||||||
| mult_C	 |     for (i = 0; i < 8; i = i + 1) begin: mult_c_inst | ||||||
| #( |         mult_C #( | ||||||
|  .A_width(data_in_width)  |             .A_width(data_in_width), | ||||||
| ,.B_width(data_in_width)  |             .B_width(data_in_width), | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |             .C_width(coef_width+frac_data_out_width), | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |             .D_width(coef_width+frac_data_out_width), | ||||||
| ,.frac_coef_width(frac_coef_width)  |             .frac_coef_width(frac_coef_width) | ||||||
| ) |         ) inst_c ( | ||||||
| inst_c2         ( |             .clk    (clk), | ||||||
|                                             .clk	(clk    	), |             .rstn   (rstn), | ||||||
|                                             .rstn	(rstn   	), |             .en     (en), | ||||||
|                                             .en		(en     	), |             .a      (dinp[i]),          | ||||||
|                                             .a		(dinp1		), |             .b      (16'b0), | ||||||
|                                             .b		(16'd0		), |             .c      ({ab_pow_re[i],{frac_data_out_width{1'b0}}}), | ||||||
|                                             .c		({ab_re,{frac_data_out_width{1'b0}}}	  	), |             .d      ({ab_pow_im[i],{frac_data_out_width{1'b0}}}), | ||||||
|                                             .d		({ab_im,{frac_data_out_width{1'b0}}}	  	), |             .Re     (x_re[i]),         | ||||||
|                                             .Re		(x2_re     	),//a*b*dinp1 |             .Im     (x_im[i]) | ||||||
|                                             .Im		(x2_im     	) |  | ||||||
|         ); |         ); | ||||||
|  |     end | ||||||
|  | endgenerate | ||||||
| 
 | 
 | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x3_re; | wire	signed	[data_in_width+frac_data_out_width+3:0]  v_re; | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x3_im; | wire	signed	[data_in_width+frac_data_out_width+3:0]	 v_im; | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c3         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp2		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({abb_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({abb_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x3_re     	),//a*b*b*dinp2 |  | ||||||
|                                             .Im		(x3_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x4_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x4_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c4         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp3		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_pow3_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_pow3_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x4_re     	),//a*b^3*dinp3 |  | ||||||
|                                             .Im		(x4_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x5_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x5_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c5         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp4		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_pow4_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_pow4_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x5_re     	),//a*b^4*dinp4 |  | ||||||
|                                             .Im		(x5_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x6_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x6_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c6         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp5		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_pow5_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_pow5_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x6_re     	),//a*b^5*dinp5 |  | ||||||
|                                             .Im		(x6_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x7_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x7_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c7         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp6		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_pow6_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_pow6_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x7_re     	),//a*b^6*dinp6 |  | ||||||
|                                             .Im		(x7_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x8_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x8_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c8         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(dinp7		), |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_pow7_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_pow7_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x8_re     	),//a*b^7*dinp7 |  | ||||||
|                                             .Im		(x8_im     	) |  | ||||||
| 		); |  | ||||||
| 
 | 
 | ||||||
| wire	signed	[data_in_width+frac_data_out_width+1:0]  v_re; | assign	v_re       =   x_re[0] + x_re[1] +x_re[2] +x_re[3] +x_re[4] +x_re[5] +x_re[6] +x_re[7]; | ||||||
| wire	signed	[data_in_width+frac_data_out_width+1:0]	 v_im; | assign	v_im       =   x_im[0] + x_im[1] +x_im[2] +x_im[3] +x_im[4] +x_im[5] +x_im[6] +x_im[7]; | ||||||
| 
 | 
 | ||||||
| assign	v_re       =   x1_re + x2_re + x3_re + x4_re + x5_re + x6_re + x7_re + x8_re; | reg	signed	[data_in_width+frac_data_out_width+3:0]  v1_re; | ||||||
| assign	v_im       =   x1_im + x2_im + x3_im + x4_im + x5_im + x6_im + x7_im + x8_im; | reg	signed	[data_in_width+frac_data_out_width+3:0]	 v1_im; | ||||||
| 
 |  | ||||||
| reg	signed	[data_in_width+frac_data_out_width+1:0]  v1_re; |  | ||||||
| reg	signed	[data_in_width+frac_data_out_width+1:0]	 v1_im; |  | ||||||
| 
 | 
 | ||||||
| always @(posedge clk or negedge rstn)  | always @(posedge clk or negedge rstn)  | ||||||
|   	if (!rstn) |   	if (!rstn) | ||||||
|  | @ -270,17 +128,17 @@ always @(posedge clk or negedge rstn) | ||||||
|                 v1_im    <=    v1_im; |                 v1_im    <=    v1_im; | ||||||
| 		  end | 		  end | ||||||
| 
 | 
 | ||||||
| wire    signed	[data_in_width+frac_data_out_width+1:0]	 y_re; | wire    signed	[data_in_width+frac_data_out_width+3:0]	 y_re; | ||||||
| wire    signed	[data_in_width+frac_data_out_width+1:0]	 y_im; | wire    signed	[data_in_width+frac_data_out_width+3:0]	 y_im; | ||||||
| reg     signed	[data_in_width+frac_data_out_width+2:0]	 y1_re; | wire    signed	[data_in_width+frac_data_out_width+3:0]	 y1_re; | ||||||
| reg     signed	[data_in_width+frac_data_out_width+2:0]	 y1_im; | wire    signed	[data_in_width+frac_data_out_width+3:0]	 y1_im; | ||||||
| 
 | 
 | ||||||
| reg 	signed	[data_in_width-1:0]   dout_re; | reg 	signed	[data_in_width-1:0]   dout_re; | ||||||
| 
 | 
 | ||||||
| mult_C | mult_C | ||||||
| #( | #( | ||||||
|  .A_width(data_in_width+frac_data_out_width+2)  |  .A_width(data_in_width+frac_data_out_width+4)  | ||||||
| ,.B_width(data_in_width+frac_data_out_width+2)  | ,.B_width(data_in_width+frac_data_out_width+4)  | ||||||
| ,.C_width(coef_width)  | ,.C_width(coef_width)  | ||||||
| ,.D_width(coef_width)  | ,.D_width(coef_width)  | ||||||
| ,.frac_coef_width(frac_coef_width)  | ,.frac_coef_width(frac_coef_width)  | ||||||
|  | @ -300,9 +158,9 @@ inst_c9         ( | ||||||
| assign	y_re       =   v1_re + y1_re; | assign	y_re       =   v1_re + y1_re; | ||||||
| assign	y_im       =   v1_im + y1_im; | assign	y_im       =   v1_im + y1_im; | ||||||
| 
 | 
 | ||||||
| wire signed	[data_in_width+frac_data_out_width+1:0] dout_round; | wire signed	[data_in_width+frac_data_out_width+3:0] dout_round; | ||||||
| 
 | 
 | ||||||
| FixRound #(data_in_width+frac_data_out_width+2,frac_data_out_width) u_round1 (clk, rstn, en, y_re, dout_round); | FixRound #(data_in_width+frac_data_out_width+4,frac_data_out_width) u_round1 (clk, rstn, en, y_re, dout_round); | ||||||
| 
 | 
 | ||||||
| always @(posedge clk or negedge rstn)  | always @(posedge clk or negedge rstn)  | ||||||
|   	if (!rstn) |   	if (!rstn) | ||||||
|  |  | ||||||
|  | @ -1,216 +0,0 @@ | ||||||
| //+FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Company:  |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  File Name             :    IIR_Filter.v |  | ||||||
| //  Department            :     |  | ||||||
| //  Author                :    thfu |  | ||||||
| //  Author's Tel          :      |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Relese History |  | ||||||
| //  Version     Date            Author          Description |  | ||||||
| //  0.4         2024-05-28      thfu |  | ||||||
| //2024-05-28 10:22:49  |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Keywords            :        |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Parameter |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Purpose                 : |  | ||||||
| //                       |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Target Device:         |  | ||||||
| //  Tool versions:         |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Reuse Issues |  | ||||||
| //  Reset Strategy:  |  | ||||||
| //  Clock Domains:  |  | ||||||
| //  Critical Timing: |  | ||||||
| //  Asynchronous I/F: |  | ||||||
| //  Synthesizable (y/n):  |  | ||||||
| //  Other: |  | ||||||
| //-FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| module  IIR_Filter_s #( |  | ||||||
|  parameter  data_in_width       = 16  |  | ||||||
| ,parameter  coef_width          = 32  |  | ||||||
| ,parameter  frac_data_out_width = 20//X for in,5 |  | ||||||
| ,parameter  frac_coef_width     = 31//division |  | ||||||
| ) |  | ||||||
| ( |  | ||||||
|  input	 rstn |  | ||||||
| ,input	 clk |  | ||||||
| ,input	 en |  | ||||||
| ,input   signed	[data_in_width-1:0]   din |  | ||||||
| ,input   signed	[data_in_width-1:0]   din_r1 |  | ||||||
| ,input   signed	[coef_width-1   :0]   a_re |  | ||||||
| ,input   signed	[coef_width-1   :0]   a_im |  | ||||||
| ,input   signed	[coef_width-1   :0]   ab_re |  | ||||||
| ,input   signed	[coef_width-1   :0]   ab_im |  | ||||||
| ,input   signed	[coef_width-1   :0]   bb_re |  | ||||||
| ,input   signed	[coef_width-1   :0]   bb_im |  | ||||||
| ,output  signed	[data_in_width-1:0]   dout |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0] 	 x1_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]	 x1_im; |  | ||||||
| mult_C |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c1         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(din		),//x(n) |  | ||||||
|                                             .b		(16'b0		), |  | ||||||
|                                             .c		({a_re,{frac_data_out_width{1'b0}}}), |  | ||||||
|                                             .d		({a_im,{frac_data_out_width{1'b0}}}), |  | ||||||
|                                             .Re		(x1_re   	),//a*x(n-1) |  | ||||||
|                                             .Im		(x1_im   	) |  | ||||||
| 	        ); |  | ||||||
| 
 |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x2_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width:0]  x2_im; |  | ||||||
| mult_C	 |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width)  |  | ||||||
| ,.B_width(data_in_width)  |  | ||||||
| ,.C_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.D_width(coef_width+frac_data_out_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c2         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(din_r1		),//x(n-1) |  | ||||||
|                                             .b		(16'd0		), |  | ||||||
|                                             .c		({ab_re,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .d		({ab_im,{frac_data_out_width{1'b0}}}	  	), |  | ||||||
|                                             .Re		(x2_re     	),//a*b*x(n-2) |  | ||||||
|                                             .Im		(x2_im     	) |  | ||||||
| 		); |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width+1:0]  v_re; |  | ||||||
| wire	signed	[data_in_width+frac_data_out_width+1:0]	 v_im; |  | ||||||
| 
 |  | ||||||
| assign	v_re       =   x1_re + x2_re;//a*x(n-1)+a*b*x(n-2) |  | ||||||
| assign	v_im       =   x1_im + x2_im; |  | ||||||
| 
 |  | ||||||
| reg	signed	[data_in_width+frac_data_out_width+1:0]  v1_re;//a*x(n-2)+a*b*x(n-3) |  | ||||||
| reg	signed	[data_in_width+frac_data_out_width+1:0]	 v1_im; |  | ||||||
| 
 |  | ||||||
| always @(posedge clk or negedge rstn)  |  | ||||||
|   	if (!rstn) |  | ||||||
| 		 begin |  | ||||||
|                 v1_re    <=    'h0; |  | ||||||
|                 v1_im    <=    'h0; |  | ||||||
|  		 end  |  | ||||||
| 	 else if(en) |  | ||||||
| 		 begin |  | ||||||
|                 v1_re    <=    v_re; |  | ||||||
|                 v1_im    <=    v_im; |  | ||||||
| 		  end |  | ||||||
| 	 else |  | ||||||
| 		 begin |  | ||||||
|                 v1_re    <=    v1_re; |  | ||||||
|                 v1_im    <=    v1_im; |  | ||||||
| 		  end |  | ||||||
| 
 |  | ||||||
| wire    signed	[data_in_width+frac_data_out_width+1:0]	 y_re; |  | ||||||
| wire    signed	[data_in_width+frac_data_out_width+1:0]	 y_im; |  | ||||||
| reg     signed	[data_in_width+frac_data_out_width+2:0]	 y1_re; |  | ||||||
| reg     signed	[data_in_width+frac_data_out_width+2:0]	 y1_im; |  | ||||||
| reg     signed	[data_in_width+frac_data_out_width+3:0]	 y2_re; |  | ||||||
| reg     signed	[data_in_width+frac_data_out_width+3:0]	 y2_im; |  | ||||||
| 
 |  | ||||||
| reg 	signed	[data_in_width-1:0]   dout_re; |  | ||||||
| 
 |  | ||||||
| mult_C |  | ||||||
| #( |  | ||||||
|  .A_width(data_in_width+frac_data_out_width+2)  |  | ||||||
| ,.B_width(data_in_width+frac_data_out_width+2)  |  | ||||||
| ,.C_width(coef_width)  |  | ||||||
| ,.D_width(coef_width)  |  | ||||||
| ,.frac_coef_width(frac_coef_width)  |  | ||||||
| ) |  | ||||||
| inst_c3         ( |  | ||||||
|                                             .clk	(clk    	), |  | ||||||
|                                             .rstn	(rstn   	), |  | ||||||
|                                             .en		(en     	), |  | ||||||
|                                             .a		(y_re		),//y(n-2)=a*x(n-2)+a*b*x(n-3)+b^2*y(n-4) |  | ||||||
|                                             .b		(y_im		), |  | ||||||
|                                             .c		(bb_re	  	), |  | ||||||
|                                             .d		(bb_im	  	), |  | ||||||
|                                             .Re		(y1_re     	),//b*y(n-3) |  | ||||||
|                                             .Im		(y1_im     	) |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| always @(posedge clk or negedge rstn)  |  | ||||||
|   	if (!rstn) |  | ||||||
| 		 begin |  | ||||||
|                 y2_re    <=    'h0; |  | ||||||
|                 y2_im    <=    'h0; |  | ||||||
|  		 end  |  | ||||||
| 	 else if(en) |  | ||||||
| 		 begin |  | ||||||
|                 y2_re    <=    y1_re; |  | ||||||
|                 y2_im    <=    y1_im; |  | ||||||
| 		  end |  | ||||||
| 	 else |  | ||||||
| 		 begin |  | ||||||
|                 y2_re    <=    y2_re; |  | ||||||
|                 y2_im    <=    y2_im; |  | ||||||
| 		  end |  | ||||||
| 
 |  | ||||||
| assign	y_re       =   v1_re + y2_re; |  | ||||||
| assign	y_im       =   v1_im + y2_im; |  | ||||||
| 
 |  | ||||||
| wire signed	[data_in_width+frac_data_out_width+1:0] dout_round; |  | ||||||
| 
 |  | ||||||
| FixRound #(data_in_width+frac_data_out_width+2,frac_data_out_width) u_round1 (clk, rstn, en, y_re, dout_round); |  | ||||||
| 
 |  | ||||||
| always @(posedge clk or negedge rstn)  |  | ||||||
|   	if (!rstn) |  | ||||||
| 		 begin |  | ||||||
| 		    dout_re  <= 'h0; |  | ||||||
| 		 end  |  | ||||||
| 	 else if(en) |  | ||||||
| 		 begin |  | ||||||
| 		    dout_re  <= dout_round[frac_data_out_width+15:frac_data_out_width]; |  | ||||||
| 		  end |  | ||||||
| 	 else |  | ||||||
| 		 begin |  | ||||||
| 		    dout_re  <= dout_re; |  | ||||||
| 		  end |  | ||||||
| 
 |  | ||||||
| reg 	signed	[data_in_width-1:0]   dout_clip; |  | ||||||
| 
 |  | ||||||
| always @(posedge clk or negedge rstn)  |  | ||||||
|   	if (!rstn) |  | ||||||
| 		 begin |  | ||||||
| 		    dout_clip <= 'h0; |  | ||||||
| 		 end  |  | ||||||
| 	 else if(en) |  | ||||||
| 		 begin |  | ||||||
| 	         if(dout_round[frac_data_out_width+16:frac_data_out_width+15]==2'b01) |  | ||||||
| 			dout_clip	<=	16'd32767; |  | ||||||
| 		 else if(dout_round[frac_data_out_width+16:frac_data_out_width+15]==2'b10) |  | ||||||
| 			dout_clip	<=	-16'd32768; |  | ||||||
| 		 else |  | ||||||
| 			dout_clip	<=	dout_re;		  |  | ||||||
| 		 end |  | ||||||
| 	 else |  | ||||||
| 		 begin |  | ||||||
| 		    dout_clip  <= dout_clip; |  | ||||||
| 		  end |  | ||||||
| 
 |  | ||||||
| assign	dout = dout_clip; |  | ||||||
| 
 |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
|  | @ -34,17 +34,17 @@ | ||||||
| module 	IIR_top	 	 | module 	IIR_top	 	 | ||||||
| 
 | 
 | ||||||
| ( | ( | ||||||
| input rstn |  input   rstn | ||||||
| ,input   clk | ,input   clk | ||||||
| ,input   en | ,input   en | ||||||
| ,input  signed [15:0] IIRin_p0 | ,input   signed [15   :0]   IIRin_p0 | ||||||
| ,input  signed [15:0] IIRin_p1 | ,input   signed [15   :0]   IIRin_p1 | ||||||
| ,input  signed [15:0] IIRin_p2 | ,input   signed [15   :0]   IIRin_p2 | ||||||
| ,input  signed [15:0] IIRin_p3 | ,input   signed [15   :0]   IIRin_p3 | ||||||
| ,input  signed [15:0] IIRin_p4 | ,input   signed [15   :0]   IIRin_p4 | ||||||
| ,input  signed [15:0] IIRin_p5 | ,input   signed [15   :0]   IIRin_p5 | ||||||
| ,input  signed [15:0] IIRin_p6 | ,input   signed [15   :0]   IIRin_p6 | ||||||
| ,input  signed [15:0] IIRin_p7 | ,input   signed [15   :0]   IIRin_p7 | ||||||
| ,input   signed	[31   :0]   a_re | ,input   signed	[31   :0]   a_re | ||||||
| ,input   signed	[31   :0]   a_im | ,input   signed	[31   :0]   a_im | ||||||
| ,input   signed	[31   :0]   ab_re | ,input   signed	[31   :0]   ab_re | ||||||
|  | @ -64,71 +64,44 @@ input rstn | ||||||
| ,input   signed	[31   :0]   b_pow8_re | ,input   signed	[31   :0]   b_pow8_re | ||||||
| ,input   signed	[31   :0]   b_pow8_im | ,input   signed	[31   :0]   b_pow8_im | ||||||
| 
 | 
 | ||||||
| ,output signed [15:0]  IIRout_p0  | ,output  signed [15   :0]   IIRout_p0  | ||||||
| ,output signed [15:0]  IIRout_p1  | ,output  signed [15   :0]   IIRout_p1  | ||||||
| ,output signed [15:0]  IIRout_p2  | ,output  signed [15   :0]   IIRout_p2  | ||||||
| ,output signed [15:0]  IIRout_p3  | ,output  signed [15   :0]   IIRout_p3  | ||||||
| ,output signed [15:0]  IIRout_p4  | ,output  signed [15   :0]   IIRout_p4  | ||||||
| ,output signed [15:0]  IIRout_p5  | ,output  signed [15   :0]   IIRout_p5  | ||||||
| ,output signed [15:0]  IIRout_p6  | ,output  signed [15   :0]   IIRout_p6  | ||||||
| ,output signed [15:0]  IIRout_p7  | ,output  signed [15   :0]   IIRout_p7  | ||||||
| 		 	); | 		 	); | ||||||
|  | reg signed [15:0] IIRin_p_r1 [7:0]; | ||||||
|  | wire  signed  [15 : 0]  IIRin_p  [7:0] = {IIRin_p7, IIRin_p6,IIRin_p5,IIRin_p4,IIRin_p3,IIRin_p2,IIRin_p1,IIRin_p0};   | ||||||
|  | integer i; | ||||||
|  | always @(posedge clk or negedge rstn) begin | ||||||
|  |     if (!rstn) begin | ||||||
|  |         for (i = 0; i < 8; i = i + 1) begin | ||||||
|  |             IIRin_p_r1[i] <= 'h0; | ||||||
|  |         end | ||||||
|  |     end  | ||||||
|  |     else if (en) begin | ||||||
|  |         for (i = 0; i < 8; i = i + 1) begin | ||||||
|  |             IIRin_p_r1[i] <= IIRin_p[i]; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end		 | ||||||
| 
 | 
 | ||||||
| reg signed	[15:0] IIRin_p0_r1; |  | ||||||
| reg signed	[15:0] IIRin_p1_r1; |  | ||||||
| reg signed	[15:0] IIRin_p2_r1; |  | ||||||
| reg signed	[15:0] IIRin_p3_r1; |  | ||||||
| reg signed	[15:0] IIRin_p4_r1; |  | ||||||
| reg signed	[15:0] IIRin_p5_r1; |  | ||||||
| reg signed	[15:0] IIRin_p6_r1; |  | ||||||
| reg signed	[15:0] IIRin_p7_r1; |  | ||||||
| always @(posedge clk or negedge rstn)  |  | ||||||
|   	if (!rstn) |  | ||||||
| 		 begin |  | ||||||
| 		    IIRin_p0_r1  <= 'h0; |  | ||||||
| 		    IIRin_p1_r1  <= 'h0; |  | ||||||
| 		    IIRin_p2_r1  <= 'h0; |  | ||||||
| 		    IIRin_p3_r1  <= 'h0; |  | ||||||
| 		    IIRin_p4_r1  <= 'h0; |  | ||||||
| 		    IIRin_p5_r1  <= 'h0; |  | ||||||
| 		    IIRin_p6_r1  <= 'h0; |  | ||||||
| 		    IIRin_p7_r1  <= 'h0; |  | ||||||
| 		 end  |  | ||||||
| 	 else if(en) |  | ||||||
| 		 begin |  | ||||||
| 		    IIRin_p0_r1  <= IIRin_p0; |  | ||||||
| 		    IIRin_p1_r1  <= IIRin_p1; |  | ||||||
| 		    IIRin_p2_r1  <= IIRin_p2; |  | ||||||
| 		    IIRin_p3_r1  <= IIRin_p3; |  | ||||||
| 		    IIRin_p4_r1  <= IIRin_p4; |  | ||||||
| 		    IIRin_p5_r1  <= IIRin_p5; |  | ||||||
| 		    IIRin_p6_r1  <= IIRin_p6; |  | ||||||
| 		    IIRin_p7_r1  <= IIRin_p7; |  | ||||||
| 		  end |  | ||||||
| 	 else |  | ||||||
| 		 begin |  | ||||||
| 		    IIRin_p0_r1  <= IIRin_p0_r1; |  | ||||||
| 		    IIRin_p1_r1  <= IIRin_p1_r1; |  | ||||||
| 		    IIRin_p2_r1  <= IIRin_p2_r1; |  | ||||||
| 		    IIRin_p3_r1  <= IIRin_p3_r1; |  | ||||||
| 		    IIRin_p4_r1  <= IIRin_p4_r1; |  | ||||||
| 		    IIRin_p5_r1  <= IIRin_p5_r1; |  | ||||||
| 		    IIRin_p6_r1  <= IIRin_p6_r1; |  | ||||||
| 		    IIRin_p7_r1  <= IIRin_p7_r1; |  | ||||||
| 		  end |  | ||||||
| 
 | 
 | ||||||
| IIR_Filter_p8	inst_iir_0_p0 ( | IIR_Filter_p8	inst_iir_p0 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p0		), | 				 	.dinp0			(IIRin_p[0]		), | ||||||
| 				 	.dinp1			(IIRin_p7_r1		), | 				 	.dinp1			(IIRin_p_r1[7] 		), | ||||||
| 				 	.dinp2			(IIRin_p6_r1		), | 				 	.dinp2			(IIRin_p_r1[6]		), | ||||||
| 				 	.dinp3			(IIRin_p5_r1		), | 				 	.dinp3			(IIRin_p_r1[5]		), | ||||||
| 				 	.dinp4			(IIRin_p4_r1		), | 				 	.dinp4			(IIRin_p_r1[4]		), | ||||||
| 				 	.dinp5			(IIRin_p3_r1		), | 				 	.dinp5			(IIRin_p_r1[3]		), | ||||||
| 				 	.dinp6			(IIRin_p2_r1		), | 				 	.dinp6			(IIRin_p_r1[2]		), | ||||||
| 				 	.dinp7			(IIRin_p1_r1		), | 				 	.dinp7			(IIRin_p_r1[1]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -150,18 +123,18 @@ IIR_Filter_p8	inst_iir_0_p0 ( | ||||||
| 					.dout                   (IIRout_p0              ) | 					.dout                   (IIRout_p0              ) | ||||||
| 			   ); | 			   ); | ||||||
| 
 | 
 | ||||||
| IIR_Filter_p8	inst_iir_o_p1 ( | IIR_Filter_p8	inst_iir_p1 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p1		), | 				 	.dinp0			(IIRin_p[1]		), | ||||||
| 				 	.dinp1			(IIRin_p0		), | 				 	.dinp1			(IIRin_p[0]		), | ||||||
| 				 	.dinp2			(IIRin_p7_r1		), | 				 	.dinp2			(IIRin_p_r1[7]		), | ||||||
| 				 	.dinp3			(IIRin_p6_r1		), | 				 	.dinp3			(IIRin_p_r1[6]		), | ||||||
| 				 	.dinp4			(IIRin_p5_r1		), | 				 	.dinp4			(IIRin_p_r1[5]		), | ||||||
| 				 	.dinp5			(IIRin_p4_r1		), | 				 	.dinp5			(IIRin_p_r1[4]		), | ||||||
| 				 	.dinp6			(IIRin_p3_r1		), | 				 	.dinp6			(IIRin_p_r1[3]		), | ||||||
| 				 	.dinp7			(IIRin_p2_r1		), | 				 	.dinp7			(IIRin_p_r1[2]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -182,18 +155,18 @@ IIR_Filter_p8	inst_iir_o_p1 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p1              ) | 					.dout                   (IIRout_p1              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p2 ( | IIR_Filter_p8	inst_iir_p2 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p2		), | 				 	.dinp0			(IIRin_p[2]		), | ||||||
| 				 	.dinp1			(IIRin_p1		), | 				 	.dinp1			(IIRin_p[1]		), | ||||||
| 				 	.dinp2			(IIRin_p0		), | 				 	.dinp2			(IIRin_p[0]		), | ||||||
| 				 	.dinp3			(IIRin_p7_r1		), | 				 	.dinp3			(IIRin_p_r1[7]		), | ||||||
| 				 	.dinp4			(IIRin_p6_r1		), | 				 	.dinp4			(IIRin_p_r1[6]		), | ||||||
| 				 	.dinp5			(IIRin_p5_r1		), | 				 	.dinp5			(IIRin_p_r1[5]		), | ||||||
| 				 	.dinp6			(IIRin_p4_r1		), | 				 	.dinp6			(IIRin_p_r1[4]		), | ||||||
| 				 	.dinp7			(IIRin_p3_r1		), | 				 	.dinp7			(IIRin_p_r1[3]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -214,18 +187,18 @@ IIR_Filter_p8	inst_iir_0_p2 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p2              ) | 					.dout                   (IIRout_p2              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p3 ( | IIR_Filter_p8	inst_iir_p3 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p3		), | 				 	.dinp0			(IIRin_p[3]		), | ||||||
| 				 	.dinp1			(IIRin_p2		), | 				 	.dinp1			(IIRin_p[2]		), | ||||||
| 				 	.dinp2			(IIRin_p1		), | 				 	.dinp2			(IIRin_p[1]		), | ||||||
| 				 	.dinp3			(IIRin_p0		), | 				 	.dinp3			(IIRin_p[0]		), | ||||||
| 				 	.dinp4			(IIRin_p7_r1		), | 				 	.dinp4			(IIRin_p_r1[7]		), | ||||||
| 				 	.dinp5			(IIRin_p6_r1		), | 				 	.dinp5			(IIRin_p_r1[6]		), | ||||||
| 				 	.dinp6			(IIRin_p5_r1		), | 				 	.dinp6			(IIRin_p_r1[5]		), | ||||||
| 				 	.dinp7			(IIRin_p4_r1		), | 				 	.dinp7			(IIRin_p_r1[4]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -246,18 +219,18 @@ IIR_Filter_p8	inst_iir_0_p3 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p3              ) | 					.dout                   (IIRout_p3              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p4 ( | IIR_Filter_p8	inst_iir_p4 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p4		), | 				 	.dinp0			(IIRin_p[4]		), | ||||||
| 				 	.dinp1			(IIRin_p3		), | 				 	.dinp1			(IIRin_p[3]		), | ||||||
| 				 	.dinp2			(IIRin_p2		), | 				 	.dinp2			(IIRin_p[2]		), | ||||||
| 				 	.dinp3			(IIRin_p1		), | 				 	.dinp3			(IIRin_p[1]		), | ||||||
| 				 	.dinp4			(IIRin_p0		), | 				 	.dinp4			(IIRin_p[0]		), | ||||||
| 				 	.dinp5			(IIRin_p7_r1		), | 				 	.dinp5			(IIRin_p_r1[7]		), | ||||||
| 				 	.dinp6			(IIRin_p6_r1		), | 				 	.dinp6			(IIRin_p_r1[6]		), | ||||||
| 				 	.dinp7			(IIRin_p5_r1		), | 				 	.dinp7			(IIRin_p_r1[5]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -278,18 +251,18 @@ IIR_Filter_p8	inst_iir_0_p4 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p4              ) | 					.dout                   (IIRout_p4              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p5 ( | IIR_Filter_p8	inst_iir_p5 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p5		), | 				 	.dinp0			(IIRin_p[5]		), | ||||||
| 				 	.dinp1			(IIRin_p4		), | 				 	.dinp1			(IIRin_p[4]		), | ||||||
| 				 	.dinp2			(IIRin_p3		), | 				 	.dinp2			(IIRin_p[3]		), | ||||||
| 				 	.dinp3			(IIRin_p2		), | 				 	.dinp3			(IIRin_p[2]		), | ||||||
| 				 	.dinp4			(IIRin_p1		), | 				 	.dinp4			(IIRin_p[1]		), | ||||||
| 				 	.dinp5			(IIRin_p0		), | 				 	.dinp5			(IIRin_p[0]		), | ||||||
| 				 	.dinp6			(IIRin_p7_r1		), | 				 	.dinp6			(IIRin_p_r1[7]		), | ||||||
| 				 	.dinp7			(IIRin_p6_r1		), | 				 	.dinp7			(IIRin_p_r1[6]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -310,18 +283,18 @@ IIR_Filter_p8	inst_iir_0_p5 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p5              ) | 					.dout                   (IIRout_p5              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p6 ( | IIR_Filter_p8	inst_iir_p6 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p6		), | 				 	.dinp0			(IIRin_p[6]		), | ||||||
| 				 	.dinp1			(IIRin_p5		), | 				 	.dinp1			(IIRin_p[5]		), | ||||||
| 				 	.dinp2			(IIRin_p4		), | 				 	.dinp2			(IIRin_p[4]		), | ||||||
| 				 	.dinp3			(IIRin_p3		), | 				 	.dinp3			(IIRin_p[3]		), | ||||||
| 				 	.dinp4			(IIRin_p2		), | 				 	.dinp4			(IIRin_p[2]		), | ||||||
| 				 	.dinp5			(IIRin_p1		), | 				 	.dinp5			(IIRin_p[1]		), | ||||||
| 				 	.dinp6			(IIRin_p0		), | 				 	.dinp6			(IIRin_p[0]		), | ||||||
| 				 	.dinp7			(IIRin_p7_r1		), | 				 	.dinp7			(IIRin_p_r1[7]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  | @ -342,18 +315,18 @@ IIR_Filter_p8	inst_iir_0_p6 ( | ||||||
| 					.b_pow8_im		(b_pow8_im		), | 					.b_pow8_im		(b_pow8_im		), | ||||||
| 					.dout                   (IIRout_p6              ) | 					.dout                   (IIRout_p6              ) | ||||||
| 			   ); | 			   ); | ||||||
| IIR_Filter_p8	inst_iir_0_p7 ( | IIR_Filter_p8	inst_iir_p7 ( | ||||||
| 					.clk			(clk	                ), | 					.clk			(clk	                ), | ||||||
| 					.rstn			(rstn			), | 					.rstn			(rstn			), | ||||||
| 					.en			(en			), | 					.en			(en			), | ||||||
| 				 	.dinp0			(IIRin_p7		), | 				 	.dinp0			(IIRin_p[7]		), | ||||||
| 				 	.dinp1			(IIRin_p6		), | 				 	.dinp1			(IIRin_p[6]		), | ||||||
| 				 	.dinp2			(IIRin_p5		), | 				 	.dinp2			(IIRin_p[5]		), | ||||||
| 				 	.dinp3			(IIRin_p4		), | 				 	.dinp3			(IIRin_p[4]		), | ||||||
| 				 	.dinp4			(IIRin_p3		), | 				 	.dinp4			(IIRin_p[3]		), | ||||||
| 				 	.dinp5			(IIRin_p2		), | 				 	.dinp5			(IIRin_p[2]		), | ||||||
| 				 	.dinp6			(IIRin_p1		), | 				 	.dinp6			(IIRin_p[1]		), | ||||||
| 				 	.dinp7			(IIRin_p0		), | 				 	.dinp7			(IIRin_p[0]		), | ||||||
| 					.a_re			(a_re			), | 					.a_re			(a_re			), | ||||||
| 					.a_im			(a_im			), | 					.a_im			(a_im			), | ||||||
| 					.ab_re			(ab_re			), | 					.ab_re			(ab_re			), | ||||||
|  |  | ||||||
|  | @ -1,228 +0,0 @@ | ||||||
| //+FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Company:  |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  File Name             :    MeanIntp_8.v |  | ||||||
| //  Department            :     |  | ||||||
| //  Author                :    thfu |  | ||||||
| //  Author's Tel          :      |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Relese History |  | ||||||
| //  Version     Date            Author          Description |  | ||||||
| //  0.1         2024-09-27      thfu            top module of 8 mean interpolation |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Keywords            :        |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Parameter |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Purpose                 : |  | ||||||
| //                       |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Target Device:         |  | ||||||
| //  Tool versions:         |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Reuse Issues |  | ||||||
| //  Reset Strategy:  |  | ||||||
| //  Clock Domains:  |  | ||||||
| //  Critical Timing: |  | ||||||
| //  Asynchronous I/F: |  | ||||||
| //  Synthesizable (y/n):  |  | ||||||
| //  Other: |  | ||||||
| //-FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| module MeanIntp_8( |  | ||||||
| 		 	clk, |  | ||||||
| 		 	rstn, |  | ||||||
| 		 	en, |  | ||||||
| 		 	intp_mode, |  | ||||||
| 		 	din,  //input |  | ||||||
| 			dout_0,//output |  | ||||||
| 			dout_1, |  | ||||||
| 			dout_2, |  | ||||||
| 			dout_3, |  | ||||||
| 			dout_4, |  | ||||||
| 			dout_5, |  | ||||||
| 			dout_6, |  | ||||||
| 			dout_7 |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| input rstn; |  | ||||||
| input clk; |  | ||||||
| input en; |  | ||||||
| input [1:0]   intp_mode; |  | ||||||
| input  signed [15:0] din; |  | ||||||
| 
 |  | ||||||
| output signed [15:0] dout_0; |  | ||||||
| output signed [15:0] dout_1; |  | ||||||
| output signed [15:0] dout_2; |  | ||||||
| output signed [15:0] dout_3; |  | ||||||
| output signed [15:0] dout_4; |  | ||||||
| output signed [15:0] dout_5; |  | ||||||
| output signed [15:0] dout_6; |  | ||||||
| output signed [15:0] dout_7; |  | ||||||
| 
 |  | ||||||
| reg  [15:0]  din_r1; |  | ||||||
| reg  [15:0]  din_r2; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn)  |  | ||||||
|     if(!rstn) |  | ||||||
|         begin |  | ||||||
|                  din_r1  <=  'h0;   |  | ||||||
|                  din_r2  <=  'h0;   |  | ||||||
|         end |  | ||||||
|     else  if(en) |  | ||||||
|         begin |  | ||||||
|                  din_r1  <=  din; |  | ||||||
|                  din_r2  <=  din_r1; |  | ||||||
|         end |  | ||||||
|     else |  | ||||||
|         begin |  | ||||||
|                  din_r1  <=  din_r1; |  | ||||||
|                  din_r2  <=  din_r2; |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
| wire  [16:0]  sum_0_1; |  | ||||||
| wire  [16:0]  sum_0_1_round0; |  | ||||||
| wire  [16:0]  sum_0_1_round1; |  | ||||||
| wire  [16:0]  sum_0_1_round2; |  | ||||||
| 
 |  | ||||||
| assign  sum_0_1 = {{1 {din[15]}},din} - {{1 {din_r1[15]}},din_r1}; |  | ||||||
| 
 |  | ||||||
| FixRound #(17,1) u_round1 (clk, rstn, en, sum_0_1, sum_0_1_round0); |  | ||||||
| FixRound #(17,2) u_round2 (clk, rstn, en, sum_0_1, sum_0_1_round1); |  | ||||||
| FixRound #(17,3) u_round3 (clk, rstn, en, sum_0_1, sum_0_1_round2); |  | ||||||
| 
 |  | ||||||
| wire  signed  [16:0]  diff_1_2;//(din-din_r1)/2  |  | ||||||
| wire  signed  [16:0]  diff_1_4;//(din-din_r1)/4 |  | ||||||
| wire  signed  [16:0]  diff_1_8;//(din-din_r1)/8 |  | ||||||
| 
 |  | ||||||
| assign  diff_1_2 = {{1 {sum_0_1_round0[16]}},sum_0_1_round0[16:1]}; |  | ||||||
| assign  diff_1_4 = {{2 {sum_0_1_round1[16]}},sum_0_1_round1[16:2]}; |  | ||||||
| assign  diff_1_8 = {{3 {sum_0_1_round2[16]}},sum_0_1_round2[16:3]}; |  | ||||||
| 
 |  | ||||||
| reg  signed  [16:0]  dout_r0; |  | ||||||
| reg  signed  [16:0]  dout_r1; |  | ||||||
| reg  signed  [16:0]  dout_r2; |  | ||||||
| reg  signed  [16:0]  dout_r3; |  | ||||||
| reg  signed  [16:0]  dout_r4; |  | ||||||
| reg  signed  [16:0]  dout_r5; |  | ||||||
| reg  signed  [16:0]  dout_r6; |  | ||||||
| reg  signed  [16:0]  dout_r7; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn)  |  | ||||||
|     if(!rstn) |  | ||||||
|         begin |  | ||||||
|                  dout_r0  <=  'h0; |  | ||||||
|                  dout_r1  <=  'h0; |  | ||||||
|                  dout_r2  <=  'h0; |  | ||||||
|                  dout_r3  <=  'h0; |  | ||||||
|                  dout_r4  <=  'h0; |  | ||||||
|                  dout_r5  <=  'h0; |  | ||||||
|                  dout_r6  <=  'h0; |  | ||||||
|                  dout_r7  <=  'h0; |  | ||||||
|         end |  | ||||||
|     else  if(en) |  | ||||||
|         begin |  | ||||||
|                  dout_r0  <=  din_r2; |  | ||||||
|                  dout_r1  <=  din_r2 + diff_1_8; |  | ||||||
|                  dout_r2  <=  din_r2 + diff_1_4; |  | ||||||
|                  dout_r3  <=  din_r2 + diff_1_4 + diff_1_8; |  | ||||||
|                  dout_r4  <=  din_r2 + diff_1_2; |  | ||||||
|                  dout_r5  <=  din_r2 + diff_1_2 + diff_1_8; |  | ||||||
|                  dout_r6  <=  din_r2 + diff_1_2 + diff_1_4; |  | ||||||
|                  dout_r7  <=  din_r2 + diff_1_2 + diff_1_4 + diff_1_8; |  | ||||||
|         end |  | ||||||
|     else |  | ||||||
|         begin |  | ||||||
|                  dout_r0  <=  dout_r0;  |  | ||||||
|                  dout_r1  <=  dout_r1; |  | ||||||
|                  dout_r2  <=  dout_r2; |  | ||||||
|                  dout_r3  <=  dout_r3; |  | ||||||
|                  dout_r4  <=  dout_r4; |  | ||||||
|                  dout_r5  <=  dout_r5; |  | ||||||
|                  dout_r6  <=  dout_r6; |  | ||||||
|                  dout_r7  <=  dout_r7; |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
| reg  signed  [15:0]  mux_p_0; |  | ||||||
| reg  signed  [15:0]  mux_p_1; |  | ||||||
| reg  signed  [15:0]  mux_p_2; |  | ||||||
| reg  signed  [15:0]  mux_p_3; |  | ||||||
| reg  signed  [15:0]  mux_p_4; |  | ||||||
| reg  signed  [15:0]  mux_p_5; |  | ||||||
| reg  signed  [15:0]  mux_p_6; |  | ||||||
| reg  signed  [15:0]  mux_p_7; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk)  begin |  | ||||||
|     case(intp_mode) |  | ||||||
|     2'b00: |  | ||||||
|         begin |  | ||||||
|                  mux_p_0  <=  dout_r0; |  | ||||||
|                  mux_p_1  <=  16'h0; |  | ||||||
|                  mux_p_2  <=  16'h0; |  | ||||||
|                  mux_p_3  <=  16'h0; |  | ||||||
|                  mux_p_4  <=  16'h0; |  | ||||||
|                  mux_p_5  <=  16'h0; |  | ||||||
|                  mux_p_6  <=  16'h0; |  | ||||||
|                  mux_p_7  <=  16'h0;    |  | ||||||
|         end |  | ||||||
|      2'b01: |  | ||||||
|         begin |  | ||||||
|                  mux_p_0  <=  dout_r0; |  | ||||||
|                  mux_p_1  <=  dout_r4; |  | ||||||
|                  mux_p_2  <=  16'h0; |  | ||||||
|                  mux_p_3  <=  16'h0; |  | ||||||
|                  mux_p_4  <=  16'h0; |  | ||||||
|                  mux_p_5  <=  16'h0; |  | ||||||
|                  mux_p_6  <=  16'h0; |  | ||||||
|                  mux_p_7  <=  16'h0;           |  | ||||||
|         end |  | ||||||
|     2'b10: |  | ||||||
|         begin |  | ||||||
|                  mux_p_0  <=  dout_r0; |  | ||||||
|                  mux_p_1  <=  dout_r2; |  | ||||||
|                  mux_p_2  <=  dout_r4; |  | ||||||
|                  mux_p_3  <=  dout_r6; |  | ||||||
|                  mux_p_4  <=  16'h0; |  | ||||||
|                  mux_p_5  <=  16'h0; |  | ||||||
|                  mux_p_6  <=  16'h0; |  | ||||||
|                  mux_p_7  <=  16'h0;           |  | ||||||
|         end |  | ||||||
|      2'b11: |  | ||||||
|         begin |  | ||||||
|                  mux_p_0  <=  dout_r0; |  | ||||||
|                  mux_p_1  <=  dout_r1; |  | ||||||
|                  mux_p_2  <=  dout_r2; |  | ||||||
|                  mux_p_3  <=  dout_r3; |  | ||||||
|                  mux_p_4  <=  dout_r4; |  | ||||||
|                  mux_p_5  <=  dout_r5; |  | ||||||
|                  mux_p_6  <=  dout_r6; |  | ||||||
|                  mux_p_7  <=  dout_r7;         |  | ||||||
|         end |  | ||||||
|      default: |  | ||||||
|         begin |  | ||||||
|                  mux_p_0  <=  16'h0; |  | ||||||
|                  mux_p_1  <=  16'h0; |  | ||||||
|                  mux_p_2  <=  16'h0; |  | ||||||
|                  mux_p_3  <=  16'h0; |  | ||||||
|                  mux_p_4  <=  16'h0; |  | ||||||
|                  mux_p_5  <=  16'h0; |  | ||||||
|                  mux_p_6  <=  16'h0; |  | ||||||
|                  mux_p_7  <=  16'h0;           |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
|     endcase |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| assign dout_0 = mux_p_0[15:0]; |  | ||||||
| assign dout_1 = mux_p_1[15:0]; |  | ||||||
| assign dout_2 = mux_p_2[15:0]; |  | ||||||
| assign dout_3 = mux_p_3[15:0]; |  | ||||||
| assign dout_4 = mux_p_4[15:0]; |  | ||||||
| assign dout_5 = mux_p_5[15:0]; |  | ||||||
| assign dout_6 = mux_p_6[15:0]; |  | ||||||
| assign dout_7 = mux_p_7[15:0]; |  | ||||||
| 
 |  | ||||||
| endmodule |  | ||||||
|  | @ -733,14 +733,14 @@ IIR_top	inst_iir_top_5 ( | ||||||
| 			   ); | 			   ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| wire signed [15:0] dout_p0_r0; | wire signed [18:0] dout_p0_r0; | ||||||
| wire signed [15:0] dout_p1_r0; | wire signed [18:0] dout_p1_r0; | ||||||
| wire signed [15:0] dout_p2_r0; | wire signed [18:0] dout_p2_r0; | ||||||
| wire signed [15:0] dout_p3_r0; | wire signed [18:0] dout_p3_r0; | ||||||
| wire signed [15:0] dout_p4_r0; | wire signed [18:0] dout_p4_r0; | ||||||
| wire signed [15:0] dout_p5_r0; | wire signed [18:0] dout_p5_r0; | ||||||
| wire signed [15:0] dout_p6_r0; | wire signed [18:0] dout_p6_r0; | ||||||
| wire signed [15:0] dout_p7_r0; | wire signed [18:0] dout_p7_r0; | ||||||
| 
 | 
 | ||||||
| assign  dout_p0_r0  =  din_p0_r5 + IIRout0_p0 + IIRout1_p0 +IIRout2_p0 +IIRout3_p0 +IIRout4_p0 +IIRout5_p0; | assign  dout_p0_r0  =  din_p0_r5 + IIRout0_p0 + IIRout1_p0 +IIRout2_p0 +IIRout3_p0 +IIRout4_p0 +IIRout5_p0; | ||||||
| assign  dout_p1_r0  =  din_p1_r5 + IIRout0_p1 + IIRout1_p1 +IIRout2_p1 +IIRout3_p1 +IIRout4_p1 +IIRout5_p1; | assign  dout_p1_r0  =  din_p1_r5 + IIRout0_p1 + IIRout1_p1 +IIRout2_p1 +IIRout3_p1 +IIRout4_p1 +IIRout5_p1; | ||||||
|  | @ -751,14 +751,45 @@ assign  dout_p5_r0  =  din_p5_r5 + IIRout0_p5 + IIRout1_p5 +IIRout2_p5 +IIRout3_ | ||||||
| assign  dout_p6_r0  =  din_p6_r5 + IIRout0_p6 + IIRout1_p6 +IIRout2_p6 +IIRout3_p6 +IIRout4_p6 +IIRout5_p6; | assign  dout_p6_r0  =  din_p6_r5 + IIRout0_p6 + IIRout1_p6 +IIRout2_p6 +IIRout3_p6 +IIRout4_p6 +IIRout5_p6; | ||||||
| assign  dout_p7_r0  =  din_p7_r5 + IIRout0_p7 + IIRout1_p7 +IIRout2_p7 +IIRout3_p7 +IIRout4_p7 +IIRout5_p7; | assign  dout_p7_r0  =  din_p7_r5 + IIRout0_p7 + IIRout1_p7 +IIRout2_p7 +IIRout3_p7 +IIRout4_p7 +IIRout5_p7; | ||||||
| 
 | 
 | ||||||
| reg signed [15:0] dout_p0_r1; | reg signed [18:0] dout_p0_r1; | ||||||
| reg signed [15:0] dout_p1_r1; | reg signed [18:0] dout_p1_r1; | ||||||
| reg signed [15:0] dout_p2_r1; | reg signed [18:0] dout_p2_r1; | ||||||
| reg signed [15:0] dout_p3_r1; | reg signed [18:0] dout_p3_r1; | ||||||
| reg signed [15:0] dout_p4_r1; | reg signed [18:0] dout_p4_r1; | ||||||
| reg signed [15:0] dout_p5_r1; | reg signed [18:0] dout_p5_r1; | ||||||
| reg signed [15:0] dout_p6_r1; | reg signed [18:0] dout_p6_r1; | ||||||
| reg signed [15:0] dout_p7_r1; | reg signed [18:0] dout_p7_r1; | ||||||
|  | 
 | ||||||
|  | reg 	signed	[15:0]   dout_p [7:0]; | ||||||
|  | wire    signed  [18:0] dout_p_r0 [0:7] = {dout_p0_r0,dout_p1_r0,dout_p2_r0,dout_p3_r0,dout_p4_r0,dout_p5_r0,dout_p6_r0,dout_p7_r0}; | ||||||
|  | 
 | ||||||
|  | integer i; | ||||||
|  | always @(posedge clk or negedge rstn) begin | ||||||
|  |     if (!rstn) begin | ||||||
|  |         for (i = 0; i < 8; i = i + 1) begin | ||||||
|  |             dout_p[i] <= 'h0; | ||||||
|  |         end | ||||||
|  |     end  | ||||||
|  |     else if (en) begin | ||||||
|  |         for (i = 0; i < 8; i = i + 1) begin | ||||||
|  |             if (dout_p_r0[i][16:15] == 2'b01) | ||||||
|  |                 dout_p[i] <= 16'd32767; | ||||||
|  |             else if (dout_p_r0[i][16:15] == 2'b10) | ||||||
|  |                 dout_p[i] <= -16'd32768; | ||||||
|  |             else | ||||||
|  |                 dout_p[i] <= dout_p_r0[i][15:0]; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | assign  dout_p0  =  dout_p[0]; | ||||||
|  | assign  dout_p1  =  dout_p[1]; | ||||||
|  | assign  dout_p2  =  dout_p[2]; | ||||||
|  | assign  dout_p3  =  dout_p[3]; | ||||||
|  | assign  dout_p4  =  dout_p[4]; | ||||||
|  | assign  dout_p5  =  dout_p[5]; | ||||||
|  | assign  dout_p6  =  dout_p[6]; | ||||||
|  | assign  dout_p7  =  dout_p[7]; | ||||||
| 
 | 
 | ||||||
| always @(posedge clk or negedge rstn)  | always @(posedge clk or negedge rstn)  | ||||||
|   	if (!rstn) |   	if (!rstn) | ||||||
|  | @ -795,20 +826,11 @@ always @(posedge clk or negedge rstn) | ||||||
| 		    dout_p7_r1  <= dout_p7_r1; | 		    dout_p7_r1  <= dout_p7_r1; | ||||||
| 		  end | 		  end | ||||||
| 
 | 
 | ||||||
| assign  dout_p0  =  dout_p0_r1; | reg signed [18:0] dout_p0_r2; | ||||||
| assign  dout_p1  =  dout_p1_r1; | reg signed [18:0] dout_p0_r3; | ||||||
| assign  dout_p2  =  dout_p2_r1; | reg signed [18:0] dout_p0_r4; | ||||||
| assign  dout_p3  =  dout_p3_r1; | reg signed [18:0] dout_p0_r5; | ||||||
| assign  dout_p4  =  dout_p4_r1; | reg signed [18:0] dout_p0_r6; | ||||||
| assign  dout_p5  =  dout_p5_r1; |  | ||||||
| assign  dout_p6  =  dout_p6_r1; |  | ||||||
| assign  dout_p7  =  dout_p7_r1; |  | ||||||
| 
 |  | ||||||
| reg signed [15:0] dout_p0_r2; |  | ||||||
| reg signed [15:0] dout_p0_r3; |  | ||||||
| reg signed [15:0] dout_p0_r4; |  | ||||||
| reg signed [15:0] dout_p0_r5; |  | ||||||
| reg signed [15:0] dout_p0_r6; |  | ||||||
| 
 | 
 | ||||||
| always @(posedge clk or negedge rstn)  | always @(posedge clk or negedge rstn)  | ||||||
|   	if (!rstn) |   	if (!rstn) | ||||||
|  |  | ||||||
|  | @ -1,75 +0,0 @@ | ||||||
| //+FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Company:  |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  File Name             :    diff.v |  | ||||||
| //  Department            :     |  | ||||||
| //  Author                :    thfu |  | ||||||
| //  Author's Tel          :      |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Relese History |  | ||||||
| //  Version     Date            Author          Description |  | ||||||
| //  0.1         2024-05-11      thfu |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Keywords            :        |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Parameter |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Purpose                 : |  | ||||||
| //                       |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Target Device:         |  | ||||||
| //  Tool versions:         |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Reuse Issues |  | ||||||
| //  Reset Strategy:  |  | ||||||
| //  Clock Domains:  |  | ||||||
| //  Critical Timing: |  | ||||||
| //  Asynchronous I/F: |  | ||||||
| //  Synthesizable (y/n):  |  | ||||||
| //  Other: |  | ||||||
| //-FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| module diff( |  | ||||||
| 		 	clk, |  | ||||||
| 		 	rstn, |  | ||||||
| 		 	en, |  | ||||||
| 		 	din, |  | ||||||
| 			dout |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| input rstn; |  | ||||||
| input clk; |  | ||||||
| input en; |  | ||||||
| input  signed [15:0] din; |  | ||||||
| 
 |  | ||||||
| output signed [15:0] dout; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[15:0]  din_r; |  | ||||||
| reg	[15:0]  din_r1; |  | ||||||
| reg	[15:0]  out_r; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			 begin |  | ||||||
| 				din_r	<=	16'd0; |  | ||||||
| 				din_r1	<=	16'd0; |  | ||||||
| 				out_r	<=	16'd0; |  | ||||||
| 			 end  |  | ||||||
| 		else if(en) |  | ||||||
| 			 begin |  | ||||||
| 				din_r	<=	din; |  | ||||||
| 				din_r1	<=	din_r; |  | ||||||
| 				out_r   <=	din_r - din_r1; |  | ||||||
| 			 end  |  | ||||||
| 		else |  | ||||||
| 			 begin |  | ||||||
| 				din_r	<=	din_r; |  | ||||||
| 				din_r1	<=	din_r1; |  | ||||||
| 				out_r   <=	out_r; |  | ||||||
| 			 end  |  | ||||||
| assign	dout = out_r; |  | ||||||
| 
 |  | ||||||
| endmodule |  | ||||||
|  | @ -62,175 +62,89 @@ module 	diff_p | ||||||
| 
 | 
 | ||||||
| 		 	);		 | 		 	);		 | ||||||
| 
 | 
 | ||||||
| wire  signed  [15:0]  din_p0_r0; |  | ||||||
| wire  signed  [15:0]  din_p1_r0; |  | ||||||
| wire  signed  [15:0]  din_p2_r0; |  | ||||||
| wire  signed  [15:0]  din_p3_r0; |  | ||||||
| wire  signed  [15:0]  din_p4_r0; |  | ||||||
| wire  signed  [15:0]  din_p5_r0; |  | ||||||
| wire  signed  [15:0]  din_p6_r0; |  | ||||||
| wire  signed  [15:0]  din_p7_r0; |  | ||||||
| 
 | 
 | ||||||
| s2p_2 inst1_s2p_2 ( | wire [15:0] din_wire [0:3]; | ||||||
|         .clk    (clk), | 
 | ||||||
|         .rst_n  (rstn), | assign din_wire[0] = din0; | ||||||
|         .din    (din0), | assign din_wire[1] = din1; | ||||||
|         .en   (vldi), | assign din_wire[2] = din2; | ||||||
|         .dout0 (din_p0_r0), | assign din_wire[3] = din3; | ||||||
|         .dout1 (din_p4_r0) |  | ||||||
|         ,.vldo( vldo) |  | ||||||
|     ); |  | ||||||
| s2p_2 inst2_s2p_2 ( |  | ||||||
|         .clk    (clk), |  | ||||||
|         .rst_n  (rstn), |  | ||||||
|         .din    (din1), |  | ||||||
|         .en   (vldi), |  | ||||||
|         .dout0 (din_p1_r0), |  | ||||||
|         .dout1 (din_p5_r0) |  | ||||||
|         ,.vldo( ) |  | ||||||
|     ); |  | ||||||
| s2p_2 inst3_s2p_2 ( |  | ||||||
|         .clk    (clk), |  | ||||||
|         .rst_n  (rstn), |  | ||||||
|         .din    (din2), |  | ||||||
|         .en   (vldi), |  | ||||||
|         .dout0 (din_p2_r0), |  | ||||||
|         .dout1 (din_p6_r0) |  | ||||||
|         ,.vldo( ) |  | ||||||
|     ); |  | ||||||
| s2p_2 inst4_s2p_2 ( |  | ||||||
|         .clk    (clk), |  | ||||||
|         .rst_n  (rstn), |  | ||||||
|         .din    (din3), |  | ||||||
|         .en   (vldi), |  | ||||||
|         .dout0 (din_p3_r0), |  | ||||||
|         .dout1 (din_p7_r0) |  | ||||||
|         ,.vldo( ) |  | ||||||
|     ); |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| reg  signed [15:0]		    din_p0_r1; | wire [3:0] vldo_temp; | ||||||
| reg  signed [15:0]		    din_p1_r1; | wire  signed  [15:0]  dinp_r0 [7:0]; | ||||||
| reg  signed [15:0]		    din_p2_r1; | genvar i; | ||||||
| reg  signed [15:0]		    din_p3_r1; | generate | ||||||
| reg  signed [15:0]		    din_p4_r1; |     for (i = 0; i < 4; i = i + 1) begin: s2p_inst | ||||||
| reg  signed [15:0]		    din_p5_r1; |         s2p_2 inst_s2p_2 ( | ||||||
| reg  signed [15:0]		    din_p6_r1; |             .clk    (clk), | ||||||
| reg  signed [15:0]		    din_p7_r1; |             .rst_n  (rstn), | ||||||
| 
 |             .din    (din_wire[i]), | ||||||
| always @(posedge clk or negedge rstn)  |             .en     (vldi), | ||||||
|   	if (!rstn) |             .dout0  (dinp_r0[i]), | ||||||
| 		 begin |             .dout1  (dinp_r0[i+4]), | ||||||
| 		    din_p0_r1  <= 'h0; |             .vldo   (vldo_temp[i]) | ||||||
| 		    din_p1_r1  <= 'h0; |         ); | ||||||
| 		    din_p2_r1  <= 'h0; |  | ||||||
| 		    din_p3_r1  <= 'h0; |  | ||||||
| 		    din_p4_r1  <= 'h0; |  | ||||||
| 		    din_p5_r1  <= 'h0; |  | ||||||
| 		    din_p6_r1  <= 'h0; |  | ||||||
| 		    din_p7_r1  <= 'h0; |  | ||||||
|     end |     end | ||||||
| 	 else if(en) | endgenerate | ||||||
| 		 begin | assign vldo = vldo_temp[0]; | ||||||
| 		    din_p0_r1  <= din_p0_r0; | 
 | ||||||
| 		    din_p1_r1  <= din_p1_r0; | reg  signed [15:0] dinp_r1 [0:7]; | ||||||
| 		    din_p2_r1  <= din_p2_r0; | integer j; | ||||||
| 		    din_p3_r1  <= din_p3_r0; | always @(posedge clk or negedge rstn) begin | ||||||
| 		    din_p4_r1  <= din_p4_r0; |     if (!rstn) begin | ||||||
| 		    din_p5_r1  <= din_p5_r0; |         for (j = 0; j < 8; j = j + 1) begin | ||||||
| 		    din_p6_r1  <= din_p6_r0; |             dinp_r1[j] <= 'h0; | ||||||
| 		    din_p7_r1  <= din_p7_r0; |  | ||||||
|         end |         end | ||||||
|  |     end  | ||||||
|  |     else if (en) begin | ||||||
|  |         for (j = 0; j < 8; j = j + 1) begin | ||||||
|  |             dinp_r1[j] <= dinp_r0[j]; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | wire signed [15:0] diffp_r0 [0:7]; | ||||||
|  | generate | ||||||
|  |     for (i = 0; i < 8; i = i + 1) begin: diff_assign | ||||||
|  |         if (i == 0) | ||||||
|  |             assign diffp_r0[i] = dinp_r0[i] - dinp_r1[7]; | ||||||
|         else |         else | ||||||
| 		 begin |             assign diffp_r0[i] = dinp_r0[i] - dinp_r0[i-1]; | ||||||
| 		    din_p0_r1  <= din_p0_r1; |  | ||||||
| 		    din_p1_r1  <= din_p1_r1; |  | ||||||
| 		    din_p2_r1  <= din_p2_r1; |  | ||||||
| 		    din_p3_r1  <= din_p3_r1; |  | ||||||
| 		    din_p4_r1  <= din_p4_r1; |  | ||||||
| 		    din_p5_r1  <= din_p5_r1; |  | ||||||
| 		    din_p6_r1  <= din_p6_r1; |  | ||||||
| 		    din_p7_r1  <= din_p7_r1; |  | ||||||
|     end |     end | ||||||
|  | endgenerate | ||||||
| 
 | 
 | ||||||
| assign  dout_p0 = din_p0_r1; | assign  dout_p0 = dinp_r1[0]; | ||||||
| assign  dout_p1 = din_p1_r1; | assign  dout_p1 = dinp_r1[1]; | ||||||
| assign  dout_p2 = din_p2_r1; | assign  dout_p2 = dinp_r1[2]; | ||||||
| assign  dout_p3 = din_p3_r1; | assign  dout_p3 = dinp_r1[3]; | ||||||
| assign  dout_p4 = din_p4_r1; | assign  dout_p4 = dinp_r1[4]; | ||||||
| assign  dout_p5 = din_p5_r1; | assign  dout_p5 = dinp_r1[5]; | ||||||
| assign  dout_p6 = din_p6_r1; | assign  dout_p6 = dinp_r1[6]; | ||||||
| assign  dout_p7 = din_p7_r1; | assign  dout_p7 = dinp_r1[7]; | ||||||
| 
 | 
 | ||||||
| wire  signed [15:0] diff_p0_r0; | reg  signed [15:0] diffp_r1 [0:7]; | ||||||
| wire  signed [15:0] diff_p1_r0; | always @(posedge clk or negedge rstn) begin | ||||||
| wire  signed [15:0] diff_p2_r0; |     if (!rstn) begin | ||||||
| wire  signed [15:0] diff_p3_r0; |         for (j = 0; j < 8; j = j + 1) begin | ||||||
| wire  signed [15:0] diff_p4_r0; |             diffp_r1[j] <= 0; | ||||||
| wire  signed [15:0] diff_p5_r0; |         end | ||||||
| wire  signed [15:0] diff_p6_r0; |     end | ||||||
| wire  signed [15:0] diff_p7_r0; |     else if (en) begin | ||||||
| 
 |         for (j = 0; j < 8; j = j + 1) begin | ||||||
| assign  diff_p0_r0 = din_p0_r0 - din_p7_r1; |             diffp_r1[j] <= diffp_r0[j]; | ||||||
| assign  diff_p1_r0 = din_p1_r0 - din_p0_r0; |         end | ||||||
| assign  diff_p2_r0 = din_p2_r0 - din_p1_r0; |     end | ||||||
| assign  diff_p3_r0 = din_p3_r0 - din_p2_r0; |  | ||||||
| assign  diff_p4_r0 = din_p4_r0 - din_p3_r0; |  | ||||||
| assign  diff_p5_r0 = din_p5_r0 - din_p4_r0; |  | ||||||
| assign  diff_p6_r0 = din_p6_r0 - din_p5_r0; |  | ||||||
| assign  diff_p7_r0 = din_p7_r0 - din_p6_r0; |  | ||||||
| 
 |  | ||||||
| reg signed [15:0] diff_p0_r1; |  | ||||||
| reg signed [15:0] diff_p1_r1; |  | ||||||
| reg signed [15:0] diff_p2_r1; |  | ||||||
| reg signed [15:0] diff_p3_r1; |  | ||||||
| reg signed [15:0] diff_p4_r1; |  | ||||||
| reg signed [15:0] diff_p5_r1; |  | ||||||
| reg signed [15:0] diff_p6_r1; |  | ||||||
| reg signed [15:0] diff_p7_r1; |  | ||||||
| 
 |  | ||||||
| always  @(posedge clk or negedge rstn)begin |  | ||||||
| if(rstn==1'b0)begin |  | ||||||
|     diff_p0_r1 <= 0; |  | ||||||
|     diff_p1_r1 <= 0; |  | ||||||
|     diff_p2_r1 <= 0; |  | ||||||
|     diff_p3_r1 <= 0; |  | ||||||
|     diff_p4_r1 <= 0; |  | ||||||
|     diff_p5_r1 <= 0; |  | ||||||
|     diff_p6_r1 <= 0; |  | ||||||
|     diff_p7_r1 <= 0; |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| else if(en)begin |  | ||||||
|     diff_p0_r1 <= diff_p0_r0; |  | ||||||
|     diff_p1_r1 <= diff_p1_r0; |  | ||||||
|     diff_p2_r1 <= diff_p2_r0; |  | ||||||
|     diff_p3_r1 <= diff_p3_r0; |  | ||||||
|     diff_p4_r1 <= diff_p4_r0; |  | ||||||
|     diff_p5_r1 <= diff_p5_r0; |  | ||||||
|     diff_p6_r1 <= diff_p6_r0; |  | ||||||
|     diff_p7_r1 <= diff_p7_r0; |  | ||||||
| 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 | ||||||
| 
 | 
 | ||||||
| assign diff_p0 = diff_p0_r1; | assign diff_p0 = diffp_r1[0]; | ||||||
| assign diff_p1 = diff_p1_r1; | assign diff_p1 = diffp_r1[1]; | ||||||
| assign diff_p2 = diff_p2_r1; | assign diff_p2 = diffp_r1[2]; | ||||||
| assign diff_p3 = diff_p3_r1; | assign diff_p3 = diffp_r1[3]; | ||||||
| assign diff_p4 = diff_p4_r1; | assign diff_p4 = diffp_r1[4]; | ||||||
| assign diff_p5 = diff_p5_r1; | assign diff_p5 = diffp_r1[5]; | ||||||
| assign diff_p6 = diff_p6_r1; | assign diff_p6 = diffp_r1[6]; | ||||||
| assign diff_p7 = diff_p7_r1; | assign diff_p7 = diffp_r1[7]; | ||||||
| 
 | 
 | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -60,8 +60,8 @@ input       signed  [B_width-1:0]           b; | ||||||
| input       signed  [C_width-1:0]    c; | input       signed  [C_width-1:0]    c; | ||||||
| input       signed  [D_width-1:0]    d; | input       signed  [D_width-1:0]    d; | ||||||
| 
 | 
 | ||||||
| output      signed  [A_width+C_width-frac_coef_width-1:0]  Re; | output      signed  [A_width+C_width-frac_coef_width-2:0]  Re; | ||||||
| output      signed  [A_width+D_width-frac_coef_width-1:0]  Im; | output      signed  [A_width+D_width-frac_coef_width-2:0]  Im; | ||||||
| 
 | 
 | ||||||
| wire	    signed  [A_width+C_width-1:0]	           ac; | wire	    signed  [A_width+C_width-1:0]	           ac; | ||||||
| wire	    signed  [B_width+D_width-1:0]	           bd; | wire	    signed  [B_width+D_width-1:0]	           bd; | ||||||
|  | @ -104,7 +104,8 @@ wire         signed  [A_width+D_width:0]     Im_round; | ||||||
| FixRound #(A_width+C_width+1,frac_coef_width) u_round1 (clk, rstn, en, Re_tmp, Re_round); | FixRound #(A_width+C_width+1,frac_coef_width) u_round1 (clk, rstn, en, Re_tmp, Re_round); | ||||||
| FixRound #(A_width+C_width+1,frac_coef_width) u_round2 (clk, rstn, en, Im_tmp, Im_round); | FixRound #(A_width+C_width+1,frac_coef_width) u_round2 (clk, rstn, en, Im_tmp, Im_round); | ||||||
| 
 | 
 | ||||||
| assign	Re = Re_round[A_width+D_width-1:frac_coef_width]; | // Since this is complex multiplication, the output bit width needs to be increased by one compared to the input. | ||||||
| assign	Im = Im_round[A_width+D_width-1:frac_coef_width]; | assign	Re = Re_round[A_width+D_width-2:frac_coef_width]; | ||||||
|  | assign	Im = Im_round[A_width+D_width-2:frac_coef_width]; | ||||||
| 
 | 
 | ||||||
| endmodule | endmodule | ||||||
|  |  | ||||||
|  | @ -1,215 +0,0 @@ | ||||||
| //+FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Company:  |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  File Name             :    Z_dsp.v |  | ||||||
| //  Department            :     |  | ||||||
| //  Author                :    thfu |  | ||||||
| //  Author's Tel          :      |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Relese History |  | ||||||
| //  Version     Date            Author          Description |  | ||||||
| //  0.2         2024-10-09      thfu            to fit the addition of 8 interpolation |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Keywords            :        |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Parameter |  | ||||||
| // |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Purpose                 : |  | ||||||
| //                       |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Target Device:         |  | ||||||
| //  Tool versions:         |  | ||||||
| //----------------------------------------------------------------------------------------------------------------- |  | ||||||
| //  Reuse Issues |  | ||||||
| //  Reset Strategy:  |  | ||||||
| //  Clock Domains:  |  | ||||||
| //  Critical Timing: |  | ||||||
| //  Asynchronous I/F: |  | ||||||
| //  Synthesizable (y/n):  |  | ||||||
| //  Other: |  | ||||||
| //-FHDR-------------------------------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
| module 	z_dsp	 	 |  | ||||||
| ( |  | ||||||
|  input  rstn |  | ||||||
| ,input  clk |  | ||||||
| ,input  en |  | ||||||
| ,input  tc_bypass |  | ||||||
| ,input  vldi  |  | ||||||
| ,input  [1:0]	intp_mode |  | ||||||
| ,input  [1:0]	dac_mode_sel |  | ||||||
| ,input  signed [15:0] din |  | ||||||
| ,input  signed [31:0] a0_re |  | ||||||
| ,input  signed [31:0] a0_im |  | ||||||
| ,input  signed [31:0] ab0_re |  | ||||||
| ,input  signed [31:0] ab0_im |  | ||||||
| ,input  signed [31:0] bb0_re |  | ||||||
| ,input  signed [31:0] bb0_im |  | ||||||
| ,input  signed [31:0] a1_re |  | ||||||
| ,input  signed [31:0] a1_im |  | ||||||
| ,input  signed [31:0] ab1_re |  | ||||||
| ,input  signed [31:0] ab1_im |  | ||||||
| ,input  signed [31:0] bb1_re |  | ||||||
| ,input  signed [31:0] bb1_im |  | ||||||
| ,input  signed [31:0] a2_re |  | ||||||
| ,input  signed [31:0] a2_im |  | ||||||
| ,input  signed [31:0] ab2_re |  | ||||||
| ,input  signed [31:0] ab2_im |  | ||||||
| ,input  signed [31:0] bb2_re |  | ||||||
| ,input  signed [31:0] bb2_im |  | ||||||
| ,input  signed [31:0] a3_re |  | ||||||
| ,input  signed [31:0] a3_im |  | ||||||
| ,input  signed [31:0] ab3_re |  | ||||||
| ,input  signed [31:0] ab3_im |  | ||||||
| ,input  signed [31:0] bb3_re |  | ||||||
| ,input  signed [31:0] bb3_im |  | ||||||
| ,input  signed [31:0] a4_re |  | ||||||
| ,input  signed [31:0] a4_im |  | ||||||
| ,input  signed [31:0] ab4_re |  | ||||||
| ,input  signed [31:0] ab4_im |  | ||||||
| ,input  signed [31:0] bb4_re |  | ||||||
| ,input  signed [31:0] bb4_im |  | ||||||
| ,input  signed [31:0] a5_re |  | ||||||
| ,input  signed [31:0] a5_im |  | ||||||
| ,input  signed [31:0] ab5_re |  | ||||||
| ,input  signed [31:0] ab5_im |  | ||||||
| ,input  signed [31:0] bb5_re |  | ||||||
| ,input  signed [31:0] bb5_im |  | ||||||
| ,output signed [15:0] dout0 |  | ||||||
| ,output signed [15:0] dout1 |  | ||||||
| ,output signed [15:0] dout2 |  | ||||||
| ,output signed [15:0] dout3 |  | ||||||
| ,output		      vldo |  | ||||||
| 		 	);		 |  | ||||||
| 
 |  | ||||||
| parameter  Delay = 11-1; |  | ||||||
| 
 |  | ||||||
| wire signed	[15:0] IIR_out; |  | ||||||
| 
 |  | ||||||
| reg	[Delay:0]		  vldo_r; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 	if(!rstn) |  | ||||||
| 		begin |  | ||||||
| 			vldo_r	<=	11'b0;			 |  | ||||||
| 		end |  | ||||||
| 	else if(en) |  | ||||||
| 		begin |  | ||||||
| 			vldo_r	<=	{vldo_r[Delay:0], vldi};//Delay with 9 clk		 |  | ||||||
|                 end |  | ||||||
| 	else |  | ||||||
| 		begin |  | ||||||
| 			vldo_r	<=	vldo_r;		 |  | ||||||
|                 end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| assign		vldo = vldo_r[Delay]; |  | ||||||
| 
 |  | ||||||
| TailCorr_top	inst_TailCorr_top |  | ||||||
|                ( |  | ||||||
| 		        .clk			(clk	                ), |  | ||||||
| 		        .rstn			(rstn			), |  | ||||||
| 			.en			(en			), |  | ||||||
| 			.vldi			(vldi			), |  | ||||||
| 			.tc_bypass		(tc_bypass		), |  | ||||||
| 		        .din			(din                 ), |  | ||||||
| 			.a0_re			(a0_re                  ), |  | ||||||
| 			.a0_im			(a0_im                  ), |  | ||||||
| 			.ab0_re			(ab0_re                  ), |  | ||||||
| 			.ab0_im			(ab0_im                  ), |  | ||||||
| 			.bb0_re			(bb0_re                  ), |  | ||||||
| 			.bb0_im			(bb0_im                  ), |  | ||||||
| 			.a1_re			(a1_re                  ), |  | ||||||
| 			.a1_im			(a1_im                  ), |  | ||||||
| 			.ab1_re			(ab1_re                  ), |  | ||||||
| 			.ab1_im			(ab1_im                  ), |  | ||||||
|  			.bb1_re			(bb1_re                  ), |  | ||||||
| 			.bb1_im			(bb1_im                  ), |  | ||||||
| 			.a2_re			(a2_re                  ), |  | ||||||
| 			.a2_im			(a2_im                  ), |  | ||||||
| 			.ab2_re			(ab2_re                  ), |  | ||||||
| 			.ab2_im			(ab2_im                  ), |  | ||||||
|  			.bb2_re			(bb2_re                  ), |  | ||||||
| 			.bb2_im			(bb2_im                  ),  |  | ||||||
| 			.a3_re			(a3_re                  ), |  | ||||||
| 			.a3_im			(a3_im                  ), |  | ||||||
| 			.ab3_re			(ab3_re                  ), |  | ||||||
| 			.ab3_im			(ab3_im                  ), |  | ||||||
|  			.bb3_re			(bb3_re                  ), |  | ||||||
| 			.bb3_im			(bb3_im                  ),  |  | ||||||
| 			.a4_re			(a4_re                  ), |  | ||||||
| 			.a4_im			(a4_im                  ), |  | ||||||
| 			.ab4_re			(ab4_re                  ), |  | ||||||
| 			.ab4_im			(ab4_im                  ), |  | ||||||
|   			.bb4_re			(bb4_re                  ), |  | ||||||
| 			.bb4_im			(bb4_im                  ),  |  | ||||||
| 			.a5_re			(a5_re                  ), |  | ||||||
| 			.a5_im			(a5_im                  ), |  | ||||||
| 			.ab5_re			(ab5_re                  ), |  | ||||||
| 			.ab5_im			(ab5_im                  ),  |  | ||||||
|   			.bb5_re			(bb5_re                  ), |  | ||||||
| 			.bb5_im			(bb5_im                  ),                         |  | ||||||
| 		        .dout			(IIR_out                ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| wire signed	[15:0] dout_0; |  | ||||||
| wire signed	[15:0] dout_1; |  | ||||||
| wire signed	[15:0] dout_2; |  | ||||||
| wire signed	[15:0] dout_3; |  | ||||||
| wire signed	[15:0] dout_4; |  | ||||||
| wire signed	[15:0] dout_5; |  | ||||||
| wire signed	[15:0] dout_6; |  | ||||||
| wire signed	[15:0] dout_7; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| MeanIntp_8		inst_MeanIntp_8 |  | ||||||
| 		       ( |  | ||||||
| 			.clk				(clk		        ), |  | ||||||
| 			.rstn				(rstn			), |  | ||||||
| 			.en				(en			), |  | ||||||
| 			.intp_mode			(intp_mode		), |  | ||||||
|                         .din	                	(IIR_out		),            |  | ||||||
| 			.dout_0				(dout_0        	        ), |  | ||||||
| 			.dout_1				(dout_1          	), |  | ||||||
| 			.dout_2				(dout_2          	), |  | ||||||
| 			.dout_3				(dout_3           	), |  | ||||||
| 			.dout_4				(dout_4        	        ), |  | ||||||
| 			.dout_5				(dout_5          	), |  | ||||||
| 			.dout_6				(dout_6          	), |  | ||||||
| 			.dout_7				(dout_7           	) |  | ||||||
| 
 |  | ||||||
| 		        ); |  | ||||||
| 
 |  | ||||||
| reg signed [15:0]	doutf_0; |  | ||||||
| reg signed [15:0]	doutf_1;	 |  | ||||||
| reg signed [15:0]	doutf_2;	 |  | ||||||
| reg signed [15:0]	doutf_3; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
|     if(!rstn)  begin |  | ||||||
|     		doutf_0  <=  0; |  | ||||||
|     		doutf_1  <=  0;	 |  | ||||||
|     		doutf_2  <=  0;	 |  | ||||||
|     		doutf_3  <=  0;	 |  | ||||||
|     end |  | ||||||
|     else if(en)  begin |  | ||||||
|     		doutf_0  <=  dout_0; |  | ||||||
|     		doutf_1  <=  dout_1;	 |  | ||||||
|     		doutf_2  <=  dout_2;	 |  | ||||||
|     		doutf_3  <=  dout_3;	 |  | ||||||
|     end  |  | ||||||
|     else  begin |  | ||||||
|     		doutf_0  <=  dout_4; |  | ||||||
|     		doutf_1  <=  dout_5;	 |  | ||||||
|     		doutf_2  <=  dout_6;	 |  | ||||||
|     		doutf_3  <=  dout_7;	 |  | ||||||
|     end |  | ||||||
|      |  | ||||||
| assign    dout0  =  doutf_0;  |  | ||||||
| assign    dout1  =  doutf_1; |  | ||||||
| assign    dout2  =  doutf_2; |  | ||||||
| assign    dout3  =  doutf_3; |  | ||||||
| 
 |  | ||||||
| endmodule |  | ||||||
|  | @ -2,11 +2,11 @@ | ||||||
| clc;clear;close all | clc;clear;close all | ||||||
| % addpath("/data/work/thfu/TailCorr/script_m"); | % addpath("/data/work/thfu/TailCorr/script_m"); | ||||||
| data_source = 'matlab'; | data_source = 'matlab'; | ||||||
| file_path = "/home/thfu/work/TailCorr/sim/TailCorr_en/"; | file_path = "/home/thfu/work/TailCorr/sim/z_dsp/"; | ||||||
| rng('shuffle'); | rng('shuffle'); | ||||||
| 
 | 
 | ||||||
| if strcmp(data_source, 'matlab') | if strcmp(data_source, 'matlab') | ||||||
|     in = floor(cat(1,zeros(4,1),3000*randn(4*2500+4,1))); |     in = floor(cat(1,0,3000*randn(4*2579+4,1))); | ||||||
|     for i = 0:3 |     for i = 0:3 | ||||||
|         filename = strcat(file_path, "in", num2str(i), "_matlab.dat"); |         filename = strcat(file_path, "in", num2str(i), "_matlab.dat"); | ||||||
|         subset = in(i+1:4:end); |         subset = in(i+1:4:end); | ||||||
|  | @ -17,7 +17,7 @@ if strcmp(data_source, 'matlab') | ||||||
|     in = [in; zeros(6e4,1)]; |     in = [in; zeros(6e4,1)]; | ||||||
|     system('make all'); |     system('make all'); | ||||||
| elseif strcmp(data_source, 'verdi') | elseif strcmp(data_source, 'verdi') | ||||||
|     system('make all');     | %     system('make all');     | ||||||
|     in = []; |     in = []; | ||||||
|     for i = 0:3 |     for i = 0:3 | ||||||
|         filename = strcat(file_path, "in", num2str(i), ".dat"); |         filename = strcat(file_path, "in", num2str(i), ".dat"); | ||||||
|  | @ -33,14 +33,14 @@ end | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| cs_wave = []; | cs_wave = []; | ||||||
| for i = 0:7 | for i = 0:3 | ||||||
|     filename = strcat(file_path, "dout", num2str(i), ".dat"); |     filename = strcat(file_path, "dout", num2str(i), ".dat"); | ||||||
|     dout_data = importdata(filename); |     dout_data = importdata(filename); | ||||||
|     if isempty(cs_wave) |     if isempty(cs_wave) | ||||||
|         N = length(dout_data); |         N = length(dout_data); | ||||||
|         cs_wave = zeros(8*N, 1); |         cs_wave = zeros(4*N, 1); | ||||||
|     end |     end | ||||||
|     cs_wave(i+1:8:end) = dout_data; |     cs_wave(i+1:4:end) = dout_data; | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| A   =  [0.025 0.015*1 0.0002*1 0]; | A   =  [0.025 0.015*1 0.0002*1 0]; | ||||||
|  | @ -61,7 +61,7 @@ wave_float = in(2:end)+ sum(h_ideal,2); | ||||||
| wave_float_len = length(wave_float); | wave_float_len = length(wave_float); | ||||||
| wave_float_8 = interp1(1:wave_float_len,wave_float,1:1/8:(wave_float_len+1-1/8),'linear')'; | wave_float_8 = interp1(1:wave_float_len,wave_float,1:1/8:(wave_float_len+1-1/8),'linear')'; | ||||||
| 
 | 
 | ||||||
| [wave_float_A,cs_wave_A,Delay] = alignsignals(wave_float,cs_wave); | [cs_wave_A,wave_float_A,Delay] = alignsignals(cs_wave,wave_float,Method="xcorr"); | ||||||
| N = min(length(wave_float),length(cs_wave_A)); | N = min(length(wave_float),length(cs_wave_A)); | ||||||
| figure() | figure() | ||||||
| diff_plot(wave_float_A, cs_wave_A,'float','verdi',[0 N]); | diff_plot(wave_float_A, cs_wave_A,'float','verdi',[0 N]); | ||||||
|  | @ -77,6 +77,7 @@ signalAnalyzer(wave_float,wave_verdi,'SampleRate',1); | ||||||
| %% | %% | ||||||
| 
 | 
 | ||||||
| a_fix = round(a*2^31); | a_fix = round(a*2^31); | ||||||
|  | b_fix = round(b*2^31); | ||||||
| ab_fix  = round(a.*b*2^31); | ab_fix  = round(a.*b*2^31); | ||||||
| ab2_fix = round(a.*b.^2*2^31); | ab2_fix = round(a.*b.^2*2^31); | ||||||
| ab3_fix = round(a.*b.^3*2^31); | ab3_fix = round(a.*b.^3*2^31); | ||||||
|  | @ -91,6 +92,7 @@ a_hex = dec2hex(a_fix,8); | ||||||
| a_bin = dec2bin(a_fix,32); | a_bin = dec2bin(a_fix,32); | ||||||
| 
 | 
 | ||||||
| fprintf('a_fix is %d\n',a_fix); | fprintf('a_fix is %d\n',a_fix); | ||||||
|  | fprintf('b_fix is %d\n',b_fix); | ||||||
| fprintf('ab_fix is %d\n',ab_fix); | fprintf('ab_fix is %d\n',ab_fix); | ||||||
| fprintf('ab2_fix is %d\n', ab2_fix); | fprintf('ab2_fix is %d\n', ab2_fix); | ||||||
| fprintf('ab3_fix is %d\n', ab3_fix); | fprintf('ab3_fix is %d\n', ab3_fix); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | ifdef seed | ||||||
|  |     vcs_run_opts += +ntb_random_seed=${seed} | ||||||
|  | else | ||||||
|  |     vcs_run_opts += +ntb_random_seed_automatic | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | VCS  = vcs -full64  -sverilog  +lint=TFIPC-L +v2k -debug_access+all  -q -timescale=1ns/1ps +nospecify  -l compile.log   | ||||||
|  | SIMV = ./simv $(vcs_run_opts) -l sim.log +fsdb+delta | ||||||
|  | all:comp run | ||||||
|  | 
 | ||||||
|  | comp: | ||||||
|  | 	${VCS} -f files.f | ||||||
|  | 
 | ||||||
|  | run: | ||||||
|  | 	${SIMV} | ||||||
|  | 
 | ||||||
|  | dbg: | ||||||
|  | 	verdi -sv -f files.f -top TB -nologo -ssf TB.fsdb & | ||||||
|  | file:  | ||||||
|  | 	find ../ -name "*.*v" > files.f | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -rf DVE* simv* *log ucli.key verdiLog urgReport csrc novas.* *.fsdb *.dat *.daidir *.vdb *~ vfastLog | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | ../../rtl/z_dsp/mult_C.v | ||||||
|  | ../../rtl/z_dsp/FixRound.v | ||||||
|  | ../../rtl/z_dsp/TailCorr_top.v | ||||||
|  | ../../rtl/z_dsp/IIR_top.v | ||||||
|  | ../../rtl/z_dsp/diff_p.v | ||||||
|  | ../../rtl/z_dsp/s2p_2.v | ||||||
|  | ../../rtl/z_dsp/IIR_Filter_p8.v | ||||||
|  | ../../rtl/model/DW02_mult.v | ||||||
|  | 
 | ||||||
|  | tb_TailCorr_en.v | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,601 @@ | ||||||
|  | module TB(); | ||||||
|  | //+FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Company:  | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  File Name             :    tb_TailCorr_en.v | ||||||
|  | //  Department            :    HFNL | ||||||
|  | //  Author                :    thfu | ||||||
|  | //  Author's Tel          :      | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Relese History | ||||||
|  | //  Version     Date            Author          Description | ||||||
|  | //              2025-03-03      thfu | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Keywords            :        | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Parameter | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Purpose                 : | ||||||
|  | //                       | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Target Device:         | ||||||
|  | //  Tool versions:         | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Reuse Issues | ||||||
|  | //  Reset Strategy:  | ||||||
|  | //  Clock Domains:  | ||||||
|  | //  Critical Timing: | ||||||
|  | //  Asynchronous I/F: | ||||||
|  | //  Synthesizable (y/n):  | ||||||
|  | //  Other: | ||||||
|  | //-FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg    [1 :0]  source_mode; | ||||||
|  | 
 | ||||||
|  | initial | ||||||
|  | begin | ||||||
|  |      $fsdbDumpfile("TB.fsdb"); | ||||||
|  |      $fsdbDumpvars(0, TB); | ||||||
|  |      $fsdbDumpMDA(); | ||||||
|  | //     $srandom(417492050); | ||||||
|  |      source_mode  =  2'd3;  //1 for rect;2 for random;3 from matlab | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg             rstn; | ||||||
|  | reg	[31:0]   a_re0; | ||||||
|  | reg	[31:0]   a_im0; | ||||||
|  | reg	[31:0]   ab_re0; | ||||||
|  | reg	[31:0]   ab_im0; | ||||||
|  | reg	[31:0]   abb_re0; | ||||||
|  | reg	[31:0]   abb_im0; | ||||||
|  | reg	[31:0]   ab_pow3_re0; | ||||||
|  | reg	[31:0]   ab_pow3_im0; | ||||||
|  | reg	[31:0]   ab_pow4_re0; | ||||||
|  | reg	[31:0]   ab_pow4_im0; | ||||||
|  | reg	[31:0]   ab_pow5_re0; | ||||||
|  | reg	[31:0]   ab_pow5_im0; | ||||||
|  | reg	[31:0]   ab_pow6_re0; | ||||||
|  | reg	[31:0]   ab_pow6_im0; | ||||||
|  | reg	[31:0]   ab_pow7_re0; | ||||||
|  | reg	[31:0]   ab_pow7_im0; | ||||||
|  | reg	[31:0]   b_pow8_re0; | ||||||
|  | reg	[31:0]   b_pow8_im0; | ||||||
|  | reg	[31:0]   a_re1; | ||||||
|  | reg	[31:0]   a_im1; | ||||||
|  | reg	[31:0]   ab_re1; | ||||||
|  | reg	[31:0]   ab_im1; | ||||||
|  | reg	[31:0]   abb_re1; | ||||||
|  | reg	[31:0]   abb_im1; | ||||||
|  | reg	[31:0]   ab_pow3_re1; | ||||||
|  | reg	[31:0]   ab_pow3_im1; | ||||||
|  | reg	[31:0]   ab_pow4_re1; | ||||||
|  | reg	[31:0]   ab_pow4_im1; | ||||||
|  | reg	[31:0]   ab_pow5_re1; | ||||||
|  | reg	[31:0]   ab_pow5_im1; | ||||||
|  | reg	[31:0]   ab_pow6_re1; | ||||||
|  | reg	[31:0]   ab_pow6_im1; | ||||||
|  | reg	[31:0]   ab_pow7_re1; | ||||||
|  | reg	[31:0]   ab_pow7_im1; | ||||||
|  | reg	[31:0]   b_pow8_re1; | ||||||
|  | reg	[31:0]   b_pow8_im1; | ||||||
|  | reg	[31:0]   a_re2; | ||||||
|  | reg	[31:0]   a_im2; | ||||||
|  | reg	[31:0]   ab_re2; | ||||||
|  | reg	[31:0]   ab_im2; | ||||||
|  | reg	[31:0]   abb_re2; | ||||||
|  | reg	[31:0]   abb_im2; | ||||||
|  | reg	[31:0]   ab_pow3_re2; | ||||||
|  | reg	[31:0]   ab_pow3_im2; | ||||||
|  | reg	[31:0]   ab_pow4_re2; | ||||||
|  | reg	[31:0]   ab_pow4_im2; | ||||||
|  | reg	[31:0]   ab_pow5_re2; | ||||||
|  | reg	[31:0]   ab_pow5_im2; | ||||||
|  | reg	[31:0]   ab_pow6_re2; | ||||||
|  | reg	[31:0]   ab_pow6_im2; | ||||||
|  | reg	[31:0]   ab_pow7_re2; | ||||||
|  | reg	[31:0]   ab_pow7_im2; | ||||||
|  | reg	[31:0]   b_pow8_re2; | ||||||
|  | reg	[31:0]   b_pow8_im2; | ||||||
|  | reg	[31:0]   a_re3; | ||||||
|  | reg	[31:0]   a_im3; | ||||||
|  | reg	[31:0]   ab_re3; | ||||||
|  | reg	[31:0]   ab_im3; | ||||||
|  | reg	[31:0]   abb_re3; | ||||||
|  | reg	[31:0]   abb_im3; | ||||||
|  | reg	[31:0]   ab_pow3_re3; | ||||||
|  | reg	[31:0]   ab_pow3_im3; | ||||||
|  | reg	[31:0]   ab_pow4_re3; | ||||||
|  | reg	[31:0]   ab_pow4_im3; | ||||||
|  | reg	[31:0]   ab_pow5_re3; | ||||||
|  | reg	[31:0]   ab_pow5_im3; | ||||||
|  | reg	[31:0]   ab_pow6_re3; | ||||||
|  | reg	[31:0]   ab_pow6_im3; | ||||||
|  | reg	[31:0]   ab_pow7_re3; | ||||||
|  | reg	[31:0]   ab_pow7_im3; | ||||||
|  | reg	[31:0]   b_pow8_re3; | ||||||
|  | reg	[31:0]   b_pow8_im3; | ||||||
|  | reg	[31:0]   a_re4; | ||||||
|  | reg	[31:0]   a_im4; | ||||||
|  | reg	[31:0]   ab_re4; | ||||||
|  | reg	[31:0]   ab_im4; | ||||||
|  | reg	[31:0]   abb_re4; | ||||||
|  | reg	[31:0]   abb_im4; | ||||||
|  | reg	[31:0]   ab_pow3_re4; | ||||||
|  | reg	[31:0]   ab_pow3_im4; | ||||||
|  | reg	[31:0]   ab_pow4_re4; | ||||||
|  | reg	[31:0]   ab_pow4_im4; | ||||||
|  | reg	[31:0]   ab_pow5_re4; | ||||||
|  | reg	[31:0]   ab_pow5_im4; | ||||||
|  | reg	[31:0]   ab_pow6_re4; | ||||||
|  | reg	[31:0]   ab_pow6_im4; | ||||||
|  | reg	[31:0]   ab_pow7_re4; | ||||||
|  | reg	[31:0]   ab_pow7_im4; | ||||||
|  | reg	[31:0]   b_pow8_re4; | ||||||
|  | reg	[31:0]   b_pow8_im4; | ||||||
|  | reg	[31:0]   a_re5; | ||||||
|  | reg	[31:0]   a_im5; | ||||||
|  | reg	[31:0]   ab_re5; | ||||||
|  | reg	[31:0]   ab_im5; | ||||||
|  | reg	[31:0]   abb_re5; | ||||||
|  | reg	[31:0]   abb_im5; | ||||||
|  | reg	[31:0]   ab_pow3_re5; | ||||||
|  | reg	[31:0]   ab_pow3_im5; | ||||||
|  | reg	[31:0]   ab_pow4_re5; | ||||||
|  | reg	[31:0]   ab_pow4_im5; | ||||||
|  | reg	[31:0]   ab_pow5_re5; | ||||||
|  | reg	[31:0]   ab_pow5_im5; | ||||||
|  | reg	[31:0]   ab_pow6_re5; | ||||||
|  | reg	[31:0]   ab_pow6_im5; | ||||||
|  | reg	[31:0]   ab_pow7_re5; | ||||||
|  | reg	[31:0]   ab_pow7_im5; | ||||||
|  | reg	[31:0]   b_pow8_re5; | ||||||
|  | reg	[31:0]   b_pow8_im5; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg     [15:0]  din_rect; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg             clk; | ||||||
|  | 
 | ||||||
|  | initial  | ||||||
|  | begin | ||||||
|  |                 #0; | ||||||
|  |                 rstn    =         1'b0; | ||||||
|  |                 clk     =         1'b0; | ||||||
|  | 
 | ||||||
|  |                 a_re0   =        32'd55007237; | ||||||
|  |                 a_re1   =        32'd32690030; | ||||||
|  |                 a_re2   =        32'd429516; | ||||||
|  |                 a_re3   =        32'd0; | ||||||
|  |                 a_re4   =        32'd0; | ||||||
|  |                 a_re5   =        32'd0; | ||||||
|  |                 a_im0   =        32'd0; | ||||||
|  |                 a_im1   =        32'd0; | ||||||
|  |                 a_im2   =        32'd0; | ||||||
|  |                 a_im3   =        32'd0; | ||||||
|  |                 a_im4   =        32'd0; | ||||||
|  |                 a_im5   =        32'd0; | ||||||
|  |                 ab_re0   =        32'd54894517; | ||||||
|  |                 ab_re1   =        32'd32664510; | ||||||
|  |                 ab_re2   =        32'd429381  ;  | ||||||
|  |                 ab_re3   =        32'd0; | ||||||
|  |                 ab_re4   =        32'd0; | ||||||
|  |                 ab_re5   =        32'd0; | ||||||
|  |                 ab_im0   =        32'd0; | ||||||
|  |                 ab_im1   =        32'd0; | ||||||
|  |                 ab_im2   =        32'd0; | ||||||
|  |                 ab_im3   =        32'd0; | ||||||
|  |                 ab_im4   =        32'd0; | ||||||
|  |                 ab_im5   =        32'd0; | ||||||
|  |                 abb_re0   =        32'd54782028; | ||||||
|  |                 abb_re1   =        32'd32639011; | ||||||
|  |                 abb_re2   =        32'd429247  ; | ||||||
|  |                 abb_re3   =        32'd0; | ||||||
|  |                 abb_re4   =        32'd0; | ||||||
|  |                 abb_re5   =        32'd0; | ||||||
|  |                 abb_im0   =        32'd0; | ||||||
|  |                 abb_im1   =        32'd0; | ||||||
|  |                 abb_im2   =        32'd0; | ||||||
|  |                 abb_im3   =        32'd0; | ||||||
|  |                 abb_im4   =        32'd0; | ||||||
|  |                 abb_im5   =        32'd0; | ||||||
|  |                 ab_pow3_re0   =        32'd54669770; | ||||||
|  |                 ab_pow3_re1   =        32'd32613532; | ||||||
|  |                 ab_pow3_re2   =        32'd429113  ; | ||||||
|  |                 ab_pow3_re3   =        32'd0; | ||||||
|  |                 ab_pow3_re4   =        32'd0; | ||||||
|  |                 ab_pow3_re5   =        32'd0; | ||||||
|  |                 ab_pow3_im0   =        32'd0; | ||||||
|  |                 ab_pow3_im1   =        32'd0; | ||||||
|  |                 ab_pow3_im2   =        32'd0; | ||||||
|  |                 ab_pow3_im3   =        32'd0; | ||||||
|  |                 ab_pow3_im4   =        32'd0; | ||||||
|  |                 ab_pow3_im5   =        32'd0; | ||||||
|  |                 ab_pow4_re0   =        32'd54557742; | ||||||
|  |                 ab_pow4_re1   =        32'd32588072; | ||||||
|  |                 ab_pow4_re2   =        32'd428979  ; | ||||||
|  |                 ab_pow4_re3   =        32'd0; | ||||||
|  |                 ab_pow4_re4   =        32'd0; | ||||||
|  |                 ab_pow4_re5   =        32'd0; | ||||||
|  |                 ab_pow4_im0   =        32'd0; | ||||||
|  |                 ab_pow4_im1   =        32'd0; | ||||||
|  |                 ab_pow4_im2   =        32'd0; | ||||||
|  |                 ab_pow4_im3   =        32'd0; | ||||||
|  |                 ab_pow4_im4   =        32'd0; | ||||||
|  |                 ab_pow4_im5   =        32'd0; | ||||||
|  |                 ab_pow5_re0   =        32'd54445943; | ||||||
|  |                 ab_pow5_re1   =        32'd32562633; | ||||||
|  |                 ab_pow5_re2   =        32'd428845  ; | ||||||
|  |                 ab_pow5_re3   =        32'd0; | ||||||
|  |                 ab_pow5_re4   =        32'd0; | ||||||
|  |                 ab_pow5_re5   =        32'd0; | ||||||
|  |                 ab_pow5_im0   =        32'd0; | ||||||
|  |                 ab_pow5_im1   =        32'd0; | ||||||
|  |                 ab_pow5_im2   =        32'd0; | ||||||
|  |                 ab_pow5_im3   =        32'd0; | ||||||
|  |                 ab_pow5_im4   =        32'd0; | ||||||
|  |                 ab_pow5_im5   =        32'd0; | ||||||
|  |                 ab_pow6_re0   =        32'd54334374; | ||||||
|  |                 ab_pow6_re1   =        32'd32537213; | ||||||
|  |                 ab_pow6_re2   =        32'd428711  ; | ||||||
|  |                 ab_pow6_re3   =        32'd0; | ||||||
|  |                 ab_pow6_re4   =        32'd0; | ||||||
|  |                 ab_pow6_re5   =        32'd0; | ||||||
|  |                 ab_pow6_im0   =        32'd0; | ||||||
|  |                 ab_pow6_im1   =        32'd0; | ||||||
|  |                 ab_pow6_im2   =        32'd0; | ||||||
|  |                 ab_pow6_im3   =        32'd0; | ||||||
|  |                 ab_pow6_im4   =        32'd0; | ||||||
|  |                 ab_pow6_im5   =        32'd0; | ||||||
|  |                 ab_pow7_re0   =        32'd54223033; | ||||||
|  |                 ab_pow7_re1   =        32'd32511813; | ||||||
|  |                 ab_pow7_re2   =        32'd428577  ; | ||||||
|  |                 ab_pow7_re3   =        32'd0; | ||||||
|  |                 ab_pow7_re4   =        32'd0; | ||||||
|  |                 ab_pow7_re5   =        32'd0; | ||||||
|  |                 ab_pow7_im0   =        32'd0; | ||||||
|  |                 ab_pow7_im1   =        32'd0; | ||||||
|  |                 ab_pow7_im2   =        32'd0; | ||||||
|  |                 ab_pow7_im3   =        32'd0; | ||||||
|  |                 ab_pow7_im4   =        32'd0; | ||||||
|  |                 ab_pow7_im5   =        32'd0; | ||||||
|  | 
 | ||||||
|  |                 b_pow8_re0   =        32'd2112530470; | ||||||
|  |                 b_pow8_re1   =        32'd2134108939; | ||||||
|  |                 b_pow8_re2   =        32'd2142120573; | ||||||
|  |                 b_pow8_re3   =        32'd0; | ||||||
|  |                 b_pow8_re4   =        32'd0; | ||||||
|  |                 b_pow8_re5   =        32'd0; | ||||||
|  |                 b_pow8_im0   =        32'd0; | ||||||
|  |                 b_pow8_im1   =        32'd0; | ||||||
|  |                 b_pow8_im2   =        32'd0; | ||||||
|  |                 b_pow8_im3   =        32'd0; | ||||||
|  |                 b_pow8_im4   =        32'd0; | ||||||
|  |                 b_pow8_im5   =        32'd0; | ||||||
|  | 
 | ||||||
|  |                 din_rect  =      16'd0;  | ||||||
|  | 
 | ||||||
|  |                 #300; | ||||||
|  |                 rstn      =      1'b1; | ||||||
|  | 
 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | always #200 clk = ~clk; | ||||||
|  | 
 | ||||||
|  | reg     [21:0]  cnt; | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         cnt     <=      22'd0; | ||||||
|  |                 else | ||||||
|  |                         cnt     <=      cnt + 22'd1; | ||||||
|  | 
 | ||||||
|  | initial  | ||||||
|  | begin | ||||||
|  |         wait(cnt[16]==1'b1) | ||||||
|  |                         $finish(0); | ||||||
|  | end | ||||||
|  |                    | ||||||
|  | wire vldi; | ||||||
|  | assign vldi = cnt >= 100 && cnt <=10100; | ||||||
|  | 
 | ||||||
|  | reg vldi_r1; | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         vldi_r1        <=      1'b0; | ||||||
|  |                 else  | ||||||
|  |                     begin | ||||||
|  |                         vldi_r1        <=      vldi; | ||||||
|  |                     end | ||||||
|  | 
 | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         din_rect        <=      22'd0; | ||||||
|  |                 else if(vldi) | ||||||
|  |                     begin | ||||||
|  |                         din_rect        <=      16'd30000; | ||||||
|  |                     end | ||||||
|  |                 else  | ||||||
|  |                     begin | ||||||
|  |                         din_rect        <=      16'd0; | ||||||
|  |                     end | ||||||
|  | 
 | ||||||
|  | reg  signed  [15:0]  random_in [0:3]; | ||||||
|  | 
 | ||||||
|  | always @(posedge clk or negedge rstn) begin | ||||||
|  |     if (!rstn) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= 16'd0; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     else if (vldi) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= $urandom % 30000; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     else begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= 16'd0; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | integer file[3:0]; | ||||||
|  | reg [15:0] data[3:0]; | ||||||
|  | integer status[3:0]; | ||||||
|  | reg [15:0] reg_array[3:0]; | ||||||
|  |    | ||||||
|  | initial begin | ||||||
|  |     string filenames[0:3] = {"in0_matlab.dat", "in1_matlab.dat", "in2_matlab.dat", "in3_matlab.dat"};     | ||||||
|  |     for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |         file[i] = $fopen(filenames[i], "r"); | ||||||
|  |         if (file[i] == 0) begin | ||||||
|  |             $display("Failed to open file: %s", filenames[i]); | ||||||
|  |             $finish; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg  [0:0] vldi_matlab [3:0]; | ||||||
|  |     always @(posedge clk or negedge rstn) begin | ||||||
|  |         if (!rstn) begin | ||||||
|  |             for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                     reg_array[i] <= 16'd0; | ||||||
|  |                     vldi_matlab[i] <= 16'd0; | ||||||
|  |             end             | ||||||
|  |         end else  begin | ||||||
|  |             for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                 status[i] = $fscanf(file[i], "%d\n", data[i]); | ||||||
|  |                 vldi_matlab[i] <= 16'd0; | ||||||
|  |                 if (status[i] == 1  ) begin | ||||||
|  |                     reg_array[i] <= data[i]; | ||||||
|  |                     vldi_matlab[i] <= 1'b1; | ||||||
|  |                 end | ||||||
|  |                 else begin | ||||||
|  |                     reg_array[i] <= 16'd0; | ||||||
|  |                     vldi_matlab[i] <= 1'b0; | ||||||
|  |                 end | ||||||
|  |                 | ||||||
|  |             end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | reg signed [15:0] iir_in[3:0]; | ||||||
|  | 
 | ||||||
|  | always @(*) | ||||||
|  |         case(source_mode) | ||||||
|  |                2'b01 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = din_rect; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |                2'b10 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = random_in[i]; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |                2'b11 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = reg_array[i]; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |         endcase | ||||||
|  | 
 | ||||||
|  | wire    [1:0]  intp_mode; | ||||||
|  | assign intp_mode = 2'b10; | ||||||
|  | 
 | ||||||
|  | wire    [1:0]  dac_mode_sel; | ||||||
|  | assign dac_mode_sel = 2'b00; | ||||||
|  | 
 | ||||||
|  | wire    tc_bypass; | ||||||
|  | wire    vldo; | ||||||
|  | 
 | ||||||
|  | assign    tc_bypass  =  1'b0; | ||||||
|  | 
 | ||||||
|  | reg  en; | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         en <= 0; | ||||||
|  |     end | ||||||
|  |     else begin | ||||||
|  |         en <= ~en; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | wire signed [15:0] dout_p[7:0]; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | TailCorr_top           inst_TailCorr_top | ||||||
|  |                ( | ||||||
|  |                         .clk                    (clk                  ), | ||||||
|  |                         .en                    (en                  ), | ||||||
|  |                         .rstn                   (rstn                   ), | ||||||
|  |                         .vldi                   (vldi_matlab[0]             ), | ||||||
|  | //                        .dac_mode_sel           (dac_mode_sel           ), | ||||||
|  | //                        .intp_mode              (intp_mode              ), | ||||||
|  |                        .din0                     (iir_in[0]), | ||||||
|  |                        .din1                     (iir_in[1]), | ||||||
|  |                        .din2                     (iir_in[2]), | ||||||
|  |                        .din3                     (iir_in[3]), | ||||||
|  |                        .a_re0                      (a_re0), | ||||||
|  |                        .a_im0                      (a_im0), | ||||||
|  |                        .ab_re0                      (ab_re0), | ||||||
|  |                        .ab_im0                      (ab_im0), | ||||||
|  |                        .abb_re0                      (abb_re0), | ||||||
|  |                        .abb_im0                      (abb_im0), | ||||||
|  |                        .ab_pow3_re0                      (ab_pow3_re0), | ||||||
|  |                        .ab_pow3_im0                      (ab_pow3_im0), | ||||||
|  |                        .ab_pow4_re0                      (ab_pow4_re0), | ||||||
|  |                        .ab_pow4_im0                      (ab_pow4_im0), | ||||||
|  |                        .ab_pow5_re0                      (ab_pow5_re0), | ||||||
|  |                        .ab_pow5_im0                      (ab_pow5_im0), | ||||||
|  |                        .ab_pow6_re0                      (ab_pow6_re0), | ||||||
|  |                        .ab_pow6_im0                      (ab_pow6_im0), | ||||||
|  |                        .ab_pow7_re0                      (ab_pow7_re0), | ||||||
|  |                        .ab_pow7_im0                      (ab_pow7_im0), | ||||||
|  |                        .b_pow8_re0                      (b_pow8_re0), | ||||||
|  |                        .b_pow8_im0                      (b_pow8_im0), | ||||||
|  |                        .a_re1                      (a_re1), | ||||||
|  |                        .a_im1                      (a_im1), | ||||||
|  |                        .ab_re1                      (ab_re1), | ||||||
|  |                        .ab_im1                      (ab_im1), | ||||||
|  |                        .abb_re1                      (abb_re1), | ||||||
|  |                        .abb_im1                      (abb_im1), | ||||||
|  |                        .ab_pow3_re1                      (ab_pow3_re1), | ||||||
|  |                        .ab_pow3_im1                      (ab_pow3_im1), | ||||||
|  |                        .ab_pow4_re1                      (ab_pow4_re1), | ||||||
|  |                        .ab_pow4_im1                      (ab_pow4_im1), | ||||||
|  |                        .ab_pow5_re1                      (ab_pow5_re1), | ||||||
|  |                        .ab_pow5_im1                      (ab_pow5_im1), | ||||||
|  |                        .ab_pow6_re1                      (ab_pow6_re1), | ||||||
|  |                        .ab_pow6_im1                      (ab_pow6_im1), | ||||||
|  |                        .ab_pow7_re1                      (ab_pow7_re1), | ||||||
|  |                        .ab_pow7_im1                      (ab_pow7_im1), | ||||||
|  |                        .b_pow8_re1                      (b_pow8_re1), | ||||||
|  |                        .b_pow8_im1                      (b_pow8_im1), | ||||||
|  |                        .a_re2                      (a_re2), | ||||||
|  |                        .a_im2                      (a_im2), | ||||||
|  |                        .ab_re2                      (ab_re2), | ||||||
|  |                        .ab_im2                      (ab_im2), | ||||||
|  |                        .abb_re2                      (abb_re2), | ||||||
|  |                        .abb_im2                      (abb_im2), | ||||||
|  |                        .ab_pow3_re2                      (ab_pow3_re2), | ||||||
|  |                        .ab_pow3_im2                      (ab_pow3_im2), | ||||||
|  |                        .ab_pow4_re2                      (ab_pow4_re2), | ||||||
|  |                        .ab_pow4_im2                      (ab_pow4_im2), | ||||||
|  |                        .ab_pow5_re2                      (ab_pow5_re2), | ||||||
|  |                        .ab_pow5_im2                      (ab_pow5_im2), | ||||||
|  |                        .ab_pow6_re2                      (ab_pow6_re2), | ||||||
|  |                        .ab_pow6_im2                      (ab_pow6_im2), | ||||||
|  |                        .ab_pow7_re2                      (ab_pow7_re2), | ||||||
|  |                        .ab_pow7_im2                      (ab_pow7_im2), | ||||||
|  |                        .b_pow8_re2                      (b_pow8_re2), | ||||||
|  |                        .b_pow8_im2                      (b_pow8_im2), | ||||||
|  |                        .a_re3                      (a_re3), | ||||||
|  |                        .a_im3                      (a_im3), | ||||||
|  |                        .ab_re3                      (ab_re3), | ||||||
|  |                        .ab_im3                      (ab_im3), | ||||||
|  |                        .abb_re3                      (abb_re3), | ||||||
|  |                        .abb_im3                      (abb_im3), | ||||||
|  |                        .ab_pow3_re3                      (ab_pow3_re3), | ||||||
|  |                        .ab_pow3_im3                      (ab_pow3_im3), | ||||||
|  |                        .ab_pow4_re3                      (ab_pow4_re3), | ||||||
|  |                        .ab_pow4_im3                      (ab_pow4_im3), | ||||||
|  |                        .ab_pow5_re3                      (ab_pow5_re3), | ||||||
|  |                        .ab_pow5_im3                      (ab_pow5_im3), | ||||||
|  |                        .ab_pow6_re3                      (ab_pow6_re3), | ||||||
|  |                        .ab_pow6_im3                      (ab_pow6_im3), | ||||||
|  |                        .ab_pow7_re3                      (ab_pow7_re3), | ||||||
|  |                        .ab_pow7_im3                      (ab_pow7_im3), | ||||||
|  |                        .b_pow8_re3                      (b_pow8_re3), | ||||||
|  |                        .b_pow8_im3                      (b_pow8_im3), | ||||||
|  |                        .a_re4                      (a_re4), | ||||||
|  |                        .a_im4                      (a_im4), | ||||||
|  |                        .ab_re4                      (ab_re4), | ||||||
|  |                        .ab_im4                      (ab_im4), | ||||||
|  |                        .abb_re4                      (abb_re4), | ||||||
|  |                        .abb_im4                      (abb_im4), | ||||||
|  |                        .ab_pow3_re4                      (ab_pow3_re4), | ||||||
|  |                        .ab_pow3_im4                      (ab_pow3_im4), | ||||||
|  |                        .ab_pow4_re4                      (ab_pow4_re4), | ||||||
|  |                        .ab_pow4_im4                      (ab_pow4_im4), | ||||||
|  |                        .ab_pow5_re4                      (ab_pow5_re4), | ||||||
|  |                        .ab_pow5_im4                      (ab_pow5_im4), | ||||||
|  |                        .ab_pow6_re4                      (ab_pow6_re4), | ||||||
|  |                        .ab_pow6_im4                      (ab_pow6_im4), | ||||||
|  |                        .ab_pow7_re4                      (ab_pow7_re4), | ||||||
|  |                        .ab_pow7_im4                      (ab_pow7_im4), | ||||||
|  |                        .b_pow8_re4                      (b_pow8_re4), | ||||||
|  |                        .b_pow8_im4                      (b_pow8_im4), | ||||||
|  |                        .a_re5                      (a_re5), | ||||||
|  |                        .a_im5                      (a_im5), | ||||||
|  |                        .ab_re5                      (ab_re5), | ||||||
|  |                        .ab_im5                      (ab_im5), | ||||||
|  |                        .abb_re5                      (abb_re5), | ||||||
|  |                        .abb_im5                      (abb_im5), | ||||||
|  |                        .ab_pow3_re5                      (ab_pow3_re5), | ||||||
|  |                        .ab_pow3_im5                      (ab_pow3_im5), | ||||||
|  |                        .ab_pow4_re5                      (ab_pow4_re5), | ||||||
|  |                        .ab_pow4_im5                      (ab_pow4_im5), | ||||||
|  |                        .ab_pow5_re5                      (ab_pow5_re5), | ||||||
|  |                        .ab_pow5_im5                      (ab_pow5_im5), | ||||||
|  |                        .ab_pow6_re5                      (ab_pow6_re5), | ||||||
|  |                        .ab_pow6_im5                      (ab_pow6_im5), | ||||||
|  |                        .ab_pow7_re5                      (ab_pow7_re5), | ||||||
|  |                        .ab_pow7_im5                      (ab_pow7_im5), | ||||||
|  |                        .b_pow8_re5                       (b_pow8_re5), | ||||||
|  |                        .b_pow8_im5                       (b_pow8_im5), | ||||||
|  |                         .dout_p0                  (dout_p[0]               ), | ||||||
|  |                         .dout_p1                  (dout_p[1]               ), | ||||||
|  |                         .dout_p2                  (dout_p[2]               ), | ||||||
|  |                         .dout_p3                  (dout_p[3]               ), | ||||||
|  |                         .dout_p4                  (dout_p[4]               ), | ||||||
|  |                         .dout_p5                  (dout_p[5]               ), | ||||||
|  |                         .dout_p6                  (dout_p[6]               ), | ||||||
|  |                         .dout_p7                  (dout_p[7]               ), | ||||||
|  | 
 | ||||||
|  |                         .vldo                   (vldo                       ) | ||||||
|  | 
 | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | integer signed In_fid[0:3]; | ||||||
|  | integer signed dout_fid[0:7]; | ||||||
|  | string filenames_in[0:3] = {"in0.dat", "in1.dat", "in2.dat", "in3.dat"}; | ||||||
|  | string filenames_dout[0:7] = {"dout0.dat", "dout1.dat", "dout2.dat", "dout3.dat", "dout4.dat", "dout5.dat", "dout6.dat", "dout7.dat"}; | ||||||
|  | 
 | ||||||
|  | initial begin | ||||||
|  |     #0; | ||||||
|  |     for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |         In_fid[i] = $fopen(filenames_in[i]); | ||||||
|  |     end | ||||||
|  |     for (int i = 0; i < 8; i = i + 1) begin | ||||||
|  |         dout_fid[i] = $fopen(filenames_dout[i]); | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | always @(posedge clk) begin | ||||||
|  |     if (cnt >= 90) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             $fwrite(In_fid[i], "%d\n", $signed(iir_in[i])); | ||||||
|  |         end | ||||||
|  | //        for (int i = 0; i < 8; i = i + 1) begin | ||||||
|  | //            $fclose(In_fid[i]); | ||||||
|  | //        end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | always @(posedge clk) begin | ||||||
|  |     if (vldo && en) begin | ||||||
|  |         for (int i = 0; i < 8; i = i + 1) begin | ||||||
|  |             $fwrite(dout_fid[i], "%d\n", $signed(dout_p[i])); | ||||||
|  |         end | ||||||
|  | //        for (int i = 0; i < 8; i = i + 1) begin | ||||||
|  | //            $fclose(dout_fid[i]); | ||||||
|  | //        end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | endmodule  | ||||||
|  |   | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | ifdef seed | ||||||
|  |     vcs_run_opts += +ntb_random_seed=${seed} | ||||||
|  | else | ||||||
|  |     vcs_run_opts += +ntb_random_seed_automatic | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | VCS  = vcs -full64  -sverilog  +lint=TFIPC-L +v2k -debug_access+all  -q -timescale=1ns/1ps +nospecify  -l compile.log   | ||||||
|  | SIMV = ./simv $(vcs_run_opts) -l sim.log +fsdb+delta | ||||||
|  | all:comp run | ||||||
|  | 
 | ||||||
|  | comp: | ||||||
|  | 	${VCS} -f files.f | ||||||
|  | 
 | ||||||
|  | run: | ||||||
|  | 	${SIMV} | ||||||
|  | 
 | ||||||
|  | dbg: | ||||||
|  | 	verdi -sv -f files.f -top TB -nologo -ssf TB.fsdb & | ||||||
|  | file:  | ||||||
|  | 	find ../ -name "*.*v" > files.f | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -rf DVE* simv* *log ucli.key verdiLog urgReport csrc novas.* *.fsdb *.dat *.daidir *.vdb *~ vfastLog | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | ../../rtl/z_dsp/CoefGen.v | ||||||
|  | ../../rtl/z_dsp/FixRound.v | ||||||
|  | ../../rtl/z_dsp/mult_C.v | ||||||
|  | ../../rtl/model/DW02_mult.v | ||||||
|  | tb_CoefGen.v | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,162 @@ | ||||||
|  | 
 | ||||||
|  | `timescale 1 ns/1 ns | ||||||
|  | 
 | ||||||
|  | module TB(); | ||||||
|  | initial | ||||||
|  | begin | ||||||
|  |      $fsdbDumpfile("TB.fsdb"); | ||||||
|  |      $fsdbDumpvars(0, TB); | ||||||
|  |      $fsdbDumpMDA(); | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg clk  ; | ||||||
|  | reg en; | ||||||
|  | reg [5:0] vldi; | ||||||
|  | reg rst_n; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg signed [31:0] a_re  [5:0]; | ||||||
|  | reg signed [31:0] a_im  [5:0]; | ||||||
|  | reg signed [31:0] b_re  [5:0]; | ||||||
|  | reg signed [31:0] b_im  [5:0]; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | wire signed [31:0] ao_re         [5:0]; | ||||||
|  | wire signed [31:0] ao_im         [5:0]; | ||||||
|  | wire signed [31:0] ab_re         [5:0]; | ||||||
|  | wire signed [31:0] ab_im         [5:0]; | ||||||
|  | wire signed [31:0] abb_re        [5:0]; | ||||||
|  | wire signed [31:0] abb_im        [5:0]; | ||||||
|  | wire signed [31:0] ab_pow3_re    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow3_im    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow4_re    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow4_im    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow5_re    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow5_im    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow6_re    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow6_im    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow7_re    [5:0]; | ||||||
|  | wire signed [31:0] ab_pow7_im    [5:0]; | ||||||
|  | wire signed [31:0] b_pow8_re     [5:0]; | ||||||
|  | wire signed [31:0] b_pow8_im     [5:0]; | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | parameter CYCLE    = 20; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | parameter RST_TIME = 3 ; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | CoefGen uut( | ||||||
|  |     .clk               (clk          ),  | ||||||
|  |     .rstn              (rst_n        ), | ||||||
|  |     .vldi              (vldi         ), | ||||||
|  |     .a_re              (a_re         ), | ||||||
|  |     .a_im              (a_im         ), | ||||||
|  |     .b_re              (b_re         ), | ||||||
|  |     .b_im              (b_im         ), | ||||||
|  |     .ao_re             (ao_re       ), | ||||||
|  |     .ao_im             (ao_im       ), | ||||||
|  |     .ab_re             (ab_re        ), | ||||||
|  |     .ab_im             (ab_im        ), | ||||||
|  |     .abb_re            (abb_re       ), | ||||||
|  |     .abb_im            (abb_im       ), | ||||||
|  |     .ab_pow3_re        (ab_pow3_re   ), | ||||||
|  |     .ab_pow3_im        (ab_pow3_im   ), | ||||||
|  |     .ab_pow4_re        (ab_pow4_re   ), | ||||||
|  |     .ab_pow4_im        (ab_pow4_im   ), | ||||||
|  |     .ab_pow5_re        (ab_pow5_re   ), | ||||||
|  |     .ab_pow5_im        (ab_pow5_im   ), | ||||||
|  |     .ab_pow6_re        (ab_pow6_re   ), | ||||||
|  |     .ab_pow6_im        (ab_pow6_im   ), | ||||||
|  |     .ab_pow7_re        (ab_pow7_re   ), | ||||||
|  |     .ab_pow7_im        (ab_pow7_im   ), | ||||||
|  |     .b_pow8_re         (b_pow8_re    ), | ||||||
|  |     .b_pow8_im         (b_pow8_im    ) | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  | initial begin | ||||||
|  |     clk = 0; | ||||||
|  |     forever | ||||||
|  |     #(CYCLE/2) | ||||||
|  |     clk=~clk; | ||||||
|  | end | ||||||
|  | reg [15:0]  st1; | ||||||
|  | reg [15:0]  st2; | ||||||
|  | reg [15:0]  st3; | ||||||
|  | reg [15:0]  st4; | ||||||
|  |              | ||||||
|  | initial begin | ||||||
|  |     rst_n = 0; | ||||||
|  |     vldi <= 0; | ||||||
|  |     st1 = 100; | ||||||
|  |     st2 = 101; | ||||||
|  |     st3 = 110; | ||||||
|  |     st4 = 111; | ||||||
|  |     repeat(3) @(posedge clk); | ||||||
|  |         vldi[0] <= 1;  | ||||||
|  |         rst_n = 1; | ||||||
|  |         a_re[0]     <=      55007237; | ||||||
|  |         a_im[0]     <=      0; | ||||||
|  |         b_re[0]     <=      2143083068; | ||||||
|  |         b_im[0]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi[0] <= 0;  | ||||||
|  |         a_re[0]     <=      0; | ||||||
|  |         a_im[0]     <=      0; | ||||||
|  |         b_re[0]     <=      0; | ||||||
|  |         b_im[0]     <=      0; | ||||||
|  |     repeat(8) @(posedge clk); | ||||||
|  |         vldi[1] <= 1;  | ||||||
|  |         rst_n = 1; | ||||||
|  |         a_re[1]     <=      32690030; | ||||||
|  |         a_im[1]     <=      0; | ||||||
|  |         b_re[1]     <=      2145807236; | ||||||
|  |         b_im[1]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi[1] <= 0;  | ||||||
|  |         a_re[1]     <=      0; | ||||||
|  |         a_im[1]     <=      0; | ||||||
|  |         b_re[1]     <=      0; | ||||||
|  |         b_im[1]     <=      0; | ||||||
|  |     repeat(8) @(posedge clk); | ||||||
|  |         vldi[2] <= 1;  | ||||||
|  |         rst_n = 1; | ||||||
|  |         a_re[2]     <=      429516; | ||||||
|  |         a_im[2]     <=      0; | ||||||
|  |         b_re[2]     <=      2146812530; | ||||||
|  |         b_im[2]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi[2] <= 0;  | ||||||
|  |         a_re[2]     <=      0; | ||||||
|  |         a_im[2]     <=      0; | ||||||
|  |         b_re[2]     <=      0; | ||||||
|  |         b_im[2]     <=      0; | ||||||
|  | 
 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  | reg     [21:0]  cnt; | ||||||
|  | always@(posedge clk or negedge rst_n) | ||||||
|  |                 if(!rst_n) begin | ||||||
|  |                         cnt     <=      22'd0; | ||||||
|  |                 end | ||||||
|  |                 else  begin | ||||||
|  |                         cnt     <=      cnt + 22'd1; | ||||||
|  |                 end | ||||||
|  | 
 | ||||||
|  | initial  | ||||||
|  | begin | ||||||
|  |         wait(cnt[16]==1'b1) | ||||||
|  |                         $finish(0); | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | ifdef seed | ||||||
|  |     vcs_run_opts += +ntb_random_seed=${seed} | ||||||
|  | else | ||||||
|  |     vcs_run_opts += +ntb_random_seed_automatic | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | VCS  = vcs -full64  -sverilog  +lint=TFIPC-L +v2k -debug_access+all  -q -timescale=1ns/1ps +nospecify  -l compile.log   | ||||||
|  | SIMV = ./simv $(vcs_run_opts) -l sim.log +fsdb+delta | ||||||
|  | all:comp run | ||||||
|  | 
 | ||||||
|  | comp: | ||||||
|  | 	${VCS} -f files.f | ||||||
|  | 
 | ||||||
|  | run: | ||||||
|  | 	${SIMV} | ||||||
|  | 
 | ||||||
|  | dbg: | ||||||
|  | 	verdi -sv -f files.f -top TB -nologo -ssf TB.fsdb & | ||||||
|  | file:  | ||||||
|  | 	find ../ -name "*.*v" > files.f | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -rf DVE* simv* *log ucli.key verdiLog urgReport csrc novas.* *.fsdb *.dat *.daidir *.vdb *~ vfastLog | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | ../../rtl/z_dsp/z_dsp.v | ||||||
|  | ../../rtl/z_dsp/TailCorr_top.v | ||||||
|  | ../../rtl/z_dsp/IIR_top.v | ||||||
|  | ../../rtl/z_dsp/IIR_Filter_p8.v | ||||||
|  | ../../rtl/z_dsp/CoefGen.v | ||||||
|  | ../../rtl/z_dsp/diff_p.v | ||||||
|  | ../../rtl/z_dsp/s2p_2.v | ||||||
|  | ../../rtl/z_dsp/FixRound.v | ||||||
|  | ../../rtl/z_dsp/mult_C.v | ||||||
|  | ../../rtl/model/DW02_mult.v | ||||||
|  | tb_z_dsp.v | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,308 @@ | ||||||
|  | `timescale 1 ns/1 ns | ||||||
|  | module TB(); | ||||||
|  | //+FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Company:  | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  File Name             :    tb_TailCorr_en.v | ||||||
|  | //  Department            :    HFNL | ||||||
|  | //  Author                :    thfu | ||||||
|  | //  Author's Tel          :      | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Relese History | ||||||
|  | //  Version     Date            Author          Description | ||||||
|  | //              2025-03-03      thfu | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Keywords            :        | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Parameter | ||||||
|  | // | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Purpose                 : | ||||||
|  | //                       | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Target Device:         | ||||||
|  | //  Tool versions:         | ||||||
|  | //----------------------------------------------------------------------------------------------------------------- | ||||||
|  | //  Reuse Issues | ||||||
|  | //  Reset Strategy:  | ||||||
|  | //  Clock Domains:  | ||||||
|  | //  Critical Timing: | ||||||
|  | //  Asynchronous I/F: | ||||||
|  | //  Synthesizable (y/n):  | ||||||
|  | //  Other: | ||||||
|  | //-FHDR-------------------------------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg    [1 :0]  source_mode; | ||||||
|  | 
 | ||||||
|  | initial | ||||||
|  | begin | ||||||
|  |      $fsdbDumpfile("TB.fsdb"); | ||||||
|  |      $fsdbDumpvars(0, TB); | ||||||
|  |      $fsdbDumpMDA(); | ||||||
|  | //     $srandom(417492050); | ||||||
|  |      source_mode  =  2'd3;  //1 for rect;2 for random;3 from matlab | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg             rstn; | ||||||
|  | 
 | ||||||
|  | reg     [15:0]  din_rect; | ||||||
|  | reg     [ 5:0]  vldi_coef; | ||||||
|  | reg             vldi_data; | ||||||
|  | 
 | ||||||
|  | parameter CYCLE    = 20; | ||||||
|  | 
 | ||||||
|  | reg             clk; | ||||||
|  | initial begin | ||||||
|  |     clk = 0; | ||||||
|  |     forever | ||||||
|  |     #(CYCLE/2) | ||||||
|  |     clk=~clk; | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | reg signed [31:0] a_re  [5:0]; | ||||||
|  | reg signed [31:0] a_im  [5:0]; | ||||||
|  | reg signed [31:0] b_re  [5:0]; | ||||||
|  | reg signed [31:0] b_im  [5:0]; | ||||||
|  | 
 | ||||||
|  | initial begin | ||||||
|  |     rstn = 0; | ||||||
|  |     vldi_data <= 0; | ||||||
|  |     vldi_coef <= 0; | ||||||
|  |     din_rect  =      16'd0;  | ||||||
|  |     repeat(3) @(posedge clk); | ||||||
|  |         vldi_coef[0] <= 1;  | ||||||
|  |         rstn = 1; | ||||||
|  |         a_re[0]     <=      55007237; | ||||||
|  |         a_im[0]     <=      0; | ||||||
|  |         b_re[0]     <=      2143083068; | ||||||
|  |         b_im[0]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi_coef[0] <= 0;  | ||||||
|  |         a_re[0]     <=      0; | ||||||
|  |         a_im[0]     <=      0; | ||||||
|  |         b_re[0]     <=      0; | ||||||
|  |         b_im[0]     <=      0; | ||||||
|  |     repeat(8) @(posedge clk); | ||||||
|  |         vldi_coef[1] <= 1;  | ||||||
|  |         rstn = 1; | ||||||
|  |         a_re[1]     <=      32690030; | ||||||
|  |         a_im[1]     <=      0; | ||||||
|  |         b_re[1]     <=      2145807236; | ||||||
|  |         b_im[1]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi_coef[1] <= 0;  | ||||||
|  |         a_re[1]     <=      0; | ||||||
|  |         a_im[1]     <=      0; | ||||||
|  |         b_re[1]     <=      0; | ||||||
|  |         b_im[1]     <=      0; | ||||||
|  |     repeat(8) @(posedge clk); | ||||||
|  |         vldi_coef[2] <= 1;  | ||||||
|  |         rstn = 1; | ||||||
|  |         a_re[2]     <=      429516; | ||||||
|  |         a_im[2]     <=      0; | ||||||
|  |         b_re[2]     <=      2146812530; | ||||||
|  |         b_im[2]     <=      0; | ||||||
|  |     @(posedge clk); | ||||||
|  |         vldi_coef[2] <= 0;  | ||||||
|  |         a_re[2]     <=      0; | ||||||
|  |         a_im[2]     <=      0; | ||||||
|  |         b_re[2]     <=      0; | ||||||
|  |         b_im[2]     <=      0; | ||||||
|  |     repeat(108) @(posedge clk); | ||||||
|  |         vldi_data <= 1;  | ||||||
|  | //    repeat(10000) @(posedge clk); | ||||||
|  | //        vldi_data <= 0;  | ||||||
|  | 
 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | reg     [21:0]  cnt; | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         cnt     <=      22'd0; | ||||||
|  |                 else | ||||||
|  |                         cnt     <=      cnt + 22'd1; | ||||||
|  | 
 | ||||||
|  | initial  | ||||||
|  | begin | ||||||
|  |         wait(cnt[16]==1'b1) | ||||||
|  |                         $finish(0); | ||||||
|  | end | ||||||
|  |                    | ||||||
|  | reg vldi_data_r1; | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         vldi_data_r1        <=      1'b0; | ||||||
|  |                 else  | ||||||
|  |                     begin | ||||||
|  |                         vldi_data_r1        <=      vldi_data; | ||||||
|  |                     end | ||||||
|  | 
 | ||||||
|  | always@(posedge clk or negedge rstn) | ||||||
|  |                 if(!rstn) | ||||||
|  |                         din_rect        <=      22'd0; | ||||||
|  |                 else if(vldi_data) | ||||||
|  |                     begin | ||||||
|  |                         din_rect        <=      16'd30000; | ||||||
|  |                     end | ||||||
|  |                 else  | ||||||
|  |                     begin | ||||||
|  |                         din_rect        <=      16'd0; | ||||||
|  |                     end | ||||||
|  | 
 | ||||||
|  | reg  signed  [15:0]  random_in [0:3]; | ||||||
|  | 
 | ||||||
|  | always @(posedge clk or negedge rstn) begin | ||||||
|  |     if (!rstn) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= 16'd0; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     else if (vldi_data) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= $urandom % 30000; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     else begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             random_in[i] <= 16'd0; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | integer file[3:0]; | ||||||
|  | reg [15:0] data[3:0]; | ||||||
|  | integer status[3:0]; | ||||||
|  | reg [15:0] reg_array[3:0]; | ||||||
|  |    | ||||||
|  | initial begin | ||||||
|  |     string filenames[0:3] = {"in0_matlab.dat", "in1_matlab.dat", "in2_matlab.dat", "in3_matlab.dat"};     | ||||||
|  |     for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |         file[i] = $fopen(filenames[i], "r"); | ||||||
|  |         if (file[i] == 0) begin | ||||||
|  |             $display("Failed to open file: %s", filenames[i]); | ||||||
|  |             $finish; | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  |     always @(posedge clk or negedge rstn) begin | ||||||
|  |         if (!rstn) begin | ||||||
|  |             for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                     reg_array[i] <= 16'd0; | ||||||
|  |             end             | ||||||
|  |         end else  if(vldi_data) begin | ||||||
|  |             for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                 status[i] = $fscanf(file[i], "%d\n", data[i]); | ||||||
|  |                 if (status[i] == 1  ) begin | ||||||
|  |                     reg_array[i] <= data[i]; | ||||||
|  |                 end | ||||||
|  |                 else begin | ||||||
|  |                     reg_array[i] <= 16'd0; | ||||||
|  |                     vldi_data <= 0;                     | ||||||
|  |                 end                | ||||||
|  |             end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | reg signed [15:0] iir_in[3:0]; | ||||||
|  | 
 | ||||||
|  | always @(*) | ||||||
|  |         case(source_mode) | ||||||
|  |                2'b01 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = din_rect; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |                2'b10 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = random_in[i]; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |                2'b11 :   begin  | ||||||
|  |                                  for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |                                          iir_in[i] = reg_array[i]; | ||||||
|  |                                  end             | ||||||
|  |                           end | ||||||
|  |         endcase | ||||||
|  | 
 | ||||||
|  | wire    [1:0]  intp_mode; | ||||||
|  | assign intp_mode = 2'b10; | ||||||
|  | 
 | ||||||
|  | wire    [1:0]  dac_mode_sel; | ||||||
|  | assign dac_mode_sel = 2'b00; | ||||||
|  | 
 | ||||||
|  | wire    tc_bypass; | ||||||
|  | wire    vldo; | ||||||
|  | 
 | ||||||
|  | assign    tc_bypass  =  1'b0; | ||||||
|  | 
 | ||||||
|  | reg  en; | ||||||
|  | always  @(posedge clk or negedge rstn)begin | ||||||
|  |     if(rstn==1'b0)begin | ||||||
|  |         en <= 1; | ||||||
|  |     end | ||||||
|  |     else begin | ||||||
|  |         en <= ~en; | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | wire signed [15:0] dout_p[7:0]; | ||||||
|  | 
 | ||||||
|  | z_dsp inst_z_dsp( | ||||||
|  |             .rstn       (rstn  ),  | ||||||
|  |             .clk       (clk  ), | ||||||
|  |             .en       (en  ), | ||||||
|  |             .tc_bypass       (tc_bypass  ), | ||||||
|  |             .vldi_coef        (vldi_coef   ), | ||||||
|  |             .vldi_data        (vldi_data_r1   ),  | ||||||
|  |             .intp_mode       (intp_mode  ), | ||||||
|  |             .dac_mode_sel       (dac_mode_sel  ), | ||||||
|  |             .din0       (iir_in[0]  ), | ||||||
|  |             .din1       (iir_in[1]  ), | ||||||
|  |             .din2       (iir_in[2]  ),  | ||||||
|  |             .din3       (iir_in[3]  ), | ||||||
|  |             .a_re       (a_re   ), | ||||||
|  |             .a_im       (a_im   ), | ||||||
|  |             .b_re       (b_re   ), | ||||||
|  |             .b_im       (b_im   ),  | ||||||
|  |             .dout0      (dout_p[0]  ), | ||||||
|  |             .dout1      (dout_p[1]  ), | ||||||
|  |             .dout2      (dout_p[2]  ), | ||||||
|  |             .dout3      (dout_p[3]  ), | ||||||
|  |             .vldo        ( vldo  ) | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | integer signed In_fid[0:3]; | ||||||
|  | integer signed dout_fid[0:7]; | ||||||
|  | string filenames_in[0:3] = {"in0.dat", "in1.dat", "in2.dat", "in3.dat"}; | ||||||
|  | string filenames_dout[0:7] = {"dout0.dat", "dout1.dat", "dout2.dat", "dout3.dat", "dout4.dat", "dout5.dat", "dout6.dat", "dout7.dat"}; | ||||||
|  | 
 | ||||||
|  | initial begin | ||||||
|  |     #0; | ||||||
|  |     for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |         In_fid[i] = $fopen(filenames_in[i]); | ||||||
|  |     end | ||||||
|  |     for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |         dout_fid[i] = $fopen(filenames_dout[i]); | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | always @(posedge clk) begin | ||||||
|  |     if (vldi_data_r1) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             $fwrite(In_fid[i], "%d\n", $signed(iir_in[i])); | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | always @(posedge clk) begin | ||||||
|  |     if (vldo) begin | ||||||
|  |         for (int i = 0; i < 4; i = i + 1) begin | ||||||
|  |             $fwrite(dout_fid[i], "%d\n", $signed(dout_p[i])); | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | endmodule  | ||||||
|  |   | ||||||
							
								
								
									
										141
									
								
								tb/clk_gen.v
								
								
								
								
							
							
						
						
									
										141
									
								
								tb/clk_gen.v
								
								
								
								
							|  | @ -1,141 +0,0 @@ | ||||||
| module clk_gen( |  | ||||||
| 			input		rstn, |  | ||||||
| 			input           clk, |  | ||||||
| 			output		clk_div16_0, |  | ||||||
| 			output		clk_div16_1, |  | ||||||
| 			output		clk_div16_2, |  | ||||||
| 			output		clk_div16_3, |  | ||||||
| 			output		clk_div16_4, |  | ||||||
| 			output		clk_div16_5, |  | ||||||
| 			output		clk_div16_6, |  | ||||||
| 			output		clk_div16_7, |  | ||||||
| 			output		clk_div16_8, |  | ||||||
| 			output		clk_div16_9, |  | ||||||
| 			output		clk_div16_a, |  | ||||||
| 			output		clk_div16_b, |  | ||||||
| 			output		clk_div16_c, |  | ||||||
| 			output		clk_div16_d, |  | ||||||
| 			output		clk_div16_e, |  | ||||||
| 			output		clk_div16_f, |  | ||||||
| 
 |  | ||||||
|                         output          clk_h, |  | ||||||
|                         output          clk_l |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| reg  [3:0]      cnt_ini; |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
|         if(!rstn) |  | ||||||
|                 cnt_ini <=      4'd0; |  | ||||||
|         else if(cnt_ini <=   4'd7) |  | ||||||
|                 cnt_ini <=      cnt_ini + 4'd1; |  | ||||||
|         else |  | ||||||
|                 cnt_ini <=      cnt_ini; |  | ||||||
| wire    div_en; |  | ||||||
| assign  div_en  =       (cnt_ini ==4'd8)? 1'b1:1'b0; |  | ||||||
| 
 |  | ||||||
| reg  [3:0]      cnt_0; |  | ||||||
| reg  [3:0]      cnt_1; |  | ||||||
| reg  [3:0]      cnt_2; |  | ||||||
| reg  [3:0]      cnt_3; |  | ||||||
| reg  [3:0]      cnt_4; |  | ||||||
| reg  [3:0]      cnt_5; |  | ||||||
| reg  [3:0]      cnt_6; |  | ||||||
| reg  [3:0]      cnt_7; |  | ||||||
| reg  [3:0]      cnt_8; |  | ||||||
| reg  [3:0]      cnt_9; |  | ||||||
| reg  [3:0]      cnt_a; |  | ||||||
| reg  [3:0]      cnt_b; |  | ||||||
| reg  [3:0]      cnt_c; |  | ||||||
| reg  [3:0]      cnt_d; |  | ||||||
| reg  [3:0]      cnt_e; |  | ||||||
| reg  [3:0]      cnt_f; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
|         if(!rstn) begin |  | ||||||
|                 cnt_0    <=       4'h0; |  | ||||||
|                 cnt_1    <=       4'h1; |  | ||||||
|                 cnt_2    <=       4'h2; |  | ||||||
|                 cnt_3    <=       4'h3; |  | ||||||
|                 cnt_4    <=       4'h4; |  | ||||||
|                 cnt_5    <=       4'h5; |  | ||||||
|                 cnt_6    <=       4'h6; |  | ||||||
|                 cnt_7    <=       4'h7; |  | ||||||
|                 cnt_8    <=       4'h8; |  | ||||||
|                 cnt_9    <=       4'h9; |  | ||||||
|                 cnt_a    <=       4'ha; |  | ||||||
|                 cnt_b    <=       4'hb; |  | ||||||
|                 cnt_c    <=       4'hc; |  | ||||||
|                 cnt_d    <=       4'hd; |  | ||||||
|                 cnt_e    <=       4'he; |  | ||||||
|                 cnt_f    <=       4'hf; |  | ||||||
|          end |  | ||||||
|          else if(div_en) begin |  | ||||||
|         	cnt_0	<=	cnt_0     +       4'd1; |  | ||||||
|         	cnt_1	<=	cnt_1     +       4'd1; |  | ||||||
|         	cnt_2	<=	cnt_2     +       4'd1; |  | ||||||
|         	cnt_3	<=	cnt_3     +       4'd1; |  | ||||||
|         	cnt_4	<=	cnt_4     +       4'd1; |  | ||||||
|         	cnt_5	<=	cnt_5     +       4'd1; |  | ||||||
|         	cnt_6	<=	cnt_6     +       4'd1; |  | ||||||
|         	cnt_7	<=	cnt_7     +       4'd1; |  | ||||||
|         	cnt_8	<=	cnt_8     +       4'd1; |  | ||||||
|         	cnt_9	<=	cnt_9     +       4'd1; |  | ||||||
|         	cnt_a	<=	cnt_a     +       4'd1; |  | ||||||
|         	cnt_b	<=	cnt_b     +       4'd1; |  | ||||||
|         	cnt_c	<=	cnt_c     +       4'd1; |  | ||||||
|         	cnt_d	<=	cnt_d     +       4'd1; |  | ||||||
|         	cnt_e	<=	cnt_e     +       4'd1; |  | ||||||
|         	cnt_f	<=	cnt_f     +       4'd1; |  | ||||||
|          end        |  | ||||||
|          else begin |  | ||||||
|         	cnt_0	<=	cnt_0; |  | ||||||
|         	cnt_1	<=	cnt_1; |  | ||||||
|         	cnt_2	<=	cnt_2; |  | ||||||
|         	cnt_3	<=	cnt_3; |  | ||||||
|         	cnt_4	<=	cnt_4; |  | ||||||
|         	cnt_5	<=	cnt_5; |  | ||||||
|         	cnt_6	<=	cnt_6; |  | ||||||
|         	cnt_7	<=	cnt_7; |  | ||||||
|         	cnt_8	<=	cnt_8; |  | ||||||
|         	cnt_9	<=	cnt_9; |  | ||||||
|         	cnt_a	<=	cnt_a; |  | ||||||
|         	cnt_b	<=	cnt_b; |  | ||||||
|         	cnt_c	<=	cnt_c; |  | ||||||
|         	cnt_d	<=	cnt_d; |  | ||||||
|         	cnt_e	<=	cnt_e; |  | ||||||
|         	cnt_f	<=	cnt_f; |  | ||||||
| 
 |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
| assign  clk_div16_0     =       cnt_0[3]; |  | ||||||
| assign  clk_div16_1     =       cnt_1[3]; |  | ||||||
| assign  clk_div16_2     =       cnt_2[3]; |  | ||||||
| assign  clk_div16_3     =       cnt_3[3]; |  | ||||||
| assign  clk_div16_4     =       cnt_4[3]; |  | ||||||
| assign  clk_div16_5     =       cnt_5[3]; |  | ||||||
| assign  clk_div16_6     =       cnt_6[3]; |  | ||||||
| assign  clk_div16_7     =       cnt_7[3]; |  | ||||||
| assign  clk_div16_8     =       cnt_8[3]; |  | ||||||
| assign  clk_div16_9     =       cnt_9[3]; |  | ||||||
| assign  clk_div16_a     =       cnt_a[3]; |  | ||||||
| assign  clk_div16_b     =       cnt_b[3]; |  | ||||||
| assign  clk_div16_c     =       cnt_c[3]; |  | ||||||
| assign  clk_div16_d     =       cnt_d[3]; |  | ||||||
| assign  clk_div16_e     =       cnt_e[3]; |  | ||||||
| assign  clk_div16_f     =       cnt_f[3]; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg   [3:0]  cnt_div16; |  | ||||||
| always@(posedge clk_div16_0 or negedge rstn) |  | ||||||
|            if(!rstn) |  | ||||||
|                    cnt_div16    <=      4'd0; |  | ||||||
|            else if(div_en) |  | ||||||
|                    cnt_div16    <=      cnt_div16       +       4'd1; |  | ||||||
|            else |  | ||||||
|                    cnt_div16    <=      cnt_div16; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| assign  clk_h   =       clk_div16_0; |  | ||||||
| assign  clk_l   =       cnt_div16[0]; |  | ||||||
| 
 |  | ||||||
| endmodule |  | ||||||
							
								
								
									
										61
									
								
								tb/tb_diff.v
								
								
								
								
							
							
						
						
									
										61
									
								
								tb/tb_diff.v
								
								
								
								
							|  | @ -1,61 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg		clk; |  | ||||||
| reg		rstn; |  | ||||||
| reg	[15:0]	din_in;	 |  | ||||||
| reg	[21:0]	cnt; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 
 |  | ||||||
| 		#0; |  | ||||||
| 		rstn	= 1'b0; |  | ||||||
| 		clk =  1'b0; |  | ||||||
| 		din_in  =	1'b0;  |  | ||||||
| 
 |  | ||||||
| 		#3400; |  | ||||||
| 		rstn	=	 1'b1; |  | ||||||
| 		din_in  =	 1'b1;  |  | ||||||
| 
 |  | ||||||
| 		#6400; |  | ||||||
| 		rstn	=	 1'b1; |  | ||||||
| 		din_in  =	 1'b0;  |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			cnt	<=	22'd0; |  | ||||||
| 		else |  | ||||||
| 			cnt	<=	cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 	wait(cnt[16]==1'b1) |  | ||||||
| 			$finish(0); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg	[47:0]		fcw; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff		inst_diff |  | ||||||
|                ( |  | ||||||
| 		        .clk			(clk	                ), |  | ||||||
| 		        .rstn			(rstn			), |  | ||||||
| 		        .din			(din_in                 ),                         |  | ||||||
| 		        .dout			(dout_p0                ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| endmodule                                                                        	 |  | ||||||
|                                                                                  	 |  | ||||||
|                                                                                  	 |  | ||||||
| 
 |  | ||||||
							
								
								
									
										152
									
								
								tb/tb_iir.v.bak
								
								
								
								
							
							
						
						
									
										152
									
								
								tb/tb_iir.v.bak
								
								
								
								
							|  | @ -1,152 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg		clk; |  | ||||||
| reg		rstn; |  | ||||||
| reg	[15:0]	din_im;	 |  | ||||||
| 
 |  | ||||||
| reg   	[31:0] 	a; |  | ||||||
| reg   	[31:0]	b; |  | ||||||
| reg   	[31:0] 	c; |  | ||||||
| reg   	[31:0] 	d; |  | ||||||
| 
 |  | ||||||
| reg	[47:0]		fcw; |  | ||||||
| 
 |  | ||||||
| reg	[21:0]	cnt; |  | ||||||
| reg	[15:0]  din_imp; |  | ||||||
| reg	[15:0]  din_rect; |  | ||||||
| reg	[15:0]  din_cos; |  | ||||||
| reg	        en; |  | ||||||
| reg    [15 :0]  diff_in; |  | ||||||
| 
 |  | ||||||
| wire    [1 :0]  source_mode; |  | ||||||
| wire    [15 :0] iir_in; |  | ||||||
| wire    [15:0]  cos; |  | ||||||
| wire    [15:0]  sin; |  | ||||||
| wire	[15:0]	dout_p0; |  | ||||||
| 
 |  | ||||||
| initial	 |  | ||||||
| begin |  | ||||||
| 		#0; |  | ||||||
| 		rstn	= 	  1'b0; |  | ||||||
| 		clk 	=  	  1'b0; |  | ||||||
| 
 |  | ||||||
| 		din_im  =	 16'd0; |  | ||||||
| 
 |  | ||||||
| 		a	=	 32'd13740916; |  | ||||||
| 		b	= 	 32'd0; |  | ||||||
| 		c	=	-32'd1047703; |  | ||||||
| 		d	= 	 32'd0; |  | ||||||
| 
 |  | ||||||
| 		fcw	=	48'h0840_0000_0000; |  | ||||||
| 
 |  | ||||||
| 		din_imp   =	 16'd0;  |  | ||||||
| 		din_rect  =	 16'd0;  |  | ||||||
| 		din_cos   =	 16'd0;  |  | ||||||
| 
 |  | ||||||
| 		#3600; |  | ||||||
| 		en        =	 16'd0;  |  | ||||||
| 		#3800; |  | ||||||
| 		rstn	  =	 1'b1; |  | ||||||
| 		din_imp   =	 16'd32767;  |  | ||||||
| 		din_rect  =	 16'd32767;  |  | ||||||
| 		#400; |  | ||||||
| 		din_imp   =	 16'd0;  |  | ||||||
| 		#12000; |  | ||||||
| 		din_rect  =	 16'd0;  |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			cnt	<=	22'd0; |  | ||||||
| 		else |  | ||||||
| 			cnt	<=	cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| initial	 |  | ||||||
| begin |  | ||||||
| 	wait(cnt[16]==1'b1) |  | ||||||
| 			$finish(0); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			begin |  | ||||||
| 				din_cos	  <=	16'd0; |  | ||||||
| 				diff_in	  <=	16'd0; |  | ||||||
| 			end |  | ||||||
| 		else |  | ||||||
| 			din_cos	  <=	cos; |  | ||||||
| 
 |  | ||||||
| assign source_mode = 2'b01; |  | ||||||
| 
 |  | ||||||
| always @(*) |  | ||||||
| 
 |  | ||||||
| 	case(source_mode) |  | ||||||
| 		2'b00 :	  diff_in = din_imp; |  | ||||||
| 		2'b01 :	  diff_in = din_rect; |  | ||||||
| 		2'b10 :	  diff_in = din_cos; |  | ||||||
| 	endcase |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO	inst_nco_0( |  | ||||||
|                  		.clk				(clk  		), |  | ||||||
|                  		.rstn				(rstn		), |  | ||||||
|                  		.phase_manual_clr		(1'b0		), |  | ||||||
|                  		.phase_auto_clr			(1'b0		), |  | ||||||
|                  		.fcw				(fcw		), |  | ||||||
|                  		.pha				(16'd0		), |  | ||||||
|                  		.cos	                        (cos            ), |  | ||||||
|                  		.sin	                        (sin            ) |  | ||||||
|                 	); |  | ||||||
| 
 |  | ||||||
| diff	inst_diff |  | ||||||
|                ( |  | ||||||
| 		        .clk			(clk	                ), |  | ||||||
| 		        .rstn			(rstn			), |  | ||||||
| 		 	.din			(diff_in	        ), |  | ||||||
| 			.dout			(iir_in			) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| IIR_Filter	inst1_IIR_Filter |  | ||||||
|                ( |  | ||||||
| 		        .clk			(clk	                ), |  | ||||||
| 		        .rstn			(rstn			), |  | ||||||
| 		        .din_re			(iir_in                 ), |  | ||||||
| 		        .din_im			(din_im                 ), |  | ||||||
| 			.a_re			(a 			),    |  | ||||||
| 			.a_im			(b			),                |  | ||||||
| 			.b_re			(c    			),                |  | ||||||
| 			.b_im			(d		 	),                            |  | ||||||
| 		        .dout			(dout_p0                ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| integer	signed In_fid; |  | ||||||
| integer	signed Out_fid; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
| 	#0; |  | ||||||
| 	In_fid	=	$fopen("./in"); |  | ||||||
| 	Out_fid	=	$fopen("./out"); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk) |  | ||||||
| 
 |  | ||||||
| 		$fwrite(In_fid,"%d\n",{{~{iir_in[15]}},iir_in[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk) |  | ||||||
| 
 |  | ||||||
| 		$fwrite(Out_fid,"%d\n",{{~{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
| 
 |  | ||||||
| endmodule                                                                        	 |  | ||||||
|                                                                                  	 |  | ||||||
|                                                                                  	 |  | ||||||
| 
 |  | ||||||
|  | @ -1,98 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg		clk; |  | ||||||
| reg		rstn; |  | ||||||
| reg		en; |  | ||||||
| reg	[15:0]	din_in;	 |  | ||||||
| reg	[21:0]	cnt; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 
 |  | ||||||
| 		#0; |  | ||||||
| 		rstn	= 1'b0; |  | ||||||
| 		clk =  1'b0; |  | ||||||
| 		din_in  =	1'b0;  |  | ||||||
| 		en  =	1'b0;  |  | ||||||
| 		#300; |  | ||||||
| 		rstn	=	 1'b1; |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			cnt	<=	22'd0; |  | ||||||
| 		else |  | ||||||
| 			cnt	<=	cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 	wait(cnt[17]==1'b1) |  | ||||||
| 			$finish(0); |  | ||||||
| end |  | ||||||
| always@(posedge clk or negedge rstn)  |  | ||||||
| begin |  | ||||||
| 		if(cnt >= 2047 )  |  | ||||||
| 			   begin |  | ||||||
| 				en    <= 	1'b1; |  | ||||||
| 			    end |  | ||||||
| 		else |  | ||||||
| 			    begin |  | ||||||
| 				en    <= 	1'b0; |  | ||||||
| 			     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[47:0]		fcw; |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 		fcw	=	48'h0840_0000_0000; |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| wire   [15:0]     cos; |  | ||||||
| wire   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO	inst_nco_0( |  | ||||||
|                  		.clk				(clk  		), |  | ||||||
|                  		.rstn				(rstn		), |  | ||||||
|                  		.phase_manual_clr		(1'b0		), |  | ||||||
|                  		.phase_auto_clr			(1'b0		), |  | ||||||
|                  		.fcw				(fcw		), |  | ||||||
|                  		.pha				(16'd0		), |  | ||||||
|                  		.cos	                        (cos            ), |  | ||||||
|                  		.sin	                        (sin            ) |  | ||||||
|                 	); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	[15:0]	dout_p0; |  | ||||||
| wire	[15:0]	dout_p1; |  | ||||||
| 
 |  | ||||||
| MeanIntp2		inst_MeanIntp2 |  | ||||||
| 		       ( |  | ||||||
| 				.clk			(clk	                ), |  | ||||||
| 				.rstn			(rstn			), |  | ||||||
| 				.en			(en			), |  | ||||||
|                                 .din	                (cos & {16{en}}     ),            |  | ||||||
| 				.dout_m			(dout_p0                ), |  | ||||||
| 				.dout_o			(dout_p1                ) |  | ||||||
| 		        ); |  | ||||||
| 
 |  | ||||||
| reg	[15:0]	cs_wave; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk)	cs_wave	 	= dout_p1; |  | ||||||
| always@(negedge clk)	cs_wave	 	= dout_p0; |  | ||||||
| 
 |  | ||||||
| endmodule                                                                        	 |  | ||||||
|                                                                                  	 |  | ||||||
|                                                                                  	 |  | ||||||
| 
 |  | ||||||
							
								
								
									
										142
									
								
								tb/tb_mean4.v
								
								
								
								
							
							
						
						
									
										142
									
								
								tb/tb_mean4.v
								
								
								
								
							|  | @ -1,142 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg		clk; |  | ||||||
| reg		rstn; |  | ||||||
| reg		en; |  | ||||||
| reg	[21:0]	cnt; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 
 |  | ||||||
| 		#0; |  | ||||||
| 		rstn	= 1'b0; |  | ||||||
| 		clk =  1'b0; |  | ||||||
| 		en  =	1'b0;  |  | ||||||
| 		#300; |  | ||||||
| 		rstn	=	 1'b1; |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| wire		clk_div16_0; |  | ||||||
| wire		clk_div16_1; |  | ||||||
| wire		clk_div16_2; |  | ||||||
| wire		clk_div16_3; |  | ||||||
| wire		clk_div16_4; |  | ||||||
| wire		clk_div16_5; |  | ||||||
| wire		clk_div16_6; |  | ||||||
| wire		clk_div16_7; |  | ||||||
| wire		clk_div16_8; |  | ||||||
| wire		clk_div16_9; |  | ||||||
| wire		clk_div16_a; |  | ||||||
| wire		clk_div16_b; |  | ||||||
| wire		clk_div16_c; |  | ||||||
| wire		clk_div16_d; |  | ||||||
| wire		clk_div16_e; |  | ||||||
| wire		clk_div16_f; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| clk_gen inst_clk_gen( |  | ||||||
| 			                .rstn			(rstn				), |  | ||||||
| 			                .clk			(clk				), |  | ||||||
| 			                .clk_div16_0		(clk_div16_0			), |  | ||||||
| 			                .clk_div16_1		(clk_div16_1			), |  | ||||||
| 			                .clk_div16_2		(clk_div16_2			), |  | ||||||
| 			                .clk_div16_3		(clk_div16_3			), |  | ||||||
| 			                .clk_div16_4		(clk_div16_4			), |  | ||||||
| 			                .clk_div16_5		(clk_div16_5			), |  | ||||||
| 			                .clk_div16_6		(clk_div16_6			), |  | ||||||
| 			                .clk_div16_7		(clk_div16_7			), |  | ||||||
| 			                .clk_div16_8		(clk_div16_8			), |  | ||||||
| 			                .clk_div16_9		(clk_div16_9			), |  | ||||||
| 			                .clk_div16_a		(clk_div16_a			), |  | ||||||
| 			                .clk_div16_b		(clk_div16_b			), |  | ||||||
| 			                .clk_div16_c		(clk_div16_c			), |  | ||||||
| 			                .clk_div16_d		(clk_div16_d			), |  | ||||||
| 			                .clk_div16_e		(clk_div16_e			), |  | ||||||
| 			                .clk_div16_f            (clk_div16_f                    ), |  | ||||||
|                                         .clk_h                  (clk_h                          ), |  | ||||||
|                                         .clk_l                  (clk_l                          ) |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			cnt	<=	22'd0; |  | ||||||
| 		else |  | ||||||
| 			cnt	<=	cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 	wait(cnt[17]==1'b1) |  | ||||||
| 			$finish(0); |  | ||||||
| end |  | ||||||
| always@(posedge clk_div16_f or negedge rstn)  |  | ||||||
| begin |  | ||||||
| 		if(cnt >= 2047 )  |  | ||||||
| 			   begin |  | ||||||
| 				en    <= 	1'b1; |  | ||||||
| 			    end |  | ||||||
| 		else |  | ||||||
| 			    begin |  | ||||||
| 				en    <= 	1'b0; |  | ||||||
| 			     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[47:0]		fcw; |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 		fcw	=	48'h0840_0000_0000; |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| wire   [15:0]     cos; |  | ||||||
| wire   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO	inst_nco_0( |  | ||||||
|                  		.clk				(clk_div16_f  		), |  | ||||||
|                  		.rstn				(rstn		), |  | ||||||
|                  		.phase_manual_clr		(1'b0		), |  | ||||||
|                  		.phase_auto_clr			(1'b0		), |  | ||||||
|                  		.fcw				(fcw		), |  | ||||||
|                  		.pha				(16'd0		), |  | ||||||
|                  		.cos	                        (cos            ), |  | ||||||
|                  		.sin	                        (sin            ) |  | ||||||
|                 	); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	[15:0]	dout_p0; |  | ||||||
| wire	[15:0]	dout_p1; |  | ||||||
| wire	[15:0]	dout_p2; |  | ||||||
| wire	[15:0]	dout_p3; |  | ||||||
| 
 |  | ||||||
| MeanIntp4		inst_MeanIntp4 |  | ||||||
| 		       ( |  | ||||||
| 				.clk				(clk_div16_f	        ), |  | ||||||
| 				.rstn				(rstn			), |  | ||||||
| 				.en				(en			), |  | ||||||
|                                 .din	                	(cos & {16{en}}         ),            |  | ||||||
| 				.dout4_0			(dout_p0                ), |  | ||||||
| 				.dout4_1			(dout_p1                ), |  | ||||||
| 				.dout4_2			(dout_p2                ), |  | ||||||
| 				.dout4_3			(dout_p3                ) |  | ||||||
| 		        ); |  | ||||||
| 
 |  | ||||||
| reg	[15:0]	cs_wave; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e)	cs_wave	 	= dout_p0; |  | ||||||
| always@(posedge clk_div16_a)	cs_wave	 	= dout_p1; |  | ||||||
| always@(posedge clk_div16_6)	cs_wave	 	= dout_p2; |  | ||||||
| always@(posedge clk_div16_2)	cs_wave	 	= dout_p3; |  | ||||||
| 
 |  | ||||||
| endmodule                                                                        	 |  | ||||||
|                                                                                  	 |  | ||||||
|                                                                                  	 |  | ||||||
| 
 |  | ||||||
|  | @ -1,164 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg		clk; |  | ||||||
| reg		rstn; |  | ||||||
| reg		en; |  | ||||||
| reg	[21:0]	cnt; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 
 |  | ||||||
| 		#0; |  | ||||||
| 		rstn	= 1'b0; |  | ||||||
| 		clk =  1'b0; |  | ||||||
| 		en  =	1'b0;  |  | ||||||
| 		#300; |  | ||||||
| 		rstn	=	 1'b1; |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| wire		clk_div16_0; |  | ||||||
| wire		clk_div16_1; |  | ||||||
| wire		clk_div16_2; |  | ||||||
| wire		clk_div16_3; |  | ||||||
| wire		clk_div16_4; |  | ||||||
| wire		clk_div16_5; |  | ||||||
| wire		clk_div16_6; |  | ||||||
| wire		clk_div16_7; |  | ||||||
| wire		clk_div16_8; |  | ||||||
| wire		clk_div16_9; |  | ||||||
| wire		clk_div16_a; |  | ||||||
| wire		clk_div16_b; |  | ||||||
| wire		clk_div16_c; |  | ||||||
| wire		clk_div16_d; |  | ||||||
| wire		clk_div16_e; |  | ||||||
| wire		clk_div16_f; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| clk_gen inst_clk_gen( |  | ||||||
| 			                .rstn			(rstn				), |  | ||||||
| 			                .clk			(clk				), |  | ||||||
| 			                .clk_div16_0		(clk_div16_0			), |  | ||||||
| 			                .clk_div16_1		(clk_div16_1			), |  | ||||||
| 			                .clk_div16_2		(clk_div16_2			), |  | ||||||
| 			                .clk_div16_3		(clk_div16_3			), |  | ||||||
| 			                .clk_div16_4		(clk_div16_4			), |  | ||||||
| 			                .clk_div16_5		(clk_div16_5			), |  | ||||||
| 			                .clk_div16_6		(clk_div16_6			), |  | ||||||
| 			                .clk_div16_7		(clk_div16_7			), |  | ||||||
| 			                .clk_div16_8		(clk_div16_8			), |  | ||||||
| 			                .clk_div16_9		(clk_div16_9			), |  | ||||||
| 			                .clk_div16_a		(clk_div16_a			), |  | ||||||
| 			                .clk_div16_b		(clk_div16_b			), |  | ||||||
| 			                .clk_div16_c		(clk_div16_c			), |  | ||||||
| 			                .clk_div16_d		(clk_div16_d			), |  | ||||||
| 			                .clk_div16_e		(clk_div16_e			), |  | ||||||
| 			                .clk_div16_f            (clk_div16_f                    ), |  | ||||||
|                                         .clk_h                  (clk_h                          ), |  | ||||||
|                                         .clk_l                  (clk_l                          ) |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
| 		if(!rstn) |  | ||||||
| 			cnt	<=	22'd0; |  | ||||||
| 		else |  | ||||||
| 			cnt	<=	cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 	wait(cnt[17]==1'b1) |  | ||||||
| 			$finish(0); |  | ||||||
| end |  | ||||||
| always@(posedge clk_div16_f or negedge rstn)  |  | ||||||
| begin |  | ||||||
| 		if(cnt >= 2047 )  |  | ||||||
| 			   begin |  | ||||||
| 				en    <= 	1'b1; |  | ||||||
| 			    end |  | ||||||
| 		else |  | ||||||
| 			    begin |  | ||||||
| 				en    <= 	1'b0; |  | ||||||
| 			     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg	[47:0]		fcw; |  | ||||||
| 
 |  | ||||||
| initial	begin |  | ||||||
| 		fcw	=	48'h0840_0000_0000; |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| wire   [15:0]     cos; |  | ||||||
| wire   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO	inst_nco_0( |  | ||||||
|                  		.clk				(clk_div16_f  		), |  | ||||||
|                  		.rstn				(rstn		), |  | ||||||
|                  		.phase_manual_clr		(1'b0		), |  | ||||||
|                  		.phase_auto_clr			(1'b0		), |  | ||||||
|                  		.fcw				(fcw		), |  | ||||||
|                  		.pha				(16'd0		), |  | ||||||
|                  		.cos	                        (cos            ), |  | ||||||
|                  		.sin	                        (sin            ) |  | ||||||
|                 	); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire	[15:0]	dout_p0; |  | ||||||
| wire	[15:0]	dout_p1; |  | ||||||
| wire	[15:0]	dout_p2; |  | ||||||
| wire	[15:0]	dout_p3; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  intp_mode; |  | ||||||
| 
 |  | ||||||
| assign intp_mode = 2'b10; |  | ||||||
| 
 |  | ||||||
| MeanIntp4_top		inst_MeanIntp4 |  | ||||||
| 		       ( |  | ||||||
| 			.clk				(clk_div16_f	        ), |  | ||||||
| 			.rstn				(rstn			), |  | ||||||
| 			.en				(en			), |  | ||||||
| 			.intp_mode			(intp_mode		), |  | ||||||
|                         .din	                	(cos & {16{en}}         ),            |  | ||||||
| 			.dout_0			(dout_p0                ), |  | ||||||
| 			.dout_1			(dout_p1                ), |  | ||||||
| 			.dout_2			(dout_p2                ), |  | ||||||
| 			.dout_3			(dout_p3                ) |  | ||||||
| 		        ); |  | ||||||
| 
 |  | ||||||
| reg	[15:0]	cs_wave; |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
| 	case (intp_mode) |  | ||||||
| 	2'b00 :  |  | ||||||
| 		begin |  | ||||||
| 			@(posedge clk_div16_e)	cs_wave	 	= dout_p0; |  | ||||||
| 		end |  | ||||||
| 	2'b01 :  |  | ||||||
| 		begin |  | ||||||
| 			@(posedge clk_div16_e)	cs_wave	 	= dout_p0; |  | ||||||
| 			@(posedge clk_div16_6)	cs_wave	 	= dout_p1; |  | ||||||
| 		end |  | ||||||
| 	2'b10 :  |  | ||||||
| 		begin |  | ||||||
| 			@(posedge clk_div16_e)	cs_wave	 	= dout_p0; |  | ||||||
| 			@(posedge clk_div16_a)	cs_wave	 	= dout_p1; |  | ||||||
| 			@(posedge clk_div16_6)	cs_wave	 	= dout_p2; |  | ||||||
| 			@(posedge clk_div16_2)	cs_wave	 	= dout_p3; |  | ||||||
| 		end |  | ||||||
| 	endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| endmodule                                                                        	 |  | ||||||
|                                                                                  	 |  | ||||||
|                                                                                  	 |  | ||||||
| 
 |  | ||||||
|  | @ -1,209 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg             clk; |  | ||||||
| reg             rstn; |  | ||||||
| reg             en; |  | ||||||
| reg     [21:0]  cnt; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
| 
 |  | ||||||
|                 #0; |  | ||||||
|                 rstn    = 1'b0; |  | ||||||
|                 clk =  1'b0; |  | ||||||
|                 en  =   1'b0;  |  | ||||||
|                 #300; |  | ||||||
|                 rstn    =        1'b1; |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| wire            clk_div16_0; |  | ||||||
| wire            clk_div16_1; |  | ||||||
| wire            clk_div16_2; |  | ||||||
| wire            clk_div16_3; |  | ||||||
| wire            clk_div16_4; |  | ||||||
| wire            clk_div16_5; |  | ||||||
| wire            clk_div16_6; |  | ||||||
| wire            clk_div16_7; |  | ||||||
| wire            clk_div16_8; |  | ||||||
| wire            clk_div16_9; |  | ||||||
| wire            clk_div16_a; |  | ||||||
| wire            clk_div16_b; |  | ||||||
| wire            clk_div16_c; |  | ||||||
| wire            clk_div16_d; |  | ||||||
| wire            clk_div16_e; |  | ||||||
| wire            clk_div16_f; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| clk_gen inst_clk_gen( |  | ||||||
|                                         .rstn                   (rstn                           ), |  | ||||||
|                                         .clk                    (clk                            ), |  | ||||||
|                                         .clk_div16_0            (clk_div16_0                    ), |  | ||||||
|                                         .clk_div16_1            (clk_div16_1                    ), |  | ||||||
|                                         .clk_div16_2            (clk_div16_2                    ), |  | ||||||
|                                         .clk_div16_3            (clk_div16_3                    ), |  | ||||||
|                                         .clk_div16_4            (clk_div16_4                    ), |  | ||||||
|                                         .clk_div16_5            (clk_div16_5                    ), |  | ||||||
|                                         .clk_div16_6            (clk_div16_6                    ), |  | ||||||
|                                         .clk_div16_7            (clk_div16_7                    ), |  | ||||||
|                                         .clk_div16_8            (clk_div16_8                    ), |  | ||||||
|                                         .clk_div16_9            (clk_div16_9                    ), |  | ||||||
|                                         .clk_div16_a            (clk_div16_a                    ), |  | ||||||
|                                         .clk_div16_b            (clk_div16_b                    ), |  | ||||||
|                                         .clk_div16_c            (clk_div16_c                    ), |  | ||||||
|                                         .clk_div16_d            (clk_div16_d                    ), |  | ||||||
|                                         .clk_div16_e            (clk_div16_e                    ), |  | ||||||
|                                         .clk_div16_f            (clk_div16_f                    ), |  | ||||||
|                             .clk_h                  (clk_h                          ), |  | ||||||
|                             .clk_l                  (clk_l                          ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         cnt     <=      22'd0; |  | ||||||
|                 else |  | ||||||
|                         cnt     <=      cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|         wait(cnt[17]==1'b1) |  | ||||||
|                         $finish(0); |  | ||||||
| end |  | ||||||
| always@(posedge clk_div16_f or negedge rstn)  |  | ||||||
| begin |  | ||||||
|                 if(cnt >= 2047 )  |  | ||||||
|                            begin |  | ||||||
|                                 en    <=        1'b1; |  | ||||||
|                             end |  | ||||||
|                 else |  | ||||||
|                             begin |  | ||||||
|                                 en    <=        1'b0; |  | ||||||
|                              end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg     [47:0]          fcw; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|                 fcw     =       48'h0840_0000_0000; |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| wire   [15:0]     cos; |  | ||||||
| wire   [15:0]     sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO     inst_nco_0( |  | ||||||
|                                 .clk                            (clk_div16_f            ), |  | ||||||
|                                 .rstn                           (rstn           ), |  | ||||||
|                                 .phase_manual_clr               (1'b0           ), |  | ||||||
|                                 .phase_auto_clr                 (1'b0           ), |  | ||||||
|                                 .fcw                            (fcw            ), |  | ||||||
|                                 .pha                            (16'd0          ), |  | ||||||
|                                 .cos                            (cos            ), |  | ||||||
|                                 .sin                            (sin            ) |  | ||||||
|                         ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| wire    [15:0]  dout_p1; |  | ||||||
| wire    [15:0]  dout_p2; |  | ||||||
| wire    [15:0]  dout_p3; |  | ||||||
| wire    [15:0]  dout_p4; |  | ||||||
| wire    [15:0]  dout_p5; |  | ||||||
| wire    [15:0]  dout_p6; |  | ||||||
| wire    [15:0]  dout_p7; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  intp_mode; |  | ||||||
| assign intp_mode = 2'b11; |  | ||||||
| 
 |  | ||||||
| MeanIntp_8              inst_MeanIntp8 |  | ||||||
|                        ( |  | ||||||
|                         .clk                        (clk_div16_f            ), |  | ||||||
|                         .rstn                       (rstn                   ), |  | ||||||
|                         .en                         (en                     ), |  | ||||||
|                         .intp_mode                  (intp_mode              ), |  | ||||||
|                         .din                        (cos & {16{en}}         ),            |  | ||||||
|                         .dout_0                     (dout_p0                ), |  | ||||||
|                         .dout_1                     (dout_p1                ), |  | ||||||
|                         .dout_2                     (dout_p2                ), |  | ||||||
|                         .dout_3                     (dout_p3                ), |  | ||||||
|                         .dout_4                     (dout_p4                ), |  | ||||||
|                         .dout_5                     (dout_p5                ), |  | ||||||
|                         .dout_6                     (dout_p6                ), |  | ||||||
|                         .dout_7                     (dout_p7                ) |  | ||||||
| 
 |  | ||||||
|             ); |  | ||||||
| integer  signed In_fid; |  | ||||||
| integer    X8_fid; |  | ||||||
| 
 |  | ||||||
| initial  begin |  | ||||||
|     #0 |  | ||||||
| 
 |  | ||||||
|     In_fid  =  $fopen("./in_intp8.dat"); |  | ||||||
|     X8_fid  =  $fopen("./out_intp8.dat"); |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f) |  | ||||||
|     if(cnt >= 90) |  | ||||||
|         $fwrite(In_fid,"%d\n",{{{~cos[15]}},cos[14:0]}); |  | ||||||
| 
 |  | ||||||
| reg     [15:0]  cs_wave; |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
| //              begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_c)  cs_wave         = dout_p1; |  | ||||||
|                         @(posedge clk_div16_a)  cs_wave         = dout_p2; |  | ||||||
|                         @(posedge clk_div16_8)  cs_wave         = dout_p3; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave         = dout_p4; |  | ||||||
|                         @(posedge clk_div16_4)  cs_wave         = dout_p5; |  | ||||||
|                         @(posedge clk_div16_2)  cs_wave         = dout_p6; |  | ||||||
|                         @(posedge clk_div16_0)  cs_wave         = dout_p7; |  | ||||||
| 
 |  | ||||||
| //        end |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|     fork |  | ||||||
| 
 |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div16_c) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                         @(posedge clk_div16_a) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
|                         @(posedge clk_div16_8) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
|                         @(posedge clk_div16_6) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p4[15]}},dout_p4[14:0]}); |  | ||||||
|                         @(posedge clk_div16_4) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p5[15]}},dout_p5[14:0]}); |  | ||||||
|                         @(posedge clk_div16_2) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p6[15]}},dout_p6[14:0]}); |  | ||||||
|                         @(posedge clk_div16_0) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{~dout_p7[15]}},dout_p7[14:0]}); |  | ||||||
|     join |  | ||||||
| 
 |  | ||||||
| endmodule                                                                                |  | ||||||
|                                                                                          |  | ||||||
|                                                                                          |  | ||||||
| 
 |  | ||||||
							
								
								
									
										391
									
								
								tb/tb_top.v.bak
								
								
								
								
							
							
						
						
									
										391
									
								
								tb/tb_top.v.bak
								
								
								
								
							|  | @ -1,391 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg             clk; |  | ||||||
| reg             rstn; |  | ||||||
| reg     [15:0]  din_im;  |  | ||||||
| 
 |  | ||||||
| reg     [31:0]  a0_re; |  | ||||||
| reg     [31:0]  a0_im; |  | ||||||
| reg     [31:0]  b0_re; |  | ||||||
| reg     [31:0]  b0_im; |  | ||||||
| reg     [31:0]  a1_re; |  | ||||||
| reg     [31:0]  a1_im; |  | ||||||
| reg     [31:0]  b1_re; |  | ||||||
| reg     [31:0]  b1_im; |  | ||||||
| reg     [31:0]  a2_re; |  | ||||||
| reg     [31:0]  a2_im; |  | ||||||
| reg     [31:0]  b2_re; |  | ||||||
| reg     [31:0]  b2_im; |  | ||||||
| reg     [31:0]  a3_re; |  | ||||||
| reg     [31:0]  a3_im; |  | ||||||
| reg     [31:0]  b3_re; |  | ||||||
| reg     [31:0]  b3_im; |  | ||||||
| reg     [31:0]  a4_re; |  | ||||||
| reg     [31:0]  a4_im; |  | ||||||
| reg     [31:0]  b4_re; |  | ||||||
| reg     [31:0]  b4_im; |  | ||||||
| reg     [31:0]  a5_re; |  | ||||||
| reg     [31:0]  a5_im; |  | ||||||
| reg     [31:0]  b5_re; |  | ||||||
| reg     [31:0]  b5_im; |  | ||||||
| 
 |  | ||||||
| reg     [47:0]          fcw; |  | ||||||
| 
 |  | ||||||
| reg     [21:0]  cnt; |  | ||||||
| reg     [15:0]  din_imp; |  | ||||||
| reg     [15:0]  din_rect; |  | ||||||
| reg     [15:0]  din_cos; |  | ||||||
| reg     [15:0]  iir_in; |  | ||||||
| 
 |  | ||||||
| wire    [1 :0]  source_mode; |  | ||||||
| wire    [15:0]  cos; |  | ||||||
| wire    [15:0]  sin; |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| 
 |  | ||||||
| reg             en; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|                 #0; |  | ||||||
|                 rstn    =         1'b0; |  | ||||||
|                 clk     =         1'b0; |  | ||||||
|                 en  =   1'b0;  |  | ||||||
| 
 |  | ||||||
|                 din_im  =        16'd0; |  | ||||||
|                 a0_re   =        32'd1757225200; |  | ||||||
|                 a0_im   =        32'd0; |  | ||||||
|                 b0_re   =       -32'd1042856; |  | ||||||
|                 b0_im   =        32'd0; |  | ||||||
|                 a1_re   =        32'd1045400392; |  | ||||||
|                 a1_im   =        32'd0; |  | ||||||
|                 b1_re   =       -32'd1046395; |  | ||||||
|                 b1_im   =        32'd0; |  | ||||||
|                 a2_re   =        32'd13740916; |  | ||||||
|                 a2_im   =        32'd0; |  | ||||||
|                 b2_re   =       -32'd1047703; |  | ||||||
|                 b2_im   =        32'd0; |  | ||||||
|                 a3_re   =        32'd0; |  | ||||||
|                 a3_im   =        32'd0; |  | ||||||
|                 b3_re   =       -32'd0; |  | ||||||
|                 b3_im   =        32'd0; |  | ||||||
|                 a4_re   =        32'd0; |  | ||||||
|                 a4_im   =        32'd0; |  | ||||||
|                 b4_re   =       -32'd0; |  | ||||||
|                 b4_im   =        32'd0; |  | ||||||
|                 a5_re   =        32'd0; |  | ||||||
|                 a5_im   =        32'd0; |  | ||||||
|                 b5_re   =       -32'd0; |  | ||||||
|                 b5_im   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 fcw     =       48'h0840_0000_0000; |  | ||||||
| 
 |  | ||||||
|                 din_imp   =      16'd0;  |  | ||||||
|                 din_rect  =      16'd0;  |  | ||||||
|                 din_cos   =      16'd0;  |  | ||||||
| 
 |  | ||||||
|                 #300; |  | ||||||
|                 rstn      =      1'b1; |  | ||||||
|                 #16600300; |  | ||||||
| //              din_imp   =      16'd30000;  |  | ||||||
| //              din_rect  =      16'd30000;  |  | ||||||
| //              en  =   1'b1;  |  | ||||||
|                 #6400; |  | ||||||
| //              din_imp   =      16'd0;  |  | ||||||
|                 #64000; |  | ||||||
| //              din_rect  =      16'd0;  |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| 
 |  | ||||||
| wire            clk_div16_0; |  | ||||||
| wire            clk_div16_1; |  | ||||||
| wire            clk_div16_2; |  | ||||||
| wire            clk_div16_3; |  | ||||||
| wire            clk_div16_4; |  | ||||||
| wire            clk_div16_5; |  | ||||||
| wire            clk_div16_6; |  | ||||||
| wire            clk_div16_7; |  | ||||||
| wire            clk_div16_8; |  | ||||||
| wire            clk_div16_9; |  | ||||||
| wire            clk_div16_a; |  | ||||||
| wire            clk_div16_b; |  | ||||||
| wire            clk_div16_c; |  | ||||||
| wire            clk_div16_d; |  | ||||||
| wire            clk_div16_e; |  | ||||||
| wire            clk_div16_f; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| clk_gen inst_clk_gen( |  | ||||||
|                                         .rstn                   (rstn                           ), |  | ||||||
|                                         .clk                    (clk                            ), |  | ||||||
|                                         .clk_div16_0            (clk_div16_0                    ), |  | ||||||
|                                         .clk_div16_1            (clk_div16_1                    ), |  | ||||||
|                                         .clk_div16_2            (clk_div16_2                    ), |  | ||||||
|                                         .clk_div16_3            (clk_div16_3                    ), |  | ||||||
|                                         .clk_div16_4            (clk_div16_4                    ), |  | ||||||
|                                         .clk_div16_5            (clk_div16_5                    ), |  | ||||||
|                                         .clk_div16_6            (clk_div16_6                    ), |  | ||||||
|                                         .clk_div16_7            (clk_div16_7                    ), |  | ||||||
|                                         .clk_div16_8            (clk_div16_8                    ), |  | ||||||
|                                         .clk_div16_9            (clk_div16_9                    ), |  | ||||||
|                                         .clk_div16_a            (clk_div16_a                    ), |  | ||||||
|                                         .clk_div16_b            (clk_div16_b                    ), |  | ||||||
|                                         .clk_div16_c            (clk_div16_c                    ), |  | ||||||
|                                         .clk_div16_d            (clk_div16_d                    ), |  | ||||||
|                                         .clk_div16_e            (clk_div16_e                    ), |  | ||||||
|                                         .clk_div16_f            (clk_div16_f                    ), |  | ||||||
|                                         .clk_h                  (clk_h                          ), |  | ||||||
|                                         .clk_l                  (clk_l                          ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         cnt     <=      22'd0; |  | ||||||
|                 else |  | ||||||
|                         cnt     <=      cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|         wait(cnt[16]==1'b1) |  | ||||||
|                         $finish(0); |  | ||||||
| end |  | ||||||
|                    |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         din_imp <=      22'd0; |  | ||||||
|                 else if(cnt == 100) |  | ||||||
|                     begin |  | ||||||
|                         din_imp <=      16'd32767; |  | ||||||
|                         //en    <=      1'b1; |  | ||||||
|                     end |  | ||||||
|                 else  |  | ||||||
|                         din_imp <=      'h0; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         din_rect        <=      22'd0; |  | ||||||
|                 else if(cnt >= 100 && cnt <=10100) |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd30000; |  | ||||||
|                     end |  | ||||||
|                 else  |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd0; |  | ||||||
|                     end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         en      <=      22'd0; |  | ||||||
|                 else if(cnt >= 100 ) |  | ||||||
|                     begin |  | ||||||
|                         en      <=      1'b1; |  | ||||||
|                     end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         begin |  | ||||||
|                                 din_cos   <=    16'd0; |  | ||||||
|                                 iir_in    <=    16'd0; |  | ||||||
|                         end |  | ||||||
|                 else |  | ||||||
|                         din_cos   <=    cos; |  | ||||||
| 
 |  | ||||||
| assign source_mode = 2'b01; |  | ||||||
| 
 |  | ||||||
| always @(*) |  | ||||||
| 
 |  | ||||||
|         case(source_mode) |  | ||||||
|                 2'b00 :   iir_in = din_imp; |  | ||||||
|                 2'b01 :   iir_in = din_rect; |  | ||||||
|                 2'b10 :   iir_in = din_cos; |  | ||||||
|         endcase |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO     inst_nco_0( |  | ||||||
|                                 .clk                            (clk_div16_f            ), |  | ||||||
|                                 .rstn                           (rstn           ), |  | ||||||
|                                 .phase_manual_clr               (1'b0           ), |  | ||||||
|                                 .phase_auto_clr                 (1'b0           ), |  | ||||||
|                                 .fcw                            (fcw            ), |  | ||||||
|                                 .pha                            (16'd0          ), |  | ||||||
|                                 .cos                            (cos            ), |  | ||||||
|                                 .sin                            (sin            ) |  | ||||||
|                         ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| wire    [15:0]  dout_p1; |  | ||||||
| wire    [15:0]  dout_p2; |  | ||||||
| wire    [15:0]  dout_p3; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  intp_mode; |  | ||||||
| assign intp_mode = 2'b10; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  dac_mode_sel; |  | ||||||
| assign dac_mode_sel = 2'b00; |  | ||||||
| 
 |  | ||||||
| z_dsp           inst_Z_dsp |  | ||||||
|                ( |  | ||||||
|                         .clk                    (clk_div16_f                    ), |  | ||||||
|                         .rstn                   (rstn                   ), |  | ||||||
|                         .en                     (en                     ), |  | ||||||
|                         .dac_mode_sel           (dac_mode_sel           ), |  | ||||||
|                         .intp_mode              (intp_mode              ), |  | ||||||
|                         .din_re                 (iir_in & {16{en}}      ), |  | ||||||
|                         .din_im                 (din_im                 ), |  | ||||||
|                         .a0_re                  (a0_re                  ), |  | ||||||
|                         .a0_im                  (a0_im                  ), |  | ||||||
|                         .b0_re                  (b0_re                  ), |  | ||||||
|                         .b0_im                  (b0_im                  ), |  | ||||||
|                         .a1_re                  (a1_re                  ), |  | ||||||
|                         .a1_im                  (a1_im                  ), |  | ||||||
|                         .b1_re                  (b1_re                  ), |  | ||||||
|                         .b1_im                  (b1_im                  ),  |  | ||||||
|                         .a2_re                  (a2_re                  ), |  | ||||||
|                         .a2_im                  (a2_im                  ), |  | ||||||
|                         .b2_re                  (b2_re                  ), |  | ||||||
|                         .b2_im                  (b2_im                  ),   |  | ||||||
|                         .a3_re                  (a3_re                  ), |  | ||||||
|                         .a3_im                  (a3_im                  ), |  | ||||||
|                         .b3_re                  (b3_re                  ), |  | ||||||
|                         .b3_im                  (b3_im                  ), |  | ||||||
|                         .a4_re                  (a4_re                  ), |  | ||||||
|                         .a4_im                  (a4_im                  ), |  | ||||||
|                         .b4_re                  (b4_re                  ), |  | ||||||
|                         .b4_im                  (b4_im                  ),  |  | ||||||
|                         .a5_re                  (a5_re                  ), |  | ||||||
|                         .a5_im                  (a5_im                  ), |  | ||||||
|                         .b5_re                  (b5_re                  ), |  | ||||||
|                         .b5_im                  (b5_im                  ),                          |  | ||||||
|                         .dout0                  (dout_p0                ), |  | ||||||
|                         .dout1                  (dout_p1                ), |  | ||||||
|                         .dout2                  (dout_p2                ), |  | ||||||
|                         .dout3                  (dout_p3                ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg     [15:0]  cs_wave = 0; |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
|         case (intp_mode) |  | ||||||
|         2'b00 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                 end |  | ||||||
|         2'b01 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave         = dout_p1; |  | ||||||
|                 end |  | ||||||
|         2'b10 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_a)  cs_wave         = dout_p1; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave         = dout_p2; |  | ||||||
|                         @(posedge clk_div16_2)  cs_wave         = dout_p3; |  | ||||||
|                 end |  | ||||||
|         endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| integer signed In_fid; |  | ||||||
| integer X1_fid; |  | ||||||
| integer X2_fid; |  | ||||||
| integer X4_fid; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|         #0; |  | ||||||
|         In_fid  =       $fopen("./in"); |  | ||||||
|         case (intp_mode) |  | ||||||
|                 2'b00 :         X1_fid  =       $fopen("./X1_data.dat"); |  | ||||||
|                 2'b01 :         X2_fid  =       $fopen("./X2_data.dat"); |  | ||||||
|                 2'b10 :         X4_fid  =       $fopen("./X4_data.dat"); |  | ||||||
|         endcase |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|                 $fwrite(In_fid,"%d\n",{{{iir_in[15]}},iir_in[14:0]}); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
|         case (intp_mode) |  | ||||||
|         2'b00 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X1_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                 end |  | ||||||
|         2'b01 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X2_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div16_6) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X2_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                 end |  | ||||||
|         2'b10 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div16_a) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                         @(posedge clk_div16_6) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
|                         @(posedge clk_div16_2) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
|                 end |  | ||||||
|         endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(In_fid,"%d\n",{{~{iir_in[15]}},iir_in[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X1_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X2_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
| always@(posedge clk_div16_6) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X2_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
| always@(posedge clk_div16_a) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
| always@(posedge clk_div16_6) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
| always@(posedge clk_div16_2) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| endmodule                                                                                |  | ||||||
|                                                                                          |  | ||||||
|                                                                                          |  | ||||||
| 
 |  | ||||||
							
								
								
									
										675
									
								
								tb/tb_z_dsp.v
								
								
								
								
							
							
						
						
									
										675
									
								
								tb/tb_z_dsp.v
								
								
								
								
							|  | @ -1,675 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg             rstn; |  | ||||||
| reg     [15:0]  din_im;  |  | ||||||
| 
 |  | ||||||
| reg     [31:0]  a0_re; |  | ||||||
| reg     [31:0]  a0_im; |  | ||||||
| reg     [31:0]  b0_re; |  | ||||||
| reg     [31:0]  b0_im; |  | ||||||
| reg     [31:0]  a1_re; |  | ||||||
| reg     [31:0]  a1_im; |  | ||||||
| reg     [31:0]  b1_re; |  | ||||||
| reg     [31:0]  b1_im; |  | ||||||
| reg     [31:0]  a2_re; |  | ||||||
| reg     [31:0]  a2_im; |  | ||||||
| reg     [31:0]  b2_re; |  | ||||||
| reg     [31:0]  b2_im; |  | ||||||
| reg     [31:0]  a3_re; |  | ||||||
| reg     [31:0]  a3_im; |  | ||||||
| reg     [31:0]  b3_re; |  | ||||||
| reg     [31:0]  b3_im; |  | ||||||
| reg     [31:0]  a4_re; |  | ||||||
| reg     [31:0]  a4_im; |  | ||||||
| reg     [31:0]  b4_re; |  | ||||||
| reg     [31:0]  b4_im; |  | ||||||
| reg     [31:0]  a5_re; |  | ||||||
| reg     [31:0]  a5_im; |  | ||||||
| reg     [31:0]  b5_re; |  | ||||||
| reg     [31:0]  b5_im; |  | ||||||
| 
 |  | ||||||
| reg     [47:0]          fcw; |  | ||||||
| 
 |  | ||||||
| reg     [21:0]  cnt; |  | ||||||
| reg     [15:0]  din_imp; |  | ||||||
| reg     [15:0]  din_rect; |  | ||||||
| reg     [15:0]  din_cos; |  | ||||||
| reg     [15:0]  iir_in; |  | ||||||
| 
 |  | ||||||
| wire    [1 :0]  source_mode; |  | ||||||
| wire    [15:0]  cos; |  | ||||||
| wire    [15:0]  sin; |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| 
 |  | ||||||
| reg             en; |  | ||||||
| 
 |  | ||||||
| reg             clk; |  | ||||||
| reg             clk_div2; |  | ||||||
| reg             clk_div4; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|                 #0; |  | ||||||
|                 rstn    =         1'b0; |  | ||||||
|                 clk     =         1'b0; |  | ||||||
|                 clk_div2     =         1'b0; |  | ||||||
|                 clk_div4     =         1'b0; |  | ||||||
|                 en  =   1'b0;  |  | ||||||
| 
 |  | ||||||
|                 din_im  =        16'd0; |  | ||||||
|                 a0_re   =        32'd1757225200; |  | ||||||
|                 a0_im   =        32'd0; |  | ||||||
|                 b0_re   =       -32'd1042856; |  | ||||||
|                 b0_im   =        32'd0; |  | ||||||
|                 a1_re   =        32'd1045400392; |  | ||||||
|                 a1_im   =        32'd0; |  | ||||||
|                 b1_re   =       -32'd1046395; |  | ||||||
|                 b1_im   =        32'd0; |  | ||||||
|                 a2_re   =        32'd13740916; |  | ||||||
|                 a2_im   =        32'd0; |  | ||||||
|                 b2_re   =       -32'd1047703; |  | ||||||
|                 b2_im   =        32'd0; |  | ||||||
|                 a3_re   =        32'd0; |  | ||||||
|                 a3_im   =        32'd0; |  | ||||||
|                 b3_re   =       -32'd0; |  | ||||||
|                 b3_im   =        32'd0; |  | ||||||
|                 a4_re   =        32'd0; |  | ||||||
|                 a4_im   =        32'd0; |  | ||||||
|                 b4_re   =       -32'd0; |  | ||||||
|                 b4_im   =        32'd0; |  | ||||||
|                 a5_re   =        32'd0; |  | ||||||
|                 a5_im   =        32'd0; |  | ||||||
|                 b5_re   =       -32'd0; |  | ||||||
|                 b5_im   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 fcw     =       48'h0840_0000_0000; |  | ||||||
| 
 |  | ||||||
|                 din_imp   =      16'd0;  |  | ||||||
|                 din_rect  =      16'd0;  |  | ||||||
|                 din_cos   =      16'd0;  |  | ||||||
| 
 |  | ||||||
|                 #300; |  | ||||||
|                 rstn      =      1'b1; |  | ||||||
|                 #16600300; |  | ||||||
| //              din_imp   =      16'd30000;  |  | ||||||
| //              din_rect  =      16'd30000;  |  | ||||||
| //              en  =   1'b1;  |  | ||||||
|                 #6400; |  | ||||||
| //              din_imp   =      16'd0;  |  | ||||||
|                 #64000; |  | ||||||
| //              din_rect  =      16'd0;  |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| always #400 clk_div2 = ~clk_div2; |  | ||||||
| always #800 clk_div4 = ~clk_div4; |  | ||||||
| 
 |  | ||||||
| wire            clk_div16_0; |  | ||||||
| wire            clk_div16_1; |  | ||||||
| wire            clk_div16_2; |  | ||||||
| wire            clk_div16_3; |  | ||||||
| wire            clk_div16_4; |  | ||||||
| wire            clk_div16_5; |  | ||||||
| wire            clk_div16_6; |  | ||||||
| wire            clk_div16_7; |  | ||||||
| wire            clk_div16_8; |  | ||||||
| wire            clk_div16_9; |  | ||||||
| wire            clk_div16_a; |  | ||||||
| wire            clk_div16_b; |  | ||||||
| wire            clk_div16_c; |  | ||||||
| wire            clk_div16_d; |  | ||||||
| wire            clk_div16_e; |  | ||||||
| wire            clk_div16_f; |  | ||||||
| wire            clk_l; |  | ||||||
| wire            clk_h; |  | ||||||
| 
 |  | ||||||
| clk_gen inst_clk_gen( |  | ||||||
|                                         .rstn                   (rstn                           ), |  | ||||||
|                                         .clk                    (clk                            ), |  | ||||||
|                                         .clk_div16_0            (clk_div16_0                    ), |  | ||||||
|                                         .clk_div16_1            (clk_div16_1                    ), |  | ||||||
|                                         .clk_div16_2            (clk_div16_2                    ), |  | ||||||
|                                         .clk_div16_3            (clk_div16_3                    ), |  | ||||||
|                                         .clk_div16_4            (clk_div16_4                    ), |  | ||||||
|                                         .clk_div16_5            (clk_div16_5                    ), |  | ||||||
|                                         .clk_div16_6            (clk_div16_6                    ), |  | ||||||
|                                         .clk_div16_7            (clk_div16_7                    ), |  | ||||||
|                                         .clk_div16_8            (clk_div16_8                    ), |  | ||||||
|                                         .clk_div16_9            (clk_div16_9                    ), |  | ||||||
|                                         .clk_div16_a            (clk_div16_a                    ), |  | ||||||
|                                         .clk_div16_b            (clk_div16_b                    ), |  | ||||||
|                                         .clk_div16_c            (clk_div16_c                    ), |  | ||||||
|                                         .clk_div16_d            (clk_div16_d                    ), |  | ||||||
|                                         .clk_div16_e            (clk_div16_e                    ), |  | ||||||
|                                         .clk_div16_f            (clk_div16_f                    ), |  | ||||||
|                                         .clk_h                  (clk_h                          ), |  | ||||||
|                                         .clk_l                  (clk_l                          ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| wire            clk_div32_0; |  | ||||||
| wire            clk_div32_1; |  | ||||||
| wire            clk_div32_2; |  | ||||||
| wire            clk_div32_3; |  | ||||||
| wire            clk_div32_4; |  | ||||||
| wire            clk_div32_5; |  | ||||||
| wire            clk_div32_6; |  | ||||||
| wire            clk_div32_7; |  | ||||||
| wire            clk_div32_8; |  | ||||||
| wire            clk_div32_9; |  | ||||||
| wire            clk_div32_a; |  | ||||||
| wire            clk_div32_b; |  | ||||||
| wire            clk_div32_c; |  | ||||||
| wire            clk_div32_d; |  | ||||||
| wire            clk_div32_e; |  | ||||||
| wire            clk_div32_f; |  | ||||||
| wire            clk_l1; |  | ||||||
| wire            clk_h1; |  | ||||||
| 
 |  | ||||||
| clk_gen inst1_clk_gen( |  | ||||||
|                                         .rstn                   (rstn                           ), |  | ||||||
|                                         .clk                    (clk_div2                            ), |  | ||||||
|                                         .clk_div16_0            (clk_div32_0                    ), |  | ||||||
|                                         .clk_div16_1            (clk_div32_1                    ), |  | ||||||
|                                         .clk_div16_2            (clk_div32_2                    ), |  | ||||||
|                                         .clk_div16_3            (clk_div32_3                    ), |  | ||||||
|                                         .clk_div16_4            (clk_div32_4                    ), |  | ||||||
|                                         .clk_div16_5            (clk_div32_5                    ), |  | ||||||
|                                         .clk_div16_6            (clk_div32_6                    ), |  | ||||||
|                                         .clk_div16_7            (clk_div32_7                    ), |  | ||||||
|                                         .clk_div16_8            (clk_div32_8                    ), |  | ||||||
|                                         .clk_div16_9            (clk_div32_9                    ), |  | ||||||
|                                         .clk_div16_a            (clk_div32_a                    ), |  | ||||||
|                                         .clk_div16_b            (clk_div32_b                    ), |  | ||||||
|                                         .clk_div16_c            (clk_div32_c                    ), |  | ||||||
|                                         .clk_div16_d            (clk_div32_d                    ), |  | ||||||
|                                         .clk_div16_e            (clk_div32_e                    ), |  | ||||||
|                                         .clk_div16_f            (clk_div32_f                    ), |  | ||||||
|                                         .clk_h                  (clk_h1                          ), |  | ||||||
|                                         .clk_l                  (clk_l1                          ) |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_l or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         cnt     <=      22'd0; |  | ||||||
|                 else |  | ||||||
|                         cnt     <=      cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|         wait(cnt[16]==1'b1) |  | ||||||
|                         $finish(0); |  | ||||||
| end |  | ||||||
|                    |  | ||||||
| always@(posedge clk_l or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         din_imp <=      22'd0; |  | ||||||
|                 else if(cnt == 100) |  | ||||||
|                     begin |  | ||||||
|                         din_imp <=      16'd32767; |  | ||||||
|                         //en    <=      1'b1; |  | ||||||
|                     end |  | ||||||
|                 else  |  | ||||||
|                         din_imp <=      'h0; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_l or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         din_rect        <=      22'd0; |  | ||||||
|                 else if(cnt >= 100 && cnt <=10100) |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd30000; |  | ||||||
|                     end |  | ||||||
|                 else  |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd0; |  | ||||||
|                     end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_l or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         en      <=      22'd0; |  | ||||||
|                 else if(cnt >= 90 ) |  | ||||||
|                     begin |  | ||||||
|                         en      <=      1'b1; |  | ||||||
|                     end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_l or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         begin |  | ||||||
|                                 din_cos   <=    16'd0; |  | ||||||
|                                 iir_in    <=    16'd0; |  | ||||||
|                         end |  | ||||||
|                 else |  | ||||||
|                         din_cos   <=    {cos[15],cos[15:1]}; |  | ||||||
| 
 |  | ||||||
| assign source_mode = 2'b01; |  | ||||||
| 
 |  | ||||||
| always @(*) |  | ||||||
| 
 |  | ||||||
|         case(source_mode) |  | ||||||
|                 2'b00 :   iir_in = din_imp; |  | ||||||
|                 2'b01 :   iir_in = din_rect; |  | ||||||
|                 2'b10 :   iir_in = din_cos; |  | ||||||
|         endcase |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NCO     inst_nco_0( |  | ||||||
|                                 .clk                            (clk_l          ), |  | ||||||
|                                 .rstn                           (rstn           ), |  | ||||||
|                                 .phase_manual_clr               (1'b0           ), |  | ||||||
|                                 .phase_auto_clr                 (1'b0           ), |  | ||||||
|                                 .fcw                            (fcw            ), |  | ||||||
|                                 .pha                            (16'd0          ), |  | ||||||
|                                 .cos                            (cos            ), |  | ||||||
|                                 .sin                            (sin            ) |  | ||||||
|                         ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| wire    [15:0]  dout_p1; |  | ||||||
| wire    [15:0]  dout_p2; |  | ||||||
| wire    [15:0]  dout_p3; |  | ||||||
| wire    [15:0]  dout_p4; |  | ||||||
| wire    [15:0]  dout_p5; |  | ||||||
| wire    [15:0]  dout_p6; |  | ||||||
| wire    [15:0]  dout_p7; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  intp_mode; |  | ||||||
| assign intp_mode = 2'b11; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  dac_mode_sel; |  | ||||||
| assign dac_mode_sel = 2'b00; |  | ||||||
| 
 |  | ||||||
| wire    tc_bypass; |  | ||||||
| assign    tc_bypass  =  1'b0; |  | ||||||
| 
 |  | ||||||
| z_dsp           inst_Z_dsp |  | ||||||
|                ( |  | ||||||
|                         .clk                    (clk_h                  ), |  | ||||||
|                         .rstn                   (rstn                   ), |  | ||||||
|                         .en                     (clk_l                  ), |  | ||||||
|                         .tc_bypass              (tc_bypass              ), |  | ||||||
|                         .dac_mode_sel           (dac_mode_sel           ), |  | ||||||
|                         .intp_mode              (intp_mode              ), |  | ||||||
|                         .din_re                 (iir_in                 ), |  | ||||||
|                         .din_im                 (din_im                 ), |  | ||||||
|                         .a0_re                  (a0_re                  ), |  | ||||||
|                         .a0_im                  (a0_im                  ), |  | ||||||
|                         .b0_re                  (b0_re                  ), |  | ||||||
|                         .b0_im                  (b0_im                  ), |  | ||||||
|                         .a1_re                  (a1_re                  ), |  | ||||||
|                         .a1_im                  (a1_im                  ), |  | ||||||
|                         .b1_re                  (b1_re                  ), |  | ||||||
|                         .b1_im                  (b1_im                  ),  |  | ||||||
|                         .a2_re                  (a2_re                  ), |  | ||||||
|                         .a2_im                  (a2_im                  ), |  | ||||||
|                         .b2_re                  (b2_re                  ), |  | ||||||
|                         .b2_im                  (b2_im                  ),   |  | ||||||
|                         .a3_re                  (a3_re                  ), |  | ||||||
|                         .a3_im                  (a3_im                  ), |  | ||||||
|                         .b3_re                  (b3_re                  ), |  | ||||||
|                         .b3_im                  (b3_im                  ), |  | ||||||
|                         .a4_re                  (a4_re                  ), |  | ||||||
|                         .a4_im                  (a4_im                  ), |  | ||||||
|                         .b4_re                  (b4_re                  ), |  | ||||||
|                         .b4_im                  (b4_im                  ),  |  | ||||||
|                         .a5_re                  (a5_re                  ), |  | ||||||
|                         .a5_im                  (a5_im                  ), |  | ||||||
|                         .b5_re                  (b5_re                  ), |  | ||||||
|                         .b5_im                  (b5_im                  ),                          |  | ||||||
|                         .dout0                  (dout_p0                ), |  | ||||||
|                         .dout1                  (dout_p1                ), |  | ||||||
|                         .dout2                  (dout_p2                ), |  | ||||||
|                         .dout3                  (dout_p3                ), |  | ||||||
|                         .dout4                  (dout_p4                ), |  | ||||||
|                         .dout5                  (dout_p5                ), |  | ||||||
|                         .dout6                  (dout_p6                ), |  | ||||||
|                         .dout7                  (dout_p7                ) |  | ||||||
| 
 |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_clkl_p0; |  | ||||||
| wire    [15:0]  dout_clkl_p1; |  | ||||||
| wire    [15:0]  dout_clkl_p2; |  | ||||||
| wire    [15:0]  dout_clkl_p3; |  | ||||||
| wire    [15:0]  dout_clkl_p4; |  | ||||||
| wire    [15:0]  dout_clkl_p5; |  | ||||||
| wire    [15:0]  dout_clkl_p6; |  | ||||||
| wire    [15:0]  dout_clkl_p7; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| z_dsp           inst1_Z_dsp |  | ||||||
|                ( |  | ||||||
|                         .clk                    (clk_l                  ), |  | ||||||
|                         .rstn                   (rstn                   ), |  | ||||||
|                         .en                     (en                  ), |  | ||||||
|                         .tc_bypass              (tc_bypass              ), |  | ||||||
|                         .dac_mode_sel           (dac_mode_sel           ), |  | ||||||
|                         .intp_mode              (intp_mode              ), |  | ||||||
|                         .din_re                 (iir_in                 ), |  | ||||||
|                         .din_im                 (din_im                 ), |  | ||||||
|                         .a0_re                  (a0_re                  ), |  | ||||||
|                         .a0_im                  (a0_im                  ), |  | ||||||
|                         .b0_re                  (b0_re                  ), |  | ||||||
|                         .b0_im                  (b0_im                  ), |  | ||||||
|                         .a1_re                  (a1_re                  ), |  | ||||||
|                         .a1_im                  (a1_im                  ), |  | ||||||
|                         .b1_re                  (b1_re                  ), |  | ||||||
|                         .b1_im                  (b1_im                  ),  |  | ||||||
|                         .a2_re                  (a2_re                  ), |  | ||||||
|                         .a2_im                  (a2_im                  ), |  | ||||||
|                         .b2_re                  (b2_re                  ), |  | ||||||
|                         .b2_im                  (b2_im                  ),   |  | ||||||
|                         .a3_re                  (a3_re                  ), |  | ||||||
|                         .a3_im                  (a3_im                  ), |  | ||||||
|                         .b3_re                  (b3_re                  ), |  | ||||||
|                         .b3_im                  (b3_im                  ), |  | ||||||
|                         .a4_re                  (a4_re                  ), |  | ||||||
|                         .a4_im                  (a4_im                  ), |  | ||||||
|                         .b4_re                  (b4_re                  ), |  | ||||||
|                         .b4_im                  (b4_im                  ),  |  | ||||||
|                         .a5_re                  (a5_re                  ), |  | ||||||
|                         .a5_im                  (a5_im                  ), |  | ||||||
|                         .b5_re                  (b5_re                  ), |  | ||||||
|                         .b5_im                  (b5_im                  ),                          |  | ||||||
|                         .dout0                  (dout_clkl_p0                ), |  | ||||||
|                         .dout1                  (dout_clkl_p1                ), |  | ||||||
|                         .dout2                  (dout_clkl_p2                ), |  | ||||||
|                         .dout3                  (dout_clkl_p3                ), |  | ||||||
|                         .dout4                  (dout_clkl_p4                ), |  | ||||||
|                         .dout5                  (dout_clkl_p5                ), |  | ||||||
|                         .dout6                  (dout_clkl_p6                ), |  | ||||||
|                         .dout7                  (dout_clkl_p7                ) |  | ||||||
| 
 |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| reg     [15:0]  dout_p0_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p1_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p2_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p3_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p4_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p5_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p6_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p7_r1 = 0; |  | ||||||
| reg     [15:0]  dout_p0_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p1_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p2_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p3_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p4_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p5_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p6_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p7_r2 = 0; |  | ||||||
| reg     [15:0]  dout_p0_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p1_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p2_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p3_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p4_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p5_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p6_r3 = 0; |  | ||||||
| reg     [15:0]  dout_p7_r3 = 0; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always @(posedge clk_h or negedge rstn ) begin |  | ||||||
| 	if(!rstn) begin |  | ||||||
| 	dout_p0_r1 <= 0; |  | ||||||
| 	dout_p1_r1 <= 0; |  | ||||||
| 	dout_p2_r1 <= 0; |  | ||||||
| 	dout_p3_r1 <= 0; |  | ||||||
| 	dout_p4_r1 <= 0; |  | ||||||
| 	dout_p5_r1 <= 0; |  | ||||||
| 	dout_p6_r1 <= 0; |  | ||||||
| 	dout_p7_r1 <= 0; |  | ||||||
| 	dout_p0_r2 <= 0; |  | ||||||
| 	dout_p1_r2 <= 0; |  | ||||||
| 	dout_p2_r2 <= 0; |  | ||||||
| 	dout_p3_r2 <= 0; |  | ||||||
| 	dout_p4_r2 <= 0; |  | ||||||
| 	dout_p5_r2 <= 0; |  | ||||||
| 	dout_p6_r2 <= 0; |  | ||||||
| 	dout_p7_r2 <= 0; |  | ||||||
| 	dout_p0_r3 <= 0; |  | ||||||
| 	dout_p1_r3 <= 0; |  | ||||||
| 	dout_p2_r3 <= 0; |  | ||||||
| 	dout_p3_r3 <= 0; |  | ||||||
| 	dout_p4_r3 <= 0; |  | ||||||
| 	dout_p5_r3 <= 0; |  | ||||||
| 	dout_p6_r3 <= 0; |  | ||||||
| 	dout_p7_r3 <= 0; |  | ||||||
| 		end |  | ||||||
| 	else  begin |  | ||||||
| 	dout_p0_r1 <= dout_p0; |  | ||||||
| 	dout_p1_r1 <= dout_p1; |  | ||||||
| 	dout_p2_r1 <= dout_p2; |  | ||||||
| 	dout_p3_r1 <= dout_p3; |  | ||||||
| 	dout_p4_r1 <= dout_p4; |  | ||||||
| 	dout_p5_r1 <= dout_p5; |  | ||||||
| 	dout_p6_r1 <= dout_p6; |  | ||||||
| 	dout_p7_r1 <= dout_p7; |  | ||||||
| 	dout_p0_r2 <= dout_p0_r1; |  | ||||||
| 	dout_p1_r2 <= dout_p1_r1; |  | ||||||
| 	dout_p2_r2 <= dout_p2_r1; |  | ||||||
| 	dout_p3_r2 <= dout_p3_r1; |  | ||||||
| 	dout_p4_r2 <= dout_p4_r1; |  | ||||||
| 	dout_p5_r2 <= dout_p5_r1; |  | ||||||
| 	dout_p6_r2 <= dout_p6_r1; |  | ||||||
| 	dout_p7_r2 <= dout_p7_r1; |  | ||||||
| 	dout_p0_r3 <= dout_p0_r2; |  | ||||||
| 	dout_p1_r3 <= dout_p1_r2; |  | ||||||
| 	dout_p2_r3 <= dout_p2_r2; |  | ||||||
| 	dout_p3_r3 <= dout_p3_r2; |  | ||||||
| 	dout_p4_r3 <= dout_p4_r2; |  | ||||||
| 	dout_p5_r3 <= dout_p5_r2; |  | ||||||
| 	dout_p6_r3 <= dout_p6_r2; |  | ||||||
| 	dout_p7_r3 <= dout_p7_r2; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 		end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| reg     [15:0]  cs_wave = 0; |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
|         case (intp_mode) |  | ||||||
|         2'b00 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                 end |  | ||||||
|         2'b01 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave         = dout_p1; |  | ||||||
|                 end |  | ||||||
|         2'b10 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_a)  cs_wave         = dout_p1; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave         = dout_p2; |  | ||||||
|                         @(posedge clk_div16_2)  cs_wave         = dout_p3; |  | ||||||
|                 end |  | ||||||
|          2'b11 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div32_7)  cs_wave         = dout_p0_r3;//f  |  | ||||||
|                         @(posedge clk_div32_5)  cs_wave         = dout_p1_r3;//d |  | ||||||
|                         @(posedge clk_div32_3)  cs_wave         = dout_p2_r3;//b |  | ||||||
|                         @(posedge clk_div32_1)  cs_wave         = dout_p3_r3;//9 |  | ||||||
|                         @(posedge clk_div32_f)  cs_wave         = dout_p4_r3;//7 |  | ||||||
|                         @(posedge clk_div32_d)  cs_wave         = dout_p5_r3;//5 |  | ||||||
|                         @(posedge clk_div32_b)  cs_wave         = dout_p6_r3;//3 |  | ||||||
|                         @(posedge clk_div32_9)  cs_wave         = dout_p7_r3;//1 |  | ||||||
|                end |  | ||||||
|         |  | ||||||
|         endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg     [15:0]  cs_wave1 = 0; |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
|         case (intp_mode) |  | ||||||
|         2'b00 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave1         = dout_p0; |  | ||||||
|                 end |  | ||||||
|         2'b01 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave1         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave1         = dout_p1; |  | ||||||
|                 end |  | ||||||
|         2'b10 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e)  cs_wave1         = dout_p0; |  | ||||||
|                         @(posedge clk_div16_a)  cs_wave1         = dout_p1; |  | ||||||
|                         @(posedge clk_div16_6)  cs_wave1         = dout_p2; |  | ||||||
|                         @(posedge clk_div16_2)  cs_wave1         = dout_p3; |  | ||||||
|                 end |  | ||||||
|          2'b11 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div32_7)  cs_wave1         = dout_clkl_p0;//f  |  | ||||||
|                         @(posedge clk_div32_5)  cs_wave1         = dout_clkl_p1;//d |  | ||||||
|                         @(posedge clk_div32_3)  cs_wave1         = dout_clkl_p2;//b |  | ||||||
|                         @(posedge clk_div32_1)  cs_wave1         = dout_clkl_p3;//9 |  | ||||||
|                         @(posedge clk_div32_f)  cs_wave1         = dout_clkl_p4;//7 |  | ||||||
|                         @(posedge clk_div32_d)  cs_wave1         = dout_clkl_p5;//5 |  | ||||||
|                         @(posedge clk_div32_b)  cs_wave1         = dout_clkl_p6;//3 |  | ||||||
|                         @(posedge clk_div32_9)  cs_wave1         = dout_clkl_p7;//1 |  | ||||||
|                end |  | ||||||
|         |  | ||||||
|         endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| wire     [15:0] diff; |  | ||||||
| assign	diff = cs_wave1 - cs_wave; |  | ||||||
| integer signed In_fid; |  | ||||||
| integer X1_fid; |  | ||||||
| integer X2_fid; |  | ||||||
| integer X4_fid; |  | ||||||
| integer X8_fid; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|         #0; |  | ||||||
|         In_fid  =       $fopen("./in.dat"); |  | ||||||
|         case (intp_mode) |  | ||||||
|                 2'b00 :         X1_fid  =       $fopen("./X1_data.dat"); |  | ||||||
|                 2'b01 :         X2_fid  =       $fopen("./X2_data.dat"); |  | ||||||
|                 2'b10 :         X4_fid  =       $fopen("./X4_data.dat"); |  | ||||||
|                 2'b11 :         X8_fid  =       $fopen("./X8_data.dat"); |  | ||||||
| 
 |  | ||||||
|         endcase |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_f) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|                 $fwrite(In_fid,"%d\n",{{{~iir_in[15]}},iir_in[14:0]}); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(*) |  | ||||||
|   fork |  | ||||||
|         case (intp_mode) |  | ||||||
|         2'b00 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X1_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                 end |  | ||||||
|         2'b01 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X2_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div16_6) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X2_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                 end |  | ||||||
|         2'b10 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div16_e) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div16_a) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                         @(posedge clk_div16_6) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
|                         @(posedge clk_div16_2) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X4_fid,"%d\n",{{{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
|                 end |  | ||||||
|         2'b11 :  |  | ||||||
|                 begin |  | ||||||
|                         @(posedge clk_div32_f) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
|                         @(posedge clk_div32_d) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
|                         @(posedge clk_div32_b) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
|                         @(posedge clk_div32_9) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
|                         @(posedge clk_div32_7) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p4[15]}},dout_p4[14:0]}); |  | ||||||
|                         @(posedge clk_div32_5) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p5[15]}},dout_p5[14:0]}); |  | ||||||
|                         @(posedge clk_div32_3) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p6[15]}},dout_p6[14:0]}); |  | ||||||
|                         @(posedge clk_div32_1) |  | ||||||
|                           if(cnt >= 90) |  | ||||||
|                                 $fwrite(X8_fid,"%d\n",{{{dout_p7[15]}},dout_p7[14:0]}); |  | ||||||
| 
 |  | ||||||
|                 end |  | ||||||
| 
 |  | ||||||
|         endcase |  | ||||||
|   join |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(In_fid,"%d\n",{{~{iir_in[15]}},iir_in[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X1_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X2_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
| always@(posedge clk_div16_6) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X2_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div16_e) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p0[15]}},dout_p0[14:0]}); |  | ||||||
| always@(posedge clk_div16_a) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p1[15]}},dout_p1[14:0]}); |  | ||||||
| always@(posedge clk_div16_6) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p2[15]}},dout_p2[14:0]}); |  | ||||||
| always@(posedge clk_div16_2) |  | ||||||
|           if(cnt >= 90) |  | ||||||
|               $fwrite(X4_fid,"%d\n",{{~{dout_p3[15]}},dout_p3[14:0]}); |  | ||||||
| */ |  | ||||||
| endmodule                                                                                |  | ||||||
|                                                                                          |  | ||||||
|                                                                                          |  | ||||||
| 
 |  | ||||||
|  | @ -1,317 +0,0 @@ | ||||||
| module TB(); |  | ||||||
| 
 |  | ||||||
| initial |  | ||||||
| begin |  | ||||||
|      $fsdbDumpfile("TB.fsdb"); |  | ||||||
|      $fsdbDumpvars(0, TB); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg             rstn; |  | ||||||
| 
 |  | ||||||
| reg     [31:0]  a0_re; |  | ||||||
| reg     [31:0]  a0_im; |  | ||||||
| reg     [31:0]  ab0_re; |  | ||||||
| reg     [31:0]  ab0_im; |  | ||||||
| reg     [31:0]  a1_re; |  | ||||||
| reg     [31:0]  a1_im; |  | ||||||
| reg     [31:0]  ab1_re; |  | ||||||
| reg     [31:0]  ab1_im; |  | ||||||
| reg     [31:0]  a2_re; |  | ||||||
| reg     [31:0]  a2_im; |  | ||||||
| reg     [31:0]  ab2_re; |  | ||||||
| reg     [31:0]  ab2_im; |  | ||||||
| reg     [31:0]  a3_re; |  | ||||||
| reg     [31:0]  a3_im; |  | ||||||
| reg     [31:0]  ab3_re; |  | ||||||
| reg     [31:0]  ab3_im; |  | ||||||
| reg     [31:0]  a4_re; |  | ||||||
| reg     [31:0]  a4_im; |  | ||||||
| reg     [31:0]  ab4_re; |  | ||||||
| reg     [31:0]  ab4_im; |  | ||||||
| reg     [31:0]  a5_re; |  | ||||||
| reg     [31:0]  a5_im; |  | ||||||
| reg     [31:0]  ab5_re; |  | ||||||
| reg     [31:0]  ab5_im; |  | ||||||
| reg     [31:0] bb0_re; |  | ||||||
| reg     [31:0] bb1_re; |  | ||||||
| reg     [31:0] bb2_re; |  | ||||||
| reg     [31:0] bb3_re; |  | ||||||
| reg     [31:0] bb4_re; |  | ||||||
| reg     [31:0] bb5_re; |  | ||||||
| reg     [31:0] bb0_im; |  | ||||||
| reg     [31:0] bb1_im; |  | ||||||
| reg     [31:0] bb2_im; |  | ||||||
| reg     [31:0] bb3_im; |  | ||||||
| reg     [31:0] bb4_im; |  | ||||||
| reg     [31:0] bb5_im; |  | ||||||
| 
 |  | ||||||
| reg     [47:0]          fcw; |  | ||||||
| 
 |  | ||||||
| reg     [21:0]  cnt; |  | ||||||
| reg     [15:0]  din_rect; |  | ||||||
| reg     [15:0]  din_cos; |  | ||||||
| reg     [15:0]  iir_in; |  | ||||||
| 
 |  | ||||||
| reg    [1 :0]  source_mode; |  | ||||||
| wire    [15:0]  cos; |  | ||||||
| wire    [15:0]  sin; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| reg             clk; |  | ||||||
| reg             clk_div2; |  | ||||||
| reg             clk_div4; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|                 #0; |  | ||||||
|                 rstn    =         1'b0; |  | ||||||
|                 clk     =         1'b0; |  | ||||||
|                 clk_div2     =         1'b0; |  | ||||||
|                 clk_div4     =         1'b0; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|                 a0_re   =        32'd55007237 ; |  | ||||||
|                 a1_re   =        1*32'd32690030 ; |  | ||||||
|                 a2_re   =        1*32'd429516; |  | ||||||
|                 a3_re   =        32'd0; |  | ||||||
|                 a4_re   =        32'd0; |  | ||||||
|                 a5_re   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 a0_im   =        32'd0; |  | ||||||
|                 a1_im   =        32'd0; |  | ||||||
|                 a2_im   =        32'd0; |  | ||||||
|                 a3_im   =        32'd0; |  | ||||||
|                 a4_im   =        32'd0; |  | ||||||
|                 a5_im   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 ab0_re   =        32'd54894517; |  | ||||||
|                 ab1_re   =        1*32'd32664510; |  | ||||||
|                 ab2_re   =        1*32'd429381; |  | ||||||
|                 ab3_re   =        32'd0; |  | ||||||
|                 ab4_re   =        32'd0; |  | ||||||
|                 ab5_re   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 ab0_im   =        32'd0; |  | ||||||
|                 ab1_im   =        32'd0; |  | ||||||
|                 ab2_im   =        32'd0; |  | ||||||
|                 ab3_im   =        32'd0; |  | ||||||
|                 ab4_im   =        32'd0; |  | ||||||
|                 ab5_im   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 bb0_re   =        32'd2138691506; |  | ||||||
|                 bb1_re   =        32'd2144132133; |  | ||||||
|                 bb2_re   =        32'd2146141622; |  | ||||||
|                 bb3_re   =        32'd0; |  | ||||||
|                 bb4_re   =        32'd0; |  | ||||||
|                 bb5_re   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 bb0_im   =        32'd0; |  | ||||||
|                 bb1_im   =        32'd0; |  | ||||||
|                 bb2_im   =        32'd0; |  | ||||||
|                 bb3_im   =        32'd0; |  | ||||||
|                 bb4_im   =        32'd0; |  | ||||||
|                 bb5_im   =        32'd0; |  | ||||||
| 
 |  | ||||||
|                 fcw     =       48'h0840_0000_0000; |  | ||||||
| 
 |  | ||||||
|                 din_rect  =      16'd0;  |  | ||||||
|                 din_cos   =      16'd0;  |  | ||||||
| 
 |  | ||||||
|                 #300; |  | ||||||
|                 rstn      =      1'b1; |  | ||||||
|                 #16600300; |  | ||||||
| //              din_rect  =      16'd30000;  |  | ||||||
| //              en  =   1'b1;  |  | ||||||
|                 #6400; |  | ||||||
|                 #64000; |  | ||||||
| //              din_rect  =      16'd0;  |  | ||||||
| 
 |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| always #200 clk = ~clk; |  | ||||||
| always #400 clk_div2 = ~clk_div2; |  | ||||||
| always #800 clk_div4 = ~clk_div4; |  | ||||||
| 
 |  | ||||||
| always@(posedge clk_div2 or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         cnt     <=      22'd0; |  | ||||||
|                 else |  | ||||||
|                         cnt     <=      cnt + 22'd1; |  | ||||||
| 
 |  | ||||||
| initial  |  | ||||||
| begin |  | ||||||
|         wait(cnt[16]==1'b1) |  | ||||||
|                         $finish(0); |  | ||||||
| end |  | ||||||
|                    |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         din_rect        <=      22'd0; |  | ||||||
|                 else if(cnt >= 100 && cnt <=10100) |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd30000; |  | ||||||
|                     end |  | ||||||
|                 else  |  | ||||||
|                     begin |  | ||||||
|                         din_rect        <=      16'd0; |  | ||||||
|                     end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk or negedge rstn) |  | ||||||
|                 if(!rstn) |  | ||||||
|                         begin |  | ||||||
|                                 iir_in    <=    16'd0; |  | ||||||
|                         end |  | ||||||
|                 else |  | ||||||
| 
 |  | ||||||
| assign source_mode = 2'b01; |  | ||||||
| 
 |  | ||||||
| always @(*) |  | ||||||
| 
 |  | ||||||
|         case(source_mode) |  | ||||||
|                 2'b01 :   iir_in = din_rect; |  | ||||||
|         endcase |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  intp_mode; |  | ||||||
| assign intp_mode = 2'b10; |  | ||||||
| 
 |  | ||||||
| wire    [1:0]  dac_mode_sel; |  | ||||||
| assign dac_mode_sel = 2'b00; |  | ||||||
| 
 |  | ||||||
| wire    tc_bypass; |  | ||||||
| wire    vldo; |  | ||||||
| 
 |  | ||||||
| assign    tc_bypass  =  1'b0; |  | ||||||
| 
 |  | ||||||
| reg  en; |  | ||||||
| always  @(posedge clk or negedge rstn)begin |  | ||||||
|     if(rstn==1'b0)begin |  | ||||||
|         en <= 0; |  | ||||||
|     end |  | ||||||
|     else begin |  | ||||||
|         en <= ~en; |  | ||||||
|     end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_p0; |  | ||||||
| wire    [15:0]  dout_p1; |  | ||||||
| wire    [15:0]  dout_p2; |  | ||||||
| wire    [15:0]  dout_p3; |  | ||||||
| 
 |  | ||||||
| z_dsp           inst_z_dsp_en |  | ||||||
|                ( |  | ||||||
|                         .clk                    (clk                  ), |  | ||||||
|                         .en                    (en                  ), |  | ||||||
|                         .rstn                   (rstn                   ), |  | ||||||
|                         .tc_bypass              (tc_bypass              ), |  | ||||||
|                         .vldi                   (iir_in[14]             ), |  | ||||||
|                         .dac_mode_sel           (dac_mode_sel           ), |  | ||||||
|                         .intp_mode              (intp_mode              ), |  | ||||||
|                         .din                 (iir_in                 ), |  | ||||||
|                         .a0_re                  (a0_re                  ), |  | ||||||
|                         .a0_im                  (a0_im                  ), |  | ||||||
|                         .ab0_re                  (ab0_re                  ), |  | ||||||
|                         .ab0_im                  (ab0_im                  ), |  | ||||||
| 			.bb0_re			(bb0_re                  ), |  | ||||||
| 			.bb0_im			(bb0_im                  ), |  | ||||||
|                         .a1_re                  (a1_re                  ), |  | ||||||
|                         .a1_im                  (a1_im                  ), |  | ||||||
|                         .ab1_re                  (ab1_re                  ), |  | ||||||
|                         .ab1_im                  (ab1_im                  ), |  | ||||||
| 			.bb1_re			(bb1_re                  ), |  | ||||||
| 			.bb1_im			(bb1_im                  ), |  | ||||||
|                         .a2_re                  (a2_re                  ), |  | ||||||
|                         .a2_im                  (a2_im                  ), |  | ||||||
|                         .ab2_re                  (ab2_re                  ), |  | ||||||
|                         .ab2_im                  (ab2_im                  ),  |  | ||||||
| 			.bb2_re			(bb2_re                  ), |  | ||||||
| 			.bb2_im			(bb2_im                  ), |  | ||||||
|                         .a3_re                  (a3_re                  ), |  | ||||||
|                         .a3_im                  (a3_im                  ), |  | ||||||
|                         .ab3_re                  (ab3_re                  ), |  | ||||||
|                         .ab3_im                  (ab3_im                  ), |  | ||||||
| 			.bb3_re			(bb3_re                  ), |  | ||||||
| 			.bb3_im			(bb3_im                  ), |  | ||||||
|                         .a4_re                  (a4_re                  ), |  | ||||||
|                         .a4_im                  (a4_im                  ), |  | ||||||
|                         .ab4_re                  (ab4_re                  ), |  | ||||||
|                         .ab4_im                  (ab4_im                  ), |  | ||||||
| 			.bb4_re			(bb4_re                  ), |  | ||||||
| 			.bb4_im			(bb4_im                  ), |  | ||||||
|                         .a5_re                  (a5_re                  ), |  | ||||||
|                         .a5_im                  (a5_im                  ), |  | ||||||
|                         .ab5_re                  (ab5_re                  ), |  | ||||||
|                         .ab5_im                  (ab5_im                  ),   |  | ||||||
| 			.bb5_re			(bb5_re                  ), |  | ||||||
| 			.bb5_im			(bb5_im                  ),                        |  | ||||||
|                         .dout0                  (dout_p0               ), |  | ||||||
|                         .dout1                  (dout_p1               ), |  | ||||||
|                         .dout2                  (dout_p2               ), |  | ||||||
|                         .dout3                  (dout_p3               ), |  | ||||||
|                         .vldo                   (vldo                       ) |  | ||||||
| 
 |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
| wire    [15:0]  dout_clkl_p0; |  | ||||||
| wire    [15:0]  dout_clkl_p1; |  | ||||||
| wire    [15:0]  dout_clkl_p2; |  | ||||||
| wire    [15:0]  dout_clkl_p3; |  | ||||||
| wire    [15:0]  dout_clkl_p4; |  | ||||||
| wire    [15:0]  dout_clkl_p5; |  | ||||||
| wire    [15:0]  dout_clkl_p6; |  | ||||||
| wire    [15:0]  dout_clkl_p7; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| integer signed In_fid; |  | ||||||
| integer signed OrgOut_fid; |  | ||||||
| integer signed dout0_fid;  |  | ||||||
| integer signed dout1_fid; |  | ||||||
| integer signed dout2_fid; |  | ||||||
| integer signed dout3_fid; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|     #0; |  | ||||||
|     In_fid         = $fopen("./in.dat")    ; |  | ||||||
|     OrgOut_fid     = $fopen("./OrgOut.dat"); |  | ||||||
|     dout0_fid      =       $fopen("./dout0.dat"); |  | ||||||
|     dout1_fid      =       $fopen("./dout1.dat"); |  | ||||||
|     dout2_fid      =       $fopen("./dout2.dat"); |  | ||||||
|     dout3_fid      =       $fopen("./dout3.dat"); |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| always@(posedge clk) |  | ||||||
|     if(cnt >= 90)  begin |  | ||||||
|             $fwrite(In_fid,    "%d\n",$signed(TB.inst_z_dsp_en.inst_TailCorr_top.din)); |  | ||||||
|             $fwrite(OrgOut_fid,"%d\n",$signed(TB.inst_z_dsp_en.inst_TailCorr_top.Ysum)); |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
| always@(posedge clk) |  | ||||||
|     if(cnt >= 90 ) |  | ||||||
|         begin |  | ||||||
|             $fwrite(dout0_fid,"%d\n",$signed(dout_p0)); |  | ||||||
|             $fwrite(dout1_fid,"%d\n",$signed(dout_p1)); |  | ||||||
|             $fwrite(dout2_fid,"%d\n",$signed(dout_p2)); |  | ||||||
|             $fwrite(dout3_fid,"%d\n",$signed(dout_p3)); |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
|                                                                                          |  | ||||||
| integer signed doutp0_fid;  |  | ||||||
| integer signed doutp1_fid; |  | ||||||
| 
 |  | ||||||
| initial begin |  | ||||||
|     #0; |  | ||||||
|     doutp0_fid      =       $fopen("./doutp0.dat"); |  | ||||||
|     doutp1_fid      =       $fopen("./doutp1.dat"); |  | ||||||
| end |  | ||||||
|                                                                                        |  | ||||||
| always@(posedge clk) |  | ||||||
|     if(cnt >= 90 && en) |  | ||||||
|         begin |  | ||||||
|             $fwrite(doutp0_fid,"%d\n",$signed(TB.inst_z_dsp_en.inst_TailCorr_top.dout_p0)); |  | ||||||
|             $fwrite(doutp1_fid,"%d\n",$signed(TB.inst_z_dsp_en.inst_TailCorr_top.dout_p1)); |  | ||||||
|         end |  | ||||||
| 
 |  | ||||||
| endmodule  |  | ||||||
|   |  | ||||||
		Loading…
	
		Reference in New Issue