Line 41... |
Line 41... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.34 2004/01/20 14:24:08 mohor
|
|
// Define name changed.
|
|
//
|
// Revision 1.33 2004/01/20 14:05:26 mohor
|
// Revision 1.33 2004/01/20 14:05:26 mohor
|
// Data latching changed when testing WB.
|
// Data latching changed when testing WB.
|
//
|
//
|
// Revision 1.32 2004/01/20 10:23:21 mohor
|
// Revision 1.32 2004/01/20 10:23:21 mohor
|
// More debug data added.
|
// More debug data added.
|
Line 372... |
Line 375... |
|
|
|
|
// Initial values
|
// Initial values
|
initial
|
initial
|
begin
|
begin
|
test_enabled = 1'b0;
|
|
trst_pad_i = 1'b1;
|
trst_pad_i = 1'b1;
|
tms_pad_i = 1'hz;
|
tms_pad_i = 1'hz;
|
tck_pad_i = 1'hz;
|
tck_pad_i = 1'hz;
|
tdi_pad_i = 1'hz;
|
tdi_pad_i = 1'hz;
|
|
|
#100;
|
#100;
|
trst_pad_i = 1'b0;
|
trst_pad_i = 1'b0;
|
#100;
|
#100;
|
trst_pad_i = 1'b1;
|
trst_pad_i = 1'b1;
|
#1 test_enabled<=#1 1'b1;
|
|
end
|
end
|
|
|
initial
|
initial
|
begin
|
begin
|
|
test_enabled = 1'b0;
|
wb_rst_i = 1'b0;
|
wb_rst_i = 1'b0;
|
#1000;
|
#1000;
|
wb_rst_i = 1'b1;
|
wb_rst_i = 1'b1;
|
#1000;
|
#1000;
|
wb_rst_i = 1'b0;
|
wb_rst_i = 1'b0;
|
|
|
// Initial values for wishbone slave model
|
// Initial values for wishbone slave model
|
wb_slave.cycle_response(`ACK_RESPONSE, 9'h55, 8'h2); // (`ACK_RESPONSE, wbs_waits, wbs_retries);
|
wb_slave.cycle_response(`ACK_RESPONSE, 9'h55, 8'h2); // (`ACK_RESPONSE, wbs_waits, wbs_retries);
|
|
#1 test_enabled<=#1 1'b1;
|
end
|
end
|
|
|
initial
|
initial
|
begin
|
begin
|
wb_clk_i = 1'b0;
|
wb_clk_i = 1'b0;
|
Line 419... |
Line 422... |
reset_tap;
|
reset_tap;
|
|
|
#500;
|
#500;
|
goto_run_test_idle;
|
goto_run_test_idle;
|
|
|
|
// Test stall signal
|
|
stall_test;
|
|
|
// Testing read and write to internal registers
|
// Testing read and write to internal registers
|
#10000;
|
#10000;
|
|
|
set_instruction(`IDCODE);
|
set_instruction(`IDCODE);
|
read_id_code(id);
|
read_id_code(id);
|
Line 570... |
Line 576... |
#1000 $stop;
|
#1000 $stop;
|
|
|
end
|
end
|
|
|
|
|
|
task stall_test;
|
|
integer i;
|
|
|
|
begin
|
|
$display("\n\n(%0t) stall_test started", $time);
|
|
|
|
// Set bp_i active for 1 clock cycle and check is stall is set or not
|
|
check_stall(0); // Should not be set at the beginning
|
|
@ (posedge wb_clk_i);
|
|
#1 dbg_tb.i_cpu_behavioral.cpu_bp_o = 1'b1;
|
|
check_stall(1); // set?
|
|
@ (posedge wb_clk_i);
|
|
#1 dbg_tb.i_cpu_behavioral.cpu_bp_o = 1'b0;
|
|
check_stall(1); // set?
|
|
|
|
gen_clk(1);
|
|
check_stall(1); // set?
|
|
|
|
// Unstall with register
|
|
set_instruction(`DEBUG);
|
|
chain_select(`CPU_DEBUG_CHAIN, 1'b0); // {chain, gen_crc_err}
|
|
check_stall(1); // set?
|
|
debug_cpu(`CPU_WRITE_REG, `CPU_OP_ADR, 32'h0, 1'b0, result, "clr unstall"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(1); // set?
|
|
debug_cpu(`CPU_GO, 32'h0, 32'h0, 1'b0, result, "go cpu"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(0); // reset?
|
|
|
|
// Set stall with register
|
|
debug_cpu(`CPU_WRITE_REG, `CPU_OP_ADR, 32'h0, 1'b0, result, "clr stall"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(0); // reset?
|
|
debug_cpu(`CPU_GO, 32'h0, 32'h1, 1'b0, result, "go cpu"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(1); // set?
|
|
|
|
// Unstall with register
|
|
debug_cpu(`CPU_WRITE_REG, `CPU_OP_ADR, 32'h0, 1'b0, result, "clr unstall"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(1); // set?
|
|
debug_cpu(`CPU_GO, 32'h0, 32'h0, 1'b0, result, "go cpu"); // {command, addr, data, gen_crc_err, result, text}
|
|
check_stall(0); // reset?
|
|
|
|
$display("\n\n(%0t) stall_test passed\n\n", $time);
|
|
end
|
|
endtask // stall_test
|
|
|
|
|
|
task check_stall;
|
|
input should_be_set;
|
|
begin
|
|
if (should_be_set && (!cpu_stall_o))
|
|
begin
|
|
$display ("\t\t(%0t) ERROR: cpu_stall_o is not set but should be.", $time);
|
|
$stop;
|
|
end
|
|
if ((!should_be_set) && cpu_stall_o)
|
|
begin
|
|
$display ("\t\t(%0t) ERROR: cpu_stall_o set but shouldn't be.", $time);
|
|
$stop;
|
|
end
|
|
end
|
|
endtask // check_stall
|
|
|
|
|
task initialize_memory;
|
task initialize_memory;
|
input [31:0] start_addr;
|
input [31:0] start_addr;
|
input [31:0] length;
|
input [31:0] length;
|
integer i;
|
integer i;
|
reg [31:0] addr;
|
reg [31:0] addr;
|