Skip to content

Commit 32ebe9c

Browse files
author
Parham Farrokhi
committed
stall for ld dependency
1 parent d7ffa38 commit 32ebe9c

File tree

7 files changed

+41
-21
lines changed

7 files changed

+41
-21
lines changed

Sec_8/EXE_Reg.v

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module EXE_Stage_reg
33
(
44
clk,
55
rst,
6+
loadForwardStall,
67
superStall,
78
PC_in,
89
WB_En_in,
@@ -27,6 +28,7 @@ module EXE_Stage_reg
2728
// input and output ports
2829
input clk;
2930
input rst;
31+
input loadForwardStall;
3032
input superStall;
3133
input WB_En_in;
3234
input MEM_R_En_in;
@@ -75,7 +77,7 @@ module EXE_Stage_reg
7577
end
7678
else
7779
begin
78-
if (~superStall) begin
80+
if (~superStall & ~loadForwardStall) begin
7981
dest <= dest_in;
8082
PC <= PC_in;
8183
WB_En <= WB_En_in;

Sec_8/ForwardUnit.v

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module ForwardUnit
55
WB_En1,
66
WB_En2,
77
mem_W_En,
8+
MEM_R_En,
89
Is_Imm,
910
src1,
1011
src2,
@@ -25,6 +26,7 @@ module ForwardUnit
2526
input WB_En2;
2627
input Is_Imm;
2728
input mem_W_En;
29+
input mem_R_En;
2830
input [1:0] BR_Type;
2931
input [4:0] src1;
3032
input [4:0] src2;
@@ -35,6 +37,7 @@ module ForwardUnit
3537
input [31:0] aluResult2;
3638
output shouldForward1;
3739
output shouldForward2;
40+
output loadForwardStall;
3841
output [31:0] srcOut1;
3942
output [31:0] srcOut2;
4043
output [31:0] memOut;
@@ -64,6 +67,8 @@ module ForwardUnit
6467
assign shouldForwardMemWriteFromMem = !( src2 ^ dest2 ) & WB_En2 & mem_W_En & |dest2; //st
6568
assign shouldForward1 = shouldForward1FromExe | shouldForward1FromMem;
6669
assign shouldForward2 = shouldForward2FromExe | shouldForward2FromMem;
70+
71+
assign loadForwardStall = !( src2 ^ dest1 ) & WB_En1 & mem_R_En & |dest1;
6772
// build module
6873
always @(*)
6974
begin

Sec_8/ID_Reg.v

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module ID_Stage_reg
44
clk,
55
rst,
66
stall,
7+
loadForwardStall,
78
superStall,
89
branch_taken,
910
src1_in,
@@ -42,6 +43,7 @@ module ID_Stage_reg
4243
input clk;
4344
input rst;
4445
input stall;
46+
input loadForwardStall;
4547
input superStall;
4648
input branch_taken;
4749
input WB_En_in;
@@ -118,7 +120,7 @@ module ID_Stage_reg
118120
end
119121
else
120122
begin
121-
if (~stall & ~superStall)
123+
if (~stall & ~superStall & ~loadForwardStall)
122124
begin
123125
dest <= dest_in;
124126
readdata1 <= readdata1_in;

Sec_8/IF.v

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module IF_Stage
44
clk,
55
rst,
66
stall,
7+
loadForwardStall,
78
superStall,
89
Instruction,
910
branch_taken,
@@ -15,6 +16,7 @@ module IF_Stage
1516
input clk;
1617
input rst;
1718
input stall;
19+
input loadForwardStall;
1820
input superStall;
1921
input branch_taken;
2022
input [31:0] branch_address;
@@ -37,7 +39,7 @@ module IF_Stage
3739
if(branch_taken)
3840
PC <= branch_address;
3941
else
40-
if( ~stall & ~superStall )
42+
if( ~stall & ~superStall & ~loadForwardStall )
4143
PC <= PC + 4;
4244
end
4345
end

Sec_8/IF_Reg.v

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module IF_Stage_reg
44
clk,
55
rst,
66
stall,
7+
loadForwardStall,
78
superStall,
89
branch_taken,
910
Instruction_in,
@@ -16,6 +17,7 @@ module IF_Stage_reg
1617
input clk;
1718
input rst;
1819
input stall;
20+
input loadForwardStall;
1921
input superStall;
2022
input branch_taken;
2123
input [31:0] Instruction_in;
@@ -40,7 +42,7 @@ module IF_Stage_reg
4042
end
4143
else
4244
begin
43-
if( ~stall & ~superStall )
45+
if( ~stall & ~superStall & ~loadForwardStall)
4446
begin
4547
Instruction <= Instruction_in;
4648
PC <= PC_in;

Sec_8/MIPS.v

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ module MIPS
3939
wire Branch_Taken;
4040
wire SRAM_NOT_READY;
4141
wire Stall;
42+
wire loadForwardStall;
4243
wire superStall;
4344
wire [1:0] BR_Type1;
4445
wire [1:0] BR_Type2;
@@ -91,6 +92,7 @@ module MIPS
9192
.clk(clk),
9293
.rst(rst),
9394
.stall(Stall),
95+
.loadForwardStall(loadForwardStall),
9496
.superStall(superStall),
9597
.branch_address(Branch_Address),
9698
.Instruction(Instruction1),
@@ -104,6 +106,7 @@ module MIPS
104106
.clk(clk),
105107
.rst(rst),
106108
.stall(Stall),
109+
.loadForwardStall(loadForwardStall),
107110
.superStall(superStall),
108111
.branch_taken(Branch_Taken),
109112
.Instruction_in(Instruction1),
@@ -158,6 +161,7 @@ module MIPS
158161
.clk(clk),
159162
.rst(rst),
160163
.stall(Stall),
164+
.loadForwardStall(loadForwardStall),
161165
.superStall(superStall),
162166
.branch_taken(Branch_Taken),
163167
.readdata1_in(readdata11),
@@ -192,25 +196,27 @@ module MIPS
192196
.PC(PC2)
193197
);
194198
ForwardUnit FU
195-
(
196-
.BR_Type(BR_Type2), // Pass BR_Type through levels
197-
.WB_En1(WB_En32),
198-
.WB_En2(WB_En42),
199+
(
200+
.BR_Type(BR_Type2), // Pass BR_Type through levels
201+
.WB_En1(WB_En32),
202+
.WB_En2(WB_En42),
199203
.mem_W_En(MEM_W_En22),
200-
.Is_Imm(Is_Imm2),
201-
.src1(src12),
202-
.src2(src22),
204+
.MEM_R_En(MEM_R_En22),
205+
.Is_Imm(Is_Imm2),
206+
.src1(src12),
207+
.src2(src22),
203208
.readdata2(readdata22),
204-
.dest1(dest3),
205-
.dest2(dest4),
206-
.aluResult1(WB_Data0),
207-
.aluResult2(WB_Data),
208-
.srcOut1(forwardVal11),
209-
.srcOut2(forwardVal12),
209+
.dest1(dest3),
210+
.dest2(dest4),
211+
.aluResult1(WB_Data0),
212+
.aluResult2(WB_Data),
213+
.srcOut1(forwardVal11),
214+
.srcOut2(forwardVal12),
210215
.memOut(memForwardVal),
211-
.shouldForward1(shouldForward11),
212-
.shouldForward2(shouldForward12)
213-
);
216+
.shouldForward1(shouldForward11),
217+
.shouldForward2(shouldForward12),
218+
.loadForwardStall(loadForwardStall)
219+
);
214220
// execution
215221
EXE_Stage EXES
216222
(
@@ -234,6 +240,7 @@ module MIPS
234240
(
235241
.clk(clk),
236242
.rst(rst),
243+
.loadForwardStall(loadForwardStall),
237244
.superStall(superStall),
238245
.PC_in(PC2),
239246
.PC(PC3),

Sec_8/MIPSHQ.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ MIPS UUT
309309
.Sel(SW[1]),
310310
.SRAMdata( SRAM_DQ ), // SRAM Data bus 16 Bits
311311
.SRAMaddress( SRAM_ADDR ), // SRAM Address bus 18 Bits
312-
.SRAMWEn( SRAM_WE_N ), // SRAM Write Enable
312+
.SRAMWEn( SRAM_WE_N ) // SRAM Write Enable
313313
);
314314

315315
assign SRAM_UB_N = 1'b0; // SRAM High-byte Data Mask

0 commit comments

Comments
 (0)