ISE中FIFO IP核的Standard FIFO和First

ISE下的FIFO IP核有Standard FIFO和First-word-Fall-Through两种模式,相对于标准模式FWFT(First-word-Fall-Through)可以不需要读命令,自动的将最新数据放在dout上。

接下来分别对两种模式下的FIFO进行仿真,testbench如下

1 1 module fifo_test; 2 2 3 3 // Inputs 4 4 reg rst; 5 5 reg wr_clk; 6 6 reg rd_clk; 7 7 reg [15:0] din; 8 8 reg wr_en; 9 9 reg rd_en; 1010 1111 // Outputs 1212 wire [7:0] dout; 1313 wire full; 1414 wire empty; 1515 wire [13:0] rd_data_count; 1616 1717 // Instantiate the Unit Under Test (UUT) 1818 write_fifo uut ( 1919 .rst(rst), 2020 .wr_clk(wr_clk), 2121 .rd_clk(rd_clk), 2222 .din(din), 2323 .wr_en(wr_en), 2424 .rd_en(rd_en), 2525 .dout(dout), 2626 .full(full), 2727 .empty(empty), 2828 .rd_data_count(rd_data_count) 2929 ); 3030 3131 always #5 wr_clk = ~wr_clk; 3232 always #5 rd_clk = ~rd_clk; 3333 3434 3535 initial begin 3636 // Initialize Inputs 3737 rst = 0; 3838 wr_clk = 0; 3939 rd_clk = 0; 4040 din = 0; 4141 wr_en = 0; 4242 rd_en = 0; 4343 4444 // Wait 100 ns for global reset to finish 4545 #100; 4646 din = 8193; 4747 wr_en = 1; 4848 repeat(8192) 4949 #10 din = din - 1; 5050 #10 5151 wr_en = 0; 5252 #100 5353 rd_en = 1; 5454 #163840 5555 rd_en = 0; 5656 #10; 5757 $stop; 5858 5959 6060 // Add stimulus here 6161 6262 end 6363 6464 endmodule

两次仿真FIFO的配置都一样,写位宽为16,写深度为8192,读位宽为8,读深度为16384.

图一为标准FIFO的仿真截图,图二为FWFT模式的仿真截图

图二中在读信号有效之前,dout即输出了最新的数据。

另外需要注意的有:

1,FIFO的实际有效深度为理论深度减。。

2,FIFO中的rd_data_count信号指示的是FIFO前几拍时的状态,即在连续写入2个数据时,rd_data_count依然为0.

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )