目录
本篇文章中,主要工作为搭建基于SV的同步FIFO验证环境。个人觉得对于FIFO这类简单模块使用UVM来搭建比使用SV来搭建难度更高。基于总线协议的UVM环境使用起来更加顺手。
1.SV环境架构
基础环境组件:
- FIFO_drv
- FIFO_mon
- FIFO_top (rtl只有一个sv文件,top层可有可无)
- FIFO_if
- base_test_env
- base_test_top
1.FIFO_drv:drv组件主要进行数据的驱动任务,在其中定义两个任务,分别为WRITE与READ,分别进行写入数据和读出数据的驱动。
2.FIFO_mon:mon组件主要进行数据的比对工作。
3.FIFO_if:interface接口文件。
4.base_test_env:例化drv与mon组件。
5.base_test_top:连接接口与RTL,并定义时钟信息。
整体架构可以理解为:对DUT进行操作的命令通过drv组件驱动进入DUT,例如驱动DUT写入FIFO时,调用WRITE任务,将write_en置高,使数据能够成功写入;需要拿到读出的数据data_out时,调用drv组件的READ任务,将read_en置高,使数据能够成功读出;并且通过接口数据实时检测empty和full信号,写满时通过drv将write_en拉低,读空时通过drv将read_en拉低;读出的数据给到mon组件与写入数据进行比对,不相符的时候,说明DUT的设计可能存在问题。
2.部分代码实现
FIFO_drv 上文提到,FIFO_drv组件主要做命令的驱动,从test测试用例中直接调用driver中的任务,可直接使DUT进行相关操作。相关task任务有两个。
write
task write(int data);
if.data_in <= data;//写入数据data
if.write_en <= 1'b1;//写使能有效
do @(posedge if.clock); while (if.full);
if.write_en <= 1'b0;//写满后写使能信号拉低。停止写入
endtask
read
task read(output int data);
if.read_en <= 1'b1;//读使能有效
do @(posedge vif.clock); while (if.empty);
vif.input_cb.read_en <= 1'b0;//mem空后,拉低读使能
endtask
FIFO_mon 比对逻辑与UVM中scoreboard类似,声明一个队列,存储写入的data。每读出一个数据,就从写入数据队列中弹出比对一个,保证读写数据两两相对,一旦发生错位情况所有的数据都会出现比对不通过的情况。写法有很多种,例如:
//数据比对逻辑
task check:
int data_write_for_check, data_read;
forever begin
@(posedge (if.clock && if.read_en && !if.empty));//读使能有效并且非空
data_write_for_check = data_exp.pop_front();//data[$],弹出写入data
data_read = if.data_out;//read_en有效时读出数据与从data[&]弹出的数据进行比对
if (data_write_for_check != data_read) begin
$display("ERROR: data mismatch at %t",$time());
$display("write data is %x, read data is %x",data_write_for_check,data_read);
end
end
endtask
base_test_env 进行drv和mon组件的例化工作。代码略
base_test_top 例化与clock时钟声明,代码略
rtl 略
3.运行结果与讨论
test_case编写 可以采用多种不同的写入读出速率对DUT进行测试。编写时,注意整个仿真过程的结束时间,并且写快读慢的情况下,对drv组件中read任务的调取次数要增多,以保证写入数据全部被读出。
使用$random随机产生写入数据。
情况1:写慢读快
写慢读快情况下,运行结果如下,重复1000次1/3概率写入,并2/3概率读出。以概率的方式进行读写时,必须运行足够多的次数才能接近实际值。
INFO: data write:bd @ 450000
INFO: read data:000000bd @ 470000
INFO: data write:0a @ 810000
INFO: read data:0000000a @ 830000
INFO: data write:41 @ 870000
INFO: data write:89 @ 890000
INFO: read data:00000041 @ 890000
INFO: read data:00000089 @ 910000
INFO: data write:0b @ 970000
INFO: read data:0000000b @ 990000
INFO: data write:4f @ 1010000
INFO: read data:0000004f @ 1030000
INFO: data write:f8 @ 1170000
INFO: read data:000000f8 @ 1190000
INFO: data write:49 @ 1250000
INFO: read data:00000049 @ 1270000
INFO: data write:0c @ 1310000
INFO: read data:0000000c @ 1330000
INFO: data write:39 @ 1430000
INFO: read data:00000039 @ 1450000
INFO: data write:49 @ 1510000
INFO: read data:00000049 @ 1530000
INFO: data write:26 @ 1630000
INFO: read data:00000026 @ 1650000
INFO: data write:ed @ 1830000
INFO: read data:000000ed @ 1850000
INFO: data write:ab @ 1970000
INFO: read data:000000ab @ 1990000
INFO: data write:9a @ 2010000
INFO: read data:0000009a @ 2030000
INFO: data write:4e @ 2050000
INFO: read data:0000004e @ 2070000
INFO: data write:38 @ 2090000
INFO: read data:00000038 @ 2110000
INFO: data write:95 @ 2310000
INFO: read data:00000095 @ 2330000
INFO: data write:2d @ 2410000
INFO: read data:0000002d @ 2430000
INFO: data write:fd @ 2470000
INFO: read data:000000fd @ 2490000
INFO: data write:70 @ 2570000
INFO: read data:00000070 @ 2590000
INFO: data write:5e @ 2610000
INFO: read data:0000005e @ 2630000
INFO: data write:96 @ 2670000
INFO: read data:00000096 @ 2690000
INFO: data write:86 @ 2750000
INFO: read data:00000086 @ 2770000
INFO: data write:db @ 2790000
INFO: data write:fa @ 2810000
INFO: read data:000000db @ 2810000
INFO: read data:000000fa @ 2850000
INFO: data write:73 @ 2970000
INFO: read data:00000073 @ 2990000
INFO: data write:8d @ 3170000
INFO: read data:0000008d @ 3190000
INFO: data write:13 @ 3250000
INFO: data write:c7 @ 3270000
INFO: read data:00000013 @ 3270000
INFO: read data:000000c7 @ 3290000
INFO: data write:e4 @ 3490000
INFO: read data:000000e4 @ 3510000
INFO: data write:a1 @ 3530000
INFO: read data:000000a1 @ 3550000
INFO: data write:ae @ 3690000
INFO: read data:000000ae @ 3710000
INFO: data write:28 @ 3730000
INFO: read data:00000028 @ 3750000
INFO: data write:ec @ 3790000
INFO: read data:000000ec @ 3810000
INFO: data write:53 @ 3890000
INFO: read data:00000053 @ 3910000
INFO: data write:d8 @ 3970000
INFO: read data:000000d8 @ 3990000
INFO: data write:96 @ 4210000
INFO: data write:12 @ 4230000
INFO: read data:00000096 @ 4230000
INFO: read data:00000012 @ 4250000
INFO: data write:7c @ 4610000
INFO: read data:0000007c @ 4630000
INFO: data write:f0 @ 4690000
INFO: read data:000000f0 @ 4710000
INFO: data write:28 @ 4730000
INFO: data write:74 @ 4750000
INFO: read data:00000028 @ 4750000
INFO: read data:00000074 @ 4770000
INFO: data write:e1 @ 4830000
INFO: read data:000000e1 @ 4850000
INFO: data write:8d @ 4930000
INFO: read data:0000008d @ 4950000
INFO: data write:2c @ 4970000
INFO: read data:0000002c @ 4990000
INFO: data write:44 @ 5410000
INFO: read data:00000044 @ 5430000
INFO: data write:f8 @ 5470000
INFO: data write:52 @ 5490000
INFO: read data:000000f8 @ 5490000
INFO: data write:6a @ 5550000
INFO: read data:00000052 @ 5550000
INFO: read data:0000006a @ 5570000
INFO: data write:a4 @ 6090000
INFO: read data:000000a4 @ 6110000
INFO: data write:9d @ 6170000
INFO: data write:82 @ 6190000
INFO: read data:0000009d @ 6190000
INFO: read data:00000082 @ 6210000
INFO: data write:2a @ 6270000
INFO: read data:0000002a @ 6290000
INFO: data write:12 @ 6370000
INFO: read data:00000012 @ 6390000
INFO: data write:db @ 6450000
INFO: read data:000000db @ 6470000
INFO: data write:c5 @ 6570000
INFO: data write:90 @ 6590000
INFO: read data:000000c5 @ 6590000
INFO: read data:00000090 @ 6610000
INFO: data write:c4 @ 6670000
INFO: read data:000000c4 @ 6690000
INFO: data write:07 @ 6790000
INFO: read data:00000007 @ 6810000
INFO: data write:8b @ 6830000
INFO: read data:0000008b @ 6850000
INFO: data write:c5 @ 6870000
INFO: read data:000000c5 @ 6890000
INFO: data write:e5 @ 7050000
INFO: read data:000000e5 @ 7070000
INFO: data write:d5 @ 7150000
INFO: read data:000000d5 @ 7170000
INFO: data write:a9 @ 7310000
INFO: data write:5b @ 7330000
INFO: read data:000000a9 @ 7330000
INFO: read data:0000005b @ 7350000
INFO: data write:13 @ 7370000
INFO: read data:00000013 @ 7390000
INFO: data write:e4 @ 7470000
INFO: read data:000000e4 @ 7490000
INFO: data write:ed @ 7530000
INFO: read data:000000ed @ 7550000
INFO: data write:5c @ 7830000
INFO: read data:0000005c @ 7850000
INFO: data write:ce @ 7950000
INFO: read data:000000ce @ 7970000
INFO: data write:02 @ 8170000
INFO: read data:00000002 @ 8190000
INFO: data write:90 @ 8250000
INFO: read data:00000090 @ 8270000
INFO: data write:5d @ 8530000
INFO: read data:0000005d @ 8550000
INFO: data write:45 @ 8710000
INFO: read data:00000045 @ 8730000
INFO: data write:b9 @ 8850000
INFO: read data:000000b9 @ 8870000
INFO: data write:45 @ 8910000
INFO: read data:00000045 @ 8930000
INFO: data write:a5 @ 8990000
INFO: read data:000000a5 @ 9010000
INFO: data write:c5 @ 9130000
INFO: data write:1a @ 9150000
INFO: read data:000000c5 @ 9150000
INFO: read data:0000001a @ 9170000
INFO: data write:f2 @ 9250000
INFO: data write:6f @ 9270000
INFO: read data:000000f2 @ 9270000
INFO: read data:0000006f @ 9290000
INFO: data write:ab @ 9330000
INFO: read data:000000ab @ 9350000
INFO: data write:bc @ 9650000
INFO: read data:000000bc @ 9670000
INFO: data write:d7 @ 9910000
INFO: read data:000000d7 @ 9930000
INFO: data write:1c @ 9970000
INFO: read data:0000001c @ 9990000
INFO: data write:03 @ 10030000
INFO: read data:00000003 @ 10050000
INFO: data write:06 @ 10130000
INFO: read data:00000006 @ 10150000
INFO: data write:0f @ 10290000
INFO: read data:0000000f @ 10310000
INFO: data write:a6 @ 10330000
INFO: read data:000000a6 @ 10350000
INFO: data write:0e @ 10610000
INFO: read data:0000000e @ 10630000
INFO: data write:43 @ 10670000
INFO: read data:00000043 @ 10690000
INFO: data write:98 @ 10710000
INFO: read data:00000098 @ 10730000
INFO: data write:94 @ 10910000
INFO: read data:00000094 @ 10930000
INFO: data write:ab @ 11090000
INFO: data write:22 @ 11110000
INFO: read data:000000ab @ 11110000
INFO: read data:00000022 @ 11130000
INFO: data write:08 @ 11190000
INFO: read data:00000008 @ 11210000
INFO: data write:ea @ 11370000
INFO: read data:000000ea @ 11390000
INFO: data write:b5 @ 11490000
INFO: read data:000000b5 @ 11510000
INFO: data write:30 @ 11590000
INFO: read data:00000030 @ 11610000
INFO: data write:59 @ 11650000
INFO: read data:00000059 @ 11670000
INFO: data write:58 @ 11770000
INFO: data write:c3 @ 11790000
INFO: read data:00000058 @ 11790000
INFO: read data:000000c3 @ 11830000
INFO: data write:45 @ 11910000
INFO: read data:00000045 @ 11930000
INFO: data write:28 @ 12230000
INFO: data write:9a @ 12250000
INFO: read data:00000028 @ 12250000
INFO: read data:0000009a @ 12270000
INFO: data write:61 @ 12370000
INFO: read data:00000061 @ 12390000
INFO: data write:7e @ 12450000
INFO: read data:0000007e @ 12470000
INFO: data write:83 @ 12530000
INFO: read data:00000083 @ 12550000
INFO: data write:12 @ 12650000
INFO: read data:00000012 @ 12670000
INFO: data write:5a @ 12750000
INFO: read data:0000005a @ 12770000
INFO: data write:35 @ 13110000
INFO: data write:34 @ 13130000
INFO: read data:00000035 @ 13130000
INFO: read data:00000034 @ 13150000
INFO: data write:f8 @ 13430000
INFO: read data:000000f8 @ 13450000
INFO: data write:1e @ 13530000
INFO: read data:0000001e @ 13550000
INFO: data write:45 @ 13610000
INFO: read data:00000045 @ 13630000
INFO: data write:4a @ 13710000
INFO: read data:0000004a @ 13730000
INFO: data write:e4 @ 13750000
INFO: read data:000000e4 @ 13770000
INFO: data write:e3 @ 13790000
INFO: read data:000000e3 @ 13810000
INFO: data write:13 @ 13990000
INFO: read data:00000013 @ 14010000
INFO: data write:e6 @ 14030000
INFO: read data:000000e6 @ 14050000
INFO: data write:76 @ 14170000
INFO: read data:00000076 @ 14190000
INFO: data write:7c @ 14230000
INFO: read data:0000007c @ 14250000
INFO: data write:da @ 14290000
INFO: read data:000000da @ 14310000
INFO: data write:0d @ 14330000
INFO: data write:51 @ 14350000
INFO: read data:0000000d @ 14350000
INFO: data write:80 @ 14370000
INFO: read data:00000051 @ 14370000
INFO: read data:00000080 @ 14390000
INFO: data write:ac @ 14490000
INFO: data write:d7 @ 14510000
INFO: read data:000000ac @ 14510000
INFO: read data:000000d7 @ 14530000
INFO: data write:2f @ 14570000
INFO: data write:b7 @ 14590000
INFO: read data:0000002f @ 14590000
INFO: read data:000000b7 @ 14610000
INFO: data write:2e @ 14690000
INFO: read data:0000002e @ 14710000
INFO: data write:f0 @ 14770000
INFO: read data:000000f0 @ 14790000
INFO: data write:58 @ 14850000
INFO: read data:00000058 @ 14870000
INFO: data write:8f @ 15150000
INFO: read data:0000008f @ 15170000
INFO: data write:69 @ 15210000
INFO: read data:00000069 @ 15230000
INFO: data write:25 @ 15350000
INFO: read data:00000025 @ 15370000
INFO: data write:83 @ 15910000
INFO: read data:00000083 @ 15930000
INFO: data write:8e @ 15990000
INFO: read data:0000008e @ 16010000
INFO: data write:49 @ 16030000
INFO: data write:51 @ 16050000
INFO: read data:00000049 @ 16050000
INFO: read data:00000051 @ 16070000
INFO: data write:a2 @ 16370000
INFO: read data:000000a2 @ 16390000
INFO: data write:f1 @ 16830000
INFO: read data:000000f1 @ 16850000
INFO: data write:b4 @ 16950000
INFO: data write:64 @ 16970000
INFO: read data:000000b4 @ 16970000
INFO: data write:48 @ 16990000
INFO: read data:00000064 @ 16990000
INFO: read data:00000048 @ 17010000
INFO: data write:4f @ 17390000
INFO: read data:0000004f @ 17410000
INFO: data write:54 @ 17490000
INFO: read data:00000054 @ 17510000
INFO: data write:86 @ 17570000
INFO: read data:00000086 @ 17590000
INFO: data write:25 @ 17970000
INFO: read data:00000025 @ 17990000
INFO: data write:85 @ 18070000
INFO: read data:00000085 @ 18090000
INFO: data write:51 @ 18170000
INFO: read data:00000051 @ 18190000
INFO: data write:59 @ 18270000
INFO: read data:00000059 @ 18290000
INFO: data write:9d @ 18310000
INFO: read data:0000009d @ 18330000
INFO: data write:13 @ 18410000
INFO: read data:00000013 @ 18430000
INFO: data write:cc @ 18510000
INFO: read data:000000cc @ 18530000
INFO: data write:1e @ 18570000
INFO: data write:db @ 18590000
INFO: read data:0000001e @ 18590000
INFO: read data:000000db @ 18610000
INFO: data write:79 @ 18630000
INFO: read data:00000079 @ 18650000
INFO: data write:c0 @ 18710000
INFO: read data:000000c0 @ 18730000
INFO: data write:af @ 18870000
INFO: read data:000000af @ 18890000
INFO: data write:75 @ 18910000
INFO: read data:00000075 @ 18930000
INFO: data write:f7 @ 19370000
INFO: read data:000000f7 @ 19390000
INFO: data write:f4 @ 19430000
INFO: read data:000000f4 @ 19450000
INFO: data write:23 @ 19550000
INFO: read data:00000023 @ 19570000
从代码运行结果可以看出,基本写入一个,就能读出一个。波形图如下所示。
波形图中显示,前三个write数据被吞了,没有被读出,而且print信息也没有显示81,65,ed三个数据。通过对drv处的write task添加打印信息,发现这三个写入数据是存在的。问题是test_case中开启写和读的时间不统一,写是在reset初始化完成之前就通过drv向DUT写入信息,而读是在初始化完成之后从DUT拿读出数据。并且mon组件中的比对模块也是初始化之后开始的,所以前三个数据不会写入比对队列之中。
解决方法是将所有动作放在初始化之后进行,问题出在write命令的发出没有等初始化之后完成,忘记了添加等待语句了。时序关系在平台中是非常重要的。
更改完之后,运行结果为
INFO: data write:81 @ 210000
INFO: read data:00000081 @ 230000
INFO: data write:ed @ 350000
INFO: read data:000000ed @ 370000
INFO: data write:bd @ 610000
INFO: read data:000000bd @ 630000
INFO: data write:0a @ 970000
INFO: read data:0000000a @ 990000
INFO: data write:41 @ 1030000
INFO: data write:89 @ 1050000
INFO: read data:00000041 @ 1050000
INFO: read data:00000089 @ 1070000
INFO: data write:0b @ 1130000
INFO: read data:0000000b @ 1150000
INFO: data write:4f @ 1170000
INFO: read data:0000004f @ 1190000
81,ed,bd三个数据没有被吞了。可以正常完成写慢读快的比对。进行这种比对时,可以通过编写perl脚本直接查找error。
情况2:写快读慢
以2/3的概率写入,以1/3的概率读出。
执行结果如下:
INFO: data write:63 @ 230000
INFO: data write:12 @ 250000
INFO: read data:00000063 @ 250000
INFO: data write:76 @ 270000
INFO: data write:8c @ 290000
INFO: read data:00000012 @ 290000
INFO: data write:c5 @ 310000
INFO: data write:77 @ 330000
INFO: data write:f2 @ 350000
INFO: data write:c5 @ 370000
INFO: data write:2d @ 390000
INFO: read data:00000076 @ 390000
INFO: data write:0a @ 410000
INFO: data write:aa @ 430000
INFO: data write:13 @ 450000
INFO: data write:6b @ 470000
INFO: data write:ae @ 490000
INFO: data write:23 @ 510000
INFO: data write:3c @ 530000
INFO: read data:0000008c @ 530000
INFO: read data:000000c5 @ 550000
INFO: data write:d8 @ 570000
INFO: read data:00000077 @ 570000
INFO: data write:eb @ 590000
INFO: data write:bc @ 610000
INFO: data write:71 @ 630000
INFO: read data:000000f2 @ 630000
INFO: data write:3b @ 650000
INFO: read data:000000c5 @ 650000
INFO: data write:15 @ 670000
INFO: data write:62 @ 690000
INFO: data write:8f @ 710000
INFO: read data:0000002d @ 730000
INFO: data write:9f @ 750000
INFO: read data:0000000a @ 830000
INFO: data write:d7 @ 850000
INFO: read data:000000aa @ 950000
INFO: data write:77 @ 970000
INFO: read data:00000013 @ 970000
INFO: data write:85 @ 990000
INFO: read data:0000006b @ 1030000
INFO: data write:2a @ 1050000
INFO: read data:000000ae @ 1090000
INFO: data write:9c @ 1110000
INFO: read data:00000023 @ 1290000
INFO: data write:2f @ 1310000
INFO: read data:0000003c @ 1430000
INFO: data write:b5 @ 1450000
INFO: read data:000000d8 @ 1510000
INFO: data write:c3 @ 1530000
INFO: read data:000000eb @ 1830000
INFO: data write:b6 @ 1850000
INFO: read data:000000bc @ 1950000
INFO: data write:f7 @ 1970000
INFO: read data:00000071 @ 2010000
INFO: data write:08 @ 2030000
INFO: read data:0000003b @ 2110000
INFO: data write:86 @ 2130000
INFO: read data:00000015 @ 2230000
INFO: data write:d5 @ 2250000
INFO: read data:00000062 @ 2310000
INFO: data write:b6 @ 2330000
INFO: read data:0000008f @ 2430000
INFO: data write:79 @ 2450000
INFO: read data:0000009f @ 2590000
INFO: data write:f5 @ 2610000
INFO: read data:000000d7 @ 2790000
INFO: data write:4e @ 2810000
INFO: read data:00000077 @ 2870000
INFO: data write:79 @ 2890000
INFO: read data:00000085 @ 2910000
INFO: data write:b6 @ 2930000
INFO: read data:0000002a @ 3110000
INFO: data write:92 @ 3130000
INFO: read data:0000009c @ 3330000
INFO: data write:fb @ 3350000
INFO: read data:0000002f @ 3450000
INFO: data write:4b @ 3470000
INFO: read data:000000b5 @ 3470000
INFO: data write:86 @ 3490000
INFO: read data:000000c3 @ 3530000
INFO: data write:d8 @ 3550000
INFO: read data:000000b6 @ 3590000
INFO: data write:04 @ 3610000
INFO: read data:000000f7 @ 3830000
INFO: data write:39 @ 3850000
INFO: read data:00000008 @ 3870000
INFO: data write:96 @ 3890000
INFO: read data:00000086 @ 4230000
INFO: data write:2b @ 4250000
INFO: read data:000000d5 @ 4310000
INFO: data write:68 @ 4330000
INFO: read data:000000b6 @ 4330000
INFO: data write:b0 @ 4410000
INFO: read data:00000079 @ 4450000
INFO: data write:62 @ 4470000
INFO: read data:000000f5 @ 4550000
INFO: data write:c9 @ 4570000
INFO: read data:0000004e @ 5050000
INFO: data write:71 @ 5070000
INFO: read data:00000079 @ 5070000
INFO: data write:ed @ 5090000
INFO: read data:000000b6 @ 5110000
INFO: data write:8d @ 5130000
INFO: read data:00000092 @ 5190000
INFO: data write:84 @ 5210000
INFO: read data:000000fb @ 5730000
INFO: data write:ba @ 5750000
INFO: read data:0000004b @ 5810000
INFO: data write:df @ 5830000
INFO: read data:00000086 @ 5850000
INFO: data write:49 @ 5870000
INFO: read data:000000d8 @ 5910000
INFO: data write:93 @ 5930000
INFO: read data:00000004 @ 6010000
INFO: data write:3a @ 6030000
INFO: read data:00000039 @ 6090000
INFO: data write:d0 @ 6110000
INFO: read data:00000096 @ 6110000
INFO: data write:00 @ 6130000
INFO: read data:0000002b @ 6170000
INFO: data write:0c @ 6190000
INFO: read data:00000068 @ 6210000
INFO: data write:51 @ 6230000
INFO: read data:000000b0 @ 6270000
INFO: data write:d8 @ 6290000
INFO: read data:00000062 @ 6390000
INFO: data write:86 @ 6410000
INFO: read data:000000c9 @ 6570000
INFO: data write:c2 @ 6590000
INFO: read data:00000071 @ 6690000
INFO: data write:ef @ 6710000
INFO: read data:000000ed @ 6810000
INFO: data write:29 @ 6830000
INFO: read data:0000008d @ 6970000
INFO: data write:aa @ 6990000
INFO: read data:00000084 @ 7010000
INFO: data write:af @ 7030000
INFO: read data:000000ba @ 7050000
INFO: data write:b7 @ 7090000
INFO: read data:000000df @ 7210000
INFO: data write:62 @ 7230000
INFO: read data:00000049 @ 7510000
INFO: data write:af @ 7530000
INFO: read data:00000093 @ 7630000
INFO: data write:c8 @ 7650000
INFO: read data:0000003a @ 7850000
INFO: data write:b9 @ 7870000
INFO: read data:000000d0 @ 7870000
INFO: data write:8d @ 7890000
INFO: read data:00000000 @ 7930000
INFO: data write:4c @ 7950000
INFO: read data:0000000c @ 7950000
INFO: data write:2d @ 7990000
INFO: read data:00000051 @ 8130000
INFO: data write:30 @ 8150000
INFO: read data:000000d8 @ 8330000
INFO: data write:bc @ 8350000
INFO: read data:00000086 @ 8350000
INFO: data write:26 @ 8370000
INFO: read data:000000c2 @ 8430000
INFO: data write:90 @ 8450000
INFO: read data:000000ef @ 8450000
INFO: data write:6f @ 8470000
INFO: read data:00000029 @ 8490000
INFO: data write:8d @ 8510000
INFO: read data:000000aa @ 8550000
INFO: data write:a4 @ 8570000
INFO: read data:000000af @ 8570000
INFO: data write:58 @ 8590000
INFO: read data:000000b7 @ 8650000
INFO: data write:06 @ 8670000
INFO: read data:00000062 @ 8690000
INFO: data write:c3 @ 8710000
INFO: read data:000000af @ 8770000
INFO: data write:c3 @ 8790000
INFO: read data:000000c8 @ 8790000
INFO: data write:1b @ 8810000
INFO: read data:000000b9 @ 8810000
INFO: data write:25 @ 8830000
INFO: read data:0000008d @ 8850000
INFO: data write:1b @ 8870000
INFO: read data:0000004c @ 9130000
INFO: data write:04 @ 9150000
INFO: read data:0000002d @ 9390000
INFO: data write:c1 @ 9410000
INFO: read data:00000030 @ 9450000
INFO: data write:cd @ 9470000
INFO: read data:000000bc @ 9470000
INFO: data write:2a @ 9490000
INFO: read data:00000026 @ 9610000
INFO: data write:fd @ 9630000
INFO: read data:00000090 @ 9770000
INFO: data write:c5 @ 9790000
INFO: read data:0000006f @ 10110000
INFO: data write:cb @ 10130000
INFO: read data:0000008d @ 10170000
INFO: data write:d0 @ 10190000
INFO: read data:000000a4 @ 10190000
INFO: data write:53 @ 10210000
INFO: read data:00000058 @ 10430000
INFO: data write:87 @ 10450000
INFO: read data:00000006 @ 10610000
INFO: data write:13 @ 10630000
INFO: read data:000000c3 @ 10630000
INFO: data write:c9 @ 10650000
INFO: read data:000000c3 @ 10650000
INFO: data write:ce @ 10670000
INFO: read data:0000001b @ 10910000
INFO: data write:db @ 10930000
INFO: read data:00000025 @ 10930000
INFO: data write:5b @ 10950000
INFO: read data:0000001b @ 10990000
INFO: data write:37 @ 11010000
INFO: read data:00000004 @ 11110000
INFO: data write:9b @ 11130000
INFO: read data:000000c1 @ 11170000
INFO: data write:46 @ 11190000
INFO: read data:000000cd @ 11290000
INFO: data write:0b @ 11310000
INFO: read data:0000002a @ 11330000
INFO: data write:a4 @ 11350000
INFO: read data:000000fd @ 11430000
INFO: data write:83 @ 11450000
INFO: read data:000000c5 @ 11750000
INFO: data write:75 @ 11770000
INFO: read data:000000cb @ 11770000
INFO: read data:000000d0 @ 11790000
INFO: data write:ba @ 11810000
INFO: data write:cc @ 11830000
INFO: read data:00000053 @ 11930000
INFO: data write:bf @ 11950000
INFO: read data:00000087 @ 12010000
INFO: data write:49 @ 12030000
INFO: read data:00000013 @ 12030000
INFO: data write:95 @ 12050000
INFO: read data:000000c9 @ 12110000
INFO: data write:e6 @ 12130000
INFO: read data:000000ce @ 12210000
INFO: data write:c4 @ 12230000
INFO: read data:000000db @ 12590000
INFO: data write:74 @ 12610000
INFO: read data:0000005b @ 12630000
INFO: data write:55 @ 12650000
INFO: read data:00000037 @ 12910000
INFO: data write:c1 @ 12930000
INFO: read data:0000009b @ 13010000
INFO: data write:22 @ 13030000
INFO: read data:00000046 @ 13110000
INFO: data write:0b @ 13130000
INFO: read data:0000000b @ 13130000
INFO: data write:37 @ 13150000
INFO: read data:000000a4 @ 13230000
INFO: data write:ce @ 13250000
INFO: read data:00000083 @ 13530000
INFO: data write:1a @ 13550000
INFO: read data:00000075 @ 13550000
INFO: data write:6a @ 13590000
INFO: read data:000000ba @ 13690000
INFO: data write:96 @ 13710000
INFO: read data:000000cc @ 13750000
INFO: data write:95 @ 13770000
INFO: read data:000000bf @ 13810000
INFO: data write:c9 @ 13830000
INFO: read data:00000049 @ 13870000
INFO: data write:83 @ 13890000
INFO: read data:00000095 @ 13910000
INFO: data write:f9 @ 13930000
INFO: read data:000000e6 @ 14050000
INFO: data write:c9 @ 14070000
INFO: read data:000000c4 @ 14090000
INFO: data write:0d @ 14110000
INFO: read data:00000074 @ 14210000
INFO: data write:5d @ 14230000
INFO: read data:00000055 @ 14370000
INFO: data write:e9 @ 14390000
INFO: read data:000000c1 @ 14470000
INFO: data write:d1 @ 14490000
INFO: read data:00000022 @ 14770000
INFO: data write:06 @ 14790000
INFO: read data:0000000b @ 14830000
INFO: data write:0f @ 14850000
INFO: read data:00000037 @ 14850000
INFO: data write:5c @ 14870000
INFO: read data:000000ce @ 14950000
INFO: data write:3a @ 14970000
INFO: read data:0000001a @ 15510000
INFO: data write:2c @ 15530000
INFO: read data:0000006a @ 15530000
INFO: data write:64 @ 15550000
INFO: read data:00000096 @ 15590000
INFO: data write:e8 @ 15610000
INFO: read data:00000095 @ 15610000
INFO: data write:25 @ 15650000
INFO: read data:000000c9 @ 15930000
INFO: data write:5e @ 15950000
INFO: read data:00000083 @ 16390000
INFO: data write:cb @ 16410000
INFO: read data:000000f9 @ 16510000
INFO: data write:34 @ 16530000
INFO: read data:000000c9 @ 16550000
INFO: data write:64 @ 16570000
INFO: read data:0000000d @ 16990000
INFO: data write:cd @ 17010000
INFO: read data:0000005d @ 17010000
INFO: data write:87 @ 17030000
INFO: read data:000000e9 @ 17070000
INFO: data write:9e @ 17090000
INFO: read data:000000d1 @ 17150000
INFO: data write:06 @ 17170000
INFO: read data:00000006 @ 17550000
INFO: data write:ef @ 17570000
INFO: read data:0000000f @ 17570000
INFO: data write:79 @ 17590000
INFO: read data:0000005c @ 17750000
INFO: data write:c9 @ 17770000
INFO: read data:0000003a @ 17770000
INFO: data write:bd @ 17790000
INFO: read data:0000002c @ 17830000
INFO: data write:2f @ 17850000
INFO: read data:00000064 @ 17870000
INFO: data write:c0 @ 17890000
INFO: read data:000000e8 @ 17950000
INFO: data write:91 @ 17970000
INFO: read data:00000025 @ 18050000
INFO: data write:28 @ 18070000
INFO: read data:0000005e @ 18110000
INFO: data write:ca @ 18130000
INFO: read data:000000cb @ 18170000
INFO: data write:20 @ 18190000
INFO: read data:00000034 @ 18190000
INFO: data write:92 @ 18210000
INFO: read data:00000064 @ 18250000
INFO: data write:9e @ 18270000
INFO: read data:000000cd @ 18270000
INFO: data write:81 @ 18290000
INFO: read data:00000087 @ 18370000
INFO: data write:0b @ 18390000
INFO: read data:0000009e @ 18430000
INFO: data write:0d @ 18450000
INFO: read data:00000006 @ 18850000
INFO: data write:bf @ 18870000
INFO: read data:000000ef @ 18910000
INFO: data write:a0 @ 18930000
INFO: read data:00000079 @ 19050000
INFO: data write:dc @ 19070000
INFO: read data:000000c9 @ 19610000
INFO: data write:4a @ 19630000
INFO: read data:000000bd @ 19630000
INFO: data write:94 @ 19650000
INFO: read data:0000002f @ 19790000
INFO: data write:9e @ 19810000
INFO: read data:000000c0 @ 19810000
INFO: data write:21 @ 19830000
INFO: read data:00000091 @ 20010000
INFO: data write:3b @ 20030000
通过perl脚本寻找ERROR信息,没有找到。
但从打印结果和波形图上显示,因为重复相同的次数而概率不同,导致写入的数据与读出的数据没有比对完整个过程就结束了。又因为是读一个比对一个,所以也不会有报错,因此,写快读慢这种情况下,应该适当增加读的次数,保证全部比对完成。
将读的次数增加,运行结果
INFO: read data:0000004f @ 100930000
INFO: data write:2b @ 100950000
INFO: read data:00000025 @ 101050000
INFO: data write:4d @ 101070000
INFO: read data:00000034 @ 101350000
INFO: data write:b2 @ 101370000
INFO: read data:00000061 @ 101390000
INFO: read data:00000058 @ 101410000
INFO: read data:000000e7 @ 101490000
INFO: read data:00000069 @ 101570000
INFO: read data:0000002d @ 101650000
INFO: read data:000000d5 @ 101870000
INFO: read data:000000d9 @ 101890000
INFO: read data:0000003a @ 101930000
INFO: read data:0000008a @ 101970000
INFO: read data:000000ba @ 102010000
INFO: read data:0000003b @ 102550000
INFO: read data:00000052 @ 102630000
INFO: read data:0000003c @ 103190000
INFO: read data:0000002b @ 103210000
INFO: read data:0000004d @ 103250000
INFO: read data:000000b2 @ 103290000
写入数据的数量是固定的,通过延长读的次数,将所有数据比对完成,没有错误。
情况三:写读同概率
运行结果以及波形,只复制后部分
INFO: read data:000000cf @ 18230000
INFO: data write:8a @ 18270000
INFO: read data:000000b3 @ 18310000
INFO: data write:b4 @ 18430000
INFO: read data:00000034 @ 18590000
INFO: data write:aa @ 18610000
INFO: read data:000000db @ 18630000
INFO: read data:00000099 @ 18790000
INFO: data write:85 @ 18950000
INFO: data write:59 @ 19130000
INFO: read data:000000b2 @ 19130000
INFO: read data:000000c1 @ 19170000
INFO: read data:000000c3 @ 19310000
INFO: read data:00000048 @ 19330000
INFO: read data:0000008a @ 19410000
INFO: read data:000000b4 @ 19610000
INFO: read data:000000aa @ 19810000
INFO: read data:00000085 @ 19870000
INFO: read data:00000059 @ 19890000
INFO: data write:6c @ 19950000
INFO: read data:0000006c @ 19970000
波形标为红色的部分因为empty信号拉高不会被采样。数据是什么无所谓。
从以上结果来说,写读不同速率下FIFO都没有发生遗漏数据或者比对错误的情况。