Browse Source

Verification for BNE

master
Denis Tereshkin 1 month ago
parent
commit
60cebaf1e7
  1. 30
      src/cpu.verilog

30
src/cpu.verilog

@ -864,6 +864,7 @@ always_comb
logic [7:0] f_prev_instruction; logic [7:0] f_prev_instruction;
logic [4:0] f_prev_addr_code; logic [4:0] f_prev_addr_code;
logic f_prev_instruction_is_branch; logic f_prev_instruction_is_branch;
logic [7:0] f_prev_branch_rel;
logic [4:0] f_prev_instr_cycles; logic [4:0] f_prev_instr_cycles;
logic [4:0] f_instr_cycles; logic [4:0] f_instr_cycles;
@ -881,6 +882,8 @@ initial f_instr_cycles = 0;
initial f_prev_instruction = 0; initial f_prev_instruction = 0;
initial f_prev_addr_code = 0; initial f_prev_addr_code = 0;
initial f_prev_valid = 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_X = 0;
initial f_prev_Y = 0; initial f_prev_Y = 0;
initial f_prev_A = 0; initial f_prev_A = 0;
@ -935,6 +938,9 @@ always @(posedge clk)
f_instr_cycles <= f_instr_cycles + 1'b1; f_instr_cycles <= f_instr_cycles + 1'b1;
end end
always @(posedge clk)
if (state == STATE_BRANCH)
f_prev_branch_rel <= mem_data;
logic [15:0] f_abs_address; logic [15:0] f_abs_address;
@ -1794,6 +1800,30 @@ always @(posedge clk)
assert(Y == f_prev_Y); assert(Y == f_prev_Y);
end 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) always @(posedge clk)
if (f_past_valid) if (f_past_valid)
begin begin

Loading…
Cancel
Save