URL
https://opencores.org/ocsvn/ha1588/ha1588/trunk
Subversion Repositories ha1588
Compare Revisions
- This comparison shows the changes necessary to convert path
/ha1588/trunk/sim
- from Rev 35 to Rev 36
- ↔ Reverse comparison
Rev 35 → Rev 36
/tsu/gmii_rx_bfm.v
35,7 → 35,7
end |
assign #2 gmii_rxclk = gmii_rxclk_offset; |
|
integer feeder_file_rx, r_rx; |
integer feeder_file_rx, r_rx, s_rx; |
integer start_addr_rx, end_addr_rx; |
integer index_rx, num_rx; |
reg eof_rx; |
59,9 → 59,9
// test pcap file endian |
r_rx = $fread(pcap_4bytes_rx, feeder_file_rx); |
pcap_endian_rx = (pcap_4bytes_rx == 32'ha1b2c3d4)? 1:0; |
$fseek(feeder_file_rx, -4, 1); |
s_rx = $fseek(feeder_file_rx, -4, 1); |
// skip pcap file header 24*8 |
$fseek(feeder_file_rx, 24, 1); |
s_rx = $fseek(feeder_file_rx, 24, 1); |
// read packet content |
eof_rx = 0; |
num_rx = 0; |
69,7 → 69,7
begin : fileread_loop |
// skip frame header (8+4)*8 |
start_addr_rx = $ftell(feeder_file_rx); |
$fseek(feeder_file_rx, 8+4, 1); |
s_rx = $fseek(feeder_file_rx, 8+4, 1); |
// get frame length big endian 4*8 |
r_rx = $fread(packet_leng_rx, feeder_file_rx); |
packet_leng_rx = pcap_endian_rx? |
/tsu/ptpdv2_rx.txt
0,0 → 1,83
5 |
20 |
25 |
27 |
29 |
36 |
43 |
53 |
62 |
63 |
71 |
74 |
80 |
87 |
88 |
91 |
101 |
103 |
107 |
118 |
119 |
120 |
128 |
141 |
146 |
152 |
159 |
166 |
167 |
170 |
171 |
184 |
195 |
197 |
198 |
200 |
202 |
212 |
214 |
221 |
234 |
236 |
256 |
261 |
268 |
278 |
287 |
290 |
317 |
341 |
385 |
386 |
388 |
389 |
390 |
391 |
393 |
394 |
395 |
396 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
413 |
414 |
415 |
416 |
418 |
419 |
420 |
421 |
422 |
/tsu/gmii_tx_bfm.v
35,7 → 35,7
end |
assign #2 gmii_txclk = gmii_txclk_offset; |
|
integer feeder_file_tx, r_tx; |
integer feeder_file_tx, r_tx, s_tx; |
integer start_addr_tx, end_addr_tx; |
integer index_tx, num_tx; |
reg eof_tx; |
59,9 → 59,9
// test pcap file endian |
r_tx = $fread(pcap_4bytes_tx, feeder_file_tx); |
pcap_endian_tx = (pcap_4bytes_tx == 32'ha1b2c3d4)? 1:0; |
$fseek(feeder_file_tx, -4, 1); |
s_tx = $fseek(feeder_file_tx, -4, 1); |
// skip pcap file header 24*8 |
$fseek(feeder_file_tx, 24, 1); |
s_tx = $fseek(feeder_file_tx, 24, 1); |
// read packet content |
eof_tx = 0; |
num_tx = 0; |
69,7 → 69,7
begin : fileread_loop |
// skip frame header (8+4)*8 |
start_addr_tx = $ftell(feeder_file_tx); |
$fseek(feeder_file_tx, 8+4, 1); |
s_tx = $fseek(feeder_file_tx, 8+4, 1); |
// get frame length big endian 4*8 |
r_tx = $fread(packet_leng_tx, feeder_file_tx); |
packet_leng_tx = pcap_endian_tx? |
/tsu/tsu_queue_tb.v
45,12 → 45,6
rst = 1'b0; |
#10 rst = 1'b1; |
#20 rst = 1'b0; |
|
fork |
@(posedge BFM_RX.eof_rx); |
@(posedge BFM_TX.eof_tx); |
join |
#100 $stop; |
end |
|
initial begin |
119,23 → 113,61
.gmii_txdata(gmii_txdata) |
); |
|
integer rx_ptp_event_cnt; |
integer rx_ptp_event_cnt, rx_ptp_mismatch_cnt; |
integer ref_file_handle_rx, return_fscanf_rx, ref_num_rx; |
initial begin |
rx_ptp_event_cnt = 0; |
rx_ptp_event_cnt = 0; |
rx_ptp_mismatch_cnt = 0; |
ref_file_handle_rx = $fopen("ptpdv2_rx.txt","r"); |
forever @(posedge DUT_RX.q_wr_en) begin |
rx_ptp_event_cnt = rx_ptp_event_cnt + 1; |
$display("%d", BFM_RX.num_rx); |
return_fscanf_rx = $fscanf(ref_file_handle_rx, "%d", ref_num_rx); |
if (BFM_RX.num_rx != ref_num_rx) begin |
$warning("%d %d", BFM_RX.num_rx, ref_num_rx); |
rx_ptp_mismatch_cnt = rx_ptp_mismatch_cnt + 1; |
end |
end |
$fclose(ref_file_handle_rx); |
end |
|
integer tx_ptp_event_cnt; |
integer tx_ptp_event_cnt, tx_ptp_mismatch_cnt; |
integer ref_file_handle_tx, return_fscanf_tx, ref_num_tx; |
initial begin |
tx_ptp_event_cnt = 0; |
tx_ptp_event_cnt = 0; |
tx_ptp_mismatch_cnt = 0; |
ref_file_handle_tx = $fopen("ptpdv2_tx.txt","r"); |
forever @(posedge DUT_TX.q_wr_en) begin |
tx_ptp_event_cnt = tx_ptp_event_cnt + 1; |
//$display("%d", BFM_TX.num_tx); |
return_fscanf_tx = $fscanf(ref_file_handle_tx, "%d", ref_num_tx); |
if (BFM_TX.num_tx != ref_num_tx) begin |
$warning("%d %d", BFM_TX.num_tx, ref_num_tx); |
tx_ptp_mismatch_cnt = tx_ptp_mismatch_cnt + 1; |
end |
end |
$fclose(ref_file_handle_tx); |
end |
|
initial begin |
fork |
@(posedge BFM_RX.eof_rx); |
@(posedge BFM_TX.eof_tx); |
join |
|
if (rx_ptp_event_cnt == 0) |
$display("RX Parser Test Fail: found 0 PTP-EVENT!"); |
|
if (tx_ptp_event_cnt == 0) |
$display("TX Parser Test Fail: found 0 PTP-EVENT!"); |
|
if (rx_ptp_mismatch_cnt > 0) |
$display("Rx Parser Mismatch Found: RX-PTP-EVENT-MISMATCH = %d", rx_ptp_mismatch_cnt); |
else if (tx_ptp_mismatch_cnt > 0) |
$display("Tx Parser Mismatch Found: TX-PTP-EVENT-MISMATCH = %d", tx_ptp_mismatch_cnt); |
else |
$display("RX and TX Parser Test Pass:\n RX-PTP-EVENT = %d\n TX-PTP-EVENT = %d", rx_ptp_event_cnt, tx_ptp_event_cnt); |
|
#100 $stop; |
end |
|
endmodule |
|
/tsu/ptpdv2_tx.txt
0,0 → 1,21
5 |
7 |
9 |
11 |
17 |
19 |
21 |
27 |
29 |
31 |
37 |
39 |
41 |
47 |
49 |
51 |
57 |
59 |
61 |
67 |
69 |
/tsu/ReadMe.txt
0,0 → 1,9
This folder contains testbench for TSU module. |
|
The PCAP files are read by the BFM to generate stimulus to the GMII interface. |
The PCAP files can be filtered by "ptp.v2.messageid == 0x00 || ptp.v2.messageid == 0x02" and exported to TXT files as golden references. |
|
The TX and RX TSU outputs are monitored and compared to the respective golden reference for the parser validation. |
Any mismatch will be reported as Warning in the transcript. |
|
When PCAP files are updated, the TXT files should be updated accordingly. |