-
Notifications
You must be signed in to change notification settings - Fork 68
MULT
The MULT12X12 primitive implements a 12-bit multiplier, which can perform multiplications: DOUT = A * B, DOUT = (A + D) * B, or DOUT = (A - D) * B. This operation is done using two multipliers within each DSP macro unit.
This device is not yet supported in Apicula
Port | Size | Direction |
---|---|---|
A | 12 | input |
B | 12 | input |
CE | 2 | input |
CLK | 2 | input |
DOUT | 24 | output |
RESET | 2 | input |
Parameter | Default Value |
---|---|
AREG_CE | CE0 |
AREG_CLK | BYPASS |
AREG_RESET | RESET0 |
BREG_CE | CE0 |
BREG_CLK | BYPASS |
BREG_RESET | RESET0 |
MULT_RESET_MODE | SYNC |
OREG_CE | CE0 |
OREG_CLK | BYPASS |
OREG_RESET | RESET0 |
PREG_CE | CE0 |
PREG_CLK | BYPASS |
PREG_RESET | RESET0 |
MULT12X12 #(
.AREG_CE(AREG_CE),
.AREG_CLK(AREG_CLK),
.AREG_RESET(AREG_RESET),
.BREG_CE(BREG_CE),
.BREG_CLK(BREG_CLK),
.BREG_RESET(BREG_RESET),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OREG_CE(OREG_CE),
.OREG_CLK(OREG_CLK),
.OREG_RESET(OREG_RESET),
.PREG_CE(PREG_CE),
.PREG_CLK(PREG_CLK),
.PREG_RESET(PREG_RESET)
) mult12x12_inst (
.A(A),
.B(B),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET)
);
The Gowin MULT18X18 primitive supports 18-bit multiplication, taking two 18-bit inputs A and B, and producing a 36-bit output. It has multiple control ports for data selection, enable, clocking, and reset, indicating its potential to be used in more complex digital signal processing applications.
This device is supported in Apicula
Port | Size | Direction |
---|---|---|
A | 18 | input |
ASEL | 1 | input |
ASIGN | 1 | input |
B | 18 | input |
BSEL | 1 | input |
BSIGN | 1 | input |
CE | 1 | input |
CLK | 1 | input |
DOUT | 36 | output |
RESET | 1 | input |
SIA | 18 | input |
SIB | 18 | input |
SOA | 18 | output |
SOB | 18 | output |
Parameter | Default Value |
---|---|
AREG | 0 (0b0) |
ASIGN_REG | 0 (0b0) |
BREG | 0 (0b0) |
BSIGN_REG | 0 (0b0) |
MULT_RESET_MODE | SYNC |
OUT_REG | 0 (0b0) |
PIPE_REG | 0 (0b0) |
SOA_REG | 0 (0b0) |
MULT18X18 #(
.AREG(AREG),
.ASIGN_REG(ASIGN_REG),
.BREG(BREG),
.BSIGN_REG(BSIGN_REG),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT_REG(OUT_REG),
.PIPE_REG(PIPE_REG),
.SOA_REG(SOA_REG)
) mult18x18_inst (
.A(A),
.ASEL(ASEL),
.ASIGN(ASIGN),
.B(B),
.BSEL(BSEL),
.BSIGN(BSIGN),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET),
.SIA(SIA),
.SIB(SIB),
.SOA(SOA),
.SOB(SOB)
);
The MULT27X36 primitive implements 27-bit x 36-bit multiplication. It takes two inputs, A[26:0] and B[35:0], and produces a 62-bit output DOUT[62:0]. The input values are stored in registers, and the operation is controlled by clock (CLK), enable (CE), and reset (RESET) signals.
This device is not yet supported in Apicula
Port | Size | Direction |
---|---|---|
A | 27 | input |
B | 36 | input |
CE | 2 | input |
CLK | 2 | input |
D | 26 | input |
DOUT | 63 | output |
PADDSUB | 1 | input |
PSEL | 1 | input |
RESET | 2 | input |
Parameter | Default Value |
---|---|
AREG_CE | CE0 |
AREG_CLK | BYPASS |
AREG_RESET | RESET0 |
BREG_CE | CE0 |
BREG_CLK | BYPASS |
BREG_RESET | RESET0 |
DREG_CE | CE0 |
DREG_CLK | BYPASS |
DREG_RESET | RESET0 |
DYN_P_ADDSUB | FALSE |
DYN_P_SEL | FALSE |
MULT_RESET_MODE | SYNC |
OREG_CE | CE0 |
OREG_CLK | BYPASS |
OREG_RESET | RESET0 |
PADDSUB_IREG_CE | CE0 |
PADDSUB_IREG_CLK | BYPASS |
PADDSUB_IREG_RESET | RESET0 |
PREG_CE | CE0 |
PREG_CLK | BYPASS |
PREG_RESET | RESET0 |
PSEL_IREG_CE | CE0 |
PSEL_IREG_CLK | BYPASS |
PSEL_IREG_RESET | RESET0 |
P_ADDSUB | 0 (0b0) |
P_SEL | 0 (0b0) |
MULT27X36 #(
.AREG_CE(AREG_CE),
.AREG_CLK(AREG_CLK),
.AREG_RESET(AREG_RESET),
.BREG_CE(BREG_CE),
.BREG_CLK(BREG_CLK),
.BREG_RESET(BREG_RESET),
.DREG_CE(DREG_CE),
.DREG_CLK(DREG_CLK),
.DREG_RESET(DREG_RESET),
.DYN_P_ADDSUB(DYN_P_ADDSUB),
.DYN_P_SEL(DYN_P_SEL),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OREG_CE(OREG_CE),
.OREG_CLK(OREG_CLK),
.OREG_RESET(OREG_RESET),
.PADDSUB_IREG_CE(PADDSUB_IREG_CE),
.PADDSUB_IREG_CLK(PADDSUB_IREG_CLK),
.PADDSUB_IREG_RESET(PADDSUB_IREG_RESET),
.PREG_CE(PREG_CE),
.PREG_CLK(PREG_CLK),
.PREG_RESET(PREG_RESET),
.PSEL_IREG_CE(PSEL_IREG_CE),
.PSEL_IREG_CLK(PSEL_IREG_CLK),
.PSEL_IREG_RESET(PSEL_IREG_RESET),
.P_ADDSUB(P_ADDSUB),
.P_SEL(P_SEL)
) mult27x36_inst (
.A(A),
.B(B),
.CE(CE),
.CLK(CLK),
.D(D),
.DOUT(DOUT),
.PADDSUB(PADDSUB),
.PSEL(PSEL),
.RESET(RESET)
);
The MULT36X36 primitive supports 36-bit multiplication, as indicated by its name. It takes two 36-bit inputs A and B, and produces a 72-bit output MOUT[71:0]. The inputs are denoted as REGA (or IREGA) for A and REGB (or IREGB) for B, while the output is DOUT. The primitive also includes control signals such as CLK, CE, RESET, ASIGN, and BSIGN.
This device is supported in Apicula.
Port | Size | Direction |
---|---|---|
A | 36 | input |
ASIGN | 1 | input |
B | 36 | input |
BSIGN | 1 | input |
CE | 1 | input |
CLK | 1 | input |
DOUT | 72 | output |
RESET | 1 | input |
Parameter | Default Value |
---|---|
AREG | 0 (0b0) |
ASIGN_REG | 0 (0b0) |
BREG | 0 (0b0) |
BSIGN_REG | 0 (0b0) |
MULT_RESET_MODE | SYNC |
OUT0_REG | 0 (0b0) |
OUT1_REG | 0 (0b0) |
PIPE_REG | 0 (0b0) |
MULT36X36 #(
.AREG(AREG),
.ASIGN_REG(ASIGN_REG),
.BREG(BREG),
.BSIGN_REG(BSIGN_REG),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT0_REG(OUT0_REG),
.OUT1_REG(OUT1_REG),
.PIPE_REG(PIPE_REG)
) mult36x36_inst (
.A(A),
.ASIGN(ASIGN),
.B(B),
.BSIGN(BSIGN),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET)
);
The Gowin MULT9X9 primitive supports 9-bit multiplication, implementing the mathematical operation: DOUT = A * B.
This device is supported in Apicula.
Port | Size | Direction |
---|---|---|
A | 9 | input |
ASEL | 1 | input |
ASIGN | 1 | input |
B | 9 | input |
BSEL | 1 | input |
BSIGN | 1 | input |
CE | 1 | input |
CLK | 1 | input |
DOUT | 18 | output |
RESET | 1 | input |
SIA | 9 | input |
SIB | 9 | input |
SOA | 9 | output |
SOB | 9 | output |
Parameter | Default Value |
---|---|
AREG | 0 (0b0) |
ASIGN_REG | 0 (0b0) |
BREG | 0 (0b0) |
BSIGN_REG | 0 (0b0) |
MULT_RESET_MODE | SYNC |
OUT_REG | 0 (0b0) |
PIPE_REG | 0 (0b0) |
SOA_REG | 0 (0b0) |
MULT9X9 #(
.AREG(AREG),
.ASIGN_REG(ASIGN_REG),
.BREG(BREG),
.BSIGN_REG(BSIGN_REG),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT_REG(OUT_REG),
.PIPE_REG(PIPE_REG),
.SOA_REG(SOA_REG)
) mult9x9_inst (
.A(A),
.ASEL(ASEL),
.ASIGN(ASIGN),
.B(B),
.BSEL(BSEL),
.BSIGN(BSIGN),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET),
.SIA(SIA),
.SIB(SIB),
.SOA(SOA),
.SOB(SOB)
);
This device is not yet supported in Apicula
Port | Size | Direction |
---|---|---|
CASI | 24 | input |
CASO | 24 | output |
CE | 1 | input |
CLK | 1 | input |
COFFIN0 | 6 | input |
COFFIN1 | 6 | input |
COFFIN2 | 6 | input |
DATAIN0 | 10 | input |
DATAIN1 | 10 | input |
DATAIN2 | 10 | input |
DATAO | 24 | output |
RSTN | 1 | input |
Parameter | Default Value |
---|---|
ACC_EN | FALSE |
CASI_EN | FALSE |
CASO_EN | FALSE |
COFFIN_WIDTH | 4 (0b00000000000000000000000000000100) |
DATAIN_WIDTH | 8 (0b00000000000000000000000000001000) |
IREG | 0 (0b0) |
OREG | 0 (0b0) |
PREG | 0 (0b0) |
MULTACC #(
.ACC_EN(ACC_EN),
.CASI_EN(CASI_EN),
.CASO_EN(CASO_EN),
.COFFIN_WIDTH(COFFIN_WIDTH),
.DATAIN_WIDTH(DATAIN_WIDTH),
.IREG(IREG),
.OREG(OREG),
.PREG(PREG)
) multacc_inst (
.CASI(CASI),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.COFFIN0(COFFIN0),
.COFFIN1(COFFIN1),
.COFFIN2(COFFIN2),
.DATAIN0(DATAIN0),
.DATAIN1(DATAIN1),
.DATAIN2(DATAIN2),
.DATAO(DATAO),
.RSTN(RSTN)
);
The MULTADDALU12x12 primitive implements a 48-bit ALU operation, followed by two 12 x 12 multiplier outputs. It has four operation modes, including: (1) DOUBT = A0 * B0 ± A1 * B1, (2) DOUBT = DOUBT ± (A0 * B0 ± A1 * B1), (3) DOUBT = CASI ± A0 * B0 ± A1 * B1, and (4) DOUBT = CASI ± (A0 * B0 ± A1 * B1) + DOUBT.
This device is not yet supported in Apicula
Port | Size | Direction |
---|---|---|
A0 | 12 | input |
A1 | 12 | input |
ACCSEL | 1 | input |
ADDSUB | 2 | input |
B0 | 12 | input |
B1 | 12 | input |
CASI | 48 | input |
CASISEL | 1 | input |
CASO | 48 | output |
CE | 2 | input |
CLK | 2 | input |
DOUT | 48 | output |
RESET | 2 | input |
Parameter | Default Value |
---|---|
A0REG_CE | CE0 |
A0REG_CLK | BYPASS |
A0REG_RESET | RESET0 |
A1REG_CE | CE0 |
A1REG_CLK | BYPASS |
A1REG_RESET | RESET0 |
ACCSEL_IREG_CE | CE0 |
ACCSEL_IREG_CLK | BYPASS |
ACCSEL_IREG_RESET | RESET0 |
ACCSEL_PREG_CE | CE0 |
ACCSEL_PREG_CLK | BYPASS |
ACCSEL_PREG_RESET | RESET0 |
ACC_SEL | 0 (0b0) |
ADDSUB0_IREG_CE | CE0 |
ADDSUB0_IREG_CLK | BYPASS |
ADDSUB0_IREG_RESET | RESET0 |
ADDSUB0_PREG_CE | CE0 |
ADDSUB0_PREG_CLK | BYPASS |
ADDSUB0_PREG_RESET | RESET0 |
ADDSUB1_IREG_CE | CE0 |
ADDSUB1_IREG_CLK | BYPASS |
ADDSUB1_IREG_RESET | RESET0 |
ADDSUB1_PREG_CE | CE0 |
ADDSUB1_PREG_CLK | BYPASS |
ADDSUB1_PREG_RESET | RESET0 |
ADD_SUB_0 | 0 (0b0) |
ADD_SUB_1 | 0 (0b0) |
B0REG_CE | CE0 |
B0REG_CLK | BYPASS |
B0REG_RESET | RESET0 |
B1REG_CE | CE0 |
B1REG_CLK | BYPASS |
B1REG_RESET | RESET0 |
CASISEL_IREG_CE | CE0 |
CASISEL_IREG_CLK | BYPASS |
CASISEL_IREG_RESET | RESET0 |
CASISEL_PREG_CE | CE0 |
CASISEL_PREG_CLK | BYPASS |
CASISEL_PREG_RESET | RESET0 |
CASI_SEL | 0 (0b0) |
DYN_ACC_SEL | FALSE |
DYN_ADD_SUB_0 | FALSE |
DYN_ADD_SUB_1 | FALSE |
DYN_CASI_SEL | FALSE |
FB_PREG_EN | FALSE |
MULT_RESET_MODE | SYNC |
OREG_CE | CE0 |
OREG_CLK | BYPASS |
OREG_RESET | RESET0 |
PREG0_CE | CE0 |
PREG0_CLK | BYPASS |
PREG0_RESET | RESET0 |
PREG1_CE | CE0 |
PREG1_CLK | BYPASS |
PREG1_RESET | RESET0 |
PRE_LOAD | 0 (0b000000000000000000000000000000000000000000000000) |
MULTADDALU12X12 #(
.A0REG_CE(A0REG_CE),
.A0REG_CLK(A0REG_CLK),
.A0REG_RESET(A0REG_RESET),
.A1REG_CE(A1REG_CE),
.A1REG_CLK(A1REG_CLK),
.A1REG_RESET(A1REG_RESET),
.ACCSEL_IREG_CE(ACCSEL_IREG_CE),
.ACCSEL_IREG_CLK(ACCSEL_IREG_CLK),
.ACCSEL_IREG_RESET(ACCSEL_IREG_RESET),
.ACCSEL_PREG_CE(ACCSEL_PREG_CE),
.ACCSEL_PREG_CLK(ACCSEL_PREG_CLK),
.ACCSEL_PREG_RESET(ACCSEL_PREG_RESET),
.ACC_SEL(ACC_SEL),
.ADDSUB0_IREG_CE(ADDSUB0_IREG_CE),
.ADDSUB0_IREG_CLK(ADDSUB0_IREG_CLK),
.ADDSUB0_IREG_RESET(ADDSUB0_IREG_RESET),
.ADDSUB0_PREG_CE(ADDSUB0_PREG_CE),
.ADDSUB0_PREG_CLK(ADDSUB0_PREG_CLK),
.ADDSUB0_PREG_RESET(ADDSUB0_PREG_RESET),
.ADDSUB1_IREG_CE(ADDSUB1_IREG_CE),
.ADDSUB1_IREG_CLK(ADDSUB1_IREG_CLK),
.ADDSUB1_IREG_RESET(ADDSUB1_IREG_RESET),
.ADDSUB1_PREG_CE(ADDSUB1_PREG_CE),
.ADDSUB1_PREG_CLK(ADDSUB1_PREG_CLK),
.ADDSUB1_PREG_RESET(ADDSUB1_PREG_RESET),
.ADD_SUB_0(ADD_SUB_0),
.ADD_SUB_1(ADD_SUB_1),
.B0REG_CE(B0REG_CE),
.B0REG_CLK(B0REG_CLK),
.B0REG_RESET(B0REG_RESET),
.B1REG_CE(B1REG_CE),
.B1REG_CLK(B1REG_CLK),
.B1REG_RESET(B1REG_RESET),
.CASISEL_IREG_CE(CASISEL_IREG_CE),
.CASISEL_IREG_CLK(CASISEL_IREG_CLK),
.CASISEL_IREG_RESET(CASISEL_IREG_RESET),
.CASISEL_PREG_CE(CASISEL_PREG_CE),
.CASISEL_PREG_CLK(CASISEL_PREG_CLK),
.CASISEL_PREG_RESET(CASISEL_PREG_RESET),
.CASI_SEL(CASI_SEL),
.DYN_ACC_SEL(DYN_ACC_SEL),
.DYN_ADD_SUB_0(DYN_ADD_SUB_0),
.DYN_ADD_SUB_1(DYN_ADD_SUB_1),
.DYN_CASI_SEL(DYN_CASI_SEL),
.FB_PREG_EN(FB_PREG_EN),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OREG_CE(OREG_CE),
.OREG_CLK(OREG_CLK),
.OREG_RESET(OREG_RESET),
.PREG0_CE(PREG0_CE),
.PREG0_CLK(PREG0_CLK),
.PREG0_RESET(PREG0_RESET),
.PREG1_CE(PREG1_CE),
.PREG1_CLK(PREG1_CLK),
.PREG1_RESET(PREG1_RESET),
.PRE_LOAD(PRE_LOAD)
) multaddalu12x12_inst (
.A0(A0),
.A1(A1),
.ACCSEL(ACCSEL),
.ADDSUB(ADDSUB),
.B0(B0),
.B1(B1),
.CASI(CASI),
.CASISEL(CASISEL),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET)
);
This device is supported in Apicula.
Port | Size | Direction |
---|---|---|
A0 | 18 | input |
A1 | 18 | input |
ACCLOAD | 1 | input |
ASEL | 2 | input |
ASIGN | 2 | input |
B0 | 18 | input |
B1 | 18 | input |
BSEL | 2 | input |
BSIGN | 2 | input |
C | 54 | input |
CASI | 55 | input |
CASO | 55 | output |
CE | 1 | input |
CLK | 1 | input |
DOUT | 54 | output |
RESET | 1 | input |
SIA | 18 | input |
SIB | 18 | input |
SOA | 18 | output |
SOB | 18 | output |
Parameter | Default Value |
---|---|
A0REG | 0 (0b0) |
A1REG | 0 (0b0) |
ACCLOAD_REG0 | 0 (0b0) |
ACCLOAD_REG1 | 0 (0b0) |
ASIGN0_REG | 0 (0b0) |
ASIGN1_REG | 0 (0b0) |
B0REG | 0 (0b0) |
B1REG | 0 (0b0) |
BSIGN0_REG | 0 (0b0) |
BSIGN1_REG | 0 (0b0) |
B_ADD_SUB | 0 (0b0) |
CREG | 0 (0b0) |
C_ADD_SUB | 0 (0b0) |
MULTADDALU18X18_MODE | 0 (0b00000000000000000000000000000000) |
MULT_RESET_MODE | SYNC |
OUT_REG | 0 (0b0) |
PIPE0_REG | 0 (0b0) |
PIPE1_REG | 0 (0b0) |
SOA_REG | 0 (0b0) |
MULTADDALU18X18 #(
.A0REG(A0REG),
.A1REG(A1REG),
.ACCLOAD_REG0(ACCLOAD_REG0),
.ACCLOAD_REG1(ACCLOAD_REG1),
.ASIGN0_REG(ASIGN0_REG),
.ASIGN1_REG(ASIGN1_REG),
.B0REG(B0REG),
.B1REG(B1REG),
.BSIGN0_REG(BSIGN0_REG),
.BSIGN1_REG(BSIGN1_REG),
.B_ADD_SUB(B_ADD_SUB),
.CREG(CREG),
.C_ADD_SUB(C_ADD_SUB),
.MULTADDALU18X18_MODE(MULTADDALU18X18_MODE),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT_REG(OUT_REG),
.PIPE0_REG(PIPE0_REG),
.PIPE1_REG(PIPE1_REG),
.SOA_REG(SOA_REG)
) multaddalu18x18_inst (
.A0(A0),
.A1(A1),
.ACCLOAD(ACCLOAD),
.ASEL(ASEL),
.ASIGN(ASIGN),
.B0(B0),
.B1(B1),
.BSEL(BSEL),
.BSIGN(BSIGN),
.C(C),
.CASI(CASI),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET),
.SIA(SIA),
.SIB(SIB),
.SOA(SOA),
.SOB(SOB)
);
The MULTALU18X18 primitive is a 36x18 multiplier with ALU function that supports three arithmetic modes: addition, subtraction, and multiply. The operation performed by the primitive can be selected from these three options based on the values of the C_ADD_SUB input.
This device is supported in Apicula.
Port | Size | Direction |
---|---|---|
A | 18 | input |
ACCLOAD | 1 | input |
ASIGN | 1 | input |
B | 18 | input |
BSIGN | 1 | input |
C | 54 | input |
CASI | 55 | input |
CASO | 55 | output |
CE | 1 | input |
CLK | 1 | input |
D | 54 | input |
DOUT | 54 | output |
DSIGN | 1 | input |
RESET | 1 | input |
Parameter | Default Value |
---|---|
ACCLOAD_REG0 | 0 (0b0) |
ACCLOAD_REG1 | 0 (0b0) |
AREG | 0 (0b0) |
ASIGN_REG | 0 (0b0) |
BREG | 0 (0b0) |
BSIGN_REG | 0 (0b0) |
B_ADD_SUB | 0 (0b0) |
CREG | 0 (0b0) |
C_ADD_SUB | 0 (0b0) |
DREG | 0 (0b0) |
DSIGN_REG | 0 (0b0) |
MULTALU18X18_MODE | 0 (0b00000000000000000000000000000000) |
MULT_RESET_MODE | SYNC |
OUT_REG | 0 (0b0) |
PIPE_REG | 0 (0b0) |
MULTALU18X18 #(
.ACCLOAD_REG0(ACCLOAD_REG0),
.ACCLOAD_REG1(ACCLOAD_REG1),
.AREG(AREG),
.ASIGN_REG(ASIGN_REG),
.BREG(BREG),
.BSIGN_REG(BSIGN_REG),
.B_ADD_SUB(B_ADD_SUB),
.CREG(CREG),
.C_ADD_SUB(C_ADD_SUB),
.DREG(DREG),
.DSIGN_REG(DSIGN_REG),
.MULTALU18X18_MODE(MULTALU18X18_MODE),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT_REG(OUT_REG),
.PIPE_REG(PIPE_REG)
) multalu18x18_inst (
.A(A),
.ACCLOAD(ACCLOAD),
.ASIGN(ASIGN),
.B(B),
.BSIGN(BSIGN),
.C(C),
.CASI(CASI),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.D(D),
.DOUT(DOUT),
.DSIGN(DSIGN),
.RESET(RESET)
);
The MULTALU27X18 (27x18 Multiplier with ALU) implements multiplication, multiply-add, accumulation, multiply-accumulate, shift based on multiplication/multiply-add/accumulation/multiply-accumulate, cascade based on multiplication/multiply-add/accumulation/multiply-accumulate, pre-addition and pre-subtraction based on multiplication/multiply-add/accumulation/multiply-accumulate.
This device is not yet supported in Apicula
Port | Size | Direction |
---|---|---|
A | 27 | input |
ACCSEL | 1 | input |
ADDSUB | 2 | input |
ASEL | 1 | input |
B | 18 | input |
C | 48 | input |
CASI | 48 | input |
CASISEL | 1 | input |
CASO | 48 | output |
CE | 2 | input |
CLK | 2 | input |
CSEL | 1 | input |
D | 26 | input |
DOUT | 48 | output |
PADDSUB | 1 | input |
PSEL | 1 | input |
RESET | 2 | input |
SIA | 27 | input |
SOA | 27 | output |
Parameter | Default Value |
---|---|
ACCSEL_IREG_CE | CE0 |
ACCSEL_IREG_CLK | BYPASS |
ACCSEL_IREG_RESET | RESET0 |
ACCSEL_PREG_CE | CE0 |
ACCSEL_PREG_CLK | BYPASS |
ACCSEL_PREG_RESET | RESET0 |
ACC_SEL | 0 (0b0) |
ADDSUB0_IREG_CE | CE0 |
ADDSUB0_IREG_CLK | BYPASS |
ADDSUB0_IREG_RESET | RESET0 |
ADDSUB0_PREG_CE | CE0 |
ADDSUB0_PREG_CLK | BYPASS |
ADDSUB0_PREG_RESET | RESET0 |
ADDSUB1_IREG_CE | CE0 |
ADDSUB1_IREG_CLK | BYPASS |
ADDSUB1_IREG_RESET | RESET0 |
ADDSUB1_PREG_CE | CE0 |
ADDSUB1_PREG_CLK | BYPASS |
ADDSUB1_PREG_RESET | RESET0 |
ADD_SUB_0 | 0 (0b0) |
ADD_SUB_1 | 0 (0b0) |
AREG_CE | CE0 |
AREG_CLK | BYPASS |
AREG_RESET | RESET0 |
A_SEL | 0 (0b0) |
BREG_CE | CE0 |
BREG_CLK | BYPASS |
BREG_RESET | RESET0 |
CASISEL_IREG_CE | CE0 |
CASISEL_IREG_CLK | BYPASS |
CASISEL_IREG_RESET | RESET0 |
CASISEL_PREG_CE | CE0 |
CASISEL_PREG_CLK | BYPASS |
CASISEL_PREG_RESET | RESET0 |
CASI_SEL | 0 (0b0) |
CSEL_IREG_CE | CE0 |
CSEL_IREG_CLK | BYPASS |
CSEL_IREG_RESET | RESET0 |
CSEL_PREG_CE | CE0 |
CSEL_PREG_CLK | BYPASS |
CSEL_PREG_RESET | RESET0 |
C_IREG_CE | CE0 |
C_IREG_CLK | BYPASS |
C_IREG_RESET | RESET0 |
C_PREG_CE | CE0 |
C_PREG_CLK | BYPASS |
C_PREG_RESET | RESET0 |
C_SEL | 1 (0b1) |
DREG_CE | CE0 |
DREG_CLK | BYPASS |
DREG_RESET | RESET0 |
DYN_ACC_SEL | FALSE |
DYN_ADD_SUB_0 | FALSE |
DYN_ADD_SUB_1 | FALSE |
DYN_A_SEL | FALSE |
DYN_CASI_SEL | FALSE |
DYN_C_SEL | FALSE |
DYN_P_ADDSUB | FALSE |
DYN_P_SEL | FALSE |
FB_PREG_EN | FALSE |
MULT12X12_EN | FALSE |
MULT_RESET_MODE | SYNC |
OREG_CE | CE0 |
OREG_CLK | BYPASS |
OREG_RESET | RESET0 |
PADDSUB_IREG_CE | CE0 |
PADDSUB_IREG_CLK | BYPASS |
PADDSUB_IREG_RESET | RESET0 |
PREG_CE | CE0 |
PREG_CLK | BYPASS |
PREG_RESET | RESET0 |
PRE_LOAD | 0 (0b000000000000000000000000000000000000000000000000) |
PSEL_IREG_CE | CE0 |
PSEL_IREG_CLK | BYPASS |
PSEL_IREG_RESET | RESET0 |
P_ADDSUB | 0 (0b0) |
P_SEL | 0 (0b0) |
SOA_PREG_EN | FALSE |
MULTALU27X18 #(
.ACCSEL_IREG_CE(ACCSEL_IREG_CE),
.ACCSEL_IREG_CLK(ACCSEL_IREG_CLK),
.ACCSEL_IREG_RESET(ACCSEL_IREG_RESET),
.ACCSEL_PREG_CE(ACCSEL_PREG_CE),
.ACCSEL_PREG_CLK(ACCSEL_PREG_CLK),
.ACCSEL_PREG_RESET(ACCSEL_PREG_RESET),
.ACC_SEL(ACC_SEL),
.ADDSUB0_IREG_CE(ADDSUB0_IREG_CE),
.ADDSUB0_IREG_CLK(ADDSUB0_IREG_CLK),
.ADDSUB0_IREG_RESET(ADDSUB0_IREG_RESET),
.ADDSUB0_PREG_CE(ADDSUB0_PREG_CE),
.ADDSUB0_PREG_CLK(ADDSUB0_PREG_CLK),
.ADDSUB0_PREG_RESET(ADDSUB0_PREG_RESET),
.ADDSUB1_IREG_CE(ADDSUB1_IREG_CE),
.ADDSUB1_IREG_CLK(ADDSUB1_IREG_CLK),
.ADDSUB1_IREG_RESET(ADDSUB1_IREG_RESET),
.ADDSUB1_PREG_CE(ADDSUB1_PREG_CE),
.ADDSUB1_PREG_CLK(ADDSUB1_PREG_CLK),
.ADDSUB1_PREG_RESET(ADDSUB1_PREG_RESET),
.ADD_SUB_0(ADD_SUB_0),
.ADD_SUB_1(ADD_SUB_1),
.AREG_CE(AREG_CE),
.AREG_CLK(AREG_CLK),
.AREG_RESET(AREG_RESET),
.A_SEL(A_SEL),
.BREG_CE(BREG_CE),
.BREG_CLK(BREG_CLK),
.BREG_RESET(BREG_RESET),
.CASISEL_IREG_CE(CASISEL_IREG_CE),
.CASISEL_IREG_CLK(CASISEL_IREG_CLK),
.CASISEL_IREG_RESET(CASISEL_IREG_RESET),
.CASISEL_PREG_CE(CASISEL_PREG_CE),
.CASISEL_PREG_CLK(CASISEL_PREG_CLK),
.CASISEL_PREG_RESET(CASISEL_PREG_RESET),
.CASI_SEL(CASI_SEL),
.CSEL_IREG_CE(CSEL_IREG_CE),
.CSEL_IREG_CLK(CSEL_IREG_CLK),
.CSEL_IREG_RESET(CSEL_IREG_RESET),
.CSEL_PREG_CE(CSEL_PREG_CE),
.CSEL_PREG_CLK(CSEL_PREG_CLK),
.CSEL_PREG_RESET(CSEL_PREG_RESET),
.C_IREG_CE(C_IREG_CE),
.C_IREG_CLK(C_IREG_CLK),
.C_IREG_RESET(C_IREG_RESET),
.C_PREG_CE(C_PREG_CE),
.C_PREG_CLK(C_PREG_CLK),
.C_PREG_RESET(C_PREG_RESET),
.C_SEL(C_SEL),
.DREG_CE(DREG_CE),
.DREG_CLK(DREG_CLK),
.DREG_RESET(DREG_RESET),
.DYN_ACC_SEL(DYN_ACC_SEL),
.DYN_ADD_SUB_0(DYN_ADD_SUB_0),
.DYN_ADD_SUB_1(DYN_ADD_SUB_1),
.DYN_A_SEL(DYN_A_SEL),
.DYN_CASI_SEL(DYN_CASI_SEL),
.DYN_C_SEL(DYN_C_SEL),
.DYN_P_ADDSUB(DYN_P_ADDSUB),
.DYN_P_SEL(DYN_P_SEL),
.FB_PREG_EN(FB_PREG_EN),
.MULT12X12_EN(MULT12X12_EN),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OREG_CE(OREG_CE),
.OREG_CLK(OREG_CLK),
.OREG_RESET(OREG_RESET),
.PADDSUB_IREG_CE(PADDSUB_IREG_CE),
.PADDSUB_IREG_CLK(PADDSUB_IREG_CLK),
.PADDSUB_IREG_RESET(PADDSUB_IREG_RESET),
.PREG_CE(PREG_CE),
.PREG_CLK(PREG_CLK),
.PREG_RESET(PREG_RESET),
.PRE_LOAD(PRE_LOAD),
.PSEL_IREG_CE(PSEL_IREG_CE),
.PSEL_IREG_CLK(PSEL_IREG_CLK),
.PSEL_IREG_RESET(PSEL_IREG_RESET),
.P_ADDSUB(P_ADDSUB),
.P_SEL(P_SEL),
.SOA_PREG_EN(SOA_PREG_EN)
) multalu27x18_inst (
.A(A),
.ACCSEL(ACCSEL),
.ADDSUB(ADDSUB),
.ASEL(ASEL),
.B(B),
.C(C),
.CASI(CASI),
.CASISEL(CASISEL),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.CSEL(CSEL),
.D(D),
.DOUT(DOUT),
.PADDSUB(PADDSUB),
.PSEL(PSEL),
.RESET(RESET),
.SIA(SIA),
.SOA(SOA)
);
The MULTALU36X18 supports three arithmetic modes: *DOUT A B C (two's complement), *DOUT A B (addition), and *DOUT A B CASI (CASI mode, details not specified).
This device is supported in Apicula.
Port | Size | Direction |
---|---|---|
A | 18 | input |
ACCLOAD | 1 | input |
ASIGN | 1 | input |
B | 36 | input |
BSIGN | 1 | input |
C | 54 | input |
CASI | 55 | input |
CASO | 55 | output |
CE | 1 | input |
CLK | 1 | input |
DOUT | 54 | output |
RESET | 1 | input |
Parameter | Default Value |
---|---|
ACCLOAD_REG0 | 0 (0b0) |
ACCLOAD_REG1 | 0 (0b0) |
AREG | 0 (0b0) |
ASIGN_REG | 0 (0b0) |
BREG | 0 (0b0) |
BSIGN_REG | 0 (0b0) |
CREG | 0 (0b0) |
C_ADD_SUB | 0 (0b0) |
MULTALU36X18_MODE | 0 (0b00000000000000000000000000000000) |
MULT_RESET_MODE | SYNC |
OUT_REG | 0 (0b0) |
PIPE_REG | 0 (0b0) |
MULTALU36X18 #(
.ACCLOAD_REG0(ACCLOAD_REG0),
.ACCLOAD_REG1(ACCLOAD_REG1),
.AREG(AREG),
.ASIGN_REG(ASIGN_REG),
.BREG(BREG),
.BSIGN_REG(BSIGN_REG),
.CREG(CREG),
.C_ADD_SUB(C_ADD_SUB),
.MULTALU36X18_MODE(MULTALU36X18_MODE),
.MULT_RESET_MODE(MULT_RESET_MODE),
.OUT_REG(OUT_REG),
.PIPE_REG(PIPE_REG)
) multalu36x18_inst (
.A(A),
.ACCLOAD(ACCLOAD),
.ASIGN(ASIGN),
.B(B),
.BSIGN(BSIGN),
.C(C),
.CASI(CASI),
.CASO(CASO),
.CE(CE),
.CLK(CLK),
.DOUT(DOUT),
.RESET(RESET)
);