Added control signal inputs and loading sram register
diff --git a/verilog/rtl/openram_testchip.v b/verilog/rtl/openram_testchip.v index 10cf7e8..2024248 100644 --- a/verilog/rtl/openram_testchip.v +++ b/verilog/rtl/openram_testchip.v
@@ -11,17 +11,23 @@ `endif input la_clk, input gpio_clk, + input la_sram_clk, + input gpio_sram_clk, input reset, - input [85:0] la_packet, - input gpio_packet, + input la_in_load, + input gpio_in_load, + input la_sram_load, + input gpio_sram_load, + input [111:0] la_bits, + input gpio_bit, input in_select, - input [31:0] sram0_rw_in, - input [31:0] sram0_ro_in, - input [31:0] sram1_rw_in, - input [31:0] sram1_ro_in, - input [31:0] sram2_rw_in, - input [31:0] sram3_rw_in, - input [31:0] sram4_rw_in, + input [63:0] sram0_rw_in, + input [63:0] sram0_ro_in, + input [63:0] sram1_rw_in, + input [63:0] sram1_ro_in, + input [63:0] sram2_rw_in, + input [63:0] sram3_rw_in, + input [63:0] sram4_rw_in, input [63:0] sram5_rw_in, output reg [54:0] sram0_connections, output reg [54:0] sram1_connections, @@ -33,32 +39,43 @@ output reg gpio_data ); -reg [83:0] input_connection; -reg [2:0] chip_select; - -reg web; -reg csb0; +reg [111:0] sram_register; +reg [3:0] chip_select; reg [63:0] read_data; - -reg [6:0] gpio_counter; +reg [63:0] sram_data; reg clk; +reg sram_clk; always @(*) begin clk = in_select ? gpio_clk : la_clk; + sram_clk = in_select ? gpio_clk : la_clk; +end + +always @ (posedge clk) begin + if(reset) begin + sram_register <= 112'd0; + end + else if(gpio_in_load) begin + sram_register <= {sram_register[110:0], gpio_bit}; + end + else if(la_in_load) begin + sram_register <= la_bits; + end + else if(gpio_sram_load || la_sram_load) begin + + end end always @ (posedge clk) begin if(reset) begin input_connection <= 84'd0; chip_select <= 3'd0; - gpio_counter <= 7'd0; end else begin - gpio_counter <= (gpio_counter == 83) ? 0 : gpio_counter + 1; if(in_select) begin - input_connection[gpio_counter] <= gpio_packet; + input_connection <= {input_connection[82:0], gpio_packet}; end else begin input_connection <= la_packet[82:0]; @@ -94,6 +111,10 @@ end end +always @ (posedge clk) begin + +end + always @ (input_connection) begin sram0_connections = (chip_select == 0) ? input_connection[54:0] : {55{1'b0}}; sram1_connections = (chip_select == 1) ? input_connection[54:0] : {55{1'b0}}; @@ -103,26 +124,36 @@ sram5_connections = (chip_select == 5) ? input_connection[82:0] : {83{1'b0}}; end -always @ (posedge clk) begin - if(web) begin - case(chip_select) - 3'd0: read_data <= csb0 ? sram0_ro_in : sram0_rw_in; - 3'd1: read_data <= csb0 ? sram1_ro_in : sram1_rw_in; - 3'd2: read_data <= sram2_rw_in; - 3'd3: read_data <= sram3_rw_in; - 3'd4: read_data <= sram4_rw_in; - 3'd5: read_data <= sram5_rw_in; - default: read_data <= 64'd0; - endcase +always @ (*) begin + case(chip_select) + 3'd0: read_data <= csb0 ? sram0_ro_in : sram0_rw_in; + 3'd1: read_data <= csb0 ? sram1_ro_in : sram1_rw_in; + 3'd2: read_data <= sram2_rw_in; + 3'd3: read_data <= sram3_rw_in; + 3'd4: read_data <= sram4_rw_in; + 3'd5: read_data <= sram5_rw_in; + default: read_data <= 64'd0; + endcase +end + +always @(posedge clk) begin + if(reset) begin + sram_data <= 64'd0; + end + else begin + if(web) begin + sram_data <= read_data; + sram_data <= sram_data >> 1; + end end end always @ (*) begin if(in_select) begin - gpio_data = read_data[gpio_counter]; + gpio_data = sram_data[0]; end else begin - la_data = read_data; + la_data = sram_data; end end