aboutsummaryrefslogtreecommitdiff
path: root/rtl/dsp/dsp_array.v
diff options
context:
space:
mode:
authorPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2019-10-01 15:05:11 +0300
committerPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2019-10-01 15:05:11 +0300
commit9e9689d7b00ecdcc1c651f5e369e00a53d62df3c (patch)
treef7bdddda835e26aff3642b99e1ee8b2f1a64434d /rtl/dsp/dsp_array.v
parent29fb6afd018c601a2e0c7376656d5e37beb565d6 (diff)
Further work on the Montgomery modular multiplier. Can now to the "triangular"
part of multiplication, i.e. compute the "magic" reduction coefficient Q = LSB(AB) * N_COEFF.
Diffstat (limited to 'rtl/dsp/dsp_array.v')
-rw-r--r--rtl/dsp/dsp_array.v42
1 files changed, 37 insertions, 5 deletions
diff --git a/rtl/dsp/dsp_array.v b/rtl/dsp/dsp_array.v
index 178f87f..2a050d4 100644
--- a/rtl/dsp/dsp_array.v
+++ b/rtl/dsp/dsp_array.v
@@ -8,11 +8,11 @@ module dsp_array
input ce_p,
input ce_mode,
- input [8 -1:0] mode_z,
+ input [9 -1:0] mode_z,
- input [4*18-1:0] a,
+ input [5*18-1:0] a,
input [1*17-1:0] b,
- output [8*47-1:0] p
+ output [9*47-1:0] p
);
`include "../modexpng_parameters_x8.vh"
@@ -37,7 +37,7 @@ module dsp_array
genvar z;
generate for (z=0; z<(NUM_MULTS/2); z=z+1)
//
- begin : DSP48E1
+ begin : gen_DSP48E1
//
dsp_slice #
(
@@ -64,7 +64,7 @@ module dsp_array
.opmode ({1'b0, mode_z[2*z], 1'b0, 2'b01, 2'b01}),
.alumode (4'b0000),
- .casc_a_in ({17{1'b0}}),
+ .casc_a_in ({18{1'b0}}),
.casc_b_in ({17{1'b0}}),
.casc_a_out (casc_a[z]),
@@ -107,5 +107,37 @@ module dsp_array
//
endgenerate
+ dsp_slice #
+ (
+ .AB_INPUT("DIRECT"),
+ .B_REG(2)
+ )
+ dsp_aux
+ (
+ .clk (clk),
+
+ .ce_a1 (ce_a0),
+ .ce_b1 (ce_b0),
+ .ce_a2 (ce_a1),
+ .ce_b2 (ce_b1),
+ .ce_m (ce_m),
+ .ce_p (ce_p),
+ .ce_mode (ce_mode),
+
+ .a (a[4*18+:18]),
+ .b (b),
+ .p (p[47*2*4+:47]),
+
+ .inmode (5'b00000),
+ .opmode ({1'b0, mode_z[2*4], 1'b0, 2'b01, 2'b01}),
+ .alumode (4'b0000),
+
+ .casc_a_in ({18{1'b0}}),
+ .casc_b_in ({17{1'b0}}),
+
+ .casc_a_out (),
+ .casc_b_out ()
+ );
+
endmodule