-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathregfile.sv
53 lines (34 loc) · 1.1 KB
/
regfile.sv
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module regfile(ReadData1, ReadData2,WriteData,ReadRegister1,ReadRegister2,
WriteRegister,RegWrite,clk);
input logic [4:0] ReadRegister1, ReadRegister2,WriteRegister;
input logic RegWrite;
input logic clk;
input logic [63:0]WriteData;
output logic [63:0]ReadData1, ReadData2;
logic [63:0] registers [31:0];
logic [31:0] address;
decoder5_32 d1(WriteRegister,address,RegWrite);
genvar i;
generate
for(i = 0; i < 31; i++) begin: eachreg
REG R(WriteData,registers[i],clk,address[i]);
end
endgenerate
assign registers[31] = 64'b0;
mux32x64_64 mux1(registers,ReadData1, ReadRegister1);
mux32x64_64 mux2(registers,ReadData2, ReadRegister2);
endmodule
module REG #(parameter WIDTH=64)(in, out , clk, enable);
input logic [WIDTH-1:0] in;
input logic clk;
input logic enable;
output logic [WIDTH-1:0] out;
logic [WIDTH-1:0] data;
genvar i;
generate
for(i=0; i < WIDTH; i++) begin: eachDff
mux2_1 sel({in[i], out[i]},data[i] ,enable);
D_FF dffs(out[i], data[i], 1'b0, clk);
end
endgenerate
endmodule