From a8e0651bd3ae3a8e579547753cbb51dc0b87525c Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Fri, 17 Jul 2015 10:11:23 -0400 Subject: experimental modexps6 (which requires changing the read timing on all other cores) --- core_selector/src/rtl/math_selector.v | 55 ++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'core_selector/src/rtl/math_selector.v') diff --git a/core_selector/src/rtl/math_selector.v b/core_selector/src/rtl/math_selector.v index b47a433..833ffbf 100644 --- a/core_selector/src/rtl/math_selector.v +++ b/core_selector/src/rtl/math_selector.v @@ -55,49 +55,52 @@ module math_selector //---------------------------------------------------------------- - // Address Decoder + // List of Available Cores //---------------------------------------------------------------- - // upper 2 bits specify core being addressed - wire [ 1: 0] core_select = sys_eim_addr[13: 12]; - // lower 12 bits specify addresses within the selected core. - wire [11: 0] core_addr = sys_eim_addr[11: 0]; + // Comment following lines to exclude cores from implementation. + `define USE_CORE_MODEXPS6 //---------------------------------------------------------------- - // List of Available Cores + // Address Decoder //---------------------------------------------------------------- - // Comment following lines to exclude cores from implementation. - `define USE_CORE_MODEXP +`ifdef USE_CORE_MODEXPS6 + // upper 4 bits specify core being addressed + wire [ 3: 0] addr_core_num = sys_eim_addr[13:10]; + // lower 10 bits specify register offset in core + wire [ 9: 0] addr_core_reg = sys_eim_addr[ 9: 0]; +`endif //---------------------------------------------------------------- // Core Address Table //---------------------------------------------------------------- - localparam CORE_MODEXP = 2'd0; + `ifdef USE_CORE_MODEXPS6 + localparam CORE_ADDR_MODEXPS6 = 4'd0; + `endif //---------------------------------------------------------------- - // MODEXP + // ModExpS6 //---------------------------------------------------------------- - `ifdef USE_CORE_MODEXP - wire enable_modexp = sys_ena && (core_select == CORE_MODEXP); - wire [31: 0] read_data_modexp; - - modexp modexp_inst + `ifdef USE_CORE_MODEXPS6 + wire [31: 0] read_data_modexps6; + wire enable_modexps6 = sys_ena && (addr_core_num == CORE_ADDR_MODEXPS6); + modexps6_wrapper modexps6_inst ( .clk(sys_clk), - .reset_n(~sys_rst), + .rst(sys_rst), - .cs(enable_modexp & (sys_eim_rd | sys_eim_wr)), + .cs(enable_modexps6 & (sys_eim_rd | sys_eim_wr)), .we(sys_eim_wr), - .address(core_addr), + .address(addr_core_reg), .write_data(sys_write_data), - .read_data(read_data_modexp) + .read_data(read_data_modexps6) ); `endif - - + + //---------------------------------------------------------------- // Output (Read Data) Multiplexor //---------------------------------------------------------------- @@ -106,11 +109,11 @@ module math_selector always @* // - `ifdef USE_CORE_MODEXP - if (core_select == CORE_MODEXP) - begin - sys_read_data_mux = read_data_modexp; - end + `ifdef USE_CORE_MODEXPS6 + if (addr_core_num == CORE_ADDR_MODEXPS6) + begin + sys_read_data_mux = read_data_modexps6; + end else `endif // -- cgit v1.2.3