Skip to content
Pepijn de Vos edited this page Nov 19, 2024 · 2 revisions

MULT12X12

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

Ports

Port Size Direction
A 12 input
B 12 input
CE 2 input
CLK 2 input
DOUT 24 output
RESET 2 input

Parameters

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

Verilog Instantiation

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)
);

MULT18X18

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

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULT27X36

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

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULT36X36

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.

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULT9X9

The Gowin MULT9X9 primitive supports 9-bit multiplication, implementing the mathematical operation: DOUT = A * B.

This device is supported in Apicula.

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULTACC

This device is not yet supported in Apicula

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULTADDALU12X12

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

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULTADDALU18X18

This device is supported in Apicula.

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULTALU18X18

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.

Ports

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

Parameters

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)

Verilog Instantiation

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)
);

MULTALU27X18

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

Ports

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

Parameters

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

Verilog Instantiation

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)
);

MULTALU36X18

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.

Ports

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

Parameters

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)

Verilog Instantiation

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)
);
Clone this wiki locally