From e340b1489b08905e3d8acd17686e178028de7922 Mon Sep 17 00:00:00 2001 From: "Pavel V. Shatov (Meister)" Date: Thu, 3 Oct 2019 16:47:39 +0300 Subject: Added more micro-operations, also added "general worker" module. The worker is basically a block memory data mover, but it can also do some supporting operations required for the Garner's formula part of the exponentiation. --- rtl/modexpng_core_top.v | 895 ++++++++++++++++++++++++++++++------------------ 1 file changed, 553 insertions(+), 342 deletions(-) (limited to 'rtl/modexpng_core_top.v') diff --git a/rtl/modexpng_core_top.v b/rtl/modexpng_core_top.v index e117e5d..6b194dc 100644 --- a/rtl/modexpng_core_top.v +++ b/rtl/modexpng_core_top.v @@ -71,11 +71,13 @@ module modexpng_core_top wire [BANK_ADDR_W -1:0] uop_data_sel_wide_out = uop_data[UOP_W -UOP_OPCODE_W -UOP_CRT_W -UOP_NPQ_W -UOP_AUX_W -UOP_LADDER_W -2*BANK_ADDR_W -1-: BANK_ADDR_W ]; wire [BANK_ADDR_W -1:0] uop_data_sel_narrow_out = uop_data[UOP_W -UOP_OPCODE_W -UOP_CRT_W -UOP_NPQ_W -UOP_AUX_W -UOP_LADDER_W -3*BANK_ADDR_W -1-: BANK_ADDR_W ]; - wire uop_opcode_is_stop = uop_data_opcode == UOP_OPCODE_STOP; - wire uop_opcode_is_io = (uop_data_opcode == UOP_OPCODE_INPUT_TO_WIDE ) || - (uop_data_opcode == UOP_OPCODE_INPUT_TO_NARROW ) || - (uop_data_opcode == UOP_OPCODE_OUTPUT_FROM_NARROW) ; - wire uop_opcode_is_mmm = uop_data_opcode == UOP_OPCODE_MODULAR_MULTIPLY; + wire uop_opcode_is_stop = uop_data_opcode == UOP_OPCODE_STOP ; + wire uop_opcode_is_in = (uop_data_opcode == UOP_OPCODE_INPUT_TO_WIDE ) || + (uop_data_opcode == UOP_OPCODE_INPUT_TO_NARROW ) ; + wire uop_opcode_is_out = uop_data_opcode == UOP_OPCODE_OUTPUT_FROM_NARROW ; + wire uop_opcode_is_mmm = uop_data_opcode == UOP_OPCODE_MODULAR_MULTIPLY ; + wire uop_opcode_is_wrk = (uop_data_opcode == UOP_OPCODE_PROPAGATE_CARRIES ) || + (uop_data_opcode == UOP_OPCODE_COPY_CRT_Y2X ) ; wire [UOP_ADDR_W -1:0] uop_addr_offset = crt_mode ? UOP_ADDR_OFFSET_USING_CRT : UOP_ADDR_OFFSET_WITHOUT_CRT; wire [UOP_ADDR_W -1:0] uop_addr_next = uop_addr + 1'b1; @@ -101,87 +103,135 @@ module modexpng_core_top // // Storage Interfaces (X, Y) // - wire wr_wide_xy_ena_x; - wire [BANK_ADDR_W -1:0] wr_wide_xy_bank_x; - wire [ OP_ADDR_W -1:0] wr_wide_xy_addr_x; - wire [ WORD_EXT_W -1:0] wr_wide_x_din_x; - wire [ WORD_EXT_W -1:0] wr_wide_y_din_x; - - wire wr_narrow_xy_ena_x; - wire [BANK_ADDR_W -1:0] wr_narrow_xy_bank_x; - wire [ OP_ADDR_W -1:0] wr_narrow_xy_addr_x; - wire [ WORD_EXT_W -1:0] wr_narrow_x_din_x; - wire [ WORD_EXT_W -1:0] wr_narrow_y_din_x; - - wire rd_wide_xy_ena_x; - wire rd_wide_xy_ena_aux_x; - wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_x; - wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_aux_x; - wire [NUM_MULTS_HALF * OP_ADDR_W -1:0] rd_wide_xy_addr_x; - wire [ OP_ADDR_W -1:0] rd_wide_xy_addr_aux_x; - wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_x_dout_x; - wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_y_dout_x; - wire [ WORD_EXT_W -1:0] rd_wide_x_dout_aux_x; - wire [ WORD_EXT_W -1:0] rd_wide_y_dout_aux_x; - - wire rd_narrow_xy_ena_x; - wire [ BANK_ADDR_W -1:0] rd_narrow_xy_bank_x; - wire [ OP_ADDR_W -1:0] rd_narrow_xy_addr_x; - wire [ WORD_EXT_W -1:0] rd_narrow_x_dout_x; - wire [ WORD_EXT_W -1:0] rd_narrow_y_dout_x; - - wire ext_wide_xy_ena_x; - wire [BANK_ADDR_W -1:0] ext_wide_xy_bank_x; - wire [ OP_ADDR_W -1:0] ext_wide_xy_addr_x; - wire [ WORD_EXT_W -1:0] ext_wide_x_din_x; - wire [ WORD_EXT_W -1:0] ext_wide_y_din_x; - - wire ext_narrow_xy_ena_x; - wire [BANK_ADDR_W -1:0] ext_narrow_xy_bank_x; - wire [ OP_ADDR_W -1:0] ext_narrow_xy_addr_x; - wire [ WORD_EXT_W -1:0] ext_narrow_x_din_x; - wire [ WORD_EXT_W -1:0] ext_narrow_y_din_x; - - wire wr_wide_xy_ena_y; - wire [BANK_ADDR_W -1:0] wr_wide_xy_bank_y; - wire [ OP_ADDR_W -1:0] wr_wide_xy_addr_y; - wire [ WORD_EXT_W -1:0] wr_wide_x_din_y; - wire [ WORD_EXT_W -1:0] wr_wide_y_din_y; - - wire wr_narrow_xy_ena_y; - wire [BANK_ADDR_W -1:0] wr_narrow_xy_bank_y; - wire [ OP_ADDR_W -1:0] wr_narrow_xy_addr_y; - wire [ WORD_EXT_W -1:0] wr_narrow_x_din_y; - wire [ WORD_EXT_W -1:0] wr_narrow_y_din_y; - - wire rd_wide_xy_ena_y; - wire rd_wide_xy_ena_aux_y; - wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_y; - wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_aux_y; - wire [NUM_MULTS_HALF * OP_ADDR_W -1:0] rd_wide_xy_addr_y; - wire [ OP_ADDR_W -1:0] rd_wide_xy_addr_aux_y; - wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_x_dout_y; - wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_y_dout_y; - wire [ WORD_EXT_W -1:0] rd_wide_x_dout_aux_y; - wire [ WORD_EXT_W -1:0] rd_wide_y_dout_aux_y; - - wire rd_narrow_xy_ena_y; - wire [ BANK_ADDR_W -1:0] rd_narrow_xy_bank_y; - wire [ OP_ADDR_W -1:0] rd_narrow_xy_addr_y; - wire [ WORD_EXT_W -1:0] rd_narrow_x_dout_y; - wire [ WORD_EXT_W -1:0] rd_narrow_y_dout_y; - - wire ext_wide_xy_ena_y; - wire [BANK_ADDR_W -1:0] ext_wide_xy_bank_y; - wire [ OP_ADDR_W -1:0] ext_wide_xy_addr_y; - wire [ WORD_EXT_W -1:0] ext_wide_x_din_y; - wire [ WORD_EXT_W -1:0] ext_wide_y_din_y; - - wire ext_narrow_xy_ena_y; - wire [BANK_ADDR_W -1:0] ext_narrow_xy_bank_y; - wire [ OP_ADDR_W -1:0] ext_narrow_xy_addr_y; - wire [ WORD_EXT_W -1:0] ext_narrow_x_din_y; - wire [ WORD_EXT_W -1:0] ext_narrow_y_din_y; + wire wr_wide_xy_ena_x; // \ \ + wire [ BANK_ADDR_W -1:0] wr_wide_xy_bank_x; // | WIDE | WR + wire [ OP_ADDR_W -1:0] wr_wide_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wr_wide_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wr_wide_y_data_x; // / | + // | + wire wr_narrow_xy_ena_x; // \ | + wire [ BANK_ADDR_W -1:0] wr_narrow_xy_bank_x; // | NARROW | + wire [ OP_ADDR_W -1:0] wr_narrow_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wr_narrow_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wr_narrow_y_data_x; // / / + // + wire rd_wide_xy_ena_x; // \ \ + wire rd_wide_xy_ena_aux_x; // | WIDE | RD + wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_x; // | | + wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_aux_x; // | | + wire [NUM_MULTS_HALF * OP_ADDR_W -1:0] rd_wide_xy_addr_x; // | | + wire [ OP_ADDR_W -1:0] rd_wide_xy_addr_aux_x; // | | + wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_x_data_x; // | | + wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_y_data_x; // | | + wire [ WORD_EXT_W -1:0] rd_wide_x_data_aux_x; // | | + wire [ WORD_EXT_W -1:0] rd_wide_y_data_aux_x; // / | + // | + wire rd_narrow_xy_ena_x; // \ | + wire [ BANK_ADDR_W -1:0] rd_narrow_xy_bank_x; // | NARROW | + wire [ OP_ADDR_W -1:0] rd_narrow_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] rd_narrow_x_data_x; // | | + wire [ WORD_EXT_W -1:0] rd_narrow_y_data_x; // / / + // + wire wrk_rd_wide_xy_ena_x; // \ \ + wire [ BANK_ADDR_W -1:0] wrk_rd_wide_xy_bank_x; // | WIDE | WRK + wire [ OP_ADDR_W -1:0] wrk_rd_wide_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wrk_rd_wide_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wrk_rd_wide_y_data_x; // / | + // | + wire wrk_rd_narrow_xy_ena_x; // \ | + wire [ BANK_ADDR_W -1:0] wrk_rd_narrow_xy_bank_x; // | NARROW | + wire [ OP_ADDR_W -1:0] wrk_rd_narrow_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wrk_rd_narrow_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wrk_rd_narrow_y_data_x; // / / + + wire wrk_wr_wide_xy_ena_x; // \ \ + wire [ BANK_ADDR_W -1:0] wrk_wr_wide_xy_bank_x; // | WIDE | WRK + wire [ OP_ADDR_W -1:0] wrk_wr_wide_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wrk_wr_wide_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wrk_wr_wide_y_data_x; // / | + // | + wire wrk_wr_narrow_xy_ena_x; // \ | + wire [ BANK_ADDR_W -1:0] wrk_wr_narrow_xy_bank_x; // | NARROW | + wire [ OP_ADDR_W -1:0] wrk_wr_narrow_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] wrk_wr_narrow_x_data_x; // | | + wire [ WORD_EXT_W -1:0] wrk_wr_narrow_y_data_x; // / / + // + wire io_wide_xy_ena_x; // \ \ + wire [ BANK_ADDR_W -1:0] io_wide_xy_bank_x; // | WIDE | IO + wire [ OP_ADDR_W -1:0] io_wide_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] io_wide_x_data_x; // | | + wire [ WORD_EXT_W -1:0] io_wide_y_data_x; // / | + // | + wire io_narrow_xy_ena_x; // \ | + wire [ BANK_ADDR_W -1:0] io_narrow_xy_bank_x; // | NARROW | + wire [ OP_ADDR_W -1:0] io_narrow_xy_addr_x; // | | + wire [ WORD_EXT_W -1:0] io_narrow_x_data_x; // | | + wire [ WORD_EXT_W -1:0] io_narrow_y_data_x; // / / + // + wire wr_wide_xy_ena_y; // \ + wire [ BANK_ADDR_W -1:0] wr_wide_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wr_wide_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wr_wide_x_data_y; // + wire [ WORD_EXT_W -1:0] wr_wide_y_data_y; // + // + wire wr_narrow_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] wr_narrow_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wr_narrow_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wr_narrow_x_data_y; // + wire [ WORD_EXT_W -1:0] wr_narrow_y_data_y; // + // + wire rd_wide_xy_ena_y; // + wire rd_wide_xy_ena_aux_y; // + wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_y; // + wire [ BANK_ADDR_W -1:0] rd_wide_xy_bank_aux_y; // + wire [NUM_MULTS_HALF * OP_ADDR_W -1:0] rd_wide_xy_addr_y; // + wire [ OP_ADDR_W -1:0] rd_wide_xy_addr_aux_y; // + wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_x_data_y; // + wire [NUM_MULTS_HALF * WORD_EXT_W -1:0] rd_wide_y_data_y; // + wire [ WORD_EXT_W -1:0] rd_wide_x_data_aux_y; // + wire [ WORD_EXT_W -1:0] rd_wide_y_data_aux_y; // + // + wire rd_narrow_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] rd_narrow_xy_bank_y; // + wire [ OP_ADDR_W -1:0] rd_narrow_xy_addr_y; // + wire [ WORD_EXT_W -1:0] rd_narrow_x_data_y; // + wire [ WORD_EXT_W -1:0] rd_narrow_y_data_y; // + // + wire wrk_rd_wide_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] wrk_rd_wide_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wrk_rd_wide_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wrk_rd_wide_x_data_y; // + wire [ WORD_EXT_W -1:0] wrk_rd_wide_y_data_y; // + // + wire wrk_rd_narrow_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] wrk_rd_narrow_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wrk_rd_narrow_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wrk_rd_narrow_x_data_y; // + wire [ WORD_EXT_W -1:0] wrk_rd_narrow_y_data_y; // + + wire wrk_wr_wide_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] wrk_wr_wide_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wrk_wr_wide_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wrk_wr_wide_x_data_y; // + wire [ WORD_EXT_W -1:0] wrk_wr_wide_y_data_y; // + // + wire wrk_wr_narrow_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] wrk_wr_narrow_xy_bank_y; // + wire [ OP_ADDR_W -1:0] wrk_wr_narrow_xy_addr_y; // + wire [ WORD_EXT_W -1:0] wrk_wr_narrow_x_data_y; // + wire [ WORD_EXT_W -1:0] wrk_wr_narrow_y_data_y; // + // + wire io_wide_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] io_wide_xy_bank_y; // + wire [ OP_ADDR_W -1:0] io_wide_xy_addr_y; // + wire [ WORD_EXT_W -1:0] io_wide_x_data_y; // + wire [ WORD_EXT_W -1:0] io_wide_y_data_y; // + // + wire io_narrow_xy_ena_y; // + wire [ BANK_ADDR_W -1:0] io_narrow_xy_bank_y; // + wire [ OP_ADDR_W -1:0] io_narrow_xy_addr_y; // + wire [ WORD_EXT_W -1:0] io_narrow_x_data_y; // + wire [ WORD_EXT_W -1:0] io_narrow_y_data_y; // // @@ -189,38 +239,38 @@ module modexpng_core_top // wire [BANK_ADDR_W -1:0] rcmb_wide_xy_bank_x; wire [ OP_ADDR_W -1:0] rcmb_wide_xy_addr_x; - wire [ WORD_EXT_W -1:0] rcmb_wide_x_dout_x; - wire [ WORD_EXT_W -1:0] rcmb_wide_y_dout_x; + wire [ WORD_EXT_W -1:0] rcmb_wide_x_data_x; + wire [ WORD_EXT_W -1:0] rcmb_wide_y_data_x; wire rcmb_wide_xy_valid_x; wire [BANK_ADDR_W -1:0] rcmb_narrow_xy_bank_x; wire [ OP_ADDR_W -1:0] rcmb_narrow_xy_addr_x; - wire [ WORD_EXT_W -1:0] rcmb_narrow_x_dout_x; - wire [ WORD_EXT_W -1:0] rcmb_narrow_y_dout_x; + wire [ WORD_EXT_W -1:0] rcmb_narrow_x_data_x; + wire [ WORD_EXT_W -1:0] rcmb_narrow_y_data_x; wire rcmb_narrow_xy_valid_x; wire [BANK_ADDR_W -1:0] rcmb_final_xy_bank_x; wire [ OP_ADDR_W -1:0] rcmb_final_xy_addr_x; - wire [ WORD_EXT_W -1:0] rcmb_final_x_dout_x; - wire [ WORD_EXT_W -1:0] rcmb_final_y_dout_x; + wire [ WORD_EXT_W -1:0] rcmb_final_x_data_x; + wire [ WORD_EXT_W -1:0] rcmb_final_y_data_x; wire rcmb_final_xy_valid_x; wire [BANK_ADDR_W -1:0] rcmb_wide_xy_bank_y; wire [ OP_ADDR_W -1:0] rcmb_wide_xy_addr_y; - wire [ WORD_EXT_W -1:0] rcmb_wide_x_dout_y; - wire [ WORD_EXT_W -1:0] rcmb_wide_y_dout_y; + wire [ WORD_EXT_W -1:0] rcmb_wide_x_data_y; + wire [ WORD_EXT_W -1:0] rcmb_wide_y_data_y; wire rcmb_wide_xy_valid_y; wire [BANK_ADDR_W -1:0] rcmb_narrow_xy_bank_y; wire [ OP_ADDR_W -1:0] rcmb_narrow_xy_addr_y; - wire [ WORD_EXT_W -1:0] rcmb_narrow_x_dout_y; - wire [ WORD_EXT_W -1:0] rcmb_narrow_y_dout_y; + wire [ WORD_EXT_W -1:0] rcmb_narrow_x_data_y; + wire [ WORD_EXT_W -1:0] rcmb_narrow_y_data_y; wire rcmb_narrow_xy_valid_y; wire [BANK_ADDR_W -1:0] rcmb_final_xy_bank_y; wire [ OP_ADDR_W -1:0] rcmb_final_xy_addr_y; - wire [ WORD_EXT_W -1:0] rcmb_final_x_dout_y; - wire [ WORD_EXT_W -1:0] rcmb_final_y_dout_y; + wire [ WORD_EXT_W -1:0] rcmb_final_x_data_y; + wire [ WORD_EXT_W -1:0] rcmb_final_y_data_y; wire rcmb_final_xy_valid_y; @@ -229,26 +279,26 @@ module modexpng_core_top // wire [BANK_ADDR_W -1:0] rdct_wide_xy_bank_x; wire [ OP_ADDR_W -1:0] rdct_wide_xy_addr_x; - wire [ WORD_EXT_W -1:0] rdct_wide_x_dout_x; - wire [ WORD_EXT_W -1:0] rdct_wide_y_dout_x; + wire [ WORD_EXT_W -1:0] rdct_wide_x_data_x; + wire [ WORD_EXT_W -1:0] rdct_wide_y_data_x; wire rdct_wide_xy_valid_x; wire [BANK_ADDR_W -1:0] rdct_narrow_xy_bank_x; wire [ OP_ADDR_W -1:0] rdct_narrow_xy_addr_x; - wire [ WORD_EXT_W -1:0] rdct_narrow_x_dout_x; - wire [ WORD_EXT_W -1:0] rdct_narrow_y_dout_x; + wire [ WORD_EXT_W -1:0] rdct_narrow_x_data_x; + wire [ WORD_EXT_W -1:0] rdct_narrow_y_data_x; wire rdct_narrow_xy_valid_x; wire [BANK_ADDR_W -1:0] rdct_wide_xy_bank_y; wire [ OP_ADDR_W -1:0] rdct_wide_xy_addr_y; - wire [ WORD_EXT_W -1:0] rdct_wide_x_dout_y; - wire [ WORD_EXT_W -1:0] rdct_wide_y_dout_y; + wire [ WORD_EXT_W -1:0] rdct_wide_x_data_y; + wire [ WORD_EXT_W -1:0] rdct_wide_y_data_y; wire rdct_wide_xy_valid_y; wire [BANK_ADDR_W -1:0] rdct_narrow_xy_bank_y; wire [ OP_ADDR_W -1:0] rdct_narrow_xy_addr_y; - wire [ WORD_EXT_W -1:0] rdct_narrow_x_dout_y; - wire [ WORD_EXT_W -1:0] rdct_narrow_y_dout_y; + wire [ WORD_EXT_W -1:0] rdct_narrow_x_data_y; + wire [ WORD_EXT_W -1:0] rdct_narrow_y_data_y; wire rdct_narrow_xy_valid_y; @@ -263,14 +313,14 @@ module modexpng_core_top .wr_wide_xy_ena (wr_wide_xy_ena_x), .wr_wide_xy_bank (wr_wide_xy_bank_x), .wr_wide_xy_addr (wr_wide_xy_addr_x), - .wr_wide_x_din (wr_wide_x_din_x), - .wr_wide_y_din (wr_wide_y_din_x), + .wr_wide_x_din (wr_wide_x_data_x), + .wr_wide_y_din (wr_wide_y_data_x), .wr_narrow_xy_ena (wr_narrow_xy_ena_x), .wr_narrow_xy_bank (wr_narrow_xy_bank_x), .wr_narrow_xy_addr (wr_narrow_xy_addr_x), - .wr_narrow_x_din (wr_narrow_x_din_x), - .wr_narrow_y_din (wr_narrow_y_din_x), + .wr_narrow_x_din (wr_narrow_x_data_x), + .wr_narrow_y_din (wr_narrow_y_data_x), .rd_wide_xy_ena (rd_wide_xy_ena_x), .rd_wide_xy_ena_aux (rd_wide_xy_ena_aux_x), @@ -278,16 +328,28 @@ module modexpng_core_top .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_x), .rd_wide_xy_addr (rd_wide_xy_addr_x), .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_x), - .rd_wide_x_dout (rd_wide_x_dout_x), - .rd_wide_y_dout (rd_wide_y_dout_x), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_x), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_x), + .rd_wide_x_dout (rd_wide_x_data_x), + .rd_wide_y_dout (rd_wide_y_data_x), + .rd_wide_x_dout_aux (rd_wide_x_data_aux_x), + .rd_wide_y_dout_aux (rd_wide_y_data_aux_x), .rd_narrow_xy_ena (rd_narrow_xy_ena_x), .rd_narrow_xy_bank (rd_narrow_xy_bank_x), .rd_narrow_xy_addr (rd_narrow_xy_addr_x), - .rd_narrow_x_dout (rd_narrow_x_dout_x), - .rd_narrow_y_dout (rd_narrow_y_dout_x) + .rd_narrow_x_dout (rd_narrow_x_data_x), + .rd_narrow_y_dout (rd_narrow_y_data_x), + + .wrk_wide_xy_ena (wrk_rd_wide_xy_ena_x), + .wrk_wide_xy_bank (wrk_rd_wide_xy_bank_x), + .wrk_wide_xy_addr (wrk_rd_wide_xy_addr_x), + .wrk_wide_x_dout (wrk_rd_wide_x_data_x), + .wrk_wide_y_dout (wrk_rd_wide_y_data_x), + + .wrk_narrow_xy_ena (wrk_rd_narrow_xy_ena_x), + .wrk_narrow_xy_bank (wrk_rd_narrow_xy_bank_x), + .wrk_narrow_xy_addr (wrk_rd_narrow_xy_addr_x), + .wrk_narrow_x_dout (wrk_rd_narrow_x_data_x), + .wrk_narrow_y_dout (wrk_rd_narrow_y_data_x) ); modexpng_storage_block storage_block_y @@ -298,14 +360,14 @@ module modexpng_core_top .wr_wide_xy_ena (wr_wide_xy_ena_y), .wr_wide_xy_bank (wr_wide_xy_bank_y), .wr_wide_xy_addr (wr_wide_xy_addr_y), - .wr_wide_x_din (wr_wide_x_din_y), - .wr_wide_y_din (wr_wide_y_din_y), + .wr_wide_x_din (wr_wide_x_data_y), + .wr_wide_y_din (wr_wide_y_data_y), .wr_narrow_xy_ena (wr_narrow_xy_ena_y), .wr_narrow_xy_bank (wr_narrow_xy_bank_y), .wr_narrow_xy_addr (wr_narrow_xy_addr_y), - .wr_narrow_x_din (wr_narrow_x_din_y), - .wr_narrow_y_din (wr_narrow_y_din_y), + .wr_narrow_x_din (wr_narrow_x_data_y), + .wr_narrow_y_din (wr_narrow_y_data_y), .rd_wide_xy_ena (rd_wide_xy_ena_y), .rd_wide_xy_ena_aux (rd_wide_xy_ena_aux_y), @@ -313,16 +375,29 @@ module modexpng_core_top .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_y), .rd_wide_xy_addr (rd_wide_xy_addr_y), .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_y), - .rd_wide_x_dout (rd_wide_x_dout_y), - .rd_wide_y_dout (rd_wide_y_dout_y), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_y), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_y), + .rd_wide_x_dout (rd_wide_x_data_y), + .rd_wide_y_dout (rd_wide_y_data_y), + .rd_wide_x_dout_aux (rd_wide_x_data_aux_y), + .rd_wide_y_dout_aux (rd_wide_y_data_aux_y), .rd_narrow_xy_ena (rd_narrow_xy_ena_y), .rd_narrow_xy_bank (rd_narrow_xy_bank_y), .rd_narrow_xy_addr (rd_narrow_xy_addr_y), - .rd_narrow_x_dout (rd_narrow_x_dout_y), - .rd_narrow_y_dout (rd_narrow_y_dout_y) + .rd_narrow_x_dout (rd_narrow_x_data_y), + .rd_narrow_y_dout (rd_narrow_y_data_y), + + .wrk_wide_xy_ena (wrk_rd_wide_xy_ena_y), + .wrk_wide_xy_bank (wrk_rd_wide_xy_bank_y), + .wrk_wide_xy_addr (wrk_rd_wide_xy_addr_y), + .wrk_wide_x_dout (wrk_rd_wide_x_data_y), + .wrk_wide_y_dout (wrk_rd_wide_y_data_y), + + .wrk_narrow_xy_ena (wrk_rd_narrow_xy_ena_y), + .wrk_narrow_xy_bank (wrk_rd_narrow_xy_bank_y), + .wrk_narrow_xy_addr (wrk_rd_narrow_xy_addr_y), + .wrk_narrow_x_dout (wrk_rd_narrow_x_data_y), + .wrk_narrow_y_dout (wrk_rd_narrow_y_data_y) + ); @@ -337,50 +412,62 @@ module modexpng_core_top .wr_wide_xy_ena (wr_wide_xy_ena_x), .wr_wide_xy_bank (wr_wide_xy_bank_x), .wr_wide_xy_addr (wr_wide_xy_addr_x), - .wr_wide_x_din (wr_wide_x_din_x), - .wr_wide_y_din (wr_wide_y_din_x), + .wr_wide_x_dout (wr_wide_x_data_x), + .wr_wide_y_dout (wr_wide_y_data_x), .wr_narrow_xy_ena (wr_narrow_xy_ena_x), .wr_narrow_xy_bank (wr_narrow_xy_bank_x), .wr_narrow_xy_addr (wr_narrow_xy_addr_x), - .wr_narrow_x_din (wr_narrow_x_din_x), - .wr_narrow_y_din (wr_narrow_y_din_x), + .wr_narrow_x_dout (wr_narrow_x_data_x), + .wr_narrow_y_dout (wr_narrow_y_data_x), - .ext_wide_xy_ena (ext_wide_xy_ena_x), - .ext_wide_xy_bank (ext_wide_xy_bank_x), - .ext_wide_xy_addr (ext_wide_xy_addr_x), - .ext_wide_x_din (ext_wide_x_din_x), - .ext_wide_y_din (ext_wide_y_din_x), + .io_wide_xy_ena (io_wide_xy_ena_x), + .io_wide_xy_bank (io_wide_xy_bank_x), + .io_wide_xy_addr (io_wide_xy_addr_x), + .io_wide_x_din (io_wide_x_data_x), + .io_wide_y_din (io_wide_y_data_x), - .ext_narrow_xy_ena (ext_narrow_xy_ena_x), - .ext_narrow_xy_bank (ext_narrow_xy_bank_x), - .ext_narrow_xy_addr (ext_narrow_xy_addr_x), - .ext_narrow_x_din (ext_narrow_x_din_x), - .ext_narrow_y_din (ext_narrow_y_din_x), + .io_narrow_xy_ena (io_narrow_xy_ena_x), + .io_narrow_xy_bank (io_narrow_xy_bank_x), + .io_narrow_xy_addr (io_narrow_xy_addr_x), + .io_narrow_x_din (io_narrow_x_data_x), + .io_narrow_y_din (io_narrow_y_data_x), .rcmb_wide_xy_bank (rcmb_wide_xy_bank_x), .rcmb_wide_xy_addr (rcmb_wide_xy_addr_x), - .rcmb_wide_x_din (rcmb_wide_x_dout_x), - .rcmb_wide_y_din (rcmb_wide_y_dout_x), + .rcmb_wide_x_din (rcmb_wide_x_data_x), + .rcmb_wide_y_din (rcmb_wide_y_data_x), .rcmb_wide_xy_ena (rcmb_wide_xy_valid_x), .rcmb_narrow_xy_bank (rcmb_narrow_xy_bank_x), .rcmb_narrow_xy_addr (rcmb_narrow_xy_addr_x), - .rcmb_narrow_x_din (rcmb_narrow_x_dout_x), - .rcmb_narrow_y_din (rcmb_narrow_y_dout_x), + .rcmb_narrow_x_din (rcmb_narrow_x_data_x), + .rcmb_narrow_y_din (rcmb_narrow_y_data_x), .rcmb_narrow_xy_ena (rcmb_narrow_xy_valid_x), .rdct_wide_xy_bank (rdct_wide_xy_bank_x), .rdct_wide_xy_addr (rdct_wide_xy_addr_x), - .rdct_wide_x_din (rdct_wide_x_dout_x), // TODO: maybe just rename to {x|y}_x, since that's an - .rdct_wide_y_din (rdct_wide_y_dout_x), // internal signal?? + .rdct_wide_x_din (rdct_wide_x_data_x), + .rdct_wide_y_din (rdct_wide_y_data_x), .rdct_wide_xy_valid (rdct_wide_xy_valid_x), .rdct_narrow_xy_bank (rdct_narrow_xy_bank_x), .rdct_narrow_xy_addr (rdct_narrow_xy_addr_x), - .rdct_narrow_x_din (rdct_narrow_x_dout_x), - .rdct_narrow_y_din (rdct_narrow_y_dout_x), - .rdct_narrow_xy_valid (rdct_narrow_xy_valid_x) + .rdct_narrow_x_din (rdct_narrow_x_data_x), + .rdct_narrow_y_din (rdct_narrow_y_data_x), + .rdct_narrow_xy_valid (rdct_narrow_xy_valid_x), + + .wrk_wide_xy_ena (wrk_wr_wide_xy_ena_x), + .wrk_wide_xy_bank (wrk_wr_wide_xy_bank_x), + .wrk_wide_xy_addr (wrk_wr_wide_xy_addr_x), + .wrk_wide_x_din (wrk_wr_wide_x_data_x), + .wrk_wide_y_din (wrk_wr_wide_y_data_x), + + .wrk_narrow_xy_ena (wrk_wr_narrow_xy_ena_x), + .wrk_narrow_xy_bank (wrk_wr_narrow_xy_bank_x), + .wrk_narrow_xy_addr (wrk_wr_narrow_xy_addr_x), + .wrk_narrow_x_din (wrk_wr_narrow_x_data_x), + .wrk_narrow_y_din (wrk_wr_narrow_y_data_x) ); modexpng_storage_manager storage_manager_y @@ -391,51 +478,62 @@ module modexpng_core_top .wr_wide_xy_ena (wr_wide_xy_ena_y), .wr_wide_xy_bank (wr_wide_xy_bank_y), .wr_wide_xy_addr (wr_wide_xy_addr_y), - .wr_wide_x_din (wr_wide_x_din_y), - .wr_wide_y_din (wr_wide_y_din_y), + .wr_wide_x_dout (wr_wide_x_data_y), + .wr_wide_y_dout (wr_wide_y_data_y), .wr_narrow_xy_ena (wr_narrow_xy_ena_y), .wr_narrow_xy_bank (wr_narrow_xy_bank_y), .wr_narrow_xy_addr (wr_narrow_xy_addr_y), - .wr_narrow_x_din (wr_narrow_x_din_y), - .wr_narrow_y_din (wr_narrow_y_din_y), + .wr_narrow_x_dout (wr_narrow_x_data_y), + .wr_narrow_y_dout (wr_narrow_y_data_y), - .ext_wide_xy_ena (ext_wide_xy_ena_y), - .ext_wide_xy_bank (ext_wide_xy_bank_y), - .ext_wide_xy_addr (ext_wide_xy_addr_y), - .ext_wide_x_din (ext_wide_x_din_y), - .ext_wide_y_din (ext_wide_y_din_y), + .io_wide_xy_ena (io_wide_xy_ena_y), + .io_wide_xy_bank (io_wide_xy_bank_y), + .io_wide_xy_addr (io_wide_xy_addr_y), + .io_wide_x_din (io_wide_x_data_y), + .io_wide_y_din (io_wide_y_data_y), - .ext_narrow_xy_ena (ext_narrow_xy_ena_y), - .ext_narrow_xy_bank (ext_narrow_xy_bank_y), - .ext_narrow_xy_addr (ext_narrow_xy_addr_y), - .ext_narrow_x_din (ext_narrow_x_din_y), - .ext_narrow_y_din (ext_narrow_y_din_y), + .io_narrow_xy_ena (io_narrow_xy_ena_y), + .io_narrow_xy_bank (io_narrow_xy_bank_y), + .io_narrow_xy_addr (io_narrow_xy_addr_y), + .io_narrow_x_din (io_narrow_x_data_y), + .io_narrow_y_din (io_narrow_y_data_y), .rcmb_wide_xy_bank (rcmb_wide_xy_bank_y), .rcmb_wide_xy_addr (rcmb_wide_xy_addr_y), - .rcmb_wide_x_din (rcmb_wide_x_dout_y), - .rcmb_wide_y_din (rcmb_wide_y_dout_y), + .rcmb_wide_x_din (rcmb_wide_x_data_y), + .rcmb_wide_y_din (rcmb_wide_y_data_y), .rcmb_wide_xy_ena (rcmb_wide_xy_valid_y), .rcmb_narrow_xy_bank (rcmb_narrow_xy_bank_y), .rcmb_narrow_xy_addr (rcmb_narrow_xy_addr_y), - .rcmb_narrow_x_din (rcmb_narrow_x_dout_y), - .rcmb_narrow_y_din (rcmb_narrow_y_dout_y), + .rcmb_narrow_x_din (rcmb_narrow_x_data_y), + .rcmb_narrow_y_din (rcmb_narrow_y_data_y), .rcmb_narrow_xy_ena (rcmb_narrow_xy_valid_y), .rdct_wide_xy_bank (rdct_wide_xy_bank_y), .rdct_wide_xy_addr (rdct_wide_xy_addr_y), - .rdct_wide_x_din (rdct_wide_x_dout_y), - .rdct_wide_y_din (rdct_wide_y_dout_y), + .rdct_wide_x_din (rdct_wide_x_data_y), + .rdct_wide_y_din (rdct_wide_y_data_y), .rdct_wide_xy_valid (rdct_wide_xy_valid_y), .rdct_narrow_xy_bank (rdct_narrow_xy_bank_y), .rdct_narrow_xy_addr (rdct_narrow_xy_addr_y), - .rdct_narrow_x_din (rdct_narrow_x_dout_y), - .rdct_narrow_y_din (rdct_narrow_y_dout_y), - .rdct_narrow_xy_valid (rdct_narrow_xy_valid_y) - + .rdct_narrow_x_din (rdct_narrow_x_data_y), + .rdct_narrow_y_din (rdct_narrow_y_data_y), + .rdct_narrow_xy_valid (rdct_narrow_xy_valid_y), + + .wrk_wide_xy_ena (wrk_wr_wide_xy_ena_y), + .wrk_wide_xy_bank (wrk_wr_wide_xy_bank_y), + .wrk_wide_xy_addr (wrk_wr_wide_xy_addr_y), + .wrk_wide_x_din (wrk_wr_wide_x_data_y), + .wrk_wide_y_din (wrk_wr_wide_y_data_y), + + .wrk_narrow_xy_ena (wrk_wr_narrow_xy_ena_y), + .wrk_narrow_xy_bank (wrk_wr_narrow_xy_bank_y), + .wrk_narrow_xy_addr (wrk_wr_narrow_xy_addr_y), + .wrk_narrow_x_din (wrk_wr_narrow_x_data_y), + .wrk_narrow_y_din (wrk_wr_narrow_y_data_y) ); @@ -444,16 +542,16 @@ module modexpng_core_top // wire io_in_1_en; wire [BANK_ADDR_W + OP_ADDR_W -1:0] io_in_1_addr; - wire [ WORD_W -1:0] io_in_1_dout; + wire [ WORD_W -1:0] io_in_1_data; wire io_in_2_en; wire [BANK_ADDR_W + OP_ADDR_W -1:0] io_in_2_addr; - wire [ WORD_W -1:0] io_in_2_dout; + wire [ WORD_W -1:0] io_in_2_data; wire io_out_en; wire io_out_we; wire [BANK_ADDR_W + OP_ADDR_W -1:0] io_out_addr; - wire [ WORD_W -1:0] io_out_din; + wire [ WORD_W -1:0] io_out_data; // TODO: Separate reset for clock domains (core/bus)??? @@ -472,16 +570,16 @@ module modexpng_core_top .in_1_en (io_in_1_en), .in_1_addr (io_in_1_addr), - .in_1_dout (io_in_1_dout), + .in_1_dout (io_in_1_data), .in_2_en (io_in_2_en), .in_2_addr (io_in_2_addr), - .in_2_dout (io_in_2_dout), + .in_2_dout (io_in_2_data), .out_en (io_out_en), .out_we (io_out_we), .out_addr (io_out_addr), - .out_din (io_out_din) + .out_din (io_out_data) ); @@ -497,59 +595,65 @@ module modexpng_core_top reg [OP_ADDR_W -1:0] io_mgr_word_index_last; reg [UOP_OPCODE_W -1:0] io_mgr_opcode; + wire [WORD_W -1:0] wrk_rd_narrow_x_data_x_trunc = wrk_rd_narrow_x_data_x[WORD_W-1:0]; + wire [WORD_W -1:0] wrk_rd_narrow_x_data_y_trunc = wrk_rd_narrow_x_data_y[WORD_W-1:0]; + modexpng_io_manager io_manager ( - .clk (clk), - .rst (rst), + .clk (clk), + .rst (rst), - .ena (io_mgr_ena), - .rdy (io_mgr_rdy), + .ena (io_mgr_ena), + .rdy (io_mgr_rdy), - .sel_crt (io_mgr_sel_crt), - .sel_aux (io_mgr_sel_aux), - .sel_in (io_mgr_sel_in), - .sel_out (io_mgr_sel_out), + .sel_crt (io_mgr_sel_crt), + .sel_aux (io_mgr_sel_aux), + .sel_in (io_mgr_sel_in), + .sel_out (io_mgr_sel_out), - .opcode (io_mgr_opcode), + .opcode (io_mgr_opcode), - .word_index_last (io_mgr_word_index_last), + .word_index_last (io_mgr_word_index_last), - .ext_wide_xy_ena_x (ext_wide_xy_ena_x), - .ext_wide_xy_bank_x (ext_wide_xy_bank_x), - .ext_wide_xy_addr_x (ext_wide_xy_addr_x), - .ext_wide_x_din_x (ext_wide_x_din_x), - .ext_wide_y_din_x (ext_wide_y_din_x), - - .ext_narrow_xy_ena_x (ext_narrow_xy_ena_x), - .ext_narrow_xy_bank_x (ext_narrow_xy_bank_x), - .ext_narrow_xy_addr_x (ext_narrow_xy_addr_x), - .ext_narrow_x_din_x (ext_narrow_x_din_x), - .ext_narrow_y_din_x (ext_narrow_y_din_x), - - .ext_wide_xy_ena_y (ext_wide_xy_ena_y), - .ext_wide_xy_bank_y (ext_wide_xy_bank_y), - .ext_wide_xy_addr_y (ext_wide_xy_addr_y), - .ext_wide_x_din_y (ext_wide_x_din_y), - .ext_wide_y_din_y (ext_wide_y_din_y), - - .ext_narrow_xy_ena_y (ext_narrow_xy_ena_y), - .ext_narrow_xy_bank_y (ext_narrow_xy_bank_y), - .ext_narrow_xy_addr_y (ext_narrow_xy_addr_y), - .ext_narrow_x_din_y (ext_narrow_x_din_y), - .ext_narrow_y_din_y (ext_narrow_y_din_y), + .io_wide_xy_ena_x (io_wide_xy_ena_x), + .io_wide_xy_bank_x (io_wide_xy_bank_x), + .io_wide_xy_addr_x (io_wide_xy_addr_x), + .io_wide_x_din_x (io_wide_x_data_x), + .io_wide_y_din_x (io_wide_y_data_x), + + .io_narrow_xy_ena_x (io_narrow_xy_ena_x), + .io_narrow_xy_bank_x (io_narrow_xy_bank_x), + .io_narrow_xy_addr_x (io_narrow_xy_addr_x), + .io_narrow_x_din_x (io_narrow_x_data_x), + .io_narrow_y_din_x (io_narrow_y_data_x), + + .io_wide_xy_ena_y (io_wide_xy_ena_y), + .io_wide_xy_bank_y (io_wide_xy_bank_y), + .io_wide_xy_addr_y (io_wide_xy_addr_y), + .io_wide_x_din_y (io_wide_x_data_y), + .io_wide_y_din_y (io_wide_y_data_y), + + .io_narrow_xy_ena_y (io_narrow_xy_ena_y), + .io_narrow_xy_bank_y (io_narrow_xy_bank_y), + .io_narrow_xy_addr_y (io_narrow_xy_addr_y), + .io_narrow_x_din_y (io_narrow_x_data_y), + .io_narrow_y_din_y (io_narrow_y_data_y), - .io_in_1_en (io_in_1_en), - .io_in_1_addr (io_in_1_addr), - .io_in_1_dout (io_in_1_dout), + .io_in_1_en (io_in_1_en), + .io_in_1_addr (io_in_1_addr), + .io_in_1_din (io_in_1_data), - .io_in_2_en (io_in_2_en), - .io_in_2_addr (io_in_2_addr), - .io_in_2_dout (io_in_2_dout), + .io_in_2_en (io_in_2_en), + .io_in_2_addr (io_in_2_addr), + .io_in_2_din (io_in_2_data), - .io_out_en (io_out_en), - .io_out_we (io_out_we), - .io_out_addr (io_out_addr), - .io_out_din (io_out_din) + .io_out_en (io_out_en), + .io_out_we (io_out_we), + .io_out_addr (io_out_addr), + .io_out_dout (io_out_data), + + .wrk_narrow_x_din_x_trunc (wrk_rd_narrow_x_data_x_trunc), + .wrk_narrow_x_din_y_trunc (wrk_rd_narrow_x_data_y_trunc) ); @@ -608,33 +712,33 @@ module modexpng_core_top .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_x), .rd_wide_xy_addr (rd_wide_xy_addr_x), .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_x), - .rd_wide_x_dout (rd_wide_x_dout_x), - .rd_wide_y_dout (rd_wide_y_dout_x), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_x), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_x), + .rd_wide_x_din (rd_wide_x_data_x), + .rd_wide_y_din (rd_wide_y_data_x), + .rd_wide_x_din_aux (rd_wide_x_data_aux_x), + .rd_wide_y_din_aux (rd_wide_y_data_aux_x), .rd_narrow_xy_ena (rd_narrow_xy_ena_x), .rd_narrow_xy_bank (rd_narrow_xy_bank_x), .rd_narrow_xy_addr (rd_narrow_xy_addr_x), - .rd_narrow_x_dout (rd_narrow_x_dout_x), - .rd_narrow_y_dout (rd_narrow_y_dout_x), + .rd_narrow_x_din (rd_narrow_x_data_x), + .rd_narrow_y_din (rd_narrow_y_data_x), .rcmb_wide_xy_bank (rcmb_wide_xy_bank_x), .rcmb_wide_xy_addr (rcmb_wide_xy_addr_x), - .rcmb_wide_x_dout (rcmb_wide_x_dout_x), - .rcmb_wide_y_dout (rcmb_wide_y_dout_x), + .rcmb_wide_x_dout (rcmb_wide_x_data_x), + .rcmb_wide_y_dout (rcmb_wide_y_data_x), .rcmb_wide_xy_valid (rcmb_wide_xy_valid_x), .rcmb_narrow_xy_bank (rcmb_narrow_xy_bank_x), .rcmb_narrow_xy_addr (rcmb_narrow_xy_addr_x), - .rcmb_narrow_x_dout (rcmb_narrow_x_dout_x), - .rcmb_narrow_y_dout (rcmb_narrow_y_dout_x), + .rcmb_narrow_x_dout (rcmb_narrow_x_data_x), + .rcmb_narrow_y_dout (rcmb_narrow_y_data_x), .rcmb_narrow_xy_valid (rcmb_narrow_xy_valid_x), .rcmb_xy_bank (rcmb_final_xy_bank_x), .rcmb_xy_addr (rcmb_final_xy_addr_x), - .rcmb_x_dout (rcmb_final_x_dout_x), - .rcmb_y_dout (rcmb_final_y_dout_x), + .rcmb_x_dout (rcmb_final_x_data_x), + .rcmb_y_dout (rcmb_final_y_data_x), .rcmb_xy_valid (rcmb_final_xy_valid_x), .rdct_ena (rdct_ena_x), @@ -663,33 +767,33 @@ module modexpng_core_top .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_y), .rd_wide_xy_addr (rd_wide_xy_addr_y), .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_y), - .rd_wide_x_dout (rd_wide_x_dout_y), - .rd_wide_y_dout (rd_wide_y_dout_y), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_y), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_y), + .rd_wide_x_din (rd_wide_x_data_y), + .rd_wide_y_din (rd_wide_y_data_y), + .rd_wide_x_din_aux (rd_wide_x_data_aux_y), + .rd_wide_y_din_aux (rd_wide_y_data_aux_y), .rd_narrow_xy_ena (rd_narrow_xy_ena_y), .rd_narrow_xy_bank (rd_narrow_xy_bank_y), .rd_narrow_xy_addr (rd_narrow_xy_addr_y), - .rd_narrow_x_dout (rd_narrow_x_dout_y), - .rd_narrow_y_dout (rd_narrow_y_dout_y), + .rd_narrow_x_din (rd_narrow_x_data_y), + .rd_narrow_y_din (rd_narrow_y_data_y), .rcmb_wide_xy_bank (rcmb_wide_xy_bank_y), .rcmb_wide_xy_addr (rcmb_wide_xy_addr_y), - .rcmb_wide_x_dout (rcmb_wide_x_dout_y), - .rcmb_wide_y_dout (rcmb_wide_y_dout_y), + .rcmb_wide_x_dout (rcmb_wide_x_data_y), + .rcmb_wide_y_dout (rcmb_wide_y_data_y), .rcmb_wide_xy_valid (rcmb_wide_xy_valid_y), .rcmb_narrow_xy_bank (rcmb_narrow_xy_bank_y), .rcmb_narrow_xy_addr (rcmb_narrow_xy_addr_y), - .rcmb_narrow_x_dout (rcmb_narrow_x_dout_y), - .rcmb_narrow_y_dout (rcmb_narrow_y_dout_y), + .rcmb_narrow_x_dout (rcmb_narrow_x_data_y), + .rcmb_narrow_y_dout (rcmb_narrow_y_data_y), .rcmb_narrow_xy_valid (rcmb_narrow_xy_valid_y), .rcmb_xy_bank (rcmb_final_xy_bank_y), .rcmb_xy_addr (rcmb_final_xy_addr_y), - .rcmb_x_dout (rcmb_final_x_dout_y), - .rcmb_y_dout (rcmb_final_y_dout_y), + .rcmb_x_dout (rcmb_final_x_data_y), + .rcmb_y_dout (rcmb_final_y_data_y), .rcmb_xy_valid (rcmb_final_xy_valid_y), .rdct_ena (rdct_ena_y), @@ -723,25 +827,25 @@ module modexpng_core_top .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_x), .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_x), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_x), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_x), + .rd_wide_x_din_aux (rd_wide_x_data_aux_x), + .rd_wide_y_din_aux (rd_wide_y_data_aux_x), .rcmb_final_xy_bank (rcmb_final_xy_bank_x), .rcmb_final_xy_addr (rcmb_final_xy_addr_x), - .rcmb_final_x_dout (rcmb_final_x_dout_x), - .rcmb_final_y_dout (rcmb_final_y_dout_x), + .rcmb_final_x_din (rcmb_final_x_data_x), + .rcmb_final_y_din (rcmb_final_y_data_x), .rcmb_final_xy_valid (rcmb_final_xy_valid_x), .rdct_wide_xy_bank (rdct_wide_xy_bank_x), .rdct_wide_xy_addr (rdct_wide_xy_addr_x), - .rdct_wide_x_dout (rdct_wide_x_dout_x), - .rdct_wide_y_dout (rdct_wide_y_dout_x), + .rdct_wide_x_dout (rdct_wide_x_data_x), + .rdct_wide_y_dout (rdct_wide_y_data_x), .rdct_wide_xy_valid (rdct_wide_xy_valid_x), .rdct_narrow_xy_bank (rdct_narrow_xy_bank_x), .rdct_narrow_xy_addr (rdct_narrow_xy_addr_x), - .rdct_narrow_x_dout (rdct_narrow_x_dout_x), - .rdct_narrow_y_dout (rdct_narrow_y_dout_x), + .rdct_narrow_x_dout (rdct_narrow_x_data_x), + .rdct_narrow_y_dout (rdct_narrow_y_data_x), .rdct_narrow_xy_valid (rdct_narrow_xy_valid_x) ); @@ -760,29 +864,109 @@ module modexpng_core_top .rd_wide_xy_addr_aux (rd_wide_xy_addr_aux_y), .rd_wide_xy_bank_aux (rd_wide_xy_bank_aux_y), - .rd_wide_x_dout_aux (rd_wide_x_dout_aux_y), - .rd_wide_y_dout_aux (rd_wide_y_dout_aux_y), + .rd_wide_x_din_aux (rd_wide_x_data_aux_y), + .rd_wide_y_din_aux (rd_wide_y_data_aux_y), .rcmb_final_xy_bank (rcmb_final_xy_bank_y), .rcmb_final_xy_addr (rcmb_final_xy_addr_y), - .rcmb_final_x_dout (rcmb_final_x_dout_y), - .rcmb_final_y_dout (rcmb_final_y_dout_y), + .rcmb_final_x_din (rcmb_final_x_data_y), + .rcmb_final_y_din (rcmb_final_y_data_y), .rcmb_final_xy_valid (rcmb_final_xy_valid_y), .rdct_wide_xy_bank (rdct_wide_xy_bank_y), .rdct_wide_xy_addr (rdct_wide_xy_addr_y), - .rdct_wide_x_dout (rdct_wide_x_dout_y), - .rdct_wide_y_dout (rdct_wide_y_dout_y), + .rdct_wide_x_dout (rdct_wide_x_data_y), + .rdct_wide_y_dout (rdct_wide_y_data_y), .rdct_wide_xy_valid (rdct_wide_xy_valid_y), .rdct_narrow_xy_bank (rdct_narrow_xy_bank_y), .rdct_narrow_xy_addr (rdct_narrow_xy_addr_y), - .rdct_narrow_x_dout (rdct_narrow_x_dout_y), - .rdct_narrow_y_dout (rdct_narrow_y_dout_y), + .rdct_narrow_x_dout (rdct_narrow_x_data_y), + .rdct_narrow_y_dout (rdct_narrow_y_data_y), .rdct_narrow_xy_valid (rdct_narrow_xy_valid_y) ); + // + // General Worker + // + reg wrk_ena = 1'b0; + wire wrk_rdy; + + reg [ BANK_ADDR_W -1:0] wrk_sel_wide_in; + reg [ BANK_ADDR_W -1:0] wrk_sel_wide_out; + reg [ BANK_ADDR_W -1:0] wrk_sel_narrow_in; + reg [ BANK_ADDR_W -1:0] wrk_sel_narrow_out; + reg [ OP_ADDR_W -1:0] wrk_word_index_last; + reg [UOP_OPCODE_W -1:0] wrk_opcode; + + modexpng_general_worker general_worker + ( + .clk (clk), + .rst (rst), + + .ena (wrk_ena), + .rdy (wrk_rdy), + + .sel_narrow_in (wrk_sel_narrow_in), + .sel_narrow_out (wrk_sel_narrow_out), + .sel_wide_in (wrk_sel_wide_in), + .sel_wide_out (wrk_sel_wide_out), + + .opcode (wrk_opcode), + + .word_index_last (wrk_word_index_last), + + .wrk_rd_wide_xy_ena_x (wrk_rd_wide_xy_ena_x), + .wrk_rd_wide_xy_bank_x (wrk_rd_wide_xy_bank_x), + .wrk_rd_wide_xy_addr_x (wrk_rd_wide_xy_addr_x), + .wrk_rd_wide_x_din_x (wrk_rd_wide_x_data_x), + .wrk_rd_wide_y_din_x (wrk_rd_wide_y_data_x), + + .wrk_rd_narrow_xy_ena_x (wrk_rd_narrow_xy_ena_x), + .wrk_rd_narrow_xy_bank_x (wrk_rd_narrow_xy_bank_x), + .wrk_rd_narrow_xy_addr_x (wrk_rd_narrow_xy_addr_x), + .wrk_rd_narrow_x_din_x (wrk_rd_narrow_x_data_x), + .wrk_rd_narrow_y_din_x (wrk_rd_narrow_y_data_x), + + .wrk_rd_wide_xy_ena_y (wrk_rd_wide_xy_ena_y), + .wrk_rd_wide_xy_bank_y (wrk_rd_wide_xy_bank_y), + .wrk_rd_wide_xy_addr_y (wrk_rd_wide_xy_addr_y), + .wrk_rd_wide_x_din_y (wrk_rd_wide_x_data_y), + .wrk_rd_wide_y_din_y (wrk_rd_wide_y_data_y), + + .wrk_rd_narrow_xy_ena_y (wrk_rd_narrow_xy_ena_y), + .wrk_rd_narrow_xy_bank_y (wrk_rd_narrow_xy_bank_y), + .wrk_rd_narrow_xy_addr_y (wrk_rd_narrow_xy_addr_y), + .wrk_rd_narrow_x_din_y (wrk_rd_narrow_x_data_y), + .wrk_rd_narrow_y_din_y (wrk_rd_narrow_y_data_y), + + .wrk_wr_wide_xy_ena_x (wrk_wr_wide_xy_ena_x), + .wrk_wr_wide_xy_bank_x (wrk_wr_wide_xy_bank_x), + .wrk_wr_wide_xy_addr_x (wrk_wr_wide_xy_addr_x), + .wrk_wr_wide_x_dout_x (wrk_wr_wide_x_data_x), + .wrk_wr_wide_y_dout_x (wrk_wr_wide_y_data_x), + + .wrk_wr_narrow_xy_ena_x (wrk_wr_narrow_xy_ena_x), + .wrk_wr_narrow_xy_bank_x (wrk_wr_narrow_xy_bank_x), + .wrk_wr_narrow_xy_addr_x (wrk_wr_narrow_xy_addr_x), + .wrk_wr_narrow_x_dout_x (wrk_wr_narrow_x_data_x), + .wrk_wr_narrow_y_dout_x (wrk_wr_narrow_y_data_x), + + .wrk_wr_wide_xy_ena_y (wrk_wr_wide_xy_ena_y), + .wrk_wr_wide_xy_bank_y (wrk_wr_wide_xy_bank_y), + .wrk_wr_wide_xy_addr_y (wrk_wr_wide_xy_addr_y), + .wrk_wr_wide_x_dout_y (wrk_wr_wide_x_data_y), + .wrk_wr_wide_y_dout_y (wrk_wr_wide_y_data_y), + + .wrk_wr_narrow_xy_ena_y (wrk_wr_narrow_xy_ena_y), + .wrk_wr_narrow_xy_bank_y (wrk_wr_narrow_xy_bank_y), + .wrk_wr_narrow_xy_addr_y (wrk_wr_narrow_xy_addr_y), + .wrk_wr_narrow_x_dout_y (wrk_wr_narrow_x_data_y), + .wrk_wr_narrow_y_dout_y (wrk_wr_narrow_y_data_y) + ); + + // // uOP Completion Detector // @@ -792,10 +976,10 @@ module modexpng_core_top // uop_exit_from_busy = 0; // - if (uop_opcode_is_io) uop_exit_from_busy = ~io_mgr_ena & io_mgr_rdy; - if (uop_opcode_is_mmm) uop_exit_from_busy = ~mmm_ena & mmm_rdy; - //if (uop_data_opcode_is_add) uop_exit_from_busy = ~mod_add_ena & mod_add_rdy; - //if (uop_data_opcode_is_sub) uop_exit_from_busy = ~mod_sub_ena & mod_sub_rdy; + if (uop_opcode_is_in) uop_exit_from_busy = ~io_mgr_ena & io_mgr_rdy; + if (uop_opcode_is_out) uop_exit_from_busy = (~io_mgr_ena & io_mgr_rdy) & (~mmm_ena & mmm_rdy); + if (uop_opcode_is_mmm) uop_exit_from_busy = ~mmm_ena & mmm_rdy ; + if (uop_opcode_is_wrk) uop_exit_from_busy = ~wrk_ena & wrk_rdy ; // end @@ -809,10 +993,12 @@ module modexpng_core_top io_mgr_ena <= 1'b0; mmm_ena_x <= 1'b0; mmm_ena_y <= 1'b0; + wrk_ena <= 1'b0; end else begin - io_mgr_ena <= uop_fsm_state == UOP_FSM_STATE_DECODE ? uop_opcode_is_io : 1'b0; - mmm_ena_x <= uop_fsm_state == UOP_FSM_STATE_DECODE ? uop_opcode_is_mmm : 1'b0; - mmm_ena_y <= uop_fsm_state == UOP_FSM_STATE_DECODE ? uop_opcode_is_mmm : 1'b0; + io_mgr_ena <= uop_fsm_state == UOP_FSM_STATE_DECODE ? (uop_opcode_is_in || uop_opcode_is_out) : 1'b0; + mmm_ena_x <= uop_fsm_state == UOP_FSM_STATE_DECODE ? uop_opcode_is_mmm : 1'b0; + mmm_ena_y <= uop_fsm_state == UOP_FSM_STATE_DECODE ? uop_opcode_is_mmm : 1'b0; + wrk_ena <= uop_fsm_state == UOP_FSM_STATE_DECODE ? (uop_opcode_is_wrk || uop_opcode_is_out) : 1'b0; end // @@ -825,6 +1011,7 @@ module modexpng_core_top if (uop_fsm_state == UOP_FSM_STATE_DECODE) begin // io_mgr_opcode <= uop_data_opcode; + wrk_opcode <= uop_data_opcode; // case (uop_data_opcode) // @@ -842,6 +1029,15 @@ module modexpng_core_top io_mgr_sel_out <= uop_data_sel_narrow_out; end // + UOP_OPCODE_OUTPUT_FROM_NARROW: begin + io_mgr_sel_crt <= uop_data_crt; + io_mgr_sel_aux <= UOP_AUX_DNC; + io_mgr_sel_in <= BANK_DNC; + io_mgr_sel_out <= uop_data_sel_narrow_out; + // + wrk_sel_narrow_in <= uop_data_sel_narrow_in; + end + // UOP_OPCODE_MODULAR_MULTIPLY: begin // case (uop_data_ladder) @@ -856,10 +1052,21 @@ module modexpng_core_top {mmm_sel_narrow_in_x, mmm_sel_narrow_in_y } <= {2{uop_data_sel_narrow_in }}; {rdct_sel_wide_out_x, rdct_sel_wide_out_y } <= {2{uop_data_sel_wide_out }}; {rdct_sel_narrow_out_x, rdct_sel_narrow_out_y} <= {2{uop_data_sel_narrow_out }}; - // end // + UOP_OPCODE_PROPAGATE_CARRIES: begin + wrk_sel_narrow_in <= uop_data_sel_narrow_in; + wrk_sel_narrow_out <= uop_data_sel_narrow_out; + end + // + UOP_OPCODE_COPY_CRT_Y2X: begin + wrk_sel_wide_in <= uop_data_sel_wide_in; + wrk_sel_wide_out <= uop_data_sel_wide_out; + wrk_sel_narrow_in <= uop_data_sel_narrow_in; + wrk_sel_narrow_out <= uop_data_sel_narrow_out; + end + // endcase // end @@ -887,6 +1094,9 @@ module modexpng_core_top {rdct_word_index_last_x, rdct_word_index_last_y } <= {2{uop_npq_is_n ? word_index_last_n : word_index_last_pq }}; end // + UOP_OPCODE_PROPAGATE_CARRIES: + wrk_word_index_last = uop_npq_is_n ? word_index_last_n : word_index_last_pq; + // endcase // end @@ -945,87 +1155,88 @@ module modexpng_core_top // // X.X // - $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); - $write("X.X.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[0*256+i]); $write("\n"); - $write("X.X.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[1*256+i]); $write("\n"); - $write("X.X.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[2*256+i]); $write("\n"); - $write("X.X.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[3*256+i]); $write("\n"); - $write("X.X.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[4*256+i]); $write("\n"); - $write("X.X.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[5*256+i]); $write("\n"); - $write("X.X.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[6*256+i]); $write("\n"); - $write("X.X.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_x.mem[7*256+i]); $write("\n"); - $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); - $write("X.X.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[0*256+i]); $write("\n"); - $write("X.X.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[1*256+i]); $write("\n"); - $write("X.X.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[2*256+i]); $write("\n"); - $write("X.X.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[3*256+i]); $write("\n"); - $write("X.X.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[4*256+i]); $write("\n"); - $write("X.X.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[5*256+i]); $write("\n"); - $write("X.X.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[6*256+i]); $write("\n"); - $write("X.X.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_x.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); + $write("X.X.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[0*256+i]); $write("\n"); + $write("X.X.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[1*256+i]); $write("\n"); + $write("X.X.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[2*256+i]); $write("\n"); + $write("X.X.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[3*256+i]); $write("\n"); + $write("X.X.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[4*256+i]); $write("\n"); + $write("X.X.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[5*256+i]); $write("\n"); + $write("X.X.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[6*256+i]); $write("\n"); + $write("X.X.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_x.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); + $write("X.X.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[0*256+i]); $write("\n"); + $write("X.X.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[1*256+i]); $write("\n"); + $write("X.X.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[2*256+i]); $write("\n"); + $write("X.X.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[3*256+i]); $write("\n"); + $write("X.X.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[4*256+i]); $write("\n"); + $write("X.X.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[5*256+i]); $write("\n"); + $write("X.X.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[6*256+i]); $write("\n"); + $write("X.X.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_x.mem[7*256+i]); $write("\n"); // // X.Y // - $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); - $write("X.Y.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[0*256+i]); $write("\n"); - $write("X.Y.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[1*256+i]); $write("\n"); - $write("X.Y.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[2*256+i]); $write("\n"); - $write("X.Y.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[3*256+i]); $write("\n"); - $write("X.Y.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[4*256+i]); $write("\n"); - $write("X.Y.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[5*256+i]); $write("\n"); - $write("X.Y.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[6*256+i]); $write("\n"); - $write("X.Y.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_bram_y.mem[7*256+i]); $write("\n"); - $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); - $write("X.Y.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[0*256+i]); $write("\n"); - $write("X.Y.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[1*256+i]); $write("\n"); - $write("X.Y.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[2*256+i]); $write("\n"); - $write("X.Y.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[3*256+i]); $write("\n"); - $write("X.Y.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[4*256+i]); $write("\n"); - $write("X.Y.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[5*256+i]); $write("\n"); - $write("X.Y.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[6*256+i]); $write("\n"); - $write("X.Y.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide_bram[0].wide_bram_y.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); + $write("X.Y.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[0*256+i]); $write("\n"); + $write("X.Y.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[1*256+i]); $write("\n"); + $write("X.Y.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[2*256+i]); $write("\n"); + $write("X.Y.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[3*256+i]); $write("\n"); + $write("X.Y.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[4*256+i]); $write("\n"); + $write("X.Y.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[5*256+i]); $write("\n"); + $write("X.Y.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[6*256+i]); $write("\n"); + $write("X.Y.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.narrow_y.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); + $write("X.Y.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[0*256+i]); $write("\n"); + $write("X.Y.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[1*256+i]); $write("\n"); + $write("X.Y.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[2*256+i]); $write("\n"); + $write("X.Y.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[3*256+i]); $write("\n"); + $write("X.Y.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[4*256+i]); $write("\n"); + $write("X.Y.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[5*256+i]); $write("\n"); + $write("X.Y.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[6*256+i]); $write("\n"); + $write("X.Y.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_x.gen_wide[0].wide_y.mem[7*256+i]); $write("\n"); // // Y.X // - $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); - $write("Y.X.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[0*256+i]); $write("\n"); - $write("Y.X.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[1*256+i]); $write("\n"); - $write("Y.X.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[2*256+i]); $write("\n"); - $write("Y.X.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[3*256+i]); $write("\n"); - $write("Y.X.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[4*256+i]); $write("\n"); - $write("Y.X.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[5*256+i]); $write("\n"); - $write("Y.X.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[6*256+i]); $write("\n"); - $write("Y.X.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_x.mem[7*256+i]); $write("\n"); - $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); - $write("Y.X.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[0*256+i]); $write("\n"); - $write("Y.X.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[1*256+i]); $write("\n"); - $write("Y.X.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[2*256+i]); $write("\n"); - $write("Y.X.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[3*256+i]); $write("\n"); - $write("Y.X.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[4*256+i]); $write("\n"); - $write("Y.X.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[5*256+i]); $write("\n"); - $write("Y.X.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[6*256+i]); $write("\n"); - $write("Y.X.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_x.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); + $write("Y.X.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[0*256+i]); $write("\n"); + $write("Y.X.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[1*256+i]); $write("\n"); + $write("Y.X.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[2*256+i]); $write("\n"); + $write("Y.X.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[3*256+i]); $write("\n"); + $write("Y.X.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[4*256+i]); $write("\n"); + $write("Y.X.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[5*256+i]); $write("\n"); + $write("Y.X.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[6*256+i]); $write("\n"); + $write("Y.X.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_x.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); + $write("Y.X.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[0*256+i]); $write("\n"); + $write("Y.X.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[1*256+i]); $write("\n"); + $write("Y.X.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[2*256+i]); $write("\n"); + $write("Y.X.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[3*256+i]); $write("\n"); + $write("Y.X.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[4*256+i]); $write("\n"); + $write("Y.X.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[5*256+i]); $write("\n"); + $write("Y.X.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[6*256+i]); $write("\n"); + $write("Y.X.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_x.mem[7*256+i]); $write("\n"); // // Y.Y // - $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); - $write("Y.Y.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[0*256+i]); $write("\n"); - $write("Y.Y.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[1*256+i]); $write("\n"); - $write("Y.Y.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[2*256+i]); $write("\n"); - $write("Y.Y.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[3*256+i]); $write("\n"); - $write("Y.Y.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[4*256+i]); $write("\n"); - $write("Y.Y.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[5*256+i]); $write("\n"); - $write("Y.Y.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[6*256+i]); $write("\n"); - $write("Y.Y.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_bram_y.mem[7*256+i]); $write("\n"); - $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); - $write("Y.Y.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[0*256+i]); $write("\n"); - $write("Y.Y.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[1*256+i]); $write("\n"); - $write("Y.Y.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[2*256+i]); $write("\n"); - $write("Y.Y.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[3*256+i]); $write("\n"); - $write("Y.Y.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[4*256+i]); $write("\n"); - $write("Y.Y.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[5*256+i]); $write("\n"); - $write("Y.Y.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[6*256+i]); $write("\n"); - $write("Y.Y.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide_bram[0].wide_bram_y.mem[7*256+i]); $write("\n"); // + $write(" "); for (i=0; i<64; i=i+1) $write("[ %3d ] ", i); $write("\n"); + $write("Y.Y.NARROW.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[0*256+i]); $write("\n"); + $write("Y.Y.NARROW.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[1*256+i]); $write("\n"); + $write("Y.Y.NARROW.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[2*256+i]); $write("\n"); + $write("Y.Y.NARROW.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[3*256+i]); $write("\n"); + $write("Y.Y.NARROW.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[4*256+i]); $write("\n"); + $write("Y.Y.NARROW.COEFF: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[5*256+i]); $write("\n"); + $write("Y.Y.NARROW.Q: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[6*256+i]); $write("\n"); + $write("Y.Y.NARROW.EXT: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.narrow_y.mem[7*256+i]); $write("\n"); + $write(" "); for (i=0; i<64; i=i+1) $write(" ------ "); $write("\n"); + $write("Y.Y.WIDE.A: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[0*256+i]); $write("\n"); + $write("Y.Y.WIDE.B: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[1*256+i]); $write("\n"); + $write("Y.Y.WIDE.C: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[2*256+i]); $write("\n"); + $write("Y.Y.WIDE.D: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[3*256+i]); $write("\n"); + $write("Y.Y.WIDE.E: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[4*256+i]); $write("\n"); + $write("Y.Y.WIDE.N: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[5*256+i]); $write("\n"); + $write("Y.Y.WIDE.L: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[6*256+i]); $write("\n"); + $write("Y.Y.WIDE.H: "); for (i=0; i<64; i=i+1) $write("0x%05x ", storage_block_y.gen_wide[0].wide_y.mem[7*256+i]); $write("\n"); + // end // -- cgit v1.2.3