基于SV验证语言的同步FIFO环境搭建

目录

1.SV环境架构

2.部分代码实现

3.运行结果与讨论


        本篇文章中,主要工作为搭建基于SV的同步FIFO验证环境。个人觉得对于FIFO这类简单模块使用UVM来搭建比使用SV来搭建难度更高。基于总线协议的UVM环境使用起来更加顺手。

1.SV环境架构

基础环境组件:

  1. FIFO_drv
  2. FIFO_mon
  3. FIFO_top (rtl只有一个sv文件,top层可有可无)
  4. FIFO_if
  5. base_test_env
  6. 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

从代码运行结果可以看出,基本写入一个,就能读出一个。波形图如下所示。

e6201eaea75a49b2b0f1ec84694b36a1.png

波形图中显示,前三个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

 

1359bb199c5c45c784a5dab00a997201.png

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信息,没有找到。

aa8414316dae473c952b6f8354283e95.png

但从打印结果和波形图上显示,因为重复相同的次数而概率不同,导致写入的数据与读出的数据没有比对完整个过程就结束了。又因为是读一个比对一个,所以也不会有报错,因此,写快读慢这种情况下,应该适当增加读的次数,保证全部比对完成。

将读的次数增加,运行结果

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

3aefcae8f33a40479036cde191250108.png

 波形标为红色的部分因为empty信号拉高不会被采样。数据是什么无所谓。

从以上结果来说,写读不同速率下FIFO都没有发生遗漏数据或者比对错误的情况。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值