mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-20 14:20:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			567 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			567 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
| `timescale 1ns / 1ps
 | |
| 
 | |
| module testbench;
 | |
| 	parameter [0:0] NEG_TRIGGER = 0;
 | |
| 	parameter [0:0] C_REG = 0;
 | |
| 	parameter [0:0] A_REG = 0;
 | |
| 	parameter [0:0] B_REG = 0;
 | |
| 	parameter [0:0] D_REG = 0;
 | |
| 	parameter [0:0] TOP_8x8_MULT_REG = 0;
 | |
| 	parameter [0:0] BOT_8x8_MULT_REG = 0;
 | |
| 	parameter [0:0] PIPELINE_16x16_MULT_REG1 = 0;
 | |
| 	parameter [0:0] PIPELINE_16x16_MULT_REG2 = 0;
 | |
| 	parameter [1:0] TOPOUTPUT_SELECT = 0;
 | |
| 	parameter [1:0] TOPADDSUB_LOWERINPUT = 0;
 | |
| 	parameter [0:0] TOPADDSUB_UPPERINPUT = 1;
 | |
| 	parameter [1:0] TOPADDSUB_CARRYSELECT = 0;
 | |
| 	parameter [1:0] BOTOUTPUT_SELECT = 0;
 | |
| 	parameter [1:0] BOTADDSUB_LOWERINPUT = 0;
 | |
| 	parameter [0:0] BOTADDSUB_UPPERINPUT = 1;
 | |
| 	parameter [1:0] BOTADDSUB_CARRYSELECT = 0;
 | |
| 	parameter [0:0] MODE_8x8 = 0;
 | |
| 	parameter [0:0] A_SIGNED = 0;
 | |
| 	parameter [0:0] B_SIGNED = 0;
 | |
| 
 | |
| 	reg CLK, CE;
 | |
| 	reg [15:0] C, A, B, D;
 | |
| 	reg AHOLD, BHOLD, CHOLD, DHOLD;
 | |
| 	reg IRSTTOP, IRSTBOT;
 | |
| 	reg ORSTTOP, ORSTBOT;
 | |
| 	reg OLOADTOP, OLOADBOT;
 | |
| 	reg ADDSUBTOP, ADDSUBBOT;
 | |
| 	reg OHOLDTOP, OHOLDBOT;
 | |
| 	reg CI, ACCUMCI, SIGNEXTIN;
 | |
| 
 | |
| 	output [31:0] REF_O, UUT_O;
 | |
| 	output REF_CO, REF_ACCUMCO, REF_SIGNEXTOUT;
 | |
| 	output UUT_CO, UUT_ACCUMCO, UUT_SIGNEXTOUT;
 | |
| 
 | |
| 	integer errcount = 0;
 | |
| 
 | |
| 	task clkcycle;
 | |
| 		begin
 | |
| 			#5;
 | |
| 			CLK = ~CLK;
 | |
| 			#10;
 | |
| 			CLK = ~CLK;
 | |
| 			#2;
 | |
| 			if (REF_O !== UUT_O) begin
 | |
| 				$display("ERROR at %1t: REF_O=%b UUT_O=%b DIFF=%b", $time, REF_O, UUT_O, REF_O ^ UUT_O);
 | |
| 				errcount = errcount + 1;
 | |
| 			end
 | |
| 			if (REF_CO !== UUT_CO) begin
 | |
| 				$display("ERROR at %1t: REF_CO=%b UUT_CO=%b", $time, REF_CO, UUT_CO);
 | |
| 				errcount = errcount + 1;
 | |
| 			end
 | |
| 			if (REF_ACCUMCO !== UUT_ACCUMCO) begin
 | |
| 				$display("ERROR at %1t: REF_ACCUMCO=%b UUT_ACCUMCO=%b", $time, REF_ACCUMCO, UUT_ACCUMCO);
 | |
| 				errcount = errcount + 1;
 | |
| 			end
 | |
| 			if (REF_SIGNEXTOUT !== UUT_SIGNEXTOUT) begin
 | |
| 				$display("ERROR at %1t: REF_SIGNEXTOUT=%b UUT_SIGNEXTOUT=%b", $time, REF_SIGNEXTOUT, UUT_SIGNEXTOUT);
 | |
| 				errcount = errcount + 1;
 | |
| 			end
 | |
| 			#3;
 | |
| 		end
 | |
| 	endtask
 | |
| 
 | |
| 	initial begin
 | |
| 		$dumpfile("test_dsp_model.vcd");
 | |
| 		$dumpvars(0, testbench);
 | |
| 
 | |
| 		#2;
 | |
| 		CLK = NEG_TRIGGER;
 | |
| 		CE = 1;
 | |
| 		{C, A, B, D} = 0;
 | |
| 		{AHOLD, BHOLD, CHOLD, DHOLD} = 0;
 | |
| 		{OLOADTOP, OLOADBOT} = 0;
 | |
| 		{ADDSUBTOP, ADDSUBBOT} = 0;
 | |
| 		{OHOLDTOP, OHOLDBOT} = 0;
 | |
| 		{CI, ACCUMCI, SIGNEXTIN} = 0;
 | |
| 
 | |
| 		{IRSTTOP, IRSTBOT} = ~0;
 | |
| 		{ORSTTOP, ORSTBOT} = ~0;
 | |
| 
 | |
| 		#3;
 | |
| 		{IRSTTOP, IRSTBOT} = 0;
 | |
| 		{ORSTTOP, ORSTBOT} = 0;
 | |
| 
 | |
| 		repeat (300) begin
 | |
| 			clkcycle;
 | |
| 
 | |
| 			A = $urandom;
 | |
| 			B = $urandom;
 | |
| 			C = $urandom;
 | |
| 			D = $urandom;
 | |
| 
 | |
| 			{AHOLD, BHOLD, CHOLD, DHOLD} = $urandom & $urandom & $urandom;
 | |
| 			{OLOADTOP, OLOADBOT} = $urandom & $urandom & $urandom;
 | |
| 			{ADDSUBTOP, ADDSUBBOT} = $urandom & $urandom & $urandom;
 | |
| 			{OHOLDTOP, OHOLDBOT} = $urandom & $urandom & $urandom;
 | |
| 			{CI, ACCUMCI, SIGNEXTIN} = $urandom & $urandom & $urandom;
 | |
| 
 | |
| 			{IRSTTOP, IRSTBOT} = $urandom & $urandom & $urandom;
 | |
| 			{ORSTTOP, ORSTBOT} = $urandom & $urandom & $urandom;
 | |
| 		end
 | |
| 
 | |
| 		if (errcount == 0) begin
 | |
| 			$display("All tests passed.");
 | |
| 			$finish;
 | |
| 		end else begin
 | |
| 			$display("Caught %1d errors.", errcount);
 | |
| 			$stop;
 | |
| 		end
 | |
| 	end
 | |
| 
 | |
| 	SB_MAC16 #(
 | |
| 		.NEG_TRIGGER              (NEG_TRIGGER             ),
 | |
| 		.C_REG                    (C_REG                   ),
 | |
| 		.A_REG                    (A_REG                   ),
 | |
| 		.B_REG                    (B_REG                   ),
 | |
| 		.D_REG                    (D_REG                   ),
 | |
| 		.TOP_8x8_MULT_REG         (TOP_8x8_MULT_REG        ),
 | |
| 		.BOT_8x8_MULT_REG         (BOT_8x8_MULT_REG        ),
 | |
| 		.PIPELINE_16x16_MULT_REG1 (PIPELINE_16x16_MULT_REG1),
 | |
| 		.PIPELINE_16x16_MULT_REG2 (PIPELINE_16x16_MULT_REG2),
 | |
| 		.TOPOUTPUT_SELECT         (TOPOUTPUT_SELECT        ),
 | |
| 		.TOPADDSUB_LOWERINPUT     (TOPADDSUB_LOWERINPUT    ),
 | |
| 		.TOPADDSUB_UPPERINPUT     (TOPADDSUB_UPPERINPUT    ),
 | |
| 		.TOPADDSUB_CARRYSELECT    (TOPADDSUB_CARRYSELECT   ),
 | |
| 		.BOTOUTPUT_SELECT         (BOTOUTPUT_SELECT        ),
 | |
| 		.BOTADDSUB_LOWERINPUT     (BOTADDSUB_LOWERINPUT    ),
 | |
| 		.BOTADDSUB_UPPERINPUT     (BOTADDSUB_UPPERINPUT    ),
 | |
| 		.BOTADDSUB_CARRYSELECT    (BOTADDSUB_CARRYSELECT   ),
 | |
| 		.MODE_8x8                 (MODE_8x8                ),
 | |
| 		.A_SIGNED                 (A_SIGNED                ),
 | |
| 		.B_SIGNED                 (B_SIGNED                )
 | |
| 	) ref (
 | |
| 		.CLK        (CLK           ),
 | |
| 		.CE         (CE            ),
 | |
| 		.C          (C             ),
 | |
| 		.A          (A             ),
 | |
| 		.B          (B             ),
 | |
| 		.D          (D             ),
 | |
| 		.AHOLD      (AHOLD         ),
 | |
| 		.BHOLD      (BHOLD         ),
 | |
| 		.CHOLD      (CHOLD         ),
 | |
| 		.DHOLD      (DHOLD         ),
 | |
| 		.IRSTTOP    (IRSTTOP       ),
 | |
| 		.IRSTBOT    (IRSTBOT       ),
 | |
| 		.ORSTTOP    (ORSTTOP       ),
 | |
| 		.ORSTBOT    (ORSTBOT       ),
 | |
| 		.OLOADTOP   (OLOADTOP      ),
 | |
| 		.OLOADBOT   (OLOADBOT      ),
 | |
| 		.ADDSUBTOP  (ADDSUBTOP     ),
 | |
| 		.ADDSUBBOT  (ADDSUBBOT     ),
 | |
| 		.OHOLDTOP   (OHOLDTOP      ),
 | |
| 		.OHOLDBOT   (OHOLDBOT      ),
 | |
| 		.CI         (CI            ),
 | |
| 		.ACCUMCI    (ACCUMCI       ),
 | |
| 		.SIGNEXTIN  (SIGNEXTIN     ),
 | |
| 		.O          (REF_O         ),
 | |
| 		.CO         (REF_CO        ),
 | |
| 		.ACCUMCO    (REF_ACCUMCO   ),
 | |
| 		.SIGNEXTOUT (REF_SIGNEXTOUT)
 | |
| 	);
 | |
| 
 | |
| 	SB_MAC16_UUT #(
 | |
| 		.NEG_TRIGGER              (NEG_TRIGGER             ),
 | |
| 		.C_REG                    (C_REG                   ),
 | |
| 		.A_REG                    (A_REG                   ),
 | |
| 		.B_REG                    (B_REG                   ),
 | |
| 		.D_REG                    (D_REG                   ),
 | |
| 		.TOP_8x8_MULT_REG         (TOP_8x8_MULT_REG        ),
 | |
| 		.BOT_8x8_MULT_REG         (BOT_8x8_MULT_REG        ),
 | |
| 		.PIPELINE_16x16_MULT_REG1 (PIPELINE_16x16_MULT_REG1),
 | |
| 		.PIPELINE_16x16_MULT_REG2 (PIPELINE_16x16_MULT_REG2),
 | |
| 		.TOPOUTPUT_SELECT         (TOPOUTPUT_SELECT        ),
 | |
| 		.TOPADDSUB_LOWERINPUT     (TOPADDSUB_LOWERINPUT    ),
 | |
| 		.TOPADDSUB_UPPERINPUT     (TOPADDSUB_UPPERINPUT    ),
 | |
| 		.TOPADDSUB_CARRYSELECT    (TOPADDSUB_CARRYSELECT   ),
 | |
| 		.BOTOUTPUT_SELECT         (BOTOUTPUT_SELECT        ),
 | |
| 		.BOTADDSUB_LOWERINPUT     (BOTADDSUB_LOWERINPUT    ),
 | |
| 		.BOTADDSUB_UPPERINPUT     (BOTADDSUB_UPPERINPUT    ),
 | |
| 		.BOTADDSUB_CARRYSELECT    (BOTADDSUB_CARRYSELECT   ),
 | |
| 		.MODE_8x8                 (MODE_8x8                ),
 | |
| 		.A_SIGNED                 (A_SIGNED                ),
 | |
| 		.B_SIGNED                 (B_SIGNED                )
 | |
| 	) uut (
 | |
| 		.CLK        (CLK           ),
 | |
| 		.CE         (CE            ),
 | |
| 		.C          (C             ),
 | |
| 		.A          (A             ),
 | |
| 		.B          (B             ),
 | |
| 		.D          (D             ),
 | |
| 		.AHOLD      (AHOLD         ),
 | |
| 		.BHOLD      (BHOLD         ),
 | |
| 		.CHOLD      (CHOLD         ),
 | |
| 		.DHOLD      (DHOLD         ),
 | |
| 		.IRSTTOP    (IRSTTOP       ),
 | |
| 		.IRSTBOT    (IRSTBOT       ),
 | |
| 		.ORSTTOP    (ORSTTOP       ),
 | |
| 		.ORSTBOT    (ORSTBOT       ),
 | |
| 		.OLOADTOP   (OLOADTOP      ),
 | |
| 		.OLOADBOT   (OLOADBOT      ),
 | |
| 		.ADDSUBTOP  (ADDSUBTOP     ),
 | |
| 		.ADDSUBBOT  (ADDSUBBOT     ),
 | |
| 		.OHOLDTOP   (OHOLDTOP      ),
 | |
| 		.OHOLDBOT   (OHOLDBOT      ),
 | |
| 		.CI         (CI            ),
 | |
| 		.ACCUMCI    (ACCUMCI       ),
 | |
| 		.SIGNEXTIN  (SIGNEXTIN     ),
 | |
| 		.O          (UUT_O         ),
 | |
| 		.CO         (UUT_CO        ),
 | |
| 		.ACCUMCO    (UUT_ACCUMCO   ),
 | |
| 		.SIGNEXTOUT (UUT_SIGNEXTOUT)
 | |
| 	);
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_A;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (2),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (0),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (0),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (2),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (0),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (0),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_A_signedA;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (2),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (0),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (0),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (2),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (0),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (0),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_A_signedB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (2),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (0),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (0),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (2),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (0),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (0),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_A_signedAB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (2),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (0),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (0),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (2),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (0),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (0),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_B;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (1),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (1),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_B_signedA;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (1),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (1),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_B_signedB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (1),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (1),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_8x8_B_signedAB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (1),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (1),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (0),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_16x16;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_16x16_signedA;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_16x16_signedB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_comb_16x16_signedAB;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (0),
 | |
| 		.A_REG                     (0),
 | |
| 		.B_REG                     (0),
 | |
| 		.D_REG                     (0),
 | |
| 		.TOP_8x8_MULT_REG          (0),
 | |
| 		.BOT_8x8_MULT_REG          (0),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (0),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (1),
 | |
| 		.B_SIGNED                  (1)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_seq_16x16_A;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (1),
 | |
| 		.A_REG                     (1),
 | |
| 		.B_REG                     (1),
 | |
| 		.D_REG                     (1),
 | |
| 		.TOP_8x8_MULT_REG          (1),
 | |
| 		.BOT_8x8_MULT_REG          (1),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (1),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (1),
 | |
| 		.TOPOUTPUT_SELECT          (0),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (1),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (0),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (1),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 | |
| 
 | |
| module testbench_seq_16x16_B;
 | |
| 	testbench #(
 | |
| 		.NEG_TRIGGER               (0),
 | |
| 		.C_REG                     (1),
 | |
| 		.A_REG                     (1),
 | |
| 		.B_REG                     (1),
 | |
| 		.D_REG                     (1),
 | |
| 		.TOP_8x8_MULT_REG          (1),
 | |
| 		.BOT_8x8_MULT_REG          (1),
 | |
| 		.PIPELINE_16x16_MULT_REG1  (1),
 | |
| 		.PIPELINE_16x16_MULT_REG2  (0),
 | |
| 		.TOPOUTPUT_SELECT          (1),   // 0=P, 1=Q, 2=8x8, 3=16x16
 | |
| 		.TOPADDSUB_LOWERINPUT      (2),   // 0=A, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.TOPADDSUB_UPPERINPUT      (0),   // 0=Q, 1=C
 | |
| 		.TOPADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.BOTOUTPUT_SELECT          (1),   // 0=R, 1=S, 2=8x8, 3=16x16
 | |
| 		.BOTADDSUB_LOWERINPUT      (2),   // 0=B, 1=8x8, 2=16x16, 3=S-EXT
 | |
| 		.BOTADDSUB_UPPERINPUT      (0),   // 0=S, 1=D
 | |
| 		.BOTADDSUB_CARRYSELECT     (2),   // 0=0, 1=1, 2=ACI, 3=CI
 | |
| 		.MODE_8x8                  (0),
 | |
| 		.A_SIGNED                  (0),
 | |
| 		.B_SIGNED                  (0)
 | |
| 	) testbench ();
 | |
| endmodule
 |