| `timescale 1ns / 1ps | |
| module testbench; | |
| parameter integer ACASCREG = 1; | |
| parameter integer ADREG = 1; | |
| parameter integer ALUMODEREG = 1; | |
| parameter integer AREG = 1; | |
| parameter AUTORESET_PATDET = "NO_RESET"; | |
| parameter A_INPUT = "DIRECT"; | |
| parameter integer BCASCREG = 1; | |
| parameter integer BREG = 1; | |
| parameter B_INPUT = "DIRECT"; | |
| parameter integer CARRYINREG = 1; | |
| parameter integer CARRYINSELREG = 1; | |
| parameter integer CREG = 1; | |
| parameter integer DREG = 1; | |
| parameter integer INMODEREG = 1; | |
| parameter integer MREG = 1; | |
| parameter integer OPMODEREG = 1; | |
| parameter integer PREG = 1; | |
| parameter SEL_MASK = "MASK"; | |
| parameter SEL_PATTERN = "PATTERN"; | |
| parameter USE_DPORT = "FALSE"; | |
| parameter USE_MULT = "MULTIPLY"; | |
| parameter USE_PATTERN_DETECT = "NO_PATDET"; | |
| parameter USE_SIMD = "ONE48"; | |
| parameter [47:0] MASK = 48'h3FFFFFFFFFFF; | |
| parameter [47:0] PATTERN = 48'h000000000000; | |
| parameter [3:0] IS_ALUMODE_INVERTED = 4'b0; | |
| parameter [0:0] IS_CARRYIN_INVERTED = 1'b0; | |
| parameter [0:0] IS_CLK_INVERTED = 1'b0; | |
| parameter [4:0] IS_INMODE_INVERTED = 5'b0; | |
| parameter [6:0] IS_OPMODE_INVERTED = 7'b0; | |
| reg CLK; | |
| reg CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL; | |
| reg CED, CEINMODE, CEM, CEP; | |
| reg RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP; | |
| reg [29:0] A, ACIN; | |
| reg [17:0] B, BCIN; | |
| reg [47:0] C; | |
| reg [24:0] D; | |
| reg [47:0] PCIN; | |
| reg [3:0] ALUMODE; | |
| reg [2:0] CARRYINSEL; | |
| reg [4:0] INMODE; | |
| reg [6:0] OPMODE; | |
| reg CARRYCASCIN, CARRYIN, MULTSIGNIN; | |
| output [29:0] ACOUT, REF_ACOUT; | |
| output [17:0] BCOUT, REF_BCOUT; | |
| output CARRYCASCOUT, REF_CARRYCASCOUT; | |
| output [3:0] CARRYOUT, REF_CARRYOUT; | |
| output MULTSIGNOUT, REF_MULTSIGNOUT; | |
| output OVERFLOW, REF_OVERFLOW; | |
| output [47:0] P, REF_P; | |
| output PATTERNBDETECT, REF_PATTERNBDETECT; | |
| output PATTERNDETECT, REF_PATTERNDETECT; | |
| output [47:0] PCOUT, REF_PCOUT; | |
| output UNDERFLOW, REF_UNDERFLOW; | |
| integer errcount = 0; | |
| reg ERROR_FLAG = 0; | |
| task clkcycle; | |
| begin | |
| #5; | |
| CLK = ~CLK; | |
| #10; | |
| CLK = ~CLK; | |
| #2; | |
| ERROR_FLAG = 0; | |
| if (REF_P !== P) begin | |
| $display("ERROR at %1t: REF_P=%b UUT_P=%b DIFF=%b", $time, REF_P, P, REF_P ^ P); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| if (REF_CARRYOUT !== CARRYOUT) begin | |
| $display("ERROR at %1t: REF_CARRYOUT=%b UUT_CARRYOUT=%b", $time, REF_CARRYOUT, CARRYOUT); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| if (REF_PATTERNDETECT !== PATTERNDETECT) begin | |
| $display("ERROR at %1t: REF_PATTERNDETECT=%b UUT_PATTERNDETECT=%b DIFF=%b REF_P=%b P=%b", $time, REF_PATTERNDETECT, PATTERNDETECT, REF_PATTERNDETECT ^ PATTERNDETECT, REF_P, P); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| if (REF_PATTERNBDETECT !== PATTERNBDETECT) begin | |
| $display("ERROR at %1t: REF_PATTERNBDETECT=%b UUT_PATTERNBDETECT=%b DIFF=%b", $time, REF_PATTERNBDETECT, PATTERNBDETECT, REF_PATTERNBDETECT ^ PATTERNBDETECT); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| if (REF_OVERFLOW !== OVERFLOW) begin | |
| $display("ERROR at %1t: REF_OVERFLOW=%b UUT_OVERFLOW=%b DIFF=%b", $time, REF_OVERFLOW, OVERFLOW, REF_OVERFLOW ^ OVERFLOW); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| if (REF_UNDERFLOW !== UNDERFLOW) begin | |
| $display("ERROR at %1t: REF_UNDERFLOW=%b UUT_UNDERFLOW=%b DIFF=%b", $time, REF_UNDERFLOW, UNDERFLOW, REF_UNDERFLOW ^ UNDERFLOW); | |
| errcount = errcount + 1; | |
| ERROR_FLAG = 1; | |
| end | |
| #3; | |
| end | |
| endtask | |
| reg config_valid = 0; | |
| task drc; | |
| begin | |
| config_valid = 1; | |
| if (AREG != 2 && INMODE[0]) config_valid = 0; | |
| if (BREG != 2 && INMODE[4]) config_valid = 0; | |
| if (USE_SIMD != "ONE48" && OPMODE[3:0] == 4'b0101) config_valid = 0; | |
| if (OPMODE[1:0] == 2'b10 && PREG != 1) config_valid = 0; | |
| if ((OPMODE[3:2] == 2'b01) ^ (OPMODE[1:0] == 2'b01) == 1'b1) config_valid = 0; | |
| if ((OPMODE[6:4] == 3'b010 || OPMODE[6:4] == 3'b110) && PREG != 1) config_valid = 0; | |
| if ((OPMODE[6:4] == 3'b100) && (PREG != 1 || OPMODE[3:0] != 4'b1000 || ALUMODE[3:2] == 2'b01 || ALUMODE[3:2] == 2'b11)) config_valid = 0; | |
| if ((CARRYINSEL == 3'b100 || CARRYINSEL == 3'b101 || CARRYINSEL == 3'b111) && (PREG != 1)) config_valid = 0; | |
| if (OPMODE[6:4] == 3'b111) config_valid = 0; | |
| if ((OPMODE[3:0] == 4'b0101) && CARRYINSEL == 3'b010) config_valid = 0; | |
| if (CARRYINSEL == 3'b000 && OPMODE == 7'b1001000) config_valid = 0; | |
| if ((ALUMODE[3:2] == 2'b01 || ALUMODE[3:2] == 2'b11) && OPMODE[3:2] != 2'b00 && OPMODE[3:2] != 2'b10) config_valid = 0; | |
| end | |
| endtask | |
| initial begin | |
| $dumpfile("test_dsp_model.vcd"); | |
| $dumpvars(0, testbench); | |
| #2; | |
| CLK = 1'b0; | |
| {CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL} = 9'b111111111; | |
| {CED, CEINMODE, CEM, CEP} = 4'b1111; | |
| {A, B, C, D} = 0; | |
| {ACIN, BCIN, PCIN} = 0; | |
| {ALUMODE, CARRYINSEL, INMODE} = 0; | |
| {OPMODE, CARRYCASCIN, CARRYIN, MULTSIGNIN} = 0; | |
| {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = ~0; | |
| repeat (10) begin | |
| #10; | |
| CLK = 1'b1; | |
| #10; | |
| CLK = 1'b0; | |
| #10; | |
| CLK = 1'b1; | |
| #10; | |
| CLK = 1'b0; | |
| end | |
| {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = 0; | |
| repeat (10000) begin | |
| clkcycle; | |
| config_valid = 0; | |
| while (!config_valid) begin | |
| A = $urandom; | |
| ACIN = $urandom; | |
| B = $urandom; | |
| BCIN = $urandom; | |
| C = {$urandom, $urandom}; | |
| D = $urandom; | |
| PCIN = {$urandom, $urandom}; | |
| {CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL} = $urandom | $urandom | $urandom; | |
| {CED, CEINMODE, CEM, CEP} = $urandom | $urandom | $urandom | $urandom; | |
| // Otherwise we can accidentally create illegal configs | |
| CEINMODE = CECTRL; | |
| CEALUMODE = CECTRL; | |
| {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = $urandom & $urandom & $urandom & $urandom & $urandom & $urandom; | |
| {ALUMODE, INMODE} = $urandom; | |
| CARRYINSEL = $urandom & $urandom & $urandom; | |
| OPMODE = $urandom; | |
| if ($urandom & 1'b1) | |
| OPMODE[3:0] = 4'b0101; // test multiply more than other modes | |
| {CARRYCASCIN, CARRYIN, MULTSIGNIN} = $urandom; | |
| // So few valid options in these modes, just force one valid option | |
| if (CARRYINSEL == 3'b001) OPMODE = 7'b1010101; | |
| if (CARRYINSEL == 3'b010) OPMODE = 7'b0001010; | |
| if (CARRYINSEL == 3'b011) OPMODE = 7'b0011011; | |
| if (CARRYINSEL == 3'b100) OPMODE = 7'b0110011; | |
| if (CARRYINSEL == 3'b101) OPMODE = 7'b0011010; | |
| if (CARRYINSEL == 3'b110) OPMODE = 7'b0010101; | |
| if (CARRYINSEL == 3'b111) OPMODE = 7'b0100011; | |
| drc; | |
| end | |
| end | |
| if (errcount == 0) begin | |
| $display("All tests passed."); | |
| $finish; | |
| end else begin | |
| $display("Caught %1d errors.", errcount); | |
| $stop; | |
| end | |
| end | |
| DSP48E1 #( | |
| .ACASCREG (ACASCREG), | |
| .ADREG (ADREG), | |
| .ALUMODEREG (ALUMODEREG), | |
| .AREG (AREG), | |
| .AUTORESET_PATDET (AUTORESET_PATDET), | |
| .A_INPUT (A_INPUT), | |
| .BCASCREG (BCASCREG), | |
| .BREG (BREG), | |
| .B_INPUT (B_INPUT), | |
| .CARRYINREG (CARRYINREG), | |
| .CARRYINSELREG (CARRYINSELREG), | |
| .CREG (CREG), | |
| .DREG (DREG), | |
| .INMODEREG (INMODEREG), | |
| .MREG (MREG), | |
| .OPMODEREG (OPMODEREG), | |
| .PREG (PREG), | |
| .SEL_MASK (SEL_MASK), | |
| .SEL_PATTERN (SEL_PATTERN), | |
| .USE_DPORT (USE_DPORT), | |
| .USE_MULT (USE_MULT), | |
| .USE_PATTERN_DETECT (USE_PATTERN_DETECT), | |
| .USE_SIMD (USE_SIMD), | |
| .MASK (MASK), | |
| .PATTERN (PATTERN), | |
| .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED), | |
| .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED), | |
| .IS_CLK_INVERTED (IS_CLK_INVERTED), | |
| .IS_INMODE_INVERTED (IS_INMODE_INVERTED), | |
| .IS_OPMODE_INVERTED (IS_OPMODE_INVERTED) | |
| ) ref ( | |
| .ACOUT (REF_ACOUT), | |
| .BCOUT (REF_BCOUT), | |
| .CARRYCASCOUT (REF_CARRYCASCOUT), | |
| .CARRYOUT (REF_CARRYOUT), | |
| .MULTSIGNOUT (REF_MULTSIGNOUT), | |
| .OVERFLOW (REF_OVERFLOW), | |
| .P (REF_P), | |
| .PATTERNBDETECT(REF_PATTERNBDETECT), | |
| .PATTERNDETECT (REF_PATTERNDETECT), | |
| .PCOUT (REF_PCOUT), | |
| .UNDERFLOW (REF_UNDERFLOW), | |
| .A (A), | |
| .ACIN (ACIN), | |
| .ALUMODE (ALUMODE), | |
| .B (B), | |
| .BCIN (BCIN), | |
| .C (C), | |
| .CARRYCASCIN (CARRYCASCIN), | |
| .CARRYINSEL (CARRYINSEL), | |
| .CEA1 (CEA1), | |
| .CEA2 (CEA2), | |
| .CEAD (CEAD), | |
| .CEALUMODE (CEALUMODE), | |
| .CEB1 (CEB1), | |
| .CEB2 (CEB2), | |
| .CEC (CEC), | |
| .CECARRYIN (CECARRYIN), | |
| .CECTRL (CECTRL), | |
| .CED (CED), | |
| .CEINMODE (CEINMODE), | |
| .CEM (CEM), | |
| .CEP (CEP), | |
| .CLK (CLK), | |
| .D (D), | |
| .INMODE (INMODE), | |
| .MULTSIGNIN (MULTSIGNIN), | |
| .OPMODE (OPMODE), | |
| .PCIN (PCIN), | |
| .RSTA (RSTA), | |
| .RSTALLCARRYIN (RSTALLCARRYIN), | |
| .RSTALUMODE (RSTALUMODE), | |
| .RSTB (RSTB), | |
| .RSTC (RSTC), | |
| .RSTCTRL (RSTCTRL), | |
| .RSTD (RSTD), | |
| .RSTINMODE (RSTINMODE), | |
| .RSTM (RSTM), | |
| .RSTP (RSTP) | |
| ); | |
| DSP48E1_UUT #( | |
| .ACASCREG (ACASCREG), | |
| .ADREG (ADREG), | |
| .ALUMODEREG (ALUMODEREG), | |
| .AREG (AREG), | |
| .AUTORESET_PATDET (AUTORESET_PATDET), | |
| .A_INPUT (A_INPUT), | |
| .BCASCREG (BCASCREG), | |
| .BREG (BREG), | |
| .B_INPUT (B_INPUT), | |
| .CARRYINREG (CARRYINREG), | |
| .CARRYINSELREG (CARRYINSELREG), | |
| .CREG (CREG), | |
| .DREG (DREG), | |
| .INMODEREG (INMODEREG), | |
| .MREG (MREG), | |
| .OPMODEREG (OPMODEREG), | |
| .PREG (PREG), | |
| .SEL_MASK (SEL_MASK), | |
| .SEL_PATTERN (SEL_PATTERN), | |
| .USE_DPORT (USE_DPORT), | |
| .USE_MULT (USE_MULT), | |
| .USE_PATTERN_DETECT (USE_PATTERN_DETECT), | |
| .USE_SIMD (USE_SIMD), | |
| .MASK (MASK), | |
| .PATTERN (PATTERN), | |
| .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED), | |
| .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED), | |
| .IS_CLK_INVERTED (IS_CLK_INVERTED), | |
| .IS_INMODE_INVERTED (IS_INMODE_INVERTED), | |
| .IS_OPMODE_INVERTED (IS_OPMODE_INVERTED) | |
| ) uut ( | |
| .ACOUT (ACOUT), | |
| .BCOUT (BCOUT), | |
| .CARRYCASCOUT (CARRYCASCOUT), | |
| .CARRYOUT (CARRYOUT), | |
| .MULTSIGNOUT (MULTSIGNOUT), | |
| .OVERFLOW (OVERFLOW), | |
| .P (P), | |
| .PATTERNBDETECT(PATTERNBDETECT), | |
| .PATTERNDETECT (PATTERNDETECT), | |
| .PCOUT (PCOUT), | |
| .UNDERFLOW (UNDERFLOW), | |
| .A (A), | |
| .ACIN (ACIN), | |
| .ALUMODE (ALUMODE), | |
| .B (B), | |
| .BCIN (BCIN), | |
| .C (C), | |
| .CARRYCASCIN (CARRYCASCIN), | |
| .CARRYINSEL (CARRYINSEL), | |
| .CEA1 (CEA1), | |
| .CEA2 (CEA2), | |
| .CEAD (CEAD), | |
| .CEALUMODE (CEALUMODE), | |
| .CEB1 (CEB1), | |
| .CEB2 (CEB2), | |
| .CEC (CEC), | |
| .CECARRYIN (CECARRYIN), | |
| .CECTRL (CECTRL), | |
| .CED (CED), | |
| .CEINMODE (CEINMODE), | |
| .CEM (CEM), | |
| .CEP (CEP), | |
| .CLK (CLK), | |
| .D (D), | |
| .INMODE (INMODE), | |
| .MULTSIGNIN (MULTSIGNIN), | |
| .OPMODE (OPMODE), | |
| .PCIN (PCIN), | |
| .RSTA (RSTA), | |
| .RSTALLCARRYIN (RSTALLCARRYIN), | |
| .RSTALUMODE (RSTALUMODE), | |
| .RSTB (RSTB), | |
| .RSTC (RSTC), | |
| .RSTCTRL (RSTCTRL), | |
| .RSTD (RSTD), | |
| .RSTINMODE (RSTINMODE), | |
| .RSTM (RSTM), | |
| .RSTP (RSTP) | |
| ); | |
| endmodule | |
| module mult_noreg_nopreadd_nocasc; | |
| testbench #( | |
| .ACASCREG (0), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (0), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (0), | |
| .BREG (0), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (0), | |
| .DREG (0), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (0), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("FALSE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module mult_allreg_nopreadd_nocasc; | |
| testbench #( | |
| .ACASCREG (1), | |
| .ADREG (1), | |
| .ALUMODEREG (1), | |
| .AREG (2), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (1), | |
| .BREG (2), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (1), | |
| .CARRYINSELREG (1), | |
| .CREG (1), | |
| .DREG (1), | |
| .INMODEREG (1), | |
| .MREG (1), | |
| .OPMODEREG (1), | |
| .PREG (1), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("FALSE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module mult_noreg_preadd_nocasc; | |
| testbench #( | |
| .ACASCREG (0), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (0), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (0), | |
| .BREG (0), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (0), | |
| .DREG (0), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (0), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("TRUE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module mult_allreg_preadd_nocasc; | |
| testbench #( | |
| .ACASCREG (1), | |
| .ADREG (1), | |
| .ALUMODEREG (1), | |
| .AREG (2), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (1), | |
| .BREG (2), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (1), | |
| .CARRYINSELREG (1), | |
| .CREG (1), | |
| .DREG (1), | |
| .INMODEREG (1), | |
| .MREG (1), | |
| .OPMODEREG (1), | |
| .PREG (1), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("TRUE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module mult_inreg_preadd_nocasc; | |
| testbench #( | |
| .ACASCREG (1), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (1), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (1), | |
| .BREG (1), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (1), | |
| .DREG (1), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (0), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("TRUE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module simd12_preadd_noreg_nocasc; | |
| testbench #( | |
| .ACASCREG (0), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (0), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (0), | |
| .BREG (0), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (0), | |
| .DREG (0), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (0), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("TRUE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("FOUR12"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module simd24_preadd_noreg_nocasc; | |
| testbench #( | |
| .ACASCREG (0), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (0), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (0), | |
| .BREG (0), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (0), | |
| .DREG (0), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (0), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("TRUE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("NO_PATDET"), | |
| .USE_SIMD ("TWO24"), | |
| .MASK (48'h3FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule | |
| module macc_overflow_underflow; | |
| testbench #( | |
| .ACASCREG (0), | |
| .ADREG (0), | |
| .ALUMODEREG (0), | |
| .AREG (0), | |
| .AUTORESET_PATDET ("NO_RESET"), | |
| .A_INPUT ("DIRECT"), | |
| .BCASCREG (0), | |
| .BREG (0), | |
| .B_INPUT ("DIRECT"), | |
| .CARRYINREG (0), | |
| .CARRYINSELREG (0), | |
| .CREG (0), | |
| .DREG (0), | |
| .INMODEREG (0), | |
| .MREG (0), | |
| .OPMODEREG (0), | |
| .PREG (1), | |
| .SEL_MASK ("MASK"), | |
| .SEL_PATTERN ("PATTERN"), | |
| .USE_DPORT ("FALSE"), | |
| .USE_MULT ("DYNAMIC"), | |
| .USE_PATTERN_DETECT ("PATDET"), | |
| .USE_SIMD ("ONE48"), | |
| .MASK (48'h1FFFFFFFFFFF), | |
| .PATTERN (48'h000000000000), | |
| .IS_ALUMODE_INVERTED(4'b0), | |
| .IS_CARRYIN_INVERTED(1'b0), | |
| .IS_CLK_INVERTED (1'b0), | |
| .IS_INMODE_INVERTED (5'b0), | |
| .IS_OPMODE_INVERTED (7'b0) | |
| ) testbench (); | |
| endmodule |