diff options
author | Joshua Yun <joshua@joshuayun.com> | 2025-03-15 17:35:52 -0500 |
---|---|---|
committer | Joshua Yun <joshua@joshuayun.com> | 2025-03-15 17:35:52 -0500 |
commit | 59fd8c25ee1452452cb564d6fe4163b7a9394aef (patch) | |
tree | 028688a39cd401a40939d86e3bf4a8f5d678d6a4 /core/tb | |
parent | c7a29c00b143ff6ee22bb7cffbdd0ae7c21206d1 (diff) | |
download | riscv-processor-59fd8c25ee1452452cb564d6fe4163b7a9394aef.tar.gz |
feat: added TB support + primitives for flipflops, initial fetch stage (not complete), mem initialization for imem complete
Diffstat (limited to 'core/tb')
-rw-r--r-- | core/tb/core_tb.sv | 37 | ||||
-rw-r--r-- | core/tb/core_tb_imem.sv | 36 |
2 files changed, 73 insertions, 0 deletions
diff --git a/core/tb/core_tb.sv b/core/tb/core_tb.sv new file mode 100644 index 0000000..9780df8 --- /dev/null +++ b/core/tb/core_tb.sv @@ -0,0 +1,37 @@ +module core_tb (); + +logic clk; +logic rst_l; + +logic [63:0] if_imem_addr_IF; +logic [63:0] imem_id_instr_ID; + +// Clock Generation +initial begin + repeat(1000) begin + clk = ~clk; + #1; + end + $finish(); +end + +initial begin + rst_l = 1'b0; + repeat (5) @(posedge clk); + rst_l = 1'b1; +end + +core_tb_imem #( .ADDR_WIDTH(16) ) imem0 ( + .clk(clk), + .if_imem_addr_IF(if_imem_addr_IF), + .imem_id_instr_ID(imem_id_instr_ID) +); + +core core0 ( + .clk(clk), + .rst_l(rst_l), + .if_imem_addr_IF(if_imem_addr_IF), + .imem_id_instr_ID(imem_id_instr_ID) +); + +endmodule diff --git a/core/tb/core_tb_imem.sv b/core/tb/core_tb_imem.sv new file mode 100644 index 0000000..e66af29 --- /dev/null +++ b/core/tb/core_tb_imem.sv @@ -0,0 +1,36 @@ +module core_tb_imem +#( + parameter ADDR_WIDTH = 64 +) +( + input logic clk, + + // Fetch Interface + input logic [63:0] if_imem_addr_IF, + + // Decode Interface + output logic [63:0] imem_id_instr_ID +); + +int assembly_file; +int status_file; +int error_file; +string error_message_file; + +logic [63:0] imem [(1<<(ADDR_WIDTH))-1:0]; + +initial begin + assembly_file = $fopen("/home/joshua/Personal/riscv_linux/core/tb/riscv_arithmetic_basic_test_0.bin", "rb"); + status_file = $fread( imem, assembly_file ); + if (status_file == 0) begin + $ferror( assembly_file, error_message_file ); + $error("File I/O Error %s", error_message_file); + end + $display("Memory Contents Initialized"); +end + +always_ff @ (posedge clk) begin + imem_id_instr_ID <= imem[if_imem_addr_IF[ADDR_WIDTH-1:0]]; +end + +endmodule |