Fix a half-valid valid address phase being left behind when taking a new path with the jump going straight to the bus. If left in place, this causes the next-next fetch to be marked as half valid, corrupting fetch data.
This commit is contained in:
parent
f8aad6d2f3
commit
d9389fb23e
|
@ -146,8 +146,9 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
// branch, it *must* be a valid branch instruction, because executing
|
// branch, it *must* be a valid branch instruction, because executing
|
||||||
// the branch is how we recover from misprediction
|
// the branch is how we recover from misprediction
|
||||||
`ifdef FORMAL
|
`ifdef FORMAL
|
||||||
// This can be defeated if you branch backward halfway into a 32-bit instruction that immediately precedes the branch.
|
// This can be defeated if you branch backward halfway into a 32-bit
|
||||||
if (predicted_branch && !d_starved && !debug_mode) begin
|
// instruction that immediately precedes the branch.
|
||||||
|
if (predicted_branch && !d_starved && !debug_mode && !d_except_instr_bus_fault) begin
|
||||||
assert(!d_invalid);
|
assert(!d_invalid);
|
||||||
assert(d_branchcond == BCOND_ZERO || d_branchcond == BCOND_NZERO);
|
assert(d_branchcond == BCOND_ZERO || d_branchcond == BCOND_NZERO);
|
||||||
end
|
end
|
||||||
|
|
|
@ -348,6 +348,7 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
if (jump_now) begin
|
if (jump_now) begin
|
||||||
if (|EXTENSION_C) begin
|
if (|EXTENSION_C) begin
|
||||||
if (mem_addr_rdy) begin
|
if (mem_addr_rdy) begin
|
||||||
|
mem_aph_hwvld <= 2'b11;
|
||||||
mem_data_hwvld <= {1'b1, !jump_target[1]};
|
mem_data_hwvld <= {1'b1, !jump_target[1]};
|
||||||
end else begin
|
end else begin
|
||||||
mem_aph_hwvld <= {1'b1, !jump_target[1]};
|
mem_aph_hwvld <= {1'b1, !jump_target[1]};
|
||||||
|
|
|
@ -35,7 +35,7 @@ SEPARATE_COMPILE=1
|
||||||
# You must also define below how to create an object file, and how to link.
|
# You must also define below how to create an object file, and how to link.
|
||||||
OBJOUT = -o
|
OBJOUT = -o
|
||||||
LFLAGS = -T ../../common/memmap.ld
|
LFLAGS = -T ../../common/memmap.ld
|
||||||
ASFLAGS = -c -march=rv32imc_zicsr
|
ASFLAGS = -c -march=rv32im_zicsr
|
||||||
OFLAG = -o
|
OFLAG = -o
|
||||||
COUT = -c
|
COUT = -c
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue