import cpu_types::*; module tb_cpu_program(); reg clk, rst_n; wire [31:0] memory_address, cpu_memory_address, memory_write, memory_out; wire [3:0] memory_write_byte_enable; wire memory_we; wire [31:0] pc; reg [31:0] instruction; wire ebreak; parameter string CPU_PROGRAM_PATH; parameter string CPU_PROGRAM_NAME; parameter MEMORY_LOAD_FILE = 0; parameter string MEMORY_LOAD_FILE_PATH = ""; parameter MEMORY_WRITE_FILE = 0; parameter string MEMORY_WRITE_FILE_PATH = ""; // assign 0xFF... when ebreak. To save the memory to a file. assign memory_address = ebreak == 1'b1 ? {32{1'b1}} : cpu_memory_address; cpu uut( .clk(clk), .rst_n(rst_n), .instruction(instruction), .pc(pc), .memory_address(cpu_memory_address), .memory_out(memory_out), .memory_write(memory_write), .memory_byte_enable(memory_write_byte_enable), .memory_we(memory_we), .ebreak(ebreak) ); ram #( .LOAD_FILE(MEMORY_LOAD_FILE), .LOAD_FILE_PATH(MEMORY_LOAD_FILE_PATH), .WRITE_FILE(MEMORY_WRITE_FILE), .WRITE_FILE_PATH(MEMORY_WRITE_FILE_PATH) ) memory_inst( .clk(clk), .a(memory_address), .write_byte_enable(memory_write_byte_enable), .we(memory_we), .wd(memory_write), .rd(memory_out) ); file_program_memory #( .FILE_NAME(CPU_PROGRAM_PATH) ) prog_mem_inst( .addr(pc[14:0]), .instruction(instruction) ); always_ff @ (posedge ebreak) begin $display("ebreak at %d", pc); #15 $finish; end initial begin clk = 0; forever #5 clk = ~clk; end initial begin $dumpfile({"waves/cpu_program_", CPU_PROGRAM_NAME, ".vcd"}); $dumpvars; rst_n = 0; #20 rst_n = 1; end endmodule