OpenCores
URL https://opencores.org/ocsvn/can/can/trunk

Subversion Repositories can

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 157 to Rev 158
    Reverse comparison

Rev 157 → Rev 158

/trunk/bench/verilog/can_testbench.v
50,6 → 50,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.40 2004/03/18 17:39:17 igorm
// I forgot to thange one signal name.
//
// Revision 1.39 2004/03/18 17:15:26 igorm
// Signal bus_off_on added.
//
212,6 → 215,9
reg ale_i;
reg rd_i;
reg wr_i;
reg ale2_i;
reg rd2_i;
reg wr2_i;
wire [7:0] port_0;
wire [7:0] port_0_i;
reg [7:0] port_0_o;
221,6 → 227,7
 
 
reg cs_can;
reg cs_can2;
reg clk;
reg rx;
wire tx;
277,9 → 284,55
);
 
 
// Instantiate can_top module 2
can_top i_can_top2
(
`ifdef CAN_WISHBONE_IF
.wb_clk_i(wb_clk_i),
.wb_rst_i(wb_rst_i),
.wb_dat_i(wb_dat_i),
.wb_dat_o(wb_dat_o),
.wb_cyc_i(wb_cyc_i),
.wb_stb_i(wb_stb_i),
.wb_we_i(wb_we_i),
.wb_adr_i(wb_adr_i),
.wb_ack_o(wb_ack_o),
`else
.cs_can_i(cs_can2),
.rst_i(rst_i),
.ale_i(ale2_i),
.rd_i(rd2_i),
.wr_i(wr2_i),
.port_0_io(port_0),
`endif
.clk_i(clk),
.rx_i(rx_and_tx),
.tx_o(tx2_i),
.bus_off_on(bus_off2_on),
.irq_on(),
.clkout_o(clkout)
 
// Bist
`ifdef CAN_BIST
,
// debug chain signals
.mbist_si_i(1'b0), // bist scan serial in
.mbist_so_o(), // bist scan serial out
.mbist_ctrl_i(3'b001) // mbist scan {enable, clock, reset}
`endif
);
 
 
// Combining tx with the output enable signal.
assign tx = bus_off_on? tx_i : 1'bz;
wire tx_tmp1;
wire tx_tmp2;
 
assign tx_tmp1 = bus_off_on? tx_i : 1'bz;
assign tx_tmp2 = bus_off2_on? tx2_i : 1'bz;
 
assign tx = tx_tmp1 & tx_tmp2;
 
 
`ifdef CAN_WISHBONE_IF
// Generate wishbone clock signal 10 MHz
initial
309,6 → 362,7
begin
start_tb = 0;
cs_can = 0;
cs_can2 = 0;
rx = 1;
extended_mode = 0;
tx_bypassed = 0;
328,6 → 382,9
ale_i = 1'b0;
rd_i = 1'b0;
wr_i = 1'b0;
ale2_i = 1'b0;
rd2_i = 1'b0;
wr2_i = 1'b0;
port_0_o = 8'h0;
port_0_en = 0;
port_free = 1;
344,10 → 401,10
always
begin
wait (tx);
repeat (4*BRP) @ (posedge clk); // 4 time quants delay
repeat (2*BRP) @ (posedge clk); // 4 time quants delay
#1 delayed_tx = tx;
wait (~tx);
repeat (4*BRP) @ (posedge clk); // 4 time quants delay
repeat (2*BRP) @ (posedge clk); // 4 time quants delay
#1 delayed_tx = tx;
end
 
362,27 → 419,39
 
// Set bus timing register 0
write_register(8'd6, {`CAN_TIMING0_SJW, `CAN_TIMING0_BRP});
write_register2(8'd6, {`CAN_TIMING0_SJW, `CAN_TIMING0_BRP});
 
// Set bus timing register 1
write_register(8'd7, {`CAN_TIMING1_SAM, `CAN_TIMING1_TSEG2, `CAN_TIMING1_TSEG1});
write_register2(8'd7, {`CAN_TIMING1_SAM, `CAN_TIMING1_TSEG2, `CAN_TIMING1_TSEG1});
 
 
// Set Clock Divider register
extended_mode = 1'b0;
write_register(8'd31, {extended_mode, 3'h0, 1'b0, 3'h0}); // Setting the normal mode (not extended)
// extended_mode = 1'b1;
// write_register(8'd31, {extended_mode, 3'h0, 1'b0, 3'h0}); // Setting the normal mode (not extended)
write_register2(8'd31, {extended_mode, 3'h0, 1'b0, 3'h0}); // Setting the normal mode (not extended)
 
 
// Set Acceptance Code and Acceptance Mask registers (their address differs for basic and extended mode
/*
// Set Acceptance Code and Acceptance Mask registers
 
/* Set Acceptance Code and Acceptance Mask registers
write_register(8'd16, 8'ha6); // acceptance code 0
write_register(8'd17, 8'hb0); // acceptance code 1
write_register(8'd18, 8'h12); // acceptance code 2
write_register(8'd19, 8'h30); // acceptance code 3
write_register(8'd20, 8'h0); // acceptance mask 0
write_register(8'd21, 8'h0); // acceptance mask 1
write_register(8'd22, 8'h00); // acceptance mask 2
write_register(8'd23, 8'h00); // acceptance mask 3
write_register(8'd20, 8'hff); // acceptance mask 0
write_register(8'd21, 8'hff); // acceptance mask 1
write_register(8'd22, 8'hff); // acceptance mask 2
write_register(8'd23, 8'hff); // acceptance mask 3
 
write_register2(8'd16, 8'ha6); // acceptance code 0
write_register2(8'd17, 8'hb0); // acceptance code 1
write_register2(8'd18, 8'h12); // acceptance code 2
write_register2(8'd19, 8'h30); // acceptance code 3
write_register2(8'd20, 8'hff); // acceptance mask 0
write_register2(8'd21, 8'hff); // acceptance mask 1
write_register2(8'd22, 8'hff); // acceptance mask 2
write_register2(8'd23, 8'hff); // acceptance mask 3
*/
 
// Set Acceptance Code and Acceptance Mask registers
394,6 → 463,7
// Switch-off reset mode
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
write_register2(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
 
repeat (BRP) @ (posedge clk); // At least BRP clocks needed before bus goes to dominant level. Otherwise 1 quant difference is possible
// This difference is resynchronized later.
401,15 → 471,16
// After exiting the reset mode sending bus free
repeat (11) send_bit(1);
 
test_synchronization; // test currently switched off
// test_synchronization; // test currently switched off
// test_empty_fifo_ext; // test currently switched off
// test_full_fifo_ext; // test currently switched off
// send_frame_ext; // test currently switched off
// test_empty_fifo; // test currently switched off
// test_full_fifo; // test currently switched on
test_full_fifo; // test currently switched off
// test_reset_mode; // test currently switched off
// bus_off_test; // test currently switched off
// forced_bus_off; // test currently switched off
// send_frame_basic; // test currently switched off
// send_frame_basic; // test currently switched on
// send_frame_extended; // test currently switched off
// self_reception_request; // test currently switched off
// manual_frame_basic; // test currently switched off
469,14 → 540,14
repeat (100) @ (posedge clk);
// Switch-off reset mode
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
// write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
write_register(8'd0, 8'h1e); // reset_off, all irqs enabled.
 
// After exiting the reset mode sending bus free
repeat (11) send_bit(1);
 
 
write_register(8'd10, 8'h55); // Writing ID[10:3] = 0x55
write_register(8'd11, 8'h57); // Writing ID[2:0] = 0x2, rtr = 1, length = 7
write_register(8'd11, 8'h77); // Writing ID[2:0] = 0x3, rtr = 1, length = 7
write_register(8'd12, 8'h00); // data byte 1
write_register(8'd13, 8'h00); // data byte 2
write_register(8'd14, 8'h00); // data byte 3
486,16 → 557,17
write_register(8'd18, 8'h00); // data byte 7
write_register(8'd19, 8'h00); // data byte 8
 
tx_bypassed = 1; // When this signal is on, tx is not looped back to the rx.
tx_bypassed = 0; // When this signal is on, tx is not looped back to the rx.
 
fork
begin
// tx_request_command;
self_reception_request_command;
tx_request_command;
// self_reception_request_command;
end
 
begin
#2200;
#931;
 
 
repeat (1)
511,7 → 583,7
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(0); // ID arbi lost
send_bit(1); // RTR
send_bit(0); // IDE
send_bit(0); // r0
549,6 → 621,55
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
#400;
 
send_bit(0); // SOF
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(1); // ID
send_bit(1); // RTR
send_bit(0); // IDE
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 6
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 0
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 5
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(0); // CRC b
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
end // repeat
 
 
563,10 → 684,191
read_receive_buffer;
release_rx_buffer_command;
 
#1000 read_register(8'd3);
read_receive_buffer;
release_rx_buffer_command;
read_receive_buffer;
 
// First we receive a msg
send_bit(0); // SOF
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(1); // ID
send_bit(1); // RTR
send_bit(0); // IDE
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 6
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 0
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 5
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(0); // CRC b
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
 
 
 
 
 
fork
begin
tx_request_command;
// self_reception_request_command;
end
 
begin
#931;
 
 
repeat (1)
begin
send_bit(0); // SOF
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID arbi lost
send_bit(1); // RTR
send_bit(0); // IDE
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 6
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 0
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 5
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(0); // CRC b
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
#6000;
 
send_bit(0); // SOF
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(1); // ID
send_bit(1); // RTR
send_bit(0); // IDE
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 6
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 0
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 5
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(0); // CRC b
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
end // repeat
 
 
 
end
join
 
 
 
read_receive_buffer;
release_rx_buffer_command;
 
#1000 read_register(8'd3);
read_receive_buffer;
release_rx_buffer_command;
read_receive_buffer;
 
#4000000;
 
end
633,7 → 935,7
end
 
begin
#2400;
#771;
 
repeat (1)
begin
667,8 → 969,77
send_bit(0); // ID a
send_bit(1); // ID 1
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(0); // ID 5 // Force arbitration lost
send_bit(1); // RTR
send_bit(0); // r1
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 6
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(1); // CRC f
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC 2
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(1); // CRC
send_bit(0); // CRC a
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
#80;
send_bit(0); // SOF
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID a
send_bit(0); // ID
send_bit(1); // ID
send_bit(1); // ID
send_bit(0); // ID 6
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID
send_bit(1); // RTR
send_bit(1); // IDE
send_bit(0); // ID 0
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID 0
send_bit(1); // ID stuff
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID 6
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID a
send_bit(1); // ID 1
send_bit(0); // ID
send_bit(0); // ID // Force arbitration lost
send_bit(0); // ID
send_bit(1); // ID 5
send_bit(1); // RTR
send_bit(0); // r1
677,8 → 1048,79
send_bit(1); // DLC
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 0
send_bit(0); // CRC
send_bit(0); // CRC
send_bit(1); // CRC stuff
send_bit(0); // CRC
send_bit(0); // CRC 0
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(0); // CRC e
send_bit(1); // CRC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC c
send_bit(1); // CRC DELIM
send_bit(0); // ACK
send_bit(1); // ACK DELIM
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // EOF
send_bit(1); // INTER
send_bit(1); // INTER
send_bit(1); // INTER
 
#80;
send_bit(0); // SOF
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID a
send_bit(0); // ID
send_bit(1); // ID
send_bit(1); // ID
send_bit(0); // ID 6
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID
send_bit(1); // RTR
send_bit(1); // IDE
send_bit(0); // ID 0
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID
send_bit(0); // ID 0
send_bit(1); // ID stuff
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID 6
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID a
send_bit(1); // ID 1
send_bit(0); // ID
send_bit(1); // ID
send_bit(0); // ID
send_bit(1); // ID 5
send_bit(1); // RTR
send_bit(0); // r1
send_bit(0); // r0
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(0); // DLC
send_bit(1); // DLC
send_bit(1); // CRC
send_bit(0); // CRC
send_bit(0); // CRC 4
send_bit(1); // CRC
send_bit(1); // CRC
1036,8 → 1478,8
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h2, 15'h2da1); // mode, rtr, id, length, crc
receive_frame(0, 0, {26'h00000ee, 3'h1}, 4'h0, 15'h6cea); // mode, rtr, id, length, crc
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h2, 15'h2da1); // mode, rtr, id, length, crc
receive_frame(0, 0, {26'h00000ee, 3'h1}, 4'h2, 15'h7b4a); // mode, rtr, id, length, crc
receive_frame(0, 0, {26'h00000ee, 3'h1}, 4'h1, 15'h00c5); // mode, rtr, id, length, crc
receive_frame(0, 0, {26'h00000ee, 3'h1}, 4'h2, 15'h7b4a); // mode, rtr, id, length, crc
end
 
begin
1092,10 → 1534,12
 
// Switch-on reset mode
write_register(8'd0, {7'h0, (`CAN_MODE_RESET)});
write_register2(8'd0, {7'h0, (`CAN_MODE_RESET)});
// Set Clock Divider register
extended_mode = 1'b1;
write_register(8'd31, {extended_mode, 7'h0}); // Setting the extended mode
write_register2(8'd31, {extended_mode, 7'h0}); // Setting the extended mode
// Set Acceptance Code and Acceptance Mask registers
write_register(8'd16, 8'ha6); // acceptance code 0
1107,8 → 1551,18
write_register(8'd22, 8'h00); // acceptance mask 2
write_register(8'd23, 8'h00); // acceptance mask 3
 
write_register2(8'd16, 8'ha6); // acceptance code 0
write_register2(8'd17, 8'hb0); // acceptance code 1
write_register2(8'd18, 8'h12); // acceptance code 2
write_register2(8'd19, 8'h30); // acceptance code 3
write_register2(8'd20, 8'h00); // acceptance mask 0
write_register2(8'd21, 8'h00); // acceptance mask 1
write_register2(8'd22, 8'h00); // acceptance mask 2
write_register2(8'd23, 8'h00); // acceptance mask 3
 
// Switch-off reset mode
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
write_register2(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
 
// After exiting the reset mode sending bus free
repeat (11) send_bit(1);
1138,6 → 1592,11
write_register(8'd18, 8'h00); // ID[20:13] = 00
write_register(8'd19, 8'h5a); // ID[12:5] = 5a
write_register(8'd20, 8'ha8); // ID[4:0] = 15
write_register2(8'd16, 8'hc5); // Frame format = 1, Remote transmision request = 1, DLC = 5
write_register2(8'd17, 8'ha6); // ID[28:21] = a6
write_register2(8'd18, 8'h00); // ID[20:13] = 00
write_register2(8'd19, 8'h5a); // ID[12:5] = 5a
write_register2(8'd20, 8'ha8); // ID[4:0] = 15
// write_register(8'd21, 8'h78); RTR does not send any data
// write_register(8'd22, 8'h9a);
// write_register(8'd23, 8'hbc);
1150,11 → 1609,12
 
// Enabling IRQ's (extended mode)
write_register(8'd4, 8'hff);
write_register2(8'd4, 8'hff);
 
 
fork
begin
#2700;
#1251;
$display("\n\nStart receiving data from CAN bus");
/* Standard frame format
receive_frame(0, 0, {26'h00000a0, 3'h1}, 4'h1, 15'h2d9c); // mode, rtr, id, length, crc
1165,7 → 1625,7
*/
 
// Extended frame format
receive_frame(1, 0, {8'ha6, 8'h00, 8'h5a, 5'h15}, 4'h1, 15'h2d22); // mode, rtr, id, length, crc
receive_frame(1, 0, {8'ha6, 8'h00, 8'h5a, 5'h14}, 4'h1, 15'h1528); // mode, rtr, id, length, crc
receive_frame(1, 0, {8'ha6, 8'h00, 8'h5a, 5'h15}, 4'h2, 15'h3d2d); // mode, rtr, id, length, crc
receive_frame(1, 0, {8'ha6, 8'h00, 8'h5a, 5'h15}, 4'h0, 15'h23aa); // mode, rtr, id, length, crc
receive_frame(1, 0, {8'ha6, 8'h00, 8'h5a, 5'h15}, 4'h1, 15'h2d22); // mode, rtr, id, length, crc
1226,6 → 1686,19
 
end
 
begin
# 344000;
 
// Switch-on reset mode
$display("expect: SW reset ON\n");
write_register(8'd0, {7'h0, (`CAN_MODE_RESET)});
 
#40000;
// Switch-off reset mode
$display("expect: SW reset OFF\n");
write_register(8'd0, {7'h0, (~`CAN_MODE_RESET)});
end
 
join
 
read_receive_buffer;
1422,7 → 1895,8
begin
 
// Enable irqs (basic mode)
write_register(8'd0, 8'h1e);
// write_register(8'd0, 8'h1e);
write_register(8'd0, 8'h10); // enable only overrun irq
 
$display("\n\n");
 
1447,23 → 1921,37
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h8, 15'h70e0); // mode, rtr, id, length, crc
fifo_info;
$display("FIFO should be full now");
$display("2 packets won't be received because of the overrun. IRQ should be set");
 
// Following one is accepted with overrun
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h8, 15'h70e0); // mode, rtr, id, length, crc
fifo_info;
 
// Following one is accepted with overrun
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h8, 15'h70e0); // mode, rtr, id, length, crc
fifo_info;
 
$display("Now we'll release 1 packet.");
release_rx_buffer_command;
fifo_info;
 
// Space just enough for the following frame.
$display("Getting 1 small packet (just big enough). Fifo is full again");
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h0, 15'h2372); // mode, rtr, id, length, crc
fifo_info;
 
// Following accepted with overrun
$display("1 packets won't be received because of the overrun. IRQ should be set");
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h8, 15'h70e0); // mode, rtr, id, length, crc
fifo_info;
 
// Following accepted with overrun
$display("1 packets won't be received because of the overrun. IRQ should be set");
receive_frame(0, 0, {26'h00000e8, 3'h1}, 4'h8, 15'h70e0); // mode, rtr, id, length, crc
fifo_info;
// read_overrun_info(0, 15);
 
$display("Releasing 3 packets.");
release_rx_buffer_command;
release_rx_buffer_command;
 
1611,7 → 2099,132
endtask
 
 
task test_reset_mode;
begin
release_rx_buffer_command;
$display("\n\n");
read_receive_buffer;
fifo_info;
$display("expect: Until now no data was received\n");
 
receive_frame(1, 0, 29'h14d60246, 4'h0, 15'h6f54); // mode, rtr, id, length, crc
receive_frame(1, 0, 29'h14d60246, 4'h1, 15'h6d38); // mode, rtr, id, length, crc
receive_frame(1, 0, 29'h14d60246, 4'h2, 15'h053e); // mode, rtr, id, length, crc
 
fifo_info;
read_receive_buffer;
$display("expect: 3 packets should be received (totally 18 bytes)\n");
 
release_rx_buffer_command;
fifo_info;
read_receive_buffer;
$display("expect: 2 packets should be received (totally 13 bytes)\n");
 
 
$display("expect: SW reset performed\n");
 
// Switch-on reset mode
write_register(8'd0, {7'h0, `CAN_MODE_RESET});
 
// Switch-off reset mode
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
 
fifo_info;
read_receive_buffer;
$display("expect: The above read was after the SW reset.\n");
 
receive_frame(1, 0, 29'h14d60246, 4'h3, 15'h5262); // mode, rtr, id, length, crc
fifo_info;
read_receive_buffer;
$display("expect: 1 packets should be received (totally 8 bytes). See above.\n");
 
// Switch-on reset mode
$display("expect: SW reset ON\n");
write_register(8'd0, {7'h0, `CAN_MODE_RESET});
 
receive_frame(1, 0, 29'h14d60246, 4'h5, 15'h4d7d); // mode, rtr, id, length, crc
 
fifo_info;
read_receive_buffer;
$display("expect: 0 packets should be received because we are in reset. (totally 0 bytes). See above.\n");
 
/*
fork
begin
receive_frame(1, 0, 29'h14d60246, 4'h4, 15'h4bba); // mode, rtr, id, length, crc
end
begin
// Switch-on reset mode
write_register(8'd0, {7'h0, `CAN_MODE_RESET});
 
// Switch-off reset mode
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
 
 
end
join
*/
 
 
 
 
fifo_info;
receive_frame(1, 0, 29'h14d60246, 4'h5, 15'h4d7d); // mode, rtr, id, length, crc
fifo_info;
receive_frame(1, 0, 29'h14d60246, 4'h6, 15'h6f40); // mode, rtr, id, length, crc
fifo_info;
receive_frame(1, 0, 29'h14d60246, 4'h7, 15'h1730); // mode, rtr, id, length, crc
fifo_info;
// read_overrun_info(0, 10);
 
release_rx_buffer_command;
release_rx_buffer_command;
fifo_info;
 
 
 
// Switch-off reset mode
$display("expect: SW reset OFF\n");
write_register(8'd0, {7'h0, (~`CAN_MODE_RESET)});
 
receive_frame(1, 0, 29'h14d60246, 4'h8, 15'h2f7a); // mode, rtr, id, length, crc
fifo_info;
read_receive_buffer;
$display("expect: 1 packets should be received (totally 13 bytes). See above.\n");
 
release_rx_buffer_command;
fifo_info;
read_receive_buffer;
$display("expect: 0 packets should be received (totally 0 bytes). See above.\n");
$display("\n\n");
 
 
fork
receive_frame(1, 0, 29'h14d60246, 4'h5, 15'h4d7d); // mode, rtr, id, length, crc
 
begin
#8000;
// Switch-off reset mode
$display("expect: SW reset ON while receiving a packet\n");
write_register(8'd0, {7'h0, `CAN_MODE_RESET});
end
join
 
 
read_receive_buffer;
fifo_info;
$display("expect: 0 packets should be received (totally 0 bytes) because CAN was in reset. See above.\n");
 
release_rx_buffer_command;
read_receive_buffer;
fifo_info;
 
end
endtask // test_reset_mode
 
 
/*
task initialize_fifo;
integer i;
begin
1762,6 → 2375,115
endtask
 
 
task read_register2;
input [7:0] reg_addr;
 
`ifdef CAN_WISHBONE_IF
begin
wait (wb_free);
wb_free = 0;
@ (posedge wb_clk_i);
#1;
cs_can = 1;
wb_adr_i = reg_addr;
wb_cyc_i = 1;
wb_stb_i = 1;
wb_we_i = 0;
wait (wb_ack_o);
$display("(%0t) Reading register [%0d] = 0x%0x", $time, wb_adr_i, wb_dat_o);
@ (posedge wb_clk_i);
#1;
wb_adr_i = 'hz;
wb_cyc_i = 0;
wb_stb_i = 0;
wb_we_i = 'hz;
cs_can = 0;
wb_free = 1;
end
`else
begin
wait (port_free);
port_free = 0;
@ (posedge clk);
#1;
cs_can2 = 1;
@ (negedge clk);
#1;
ale2_i = 1;
port_0_en = 1;
port_0_o = reg_addr;
@ (negedge clk);
#1;
ale2_i = 0;
#90; // 73 - 103 ns
port_0_en = 0;
rd2_i = 1;
#158;
$display("(%0t) Reading register [%0d] = 0x%0x", $time, can_testbench.i_can_top.addr_latched, port_0_i);
#1;
rd2_i = 0;
cs_can2 = 0;
port_free = 1;
end
`endif
endtask
 
 
task write_register2;
input [7:0] reg_addr;
input [7:0] reg_data;
 
`ifdef CAN_WISHBONE_IF
begin
wait (wb_free);
wb_free = 0;
@ (posedge wb_clk_i);
#1;
cs_can = 1;
wb_adr_i = reg_addr;
wb_dat_i = reg_data;
wb_cyc_i = 1;
wb_stb_i = 1;
wb_we_i = 1;
wait (wb_ack_o);
@ (posedge wb_clk_i);
#1;
wb_adr_i = 'hz;
wb_dat_i = 'hz;
wb_cyc_i = 0;
wb_stb_i = 0;
wb_we_i = 'hz;
cs_can = 0;
wb_free = 1;
end
`else
begin
wait (port_free);
port_free = 0;
@ (posedge clk);
#1;
cs_can2 = 1;
@ (negedge clk);
#1;
ale2_i = 1;
port_0_en = 1;
port_0_o = reg_addr;
@ (negedge clk);
#1;
ale2_i = 0;
#90; // 73 - 103 ns
port_0_o = reg_data;
wr2_i = 1;
#158;
wr2_i = 0;
port_0_en = 0;
cs_can2 = 0;
port_free = 1;
end
`endif
endtask
 
 
task read_receive_buffer;
integer i;
begin
1770,15 → 2492,15
begin
for (i=8'd16; i<=8'd28; i=i+1)
read_register(i);
if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
$display("\nWARNING: Above packet was received with overrun.");
//if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
// $display("\nWARNING: Above packet was received with overrun.");
end
else
begin
for (i=8'd20; i<=8'd29; i=i+1)
read_register(i);
if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
$display("\nWARNING: Above packet was received with overrun.");
//if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
// $display("\nWARNING: Above packet was received with overrun.");
end
end
endtask

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.