`default_nettype none | |
//`include "control_logic.v" | |
//`include "sky130_sram_1kbyte_1rw1r_32x256_8.v" | |
module openram_testchip( | |
input clk_in, | |
input [55:0] analyzer_packet, | |
input [55:0] gpio_packet, | |
input in_select, | |
output reg [31:0] sram_data | |
); | |
reg [54:0] packet; | |
reg chip_select; | |
//SRAM0 | |
//RW Port | |
wire mgmt_ena0; | |
wire mgmt_wen0; | |
wire [3:0] mgmt_wen_mask0; | |
wire [7:0] mgmt_addr0; | |
wire [31:0] mgmt_wdata0; | |
wire [31:0] mgmt_rdata0; | |
//RO Port | |
wire mgmt_ena_ro0; | |
wire [7:0] mgmt_addr_ro0; | |
wire [31:0] mgmt_rdata_ro0; | |
//SRAM1 | |
wire mgmt_ena1; | |
wire mgmt_wen1; | |
wire [3:0] mgmt_wen_mask1; | |
wire [7:0] mgmt_addr1; | |
wire [31:0] mgmt_wdata1; | |
wire [31:0] mgmt_rdata1; | |
//RO Port | |
wire mgmt_ena_ro1; | |
wire [7:0] mgmt_addr_ro1; | |
wire [31:0] mgmt_rdata_ro1; | |
//Data from SRAMs | |
wire [31:0] sram0_data; | |
wire [31:0] sram1_data; | |
wire [31:0] read_data; | |
//Read in input packet from analyzer or GPIO pins | |
always @(analyzer_packet, gpio_packet) begin | |
if(in_select == 0) begin | |
chip_select <= analyzer_packet[55]; | |
packet <= analyzer_packet[54:0]; | |
end | |
else if(in_select == 1) begin | |
chip_select <= gpio_packet[55]; | |
packet <= gpio_packet[54:0]; | |
end | |
end | |
//Instantitate port connections | |
SRAM_IN in_control(.clk_in(clk_in), | |
.chip_select(chip_select), | |
.packet(packet), | |
.mgmt_ena0(mgmt_ena0), | |
.mgmt_wen0(mgmt_wen0), | |
.mgmt_wen_mask0(mgmt_wen_mask0), | |
.mgmt_addr0(mgmt_addr0), | |
.mgmt_wdata0(mgmt_wdata0), | |
.mgmt_ena_ro0(mgmt_ena_ro0), | |
.mgmt_addr_ro0(mgmt_addr_ro0), | |
.mgmt_ena1(mgmt_ena1), | |
.mgmt_wen1(mgmt_wen1), | |
.mgmt_wen_mask1(mgmt_wen_mask1), | |
.mgmt_addr1(mgmt_addr1), | |
.mgmt_wdata1(mgmt_wdata1), | |
.mgmt_ena_ro1(mgmt_ena_ro1), | |
.mgmt_addr_ro1(mgmt_addr_ro1) | |
); | |
sky130_sram_1kbyte_1rw1r_32x256_8 SRAM_0 ( | |
// MGMT R/W port | |
.clk0(clk_in), | |
.csb0(mgmt_ena0), | |
.web0(mgmt_wen0), | |
.wmask0(mgmt_wen_mask0), | |
.addr0(mgmt_addr0), | |
.din0(mgmt_wdata0), | |
.dout0(mgmt_rdata0), | |
// MGMT RO port | |
.clk1(clk_in), | |
.csb1(mgmt_ena_ro0), | |
.addr1(mgmt_addr_ro0), | |
.dout1(mgmt_rdata_ro0) | |
); | |
sky130_sram_1kbyte_1rw1r_32x256_8 SRAM_1 ( | |
// MGMT R/W port | |
.clk0(clk_in), | |
.csb0(mgmt_ena1), | |
.web0(mgmt_wen1), | |
.wmask0(mgmt_wen_mask1), | |
.addr0(mgmt_addr1), | |
.din0(mgmt_wdata1), | |
.dout0(mgmt_rdata1), | |
// MGMT RO port | |
.clk1(clk_in), | |
.csb1(mgmt_ena_ro1), | |
.addr1(mgmt_addr_ro1), | |
.dout1(mgmt_rdata_ro1) | |
); | |
SRAM_DATA sram0_out(.csb0(packet[54]), | |
.csb1(packet[8]), | |
.dout0(mgmt_rdata0), | |
.dout1(mgmt_rdata_ro0), | |
.sram_data(sram0_data) | |
); | |
SRAM_DATA sram1_out(.csb0(packet[54]), | |
.csb1(packet[8]), | |
.dout0(mgmt_rdata1), | |
.dout1(mgmt_rdata_ro1), | |
.sram_data(sram1_data) | |
); | |
SRAM_OUT out_control(.chip_select(chip_select), | |
.sram0_data(sram0_data), | |
.sram1_data(sram1_data), | |
.sram_contents(read_data) | |
); | |
always @(read_data) begin | |
sram_data <= read_data; | |
end | |
endmodule | |
`default_nettype wire |