Modify the directory structure 2th
This commit is contained in:
		
							parent
							
								
									b95b0ba2d2
								
							
						
					
					
						commit
						fda936e228
					
				|  | @ -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 // |  | ||||||
		Loading…
	
		Reference in New Issue