Xilinx FIFO使用总结
FIFO是我们在FPGA开发中经常用到的模块,在数据缓存和跨时钟域同步等都会有涉及。在实际工程使用前,我们需要熟悉掌握FIFO IP的配置过程及时序特点。
下面对xilinx的FIFO IP在vivado下的配置过程,以及主要信号的时序关系总结如下。
其中,FIFO为同步FIFO,位宽为16bit,深度为128。
一、配置过程
1、首先,选择native类型的FIFO,然后选择common clock block RAM,即采用读写采用相同时钟的块RAM,如果FIFO深度小于32也可以选择distrubuited RAM,即分布式RAM,但不推荐使用。对于读写采用不同时钟的FIFO也可以在这个选择。
2、选择标准FIFO,设置读写位宽及FIFO深度,异步复位,以及读FIFO的初始化值。需要注意在异步复位几拍周期后再对FIFO进行读写操作。
3、配置需要引出的握手信号,需要注意开展配置握手信号是低电平有效还是高电平有效,以及可动态编程“几乎空”及“几乎满”信号产生的时序位置。
4、配置读写计数信号,因为我们FIFO深度是128,因此计数器为7位。
5、下面是最后生成的FIFO summary
二、时序特点
1、写FIFO时序特点
首先向FIFO写129个数据,查看FIFO信号写时序。其中涉及以下几个信号:
wr_data_in:16位的写数据
wr_en:写使能
wr_ack:写反馈
full:写满信号
almost full:几乎满信号
overflow:写溢出信号
data_count:读写FIFO计数器
下面是写FIFO起始位置时序:
下面是写FIFO结束位置时序:
可以得出写FIFO特点:
1)、写数据与写使能信号是完全同步的。
2)、写反馈比写使能信号要晚1拍。
3)、写满与写使能信号是完全同步的。
4)、几乎写满信号是在写完数据的前1拍有效。(即还剩一个数据就写满了)。
5)、写溢出信号是在写满信号有效后的晚1拍有效。
2、读FIFO时序特点
然后向FIFO读129个数据,查看FIFO信号读时序。其中涉及以下几个信号:
rd_data_out:16位的读数据
rd_en:读使能
valid:读有效信号
empty:读空信号
almost empty:几乎空信号
underflow:读溢出信号
data_count:读写FIFO计数器
下面是读FIFO起始位置时序:
下面是读FIFO结束位置时序:
可以得出读FIFO特点:
1)、读数据比读使能信号到要延迟1拍。
2)、读数据与读有效信号是完全同步的。
3)、读空与读使能信号是完全同步的。
4)、几乎读空信号是在读完数据的前1拍有效。(即还剩一个数据就读完了)。
5)、读溢出信号是在读空信号有效后的晚1拍有效。
三、FIFO使用过程中的注意事项
1、FIFO的复位是高电平有效的;
2、FIFO复位若干周期后再对FIFO进行读写操作;
3、读FIFO出来的数据比读使能信号晚1拍;
4、读空及写满信号是与读写使能信号完全同步的,因此可以用读空或写满信号作为FIFO的使能信号,但是要用组合逻辑(assign ),确保实时性。
5、读数据与读有效信号是完全同步的。
————————————————
版权声明:本文为CSDN博主「wuzhirui志锐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39789553/article/details/120305449