abstractaccelerator/uriscv/tb/tb_top.v

137 lines
3.2 KiB
Verilog

module tb_top;
reg clk;
reg rst;
reg [7:0] mem[65535:0];
integer i;
integer f;
initial
begin
$display("Starting bench");
if (`TRACE)
begin
$dumpfile("waveform.vcd");
$dumpvars(0, tb_top);
end
// Reset
clk = 0;
rst = 1;
repeat (5) @(posedge clk);
rst = 0;
// Load TCM memory
for (i=0;i<65535;i=i+1)
mem[i] = 0;
f = $fopenr("./build/tcm.bin");
i = $fread(mem, f);
for (i=0;i<65535;i=i+1)
u_mem.write(i, mem[i]);
end
initial
begin
forever
begin
clk = #5 ~clk;
end
end
wire mem_i_rd_w;
wire mem_i_flush_w;
wire mem_i_invalidate_w;
wire [ 31:0] mem_i_pc_w;
wire [ 31:0] mem_d_addr_w;
wire [ 31:0] mem_d_data_wr_w;
wire mem_d_rd_w;
wire [ 3:0] mem_d_wr_w;
wire mem_d_cacheable_w;
wire [ 10:0] mem_d_req_tag_w;
wire mem_d_invalidate_w;
wire mem_d_writeback_w;
wire mem_d_flush_w;
wire mem_i_accept_w;
wire mem_i_valid_w;
wire mem_i_error_w;
wire [ 31:0] mem_i_inst_w;
wire [ 31:0] mem_d_data_rd_w;
wire mem_d_accept_w;
wire mem_d_ack_w;
wire mem_d_error_w;
wire [ 10:0] mem_d_resp_tag_w;
riscv_core
u_dut
//-----------------------------------------------------------------
// Ports
//-----------------------------------------------------------------
(
// Inputs
.clk_i(clk)
,.rst_i(rst)
,.mem_d_data_rd_i(mem_d_data_rd_w)
,.mem_d_accept_i(mem_d_accept_w)
,.mem_d_ack_i(mem_d_ack_w)
,.mem_d_error_i(mem_d_error_w)
,.mem_d_resp_tag_i(mem_d_resp_tag_w)
,.mem_i_accept_i(mem_i_accept_w)
,.mem_i_valid_i(mem_i_valid_w)
,.mem_i_error_i(mem_i_error_w)
,.mem_i_inst_i(mem_i_inst_w)
,.intr_i(1'b0)
,.reset_vector_i(32'h80000000)
,.cpu_id_i('b0)
// Outputs
,.mem_d_addr_o(mem_d_addr_w)
,.mem_d_data_wr_o(mem_d_data_wr_w)
,.mem_d_rd_o(mem_d_rd_w)
,.mem_d_wr_o(mem_d_wr_w)
,.mem_d_cacheable_o(mem_d_cacheable_w)
,.mem_d_req_tag_o(mem_d_req_tag_w)
,.mem_d_invalidate_o(mem_d_invalidate_w)
,.mem_d_writeback_o(mem_d_writeback_w)
,.mem_d_flush_o(mem_d_flush_w)
,.mem_i_rd_o(mem_i_rd_w)
,.mem_i_flush_o(mem_i_flush_w)
,.mem_i_invalidate_o(mem_i_invalidate_w)
,.mem_i_pc_o(mem_i_pc_w)
);
tcm_mem
u_mem
(
// Inputs
.clk_i(clk)
,.rst_i(rst)
,.mem_i_rd_i(mem_i_rd_w)
,.mem_i_flush_i(mem_i_flush_w)
,.mem_i_invalidate_i(mem_i_invalidate_w)
,.mem_i_pc_i(mem_i_pc_w)
,.mem_d_addr_i(mem_d_addr_w)
,.mem_d_data_wr_i(mem_d_data_wr_w)
,.mem_d_rd_i(mem_d_rd_w)
,.mem_d_wr_i(mem_d_wr_w)
,.mem_d_cacheable_i(mem_d_cacheable_w)
,.mem_d_req_tag_i(mem_d_req_tag_w)
,.mem_d_invalidate_i(mem_d_invalidate_w)
,.mem_d_writeback_i(mem_d_writeback_w)
,.mem_d_flush_i(mem_d_flush_w)
// Outputs
,.mem_i_accept_o(mem_i_accept_w)
,.mem_i_valid_o(mem_i_valid_w)
,.mem_i_error_o(mem_i_error_w)
,.mem_i_inst_o(mem_i_inst_w)
,.mem_d_data_rd_o(mem_d_data_rd_w)
,.mem_d_accept_o(mem_d_accept_w)
,.mem_d_ack_o(mem_d_ack_w)
,.mem_d_error_o(mem_d_error_w)
,.mem_d_resp_tag_o(mem_d_resp_tag_w)
);
endmodule