diff options
Diffstat (limited to 'rtl/modexpng_parameters.vh')
-rw-r--r-- | rtl/modexpng_parameters.vh | 151 |
1 files changed, 93 insertions, 58 deletions
diff --git a/rtl/modexpng_parameters.vh b/rtl/modexpng_parameters.vh index c7566ad..7d2837d 100644 --- a/rtl/modexpng_parameters.vh +++ b/rtl/modexpng_parameters.vh @@ -1,42 +1,36 @@ +// +// Headers +// `include "modexpng_parameters_x8.vh" - -function integer cryptech_clog2; - input integer value; - integer temp_value; - integer result; - // - begin - temp_value = value - 1; - for (result = 0; temp_value > 0; result = result + 1) - temp_value = temp_value >> 1; - cryptech_clog2 = result; - end - // -endfunction - -localparam MAX_OP_W = 4096; - -localparam WORD_W = 16; -localparam WORD_EXT_W = 18; -localparam MAC_W = 47; - -localparam BUS_DATA_W = 32; +`include "cryptech_clog2.vh" + +// +// Debug Settings +// + +/* Only define this for simulation, must be turned off to synthesize properly! */ +`define MODEXPNG_ENABLE_DEBUG + +// +// Core Settings +// +localparam MAX_OP_W = 4096; +localparam WORD_W = 16; +localparam WORD_EXT_W = 18; +localparam MAC_W = 47; +localparam BUS_DATA_W = 32; localparam BUS_OP_ADDR_W = cryptech_clog2(MAX_OP_W / BUS_DATA_W); - -localparam BIT_INDEX_W = cryptech_clog2(MAX_OP_W); - -localparam BANK_ADDR_W = 3; -localparam OP_ADDR_W = cryptech_clog2(MAX_OP_W / WORD_W); -localparam COL_INDEX_W = OP_ADDR_W - cryptech_clog2(NUM_MULTS); - -localparam MAC_INDEX_W = cryptech_clog2(NUM_MULTS); - -localparam CARRY_W = WORD_EXT_W - WORD_W; - -localparam WORD_MUX_W = cryptech_clog2(WORD_W); - -localparam [CARRY_W-1:0] CARRY_ZERO = {CARRY_W{1'b0}}; - +localparam BIT_INDEX_W = cryptech_clog2(MAX_OP_W); +localparam BANK_ADDR_W = 3; +localparam OP_ADDR_W = cryptech_clog2(MAX_OP_W / WORD_W); +localparam COL_INDEX_W = OP_ADDR_W - cryptech_clog2(NUM_MULTS); +localparam MAC_INDEX_W = cryptech_clog2(NUM_MULTS); +localparam CARRY_W = WORD_EXT_W - WORD_W; +localparam WORD_MUX_W = cryptech_clog2(WORD_W); + +// +// Wide Bank +// localparam [BANK_ADDR_W-1:0] BANK_WIDE_A = 3'd0; localparam [BANK_ADDR_W-1:0] BANK_WIDE_B = 3'd1; localparam [BANK_ADDR_W-1:0] BANK_WIDE_C = 3'd2; @@ -46,19 +40,28 @@ localparam [BANK_ADDR_W-1:0] BANK_WIDE_N = 3'd5; localparam [BANK_ADDR_W-1:0] BANK_WIDE_L = 3'd6; localparam [BANK_ADDR_W-1:0] BANK_WIDE_H = 3'd7; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_A = 3'd0; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_B = 3'd1; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_C = 3'd2; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_D = 3'd3; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_E = 3'd4; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_COEFF = 3'd5; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_Q = 3'd6; -localparam [BANK_ADDR_W-1:0] BANK_NARROW_EXT = 3'd7; // [0] -> COEFF', [1] -> Q' - +// +// Narrow Bank +// +localparam [BANK_ADDR_W-1:0] BANK_NARROW_A = 3'd0; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_B = 3'd1; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_C = 3'd2; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_D = 3'd3; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_E = 3'd4; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_COEFF = 3'd5; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_Q = 3'd6; +localparam [BANK_ADDR_W-1:0] BANK_NARROW_EXT = 3'd7; // [0] -> COEFF', [1] -> Q' + +// +// Recombinator Bank +// localparam [BANK_ADDR_W-1:0] BANK_RCMB_ML = 3'd0; localparam [BANK_ADDR_W-1:0] BANK_RCMB_MH = 3'd1; localparam [BANK_ADDR_W-1:0] BANK_RCMB_EXT = 3'd2; // [0] -> MH' +// +// Input Bank #1 +// localparam [BANK_ADDR_W-1:0] BANK_IN_1_M = 3'd0; localparam [BANK_ADDR_W-1:0] BANK_IN_1_N = 3'd1; localparam [BANK_ADDR_W-1:0] BANK_IN_1_N_FACTOR = 3'd2; @@ -67,6 +70,9 @@ localparam [BANK_ADDR_W-1:0] BANK_IN_1_EXT = 3'd4; // [0] -> N_COEFF'*/ localparam [BANK_ADDR_W-1:0] BANK_IN_1_X = 3'd5; localparam [BANK_ADDR_W-1:0] BANK_IN_1_Y = 3'd6; +// +// Input Bank #2 +// localparam [BANK_ADDR_W-1:0] BANK_IN_2_D = 3'd0; localparam [BANK_ADDR_W-1:0] BANK_IN_2_P = 3'd1; localparam [BANK_ADDR_W-1:0] BANK_IN_2_P_FACTOR = 3'd2; @@ -76,30 +82,59 @@ localparam [BANK_ADDR_W-1:0] BANK_IN_2_Q_FACTOR = 3'd5; localparam [BANK_ADDR_W-1:0] BANK_IN_2_Q_COEFF = 3'd6; localparam [BANK_ADDR_W-1:0] BANK_IN_2_QINV = 3'd7; -localparam [BANK_ADDR_W-1:0] BANK_OUT_S = 3'd0; -localparam [BANK_ADDR_W-1:0] BANK_OUT_XM = 3'd1; -localparam [BANK_ADDR_W-1:0] BANK_OUT_YM = 3'd2; +// +// Output Bank +// +localparam [BANK_ADDR_W-1:0] BANK_OUT_S = 3'd0; +localparam [BANK_ADDR_W-1:0] BANK_OUT_XM = 3'd1; +localparam [BANK_ADDR_W-1:0] BANK_OUT_YM = 3'd2; -localparam [BANK_ADDR_W-1:0] BANK_DNC = {BANK_ADDR_W{1'bX}}; +// +// Carry Values +// +localparam [CARRY_W-1:0] CARRY_ZERO = {CARRY_W{1'b0}}; -localparam [OP_ADDR_W-1:0] OP_ADDR_LADDER_LAST = 3; // 0..3, i.e. <dummy>, D, P, Q +// +// Bank Values +// +localparam [ BANK_ADDR_W-1:0] BANK_DNC = {BANK_ADDR_W{1'bX}}; +localparam [4*BANK_ADDR_W-1:0] BANK_DNC_ALL = {4{BANK_DNC}}; +// +// Operand Address Values +// +localparam [OP_ADDR_W-1:0] OP_ADDR_LADDER_LAST = 3; // 0..3, i.e. <dummy>, D, P, Q +localparam [OP_ADDR_W-1:0] OP_ADDR_EXT_COEFF = 0; +localparam [OP_ADDR_W-1:0] OP_ADDR_EXT_Q = 1; +localparam [OP_ADDR_W-1:0] OP_ADDR_ZERO = {OP_ADDR_W{1'b0}}; +localparam [OP_ADDR_W-1:0] OP_ADDR_ONE = {{(OP_ADDR_W-1){1'b0}}, 1'b1}; +localparam [OP_ADDR_W-1:0] OP_ADDR_DNC = {OP_ADDR_W{1'bX}}; + +// +// Bit Index Values +// localparam [BIT_INDEX_W-1:0] BIT_INDEX_ZERO = {BIT_INDEX_W{1'b0}}; +localparam [BIT_INDEX_W-1:0] BIT_INDEX_DNC = {BIT_INDEX_W{1'bX}}; -localparam [OP_ADDR_W-1:0] OP_ADDR_EXT_COEFF = 0; -localparam [OP_ADDR_W-1:0] OP_ADDR_EXT_Q = 1; - -localparam [OP_ADDR_W-1:0] OP_ADDR_ZERO = {OP_ADDR_W{1'b0}}; -localparam [OP_ADDR_W-1:0] OP_ADDR_ONE = {{(OP_ADDR_W-1){1'b0}}, 1'b1}; -localparam [OP_ADDR_W-1:0] OP_ADDR_DNC = {OP_ADDR_W{1'bX}}; - +// +// Word Values +// localparam [WORD_W-1:0] WORD_ZERO = {WORD_W{1'b0}}; localparam [WORD_W-1:0] WORD_DNC = {WORD_W{1'bX}}; localparam [WORD_W-1:0] WORD_ONE = {{(WORD_W-1){1'b0}}, 1'b1}; +// +// Extended Word Values +// localparam [WORD_EXT_W-1:0] WORD_EXT_ZERO = {WORD_EXT_W{1'b0}}; localparam [WORD_EXT_W-1:0] WORD_EXT_DNC = {WORD_EXT_W{1'bX}}; +// +// MAC Index Values +// localparam [MAC_INDEX_W-1:0] MAC_INDEX_DNC = {MAC_INDEX_W{1'bX}}; +// +// Multiplier Bitmap Values +// localparam [NUM_MULTS-1:0] MULT_BITMAP_ZEROES = {NUM_MULTS{1'b0}}; |