Added explicit rst input to RAM and PC as well as the MIPS processor.

This commit is contained in:
riley committed 2026-10-16 12:11:19 +11:00
1 parent c717bf189c
commit e7fff9f3dc
4 files changed
+24 -21

No files matched your search

+3 -3
View File
@@ -13,7 +13,7 @@
module assignment2 #(width=5, ramsz=9, romsz=10) (
input logic [0:0] clk
input logic [0:0] clk, input logic [0:0] rst
`ifdef QUARTUS_SYNTH
,
input logic [4:0] HID_Register,
@@ -56,12 +56,12 @@ module assignment2 #(width=5, ramsz=9, romsz=10) (
logic [2**width-1:0] rd_alu;
logic [2**width-1:0] rt_alu;
instruction_counter #(width) PC (clk, pc_we, pc_addr_write, pc_addr);
instruction_counter #(width) PC (clk, rst, pc_we, pc_addr_write, pc_addr);
rom #(romsz, width) ROM (pc_addr, instruction);
logic [2**width-1:0] rd_mem;
ram #(ramsz, width) RAM (clk, rd_alu, M2W, rt, rd_mem);
ram #(ramsz, width) RAM (clk, rst, rd_alu, M2W, rt, rd_mem);
control_unit CONTROL_UNIT (instruction[31:26], instruction[5:0],
M2R, M2W, B, ALU_FN, ALU_SRC, RDST, RW
+6 -8
View File
@@ -2,19 +2,17 @@
`define INSTRUCTION_COUNTER_H
module instruction_counter #(parameter width=5)(
input logic [0:0] clk, input logic [0:0] we,
input logic [0:0] clk, input logic [0:0] rst, input logic [0:0] we,
input logic [2**width-1:0] W,
output logic [2**width-1:0] addr
);
logic [2**width-1:0] pc;
initial begin
pc = {(2**width){1'b0}};
end
always_ff @(posedge clk) begin
if (we) begin
always_ff @(posedge clk or posedge rst) begin
if (rst) begin
pc <= {(2**width){1'b0}};
end else if (we) begin
pc <= W;
end else begin
pc <= pc + 4;
+6 -9
View File
@@ -2,7 +2,7 @@
`define RAM_H
module ram #(addrwidth=9, datawidth=5)(
input logic [0:0] clk,
input logic [0:0] clk, input logic [0:0] rst,
input logic [addrwidth-1:0] addr,
input logic [0:0] we,
input logic [datawidth-1:0] data_in,
@@ -12,15 +12,12 @@ module ram #(addrwidth=9, datawidth=5)(
// TODO: Make this byte-sized, NOT word-sized!
logic [2**datawidth-1:0] mem[0:255];
// NOTE: Possible issue with assignments still pending by end of initial block
initial begin
for (integer ADDR = 0; ADDR < 256; ADDR = ADDR + 1) begin
mem[ADDR] <= 32'b0;
end
end
always_ff @(posedge clk) begin
if (we) begin
if (rst) begin
for (integer ADDR = 0; ADDR < 256; ADDR = ADDR + 1) begin
mem[ADDR] <= 32'b0;
end
end else if (we) begin
mem[addr] <= data_in;
end
end