diff options
| author | uvok | 2026-01-02 12:53:14 +0100 |
|---|---|---|
| committer | uvok | 2026-01-02 12:53:14 +0100 |
| commit | 4b529725973c0cc4d9ecf82407348773ac3598db (patch) | |
| tree | c3586445ddc69e0c3c4f3c4d30f2acb0d728081f | |
| parent | 6c109081ba11c1ef4b33ed922cbd447b6fe96b29 (diff) | |
Add nandgame computer
| -rw-r--r-- | nandgame/computer.sv | 74 |
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 |
