|
|
|
|
@ -864,6 +864,7 @@ always_comb
@@ -864,6 +864,7 @@ always_comb
|
|
|
|
|
logic [7:0] f_prev_instruction; |
|
|
|
|
logic [4:0] f_prev_addr_code; |
|
|
|
|
logic f_prev_instruction_is_branch; |
|
|
|
|
logic [7:0] f_prev_branch_rel; |
|
|
|
|
logic [4:0] f_prev_instr_cycles; |
|
|
|
|
logic [4:0] f_instr_cycles; |
|
|
|
|
|
|
|
|
|
@ -881,6 +882,8 @@ initial f_instr_cycles = 0;
@@ -881,6 +882,8 @@ initial f_instr_cycles = 0;
|
|
|
|
|
initial f_prev_instruction = 0; |
|
|
|
|
initial f_prev_addr_code = 0; |
|
|
|
|
initial f_prev_valid = 0; |
|
|
|
|
initial f_prev_instruction_is_branch = 0; |
|
|
|
|
initial f_prev_branch_rel = 0; |
|
|
|
|
initial f_prev_X = 0; |
|
|
|
|
initial f_prev_Y = 0; |
|
|
|
|
initial f_prev_A = 0; |
|
|
|
|
@ -935,6 +938,9 @@ always @(posedge clk)
@@ -935,6 +938,9 @@ always @(posedge clk)
|
|
|
|
|
f_instr_cycles <= f_instr_cycles + 1'b1; |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
always @(posedge clk) |
|
|
|
|
if (state == STATE_BRANCH) |
|
|
|
|
f_prev_branch_rel <= mem_data; |
|
|
|
|
|
|
|
|
|
logic [15:0] f_abs_address; |
|
|
|
|
|
|
|
|
|
@ -1794,6 +1800,30 @@ always @(posedge clk)
@@ -1794,6 +1800,30 @@ always @(posedge clk)
|
|
|
|
|
assert(Y == f_prev_Y); |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
always @(posedge clk) |
|
|
|
|
if (f_prev_valid && state == STATE_EXECUTE) |
|
|
|
|
if (f_prev_instruction == I_BNE) |
|
|
|
|
begin |
|
|
|
|
assert($past(address_code) == ADDR_MODE_RELATIVE); |
|
|
|
|
|
|
|
|
|
if ($past(P[P_Z]) == 0) |
|
|
|
|
begin |
|
|
|
|
assert($past(PC) == $past(f_prev_PC) + {{8{f_prev_branch_rel[7]}}, f_prev_branch_rel[7:0]} + 16'd2); |
|
|
|
|
assert(f_prev_instr_cycles == 3); |
|
|
|
|
end |
|
|
|
|
else |
|
|
|
|
begin |
|
|
|
|
assert($past(PC) == $past(f_prev_PC) + 16'd2); |
|
|
|
|
assert(f_prev_instr_cycles == 2); |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
assert(P == f_prev_P); |
|
|
|
|
assert(S == f_prev_S); |
|
|
|
|
assert(A == f_prev_A); |
|
|
|
|
assert(X == f_prev_X); |
|
|
|
|
assert(Y == f_prev_Y); |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
always @(posedge clk) |
|
|
|
|
if (f_past_valid) |
|
|
|
|
begin |
|
|
|
|
|