diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-15 08:27:12 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-15 08:27:12 +0200 |
commit | 9e76b9001c37ab2da2e99c922406b991bd0e53af (patch) | |
tree | 686aa90639b28c92013e6158e01d5010973b0f03 /src | |
parent | d107f7e40f02a7374b8685ba310500a6c38d43b1 (diff) | |
download | riscv_cpu-9e76b9001c37ab2da2e99c922406b991bd0e53af.tar.gz riscv_cpu-9e76b9001c37ab2da2e99c922406b991bd0e53af.zip |
running c program
Diffstat (limited to 'src')
-rw-r--r-- | src/control_unit.v | 5 | ||||
-rw-r--r-- | src/memory_interface.v | 2 | ||||
-rw-r--r-- | src/ram.v | 17 | ||||
-rw-r--r-- | src/rom.v | 14 |
4 files changed, 18 insertions, 20 deletions
diff --git a/src/control_unit.v b/src/control_unit.v index dfed9cc..28f37d9 100644 --- a/src/control_unit.v +++ b/src/control_unit.v @@ -104,7 +104,7 @@ always @ (*) begin STATE_JAL: next_state = STATE_ALU_WB; STATE_JALR: next_state = STATE_ALU_WB; STATE_LUI: next_state = STATE_ALU_WB; - STATE_AUIPC: next_state = STATE_FETCH; + STATE_AUIPC: next_state = STATE_ALU_WB; STATE_BRANCH: next_state = STATE_FETCH; default: next_state = STATE_FETCH; endcase @@ -193,9 +193,6 @@ always @ (*) begin alu_a_src = ALU_A_SRC_PC_BUF; alu_b_src = ALU_B_SRC_IMM; alu_ctrl = ALU_CTRL_ADD; - result_src = RESULT_SRC_ALU_RESULT_BUF; - pc_update = PC_UPDATE_ENABLE; - end STATE_BRANCH: begin alu_a_src = ALU_A_SRC_RD1_BUF; diff --git a/src/memory_interface.v b/src/memory_interface.v index 0fabc05..da06d1a 100644 --- a/src/memory_interface.v +++ b/src/memory_interface.v @@ -14,7 +14,7 @@ wire [31:0] ram_read_data, rom_read_data; ram #(.N(32), .SIZE(1024)) ram( .clk(clk), - .rst(!rstn), + .rstn(rstn), .we(ram_we), .addr(addr), .data_read(ram_read_data), @@ -3,24 +3,21 @@ module ram #( parameter SIZE = 1024 )( input clk, - input rst, + input rstn, input we, - input [log2(SIZE)-1:0] addr, + input [log2(SIZE/4)-1:0] addr, input [N-1:0] data_write, - output [N-1:0] data_read + output reg [N-1:0] data_read ); `include "include/log2.vh" -reg [8:0] memory [SIZE-1:0]; - -assign data_read = { memory[addr + 3], memory[addr + 2], memory[addr + 1], memory[addr + 0] }; - +//(* RAM_STYLE="BLOCK" *) +reg [N-1:0] mem [SIZE-1:0]; always @(posedge clk) begin - if (we) begin - { memory[addr + 3], memory[addr + 2], memory[addr + 1], memory[addr + 0] } <= data_write; - end + if (we) mem[addr >> 2] <= data_write; + data_read <= mem[addr >> 2]; end endmodule @@ -3,18 +3,22 @@ module rom #( parameter SIZE = 1024 )( input clk, - input [log2(SIZE)-1:0] addr, - output [N-1:0] data_read + input [log2(SIZE/4)-1:0] addr, + output reg [N-1:0] data_read ); `include "include/log2.vh" -reg [7:0] memory [0:SIZE-1]; + +//(* RAM_STYLE="BLOCK" *) +reg [N-1:0] mem [SIZE-1:0]; initial begin - $readmemh("build/rom.hex", memory, 0, SIZE-1); + $readmemh("build/rom.hex", mem, 0, SIZE/4-1); end -assign data_read = {memory[addr + 3], memory[addr + 2], memory[addr + 1], memory[addr + 0] }; +always @(negedge clk) begin + data_read <= mem[addr >> 2]; +end endmodule |