blob: 4b43c1d534da8695d0de76bb241d5ab8a8578353 [file] [log] [blame]
`define assert(signal, value) \
if (!(signal === value)) begin \
$display("ASSERTION FAILED in %m: signal != value"); \
$finish;\
end
`timescale 1ns/1ns
`include "sky130_sram_1kbyte_1rw1r_32x256_8.v"
`include "sram_1rw0r0w_32_256_sky130.v"
`include "sram_1rw0r0w_32_512_sky130.v"
`include "sram_1rw0r0w_32_1024_sky130.v"
//`include "sram_1rw0r0w_64_512_sky130.v"
`include "openram_testchip.v"
module test_chip_tb;
reg la_clk;
reg gpio_clk;
reg la_sram_clk;
reg gpio_sram_clk;
reg reset;
reg la_in_load;
reg gpio_scan;
reg la_sram_load;
reg gpio_sram_load;
reg [111:0] la_bits;
reg gpio_bit;
reg in_select;
wire [31:0] sram0_rw_in;
wire [31:0] sram0_ro_in;
wire [31:0] sram1_rw_in;
wire [31:0] sram1_ro_in;
wire [31:0] sram2_rw_in;
wire [31:0] sram3_rw_in;
wire [31:0] sram4_rw_in;
//wire [63:0] sram5_rw_in;
wire [54:0] sram0_connections;
wire [54:0] sram1_connections;
wire [47:0] sram2_connections;
wire [45:0] sram3_connections;
wire [46:0] sram4_connections;
//wire [82:0] sram5_connections;
wire sram0_clk;
wire sram1_clk;
wire sram2_clk;
wire sram3_clk;
wire sram4_clk;
//wire sram5_clk;
wire [31:0] la_data0;
wire [31:0] la_data1;
wire gpio_data0;
wire gpio_data1;
openram_testchip CONTROL_LOGIC(
.la_clk(la_clk),
.gpio_clk(gpio_clk),
.la_sram_clk(la_sram_clk),
.gpio_sram_clk(gpio_sram_clk),
.reset(reset),
.la_in_load(la_in_load),
.gpio_scan(gpio_scan),
.la_sram_load(la_sram_load),
.gpio_sram_load(gpio_sram_load),
.la_bits(la_bits),
.gpio_bit(gpio_bit),
.in_select(in_select),
.sram0_rw_in(sram0_rw_in),
.sram0_ro_in(sram0_ro_in),
.sram1_rw_in(sram1_rw_in),
.sram1_ro_in(sram1_ro_in),
.sram2_rw_in(sram2_rw_in),
.sram3_rw_in(sram3_rw_in),
.sram4_rw_in(sram4_rw_in),
//.sram5_rw_in(sram5_rw_out),
.sram0_connections(sram0_connections),
.sram1_connections(sram1_connections),
.sram2_connections(sram2_connections),
.sram3_connections(sram3_connections),
.sram4_connections(sram4_connections),
//.sram5_connections(sram5_connections),
.sram0_clk(sram0_clk),
.sram1_clk(sram1_clk),
.sram2_clk(sram2_clk),
.sram3_clk(sram3_clk),
.sram4_clk(sram4_clk),
//.sram5_clk(sram5_clk),
.la_data0(la_data0),
.la_data1(la_data1),
.gpio_data0(gpio_data0),
.gpio_data1(gpio_data1)
);
sky130_sram_1kbyte_1rw1r_32x256_8 SRAM0
(
.clk0 (sram0_clk),
.csb0 (sram0_connections[54]),
.web0 (sram0_connections[53]),
.wmask0 (sram0_connections[52:49]),
.addr0 (sram0_connections[48:41]),
.din0 (sram0_connections[40:9]),
.dout0 (sram0_rw_in),
.clk1 (sram0_clk),
.csb1 (sram0_connections[8]),
.addr1 (sram0_connections[7:0]),
.dout1 (sram0_ro_in));
sky130_sram_1kbyte_1rw1r_32x256_8 SRAM1
(
.clk0 (sram1_clk),
.csb0 (sram1_connections[54]),
.web0 (sram1_connections[53]),
.wmask0 (sram1_connections[52:49]),
.addr0 (sram1_connections[48:41]),
.din0 (sram1_connections[40:9]),
.dout0 (sram1_rw_in),
.clk1 (sram1_clk),
.csb1 (sram1_connections[8]),
.addr1 (sram1_connections[7:0]),
.dout1 (sram1_ro_in));
sram_1rw0r0w_32_1024_sky130 SRAM2
(
.clk0 (sram2_clk),
.csb0 (sram2_connections[47]),
.web0 (sram2_connections[46]),
.wmask0 (sram2_connections[45:42]),
.addr0 (sram2_connections[41:32]),
.din0 (sram2_connections[31:0]),
.dout0 (sram2_rw_in));
sram_1rw0r0w_32_256_sky130 SRAM3
(
.clk0 (sram3_clk),
.csb0 (sram3_connections[45]),
.web0 (sram3_connections[44]),
.wmask0 (sram3_connections[43:40]),
.addr0 (sram3_connections[39:32]),
.din0 (sram3_connections[31:0]),
.dout0 (sram3_rw_in));
sram_1rw0r0w_32_512_sky130 SRAM4
(
.clk0 (sram4_clk),
.csb0 (sram4_connections[46]),
.web0 (sram4_connections[45]),
.wmask0 (sram4_connections[44:41]),
.addr0 (sram4_connections[40:32]),
.din0 (sram4_connections[31:0]),
.dout0 (sram4_rw_in));
/*
sram_1rw0r0w_64_512_sky130 SRAM5
(
.clk0 (sram5_clk),
.csb0 (sram5_connections[82]),
.web0 (sram5_connections[81]),
.wmask0 (sram5_connections[80:73]),
.addr0 (sram5_connections[72:64]),
.din0 (sram5_connections[63:0]),
.dout0 (sram5_rw_in));
*/
initial begin
$dumpfile("testchip_tb.vcd");
$dumpvars(0, test_chip_tb);
la_clk = 1;
gpio_clk = 0;
la_sram_clk = 0;
gpio_sram_clk = 0;
gpio_scan = 0;
gpio_bit = 0;
reset = 0;
//Send bits using logic analyzer
in_select = 0;
la_in_load = 1;
la_sram_load = 0;
la_bits = {4'd0, 16'd1, 32'd1, 1'b0, 1'b0, 4'd15, 16'd0, 32'd0, 1'b1, 1'b1, 4'd0};
#10;
la_in_load = 0;
la_sram_load = 1;
la_sram_clk = 1;
#5;
la_sram_clk = 0;
#5;
la_in_load = 1;
la_sram_load = 0;
la_bits = {4'd0, 16'd1, 32'd0, 1'b0, 1'b1, 4'd0, 16'd0, 32'd0, 1'b1, 1'b1, 4'd0};
#10;
la_in_load = 0;
la_sram_load = 1;
la_sram_clk = 1;
#5;
la_sram_clk = 0;
#5;
la_sram_clk = 1;
#5;
la_sram_clk = 0;
#10;
`assert(la_data0, 32'd1);
#10;$finish;
end
always
#5 la_clk = !la_clk;
endmodule