summaryrefslogtreecommitdiff
path: root/rtl/core/regs/file.sv
blob: e2bcc0966adb4b2514c19fff681b1d97d230c296 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
`include "core/uarch.sv"

module core_reg_file
(
	input  logic     clk,
	input  reg_index rd_index,
	                 wr_index,
	input  logic     wr_enable,
	input  word      wr_value,

	output word      rd_value
);

	// Ver comentario en uarch.sv
	word file[30];
	word q, wr_value_hold;
	logic overwrite_hold;

	assign rd_value = overwrite_hold ? wr_value_hold : q;

	always @(posedge clk) begin
		if(wr_enable) begin
			file[rd_index] <= wr_value;
			wr_value_hold <= wr_value;
		end

		q <= file[rd_index];
		overwrite_hold <= wr_enable & (rd_index == wr_index);
	end

endmodule