diff options
author | Paul Selkirk <paul@psgd.org> | 2015-11-12 22:48:08 -0500 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2015-11-12 22:48:08 -0500 |
commit | dfb268cf925fa97ffa1729975ffb37dd2a37a2bc (patch) | |
tree | 104d145c21a95e66a9b6b46a76b6d9eb5a135c1e /core_selector | |
parent | cf6cf22fcf3dac2991ad5f448eac548ac1e02eb1 (diff) | |
parent | a8e0651bd3ae3a8e579547753cbb51dc0b87525c (diff) |
Merge branch 'modexps6'
Diffstat (limited to 'core_selector')
-rw-r--r-- | core_selector/src/rtl/core_selector.v | 28 | ||||
-rw-r--r-- | core_selector/src/rtl/math_selector.v | 53 |
2 files changed, 52 insertions, 29 deletions
diff --git a/core_selector/src/rtl/core_selector.v b/core_selector/src/rtl/core_selector.v index fad4104..9607cb3 100644 --- a/core_selector/src/rtl/core_selector.v +++ b/core_selector/src/rtl/core_selector.v @@ -118,6 +118,11 @@ module core_selector .sys_read_data(segment_globals_read_data), .sys_error(segment_globals_error) ); + + reg [31: 0] segment_globals_read_data_reg; + always @(posedge sys_clk) + segment_globals_read_data_reg <= segment_globals_read_data; + `endif @@ -142,6 +147,11 @@ module core_selector .sys_read_data(segment_hashes_read_data), .sys_error(segment_hashes_error) ); + + reg [31: 0] segment_hashes_read_data_reg; + always @(posedge sys_clk) + segment_hashes_read_data_reg <= segment_hashes_read_data; + `endif @@ -170,6 +180,11 @@ module core_selector .noise(noise), // only RNG segment uses these ports .debug(segment_rngs_debug) ); + + reg [31: 0] segment_rngs_read_data_reg; + always @(posedge sys_clk) + segment_rngs_read_data_reg <= segment_rngs_read_data; + `endif @@ -193,6 +208,11 @@ module core_selector .sys_read_data(segment_ciphers_read_data), .sys_error(segment_ciphers_error) ); + + reg [31: 0] segment_ciphers_read_data_reg; + always @(posedge sys_clk) + segment_ciphers_read_data_reg <= segment_ciphers_read_data; + `endif @@ -240,21 +260,21 @@ module core_selector `ifdef USE_SEGMENT_GLOBALS SEGMENT_ADDR_GLOBALS: begin - sys_read_data_reg = segment_globals_read_data; + sys_read_data_reg = segment_globals_read_data_reg; sys_error_reg = segment_globals_error; end `endif `ifdef USE_SEGMENT_HASHES SEGMENT_ADDR_HASHES: begin - sys_read_data_reg = segment_hashes_read_data; + sys_read_data_reg = segment_hashes_read_data_reg; sys_error_reg = segment_hashes_error; end `endif `ifdef USE_SEGMENT_RNGS SEGMENT_ADDR_RNGS: begin - sys_read_data_reg = segment_rngs_read_data; + sys_read_data_reg = segment_rngs_read_data_reg; sys_error_reg = segment_rngs_error; sys_debug = segment_rngs_debug; end @@ -262,7 +282,7 @@ module core_selector `ifdef USE_SEGMENT_CIPHERS SEGMENT_ADDR_CIPHERS: begin - sys_read_data_reg = segment_ciphers_read_data; + sys_read_data_reg = segment_ciphers_read_data_reg; sys_error_reg = segment_ciphers_error; end `endif diff --git a/core_selector/src/rtl/math_selector.v b/core_selector/src/rtl/math_selector.v index c967715..8b8473a 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_n), - .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 // |