aboutsummaryrefslogtreecommitdiff
path: root/core/tb
diff options
context:
space:
mode:
authorJoshua Yun <joshua@joshuayun.com>2025-03-15 17:35:52 -0500
committerJoshua Yun <joshua@joshuayun.com>2025-03-15 17:35:52 -0500
commit59fd8c25ee1452452cb564d6fe4163b7a9394aef (patch)
tree028688a39cd401a40939d86e3bf4a8f5d678d6a4 /core/tb
parentc7a29c00b143ff6ee22bb7cffbdd0ae7c21206d1 (diff)
downloadriscv-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.sv37
-rw-r--r--core/tb/core_tb_imem.sv36
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