| `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 |