summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2026-01-02 12:53:14 +0100
committeruvok2026-01-02 12:53:14 +0100
commit4b529725973c0cc4d9ecf82407348773ac3598db (patch)
treec3586445ddc69e0c3c4f3c4d30f2acb0d728081f
parent6c109081ba11c1ef4b33ed922cbd447b6fe96b29 (diff)
Add nandgame computer
-rw-r--r--nandgame/computer.sv74
1 files changed, 74 insertions, 0 deletions
diff --git a/nandgame/computer.sv b/nandgame/computer.sv
new file mode 100644
index 0000000..acb9bbd
--- /dev/null
+++ b/nandgame/computer.sv
@@ -0,0 +1,74 @@
+`timescale 1us/1us
+
+`include "../my_mem.v"
+`include "comb_mem.sv"
+`include "instruction_decode.sv"
+`include "counter.sv"
+
+module computer (
+ input clk_i
+);
+
+wire nclk;
+assign nclk = ~clk_i;
+
+logic [15:0] PC_addr;
+logic [15:0] PC_content;
+
+my_mem #(
+ .DATA_WIDTH(16)
+) ROM (
+ .clk_i(nclk),
+ .write_en_i(0),
+ .read_en_i(1),
+ .r_read_addr(PC_addr),
+ .r_write_addr(0),
+ .data_i(0),
+ .data_o(PC_content)
+);
+
+logic [15:0] out_A, out_D, out_pA;
+logic in_store_A, in_store_D, in_store_pA;
+logic [15:0] CPU_RES;
+
+comb_mem #(
+ .DATA_WIDTH(16)
+) RAM (
+ .cl(clk_i),
+
+ .A_o(out_A),
+ .D_o(out_D),
+ .pA_o(out_pA),
+
+ .a_i(in_store_A),
+ .d_i(in_store_D),
+ .pa_i(in_store_pA),
+
+ .X(CPU_RES)
+);
+
+logic cpu_jump;
+
+instruction_decode CPU (
+ .instruction(PC_content),
+ .do_jump(cpu_jump),
+
+ .dst_a(in_store_A),
+ .dst_d(in_store_D),
+ .dst_pa(in_store_pA),
+
+ .A_i(out_A),
+ .D_i(out_D),
+ .pA_i(out_pA),
+
+ .RES(CPU_RES)
+);
+
+counter PC (
+ .cl(clk_i),
+ .count(PC_addr),
+ .X(out_A),
+ .st(cpu_jump)
+);
+
+endmodule