aboutsummaryrefslogtreecommitdiff
path: root/rtl/modexpng_io_manager.v
diff options
context:
space:
mode:
authorPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2019-10-21 15:10:44 +0300
committerPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2019-10-21 15:10:44 +0300
commit69b5d9f65cf49adbc1c1850fa2c4757199008717 (patch)
treeb5be56bf414078bdada930cea0d9f439f374d9e7 /rtl/modexpng_io_manager.v
parent72902f5b40ac695786f5103d2a5a456c6c7ee83f (diff)
Added support for non-CRT mode. Further refactoring.
Diffstat (limited to 'rtl/modexpng_io_manager.v')
-rw-r--r--rtl/modexpng_io_manager.v13
1 files changed, 10 insertions, 3 deletions
diff --git a/rtl/modexpng_io_manager.v b/rtl/modexpng_io_manager.v
index da2bdac..5bce191 100644
--- a/rtl/modexpng_io_manager.v
+++ b/rtl/modexpng_io_manager.v
@@ -53,7 +53,9 @@ module modexpng_io_manager
io_out_dout,
wrk_narrow_x_din_x_lsb,
+ wrk_narrow_y_din_x_lsb,
wrk_narrow_x_din_y_lsb,
+ wrk_narrow_y_din_y_lsb,
ladder_steps,
ladder_d,
@@ -125,7 +127,9 @@ module modexpng_io_manager
output [ WORD_W -1:0] io_out_dout;
input [ WORD_W -1:0] wrk_narrow_x_din_x_lsb;
+ input [ WORD_W -1:0] wrk_narrow_y_din_x_lsb;
input [ WORD_W -1:0] wrk_narrow_x_din_y_lsb;
+ input [ WORD_W -1:0] wrk_narrow_y_din_y_lsb;
input [ BIT_INDEX_W -1:0] ladder_steps;
output ladder_d;
@@ -457,6 +461,9 @@ module modexpng_io_manager
//
wire [WORD_EXT_W -1:0] io_in_dout_mux = {{(WORD_EXT_W-WORD_W){1'b0}}, sel_aux_is_1 ? io_in_1_din : io_in_2_din};
+ wire [WORD_W -1:0] wrk_narrow_xy_din_x_mux_lsb = sel_aux == UOP_AUX_1 ? wrk_narrow_x_din_x_lsb : wrk_narrow_y_din_x_lsb;
+ wire [WORD_W -1:0] wrk_narrow_xy_din_y_mux_lsb = sel_aux == UOP_AUX_1 ? wrk_narrow_x_din_y_lsb : wrk_narrow_y_din_y_lsb;
+
always @(posedge clk) begin
//
wide_x_din_x <= WORD_EXT_DNC;
@@ -476,12 +483,12 @@ module modexpng_io_manager
IO_FSM_STATE_EXTRA,
IO_FSM_STATE_LATENCY_POST1: begin
//
- if (opcode_is_input_wide && sel_crt_is_x) {wide_x_din_x, wide_y_din_x} <= {2{io_in_dout_mux}}; // TODO: Make external ports smaller (WORD_W, not WORD_EXT_W)??
+ if (opcode_is_input_wide && sel_crt_is_x) {wide_x_din_x, wide_y_din_x} <= {2{io_in_dout_mux}};
if (opcode_is_input_wide && sel_crt_is_y) {wide_x_din_y, wide_y_din_y} <= {2{io_in_dout_mux}};
if (opcode_is_input_narrow && sel_crt_is_x) {narrow_x_din_x, narrow_y_din_x} <= {2{io_in_dout_mux}};
if (opcode_is_input_narrow && sel_crt_is_y) {narrow_x_din_y, narrow_y_din_y} <= {2{io_in_dout_mux}};
//
- if (opcode_is_output) out_dout <= sel_crt_is_x ? wrk_narrow_x_din_x_lsb: wrk_narrow_x_din_y_lsb;
+ if (opcode_is_output) out_dout <= sel_crt_is_x ? wrk_narrow_xy_din_x_mux_lsb : wrk_narrow_xy_din_y_mux_lsb;
//
end
//
@@ -490,7 +497,7 @@ module modexpng_io_manager
if (opcode_is_input_narrow && sel_crt_is_x && sel_in_needs_extra) {narrow_x_din_x, narrow_y_din_x} <= {2{io_in_dout_mux}};
if (opcode_is_input_narrow && sel_crt_is_y && sel_in_needs_extra) {narrow_x_din_y, narrow_y_din_y} <= {2{io_in_dout_mux}};
//
- if (opcode_is_output) out_dout <= sel_crt_is_x ? wrk_narrow_x_din_x_lsb : wrk_narrow_x_din_y_lsb;
+ if (opcode_is_output) out_dout <= sel_crt_is_x ? wrk_narrow_xy_din_x_mux_lsb : wrk_narrow_xy_din_y_mux_lsb;
//
end
//