137 lines
3.2 KiB
Coq
137 lines
3.2 KiB
Coq
|
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
|