Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d9da6dd

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

15 files changed

+724
-0
lines changed

‎ALU.v

Lines changed: 43 additions & 0 deletions
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

Lines changed: 39 additions & 0 deletions
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

Lines changed: 8 additions & 0 deletions
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

Lines changed: 55 additions & 0 deletions
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

Lines changed: 23 additions & 0 deletions
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

Lines changed: 123 additions & 0 deletions
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

Lines changed: 9 additions & 0 deletions
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

Lines changed: 16 additions & 0 deletions
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

Lines changed: 16 additions & 0 deletions
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

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /