Skip to content

Commit d9da6dd

Browse files
authored
Add files via upload
1 parent 68f4062 commit d9da6dd

15 files changed

+724
-0
lines changed

ALU.v

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
module ALU #(parameter Width = 32)(
2+
input [3:0] controlsignal, input [Width-1:0] A1,A2,
3+
output reg [Width-1:0] Y, output zero);
4+
//wire [63:0] B;
5+
always @(*)
6+
begin
7+
if (controlsignal == 4'b0000)
8+
Y = A1 & A2;
9+
else if (controlsignal == 4'b0001)
10+
Y = A1 | A2;
11+
else if(controlsignal == 4'b0010)
12+
Y = A1 + A2;
13+
else if(controlsignal == 4'b0110)
14+
Y = A1 - A2;
15+
else if(controlsignal == 4'b0011)
16+
Y = A1 << A2;
17+
else if(controlsignal == 4'b0100)
18+
begin
19+
//A1 = ~A1 + 1;
20+
//A2 = ~A2 + 1;
21+
if((~A1+1) < (~A2+1))
22+
Y = 1;
23+
else
24+
Y = 0;
25+
end
26+
else if(controlsignal == 4'b0101)
27+
begin
28+
if(A1 < A2)
29+
Y = 1;
30+
else
31+
Y = 0;
32+
end
33+
else if(controlsignal == 4'b0111)
34+
Y = A1 ^ A2;
35+
else if(controlsignal == 4'b1000)
36+
Y = A1 >> A2;
37+
else if(controlsignal == 4'b1010)
38+
Y = A1 >>> A2;
39+
else
40+
Y = {Width{1'bx}};
41+
end
42+
assign zero = (Y == 0) ? 1 : 0;
43+
endmodule

ALUControl.v

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
`timescale 1ns/1ps
2+
3+
module ALUControl(
4+
input [1:0] Aluop,
5+
input funct7,[2:0] funct3,
6+
output reg [3:0] Control);
7+
always @(*)
8+
begin
9+
case (Aluop)
10+
2'b00 : Control <= 4'b0010;
11+
2'b01 : Control <= 4'b0110;
12+
2'b10 : case({funct7,funct3})
13+
4'b0000 : Control <= 4'b0010; // add
14+
4'b1000 : Control <= 4'b0110; // sub
15+
4'b0111 : Control <= 4'b0000; // and
16+
4'b0110 : Control <= 4'b0001; // or
17+
4'b0001 : Control <= 4'b0011; // sll
18+
4'b0010 : Control <= 4'b0100; // slt
19+
4'b0011 : Control <= 4'b0101; // sltu
20+
4'b0100 : Control <= 4'b0111; // xor
21+
4'b0101 : Control <= 4'b1000; // srl
22+
4'b1101 : Control <= 4'b1010; // sra
23+
default : Control <= 4'bxxxx;
24+
endcase
25+
2'b11 : case({funct7,funct3})
26+
4'b0000 : Control <= 4'b0010; // addi
27+
4'b0010 : Control <= 4'b0100; // slti
28+
4'b0011 : Control <= 4'b0101; // sltui
29+
4'b0100 : Control <= 4'b0111; // xori
30+
4'b0110 : Control <= 4'b0001; // ori
31+
4'b0111 : Control <= 4'b0000; // andi
32+
4'b0001 : Control <= 4'b0011; // slli
33+
4'b0101 : Control <= 4'b1000; // srli
34+
4'b1101 : Control <= 4'b1010; // srai
35+
default : Control <= 4'bxxxx;
36+
endcase
37+
endcase
38+
end
39+
endmodule

Adder.v

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module adder #(parameter Width = 32)(
2+
input [Width-1:0] PC,
3+
output [Width-1:0] PCPlus4);
4+
5+
6+
assign PCPlus4 = PC + 1;
7+
8+
endmodule

Architecture Block diagram.jpg

165 KB
Loading

DataMemory.v

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
module DataMemory #(parameter Width = 32)
2+
(input clk,MemWrite,MemRead, [Width-1:0] ALUResult,WriteData, //WriteData=RD2
3+
output [Width-1:0] ReadData);
4+
reg [Width-1:0] mem1[511:0];
5+
initial
6+
begin
7+
mem1[0] = 32'h00000000;
8+
mem1[1] = 32'h00000000;
9+
mem1[2] = 32'h00000000;
10+
mem1[3] = 32'h00000000;
11+
mem1[4] = 32'h00000000;
12+
mem1[5] = 32'h00000000;
13+
mem1[6] = 32'h00000000;
14+
mem1[7] = 32'h00000000;
15+
mem1[8] = 32'h00000000;
16+
mem1[9] = 32'h00000000;
17+
mem1[10] = 32'h00000000;
18+
mem1[11] = 32'h00000000;
19+
mem1[12] = 32'h00000000;
20+
mem1[13] = 32'h00000000;
21+
mem1[14] = 32'h00000000;
22+
mem1[15] = 32'h00000000;
23+
mem1[16] = 32'h00000000;
24+
mem1[17] = 32'h00000000;
25+
mem1[18] = 32'h00000000;
26+
mem1[19] = 32'h00000000;
27+
mem1[20] = 32'h00000000;
28+
mem1[21] = 32'h00000000;
29+
mem1[22] = 32'h00000000;
30+
mem1[23] = 32'h00000000;
31+
mem1[24] = 32'h00000000;
32+
mem1[25] = 32'h00000000;
33+
mem1[26] = 32'h00000000;
34+
mem1[27] = 32'h00000000;
35+
mem1[28] = 32'h00000000;
36+
mem1[29] = 32'h00000000;
37+
mem1[30] = 32'h00000000;
38+
39+
40+
41+
42+
end
43+
44+
45+
always @(posedge clk)
46+
begin
47+
48+
if(MemWrite==1'b1)
49+
mem1[ALUResult] <= WriteData;
50+
51+
end
52+
53+
assign ReadData = (MemRead==1'b1) ? mem1[ALUResult]: 32'd0;
54+
55+
endmodule

ImmediateGeneration.v

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module immediategeneration #(parameter Width = 32)(
2+
input [1:0]immsrc,[31:0] instr,
3+
output reg [Width-1:0] extimm);
4+
5+
always @(*)
6+
begin
7+
case(immsrc)
8+
9+
//R-type has no immediate
10+
11+
2'b 00:extimm={{20{instr[31]}},instr[31:20]}; //I type
12+
13+
2'b 01:extimm={{21{instr[31]}},instr[30:25],instr[11:7]};//S type
14+
15+
2'b 10:extimm={{20{instr[31]}},instr[7],instr[30:25],instr[11:8],1'b0};//B type
16+
17+
2'b 11:extimm={{12{instr[31]}},instr[19:12],instr[20],instr[30:21],1'b0};//U type
18+
19+
default:extimm=32'bx;
20+
endcase
21+
end
22+
//assign Out = {{52{In[31]}},In[31:20]};
23+
endmodule

Instructionmemory.v

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
module instructionmemory(PC, RD);
2+
input [31:0]PC;
3+
output [31:0] RD;
4+
5+
reg [31:0] mem1[511:0];
6+
initial
7+
begin
8+
mem1[0] = 32'h00000113;
9+
mem1[1] = 32'h00000113; //addi x2 0(x0)
10+
mem1[2] = 32'h00400093; //addi x1 4(x0)
11+
mem1[3] = 32'h00100193; //addi x3 1(x0)
12+
mem1[4] = 32'hFE20AF23; //sw x2 -2(x1)
13+
mem1[5] = 32'hFE30AFA3; //sw x3 -1(x1)
14+
mem1[6] = 32'h00310233; //add x4 x2 x3
15+
mem1[7] = 32'h0040A023; //sw x4 0 (x1)
16+
mem1[8] = 32'h00108093; //addi x1 1 (x1)
17+
mem1[9] = 32'h00018113; //addi x2 0 (x3)
18+
mem1[10] = 32'h00020193; //addi x3 0 (x4)
19+
mem1[11] = 32'h00310233; //add x4 x2 x3
20+
mem1[12] = 32'h0040A023; //sw x4 0 (x1)
21+
mem1[13] = 32'h00108093; //addi x1 1 (x1)
22+
mem1[14] = 32'h00018113; //addi x2 0 (x3)
23+
mem1[15] = 32'h00020193; //addi x3 0 (x4)
24+
mem1[16] = 32'h00310233; //add x4 x2 (x3)
25+
mem1[17] = 32'h0040A023; //sw x4 0(x1)
26+
mem1[18] = 32'h00108093; //addi x1 1 x1
27+
mem1[19] = 32'h00018113; //addi x2 0 x3
28+
mem1[20] = 32'h00020193; //addi x3 0 x4
29+
mem1[21] = 32'h00310233; //add x4 x2 x3
30+
mem1[22] = 32'h0040A023; //sw x4 0 x1
31+
mem1[23] = 32'h00108093; //addi x1 1 x1
32+
mem1[24] = 32'h00018113; //addi x2 0 x3
33+
mem1[25] = 32'h00020193; //addi x3 0 x4
34+
mem1[26] = 32'h00310233; //add x4 x2 x3
35+
mem1[27] = 32'h0040A023; //sw x4 0 x1
36+
mem1[28] = 32'h00108093; //addi x1 1 x1
37+
mem1[29] = 32'h00018113; //addi x2 0 x3
38+
mem1[30] = 32'h00020193; //addi x3 0 x4
39+
mem1[31] = 32'h00310233; //add x4 x2 x3
40+
mem1[32] = 32'h0040A023; //sw x4 0 x1
41+
mem1[33] = 32'h00108093; //addi x1 1 x1
42+
mem1[34] = 32'h00018113; //addi x2 0 x3
43+
mem1[35] = 32'h00020193; //addi x3 0 x4
44+
mem1[36] = 32'h00310233; //add x4 x2 x3
45+
mem1[37] = 32'h0040A023; //sw x4 0 x1
46+
mem1[38] = 32'h00108093; //addi x1 1 x1
47+
mem1[39] = 32'h00018113; //addi x2 0 x3
48+
mem1[40] = 32'h00020193; //addi x3 0 x4
49+
mem1[41] = 32'h00310233; //add x4 x2 x3
50+
mem1[42] = 32'h0040A023; //sw x4 0 x1
51+
mem1[43] = 32'h00108093; //addi x1 1 x1
52+
mem1[44] = 32'h00018113; //addi x2 0 x3
53+
mem1[45] = 32'h00020193; //addi x3 0 x4
54+
mem1[46] = 32'h00310233; //add x4 x2 x3
55+
mem1[47] = 32'h0040A023; //sw x4 0 x1
56+
mem1[48] = 32'h00108093; //addi x1 1 x1
57+
mem1[49] = 32'h00018113; //addi x2 0 x3
58+
mem1[50] = 32'h00020193; //addi x3 0 x4
59+
mem1[51] = 32'h00310233; //add x4 x2 x3
60+
mem1[52] = 32'h0040A023; //sw x4 0 x1
61+
mem1[53] = 32'h00108093; //addi x1 1 x1
62+
mem1[54] = 32'h00018113; //addi x2 0 x3
63+
mem1[55] = 32'h00020193; //addi x3 0 x4
64+
mem1[56] = 32'h00310233; //add x4 x2 x3
65+
mem1[57] = 32'h0040A023; //sw x4 0 x1
66+
mem1[58] = 32'h00108093; //addi x1 1 x1
67+
mem1[59] = 32'h00018113; //addi x2 0 x3
68+
mem1[60] = 32'h00020193; //addi x3 0 x4
69+
70+
mem1[61] = 32'h00310233; //add x4 x2 x3
71+
mem1[62] = 32'h0040A023; //sw x4 0 x1
72+
mem1[63] = 32'h00108093; //addi x1 1 x1
73+
mem1[64] = 32'h00018113; //addi x2 0 x3
74+
mem1[65] = 32'h00020193; //addi x3 0 x4
75+
mem1[66] = 32'h00310233; //add x4 x2 x3
76+
mem1[67] = 32'h0040A023; //sw x4 0 x1
77+
mem1[68] = 32'h00108093; //addi x1 1 x1
78+
mem1[69] = 32'h00018113; //addi x2 0 x3
79+
mem1[70] = 32'h00020193; //addi x3 0 x4
80+
mem1[71] = 32'h00310233; //add x4 x2 x3
81+
mem1[72] = 32'h0040A023; //sw x4 0 x1
82+
mem1[73] = 32'h00108093; //addi x1 1 x1
83+
mem1[74] = 32'h00018113; //addi x2 0 x3
84+
mem1[75] = 32'h00020193; //addi x3 0 x4
85+
mem1[76] = 32'h00310233; //add x4 x2 x3
86+
mem1[77] = 32'h0040A023; //sw x4 0 x1
87+
mem1[78] = 32'h00108093; //addi x1 1 x1
88+
mem1[79] = 32'h00018113; //addi x2 0 x3
89+
mem1[80] = 32'h00020193; //addi x3 0 x4
90+
mem1[81] = 32'h00310233; //add x4 x2 x3
91+
mem1[82] = 32'h0040A023; //sw x4 0 x1
92+
mem1[83] = 32'h00108093; //addi x1 1 x1
93+
mem1[84] = 32'h00018113; //addi x2 0 x3
94+
mem1[85] = 32'h00020193; //addi x3 0 x4
95+
96+
mem1[86] = 32'h00008093; //addi x1 0 x1
97+
98+
99+
//loading
100+
mem1[87] = 32'h00202303; //lw x7 2( x0)
101+
mem1[88] = 32'h00302303; //lw x7 3( x0)
102+
mem1[89] = 32'hFF00A483; //lw x7 -16( x1)
103+
mem1[90] = 32'hFF10A483; //lw x7 -15( x1)
104+
mem1[91] = 32'hFF20A483; //lw x7 -14( x1)
105+
mem1[92] = 32'hFF30A483; //lw x7 -13( x1)
106+
mem1[93] = 32'hFF40A483; //lw x7 -12( x1)
107+
mem1[94] = 32'hFF50A483; //lw x7 -11( x1)
108+
mem1[95] = 32'hFF60A483; //lw x7 -10( x1)
109+
mem1[96] = 32'hFF70A483; //lw x7 -9( x1)
110+
mem1[97] = 32'hFF80A483; //lw x7 -8( x1)
111+
mem1[98] = 32'hFF90A483; //lw x7 -7( x1)
112+
mem1[99] = 32'hFFA0A483; //lw x7 -6( x1)
113+
mem1[100] = 32'hFFB0A483; //lw x7 -5( x1)
114+
mem1[101] = 32'hFFC0A483; //lw x7 -4( x1)
115+
mem1[102] = 32'hFFD0A483; //lw x7 -3( x1)
116+
mem1[103] = 32'hFFE0A483; //lw x7 -2( x1)
117+
mem1[104] = 32'hFFF0A483; //lw x7 -1( x1)
118+
119+
mem1[105] = 32'hFE4187E3; //beq x3 x4 mem1[87]
120+
121+
end
122+
assign RD = mem1[PC];
123+
endmodule

MUX.v

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module MUX #(parameter Width = 32)(input [Width-1 : 0] a,b,
2+
input s,
3+
output reg [Width-1 : 0] out);
4+
5+
always @(s or a or b)
6+
begin
7+
out = (s == 1'b0) ? a : b;
8+
end
9+
endmodule

MUX1.v

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module MUX1 #(parameter Width = 32)(input [Width-1 : 0] a,b,c,
2+
input [1:0] s,
3+
output reg [Width-1 : 0] out);
4+
always @(s or a or b or c)
5+
begin
6+
//assign out = (s == 2'b10) ? c : (s == 2'b01) ? b : a;
7+
if(s==2'b00)
8+
out=a;
9+
else if(s==2'b01)
10+
out=b;
11+
else if(s==2'b10)
12+
out=c;
13+
else
14+
out=32'h xxxxxxxx;
15+
end
16+
endmodule

PC Counter.v

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module PCCounter( clk, PCNext, PC);
2+
3+
input clk;
4+
input[31:0]PCNext;
5+
output reg [31:0] PC;
6+
7+
always@(posedge clk)
8+
9+
begin
10+
PC <= PCNext;
11+
end
12+
initial begin
13+
PC=32'b0;
14+
end
15+
16+
endmodule

Registerfile.v

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module Registerfile #(parameter Width = 32)(
2+
input clk,RegWrite,[4:0]A1,[4:0]A2,[4:0]A3,[Width-1:0] WD3,
3+
output [Width-1:0] RD1, RD2,result);
4+
reg [Width-1:0] Register [Width-1:0];
5+
//wire [4:0] A1, A2, A3;
6+
7+
8+
9+
//assign A1=RD[19-:15]; //TEST
10+
//assign A2=RD[24-:20]; //TEST
11+
//assign A3=RD[11-:7]; //TEST
12+
13+
14+
initial
15+
begin
16+
Register[0] = 32'h00000000;
17+
Register[1] = 32'h00000001;
18+
Register[2] = 32'h00000002;
19+
Register[3] = 32'h00000007;
20+
Register[4] = 32'h00000008;
21+
Register[5] = 32'h00000005;
22+
Register[6] = 32'h00000006;
23+
Register[7] = 32'h00000007;
24+
Register[8] = 32'h00000008;
25+
Register[9] = 32'h00000009;
26+
Register[10] = 32'h00000010;
27+
end
28+
always @(posedge clk)
29+
begin
30+
if(RegWrite)
31+
Register[A3] <= WD3; //WD3-write data
32+
end
33+
assign RD1 = (A1 != 0) ? Register[A1] : 0; //RD-Read data
34+
assign RD2 = (A2 != 0) ? Register[A2] : 0;
35+
assign result=Register[A3];
36+
endmodule

add.v

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module add #(parameter Width = 32)
2+
(input [Width-1:0] A1, A2,
3+
output [Width-1:0] Y);
4+
assign Y = A1 + A2;
5+
endmodule

0 commit comments

Comments
 (0)