大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
Xilinx FIFO Generator 需要注意RST复位
系列文章推荐
- Xilinx FIFO Generator 需要注意RST复位
- Xilinx FIFO Generator 需要注意Actual Depth
- Xilinx FIFO Generator 需注意非对称位宽
- Xilinx FIFO Generator 需要注意BRAMs的资源消耗
记录在使用Xilinx的FIFO Generate的时候遇到的问题(modelsim仿真和ILA都能遇到);
——full,empty 等信号一直keep high;
直接原因
以下内容说的都是Asynchronous Reset;
在手册pg057-fifo-generator.pdf,Page127中有介绍:
拙劣的翻译:
进行复位操作的时候,读写时钟必须是有效的。不管什么原因,在复位操作的时刻,读写时钟如果丢失,必须在读写时钟有效的时刻再次进行复位操作。违反此操作将导致不可预期的行为发生。甚至,信号busy会被卡住,并可能需要重新配置FPGA。
其他建议
文中后续也有对异步复位的建议:
拙劣的翻译:
如果异步复位的信号宽度是一个慢时钟宽度(应该是读写时钟中较慢的那一个),而且是在非常靠近满时钟上升沿的时候断言,那么复位检测就可能不会遇到这种导致无法预期的行为发生情况。为了避免这种情况,尽管在本手册中在一些时候说断言慢时钟的一个周期,但通常建议异步复位信号断言至少三个慢时钟周期。
文中有个定义C_SYNCHRONIZER_STAGE不理解什么意思,有知道的可以评论交流。
时序
在手册中也给出了建议的复位时序:
需要注意:FIFO的所有输出信号在图中的No Access Zone期间必须视为无效;
可以观察到时序:
- RST信号有8个慢时钟周期的高电平;
- 在RST上升沿时期,7个wr_clk周期后WR_RST_BUSY信号拉高,FULL信号拉高,此时的wr_en信号应该拉低;
- 在RST上升沿时期,7个rd_clk周期后RD_RST_BUSY信号拉高,EMPTY信号拉高,此时的rd_en信号应该拉低,而且此时的数据输出端口均为无效;
- 复位周期 + 60个满时钟周期后,FIFO可以正常读写;
手册中也给出了一个不安全的时序图:
这个图中最明显的就是Async Reset的复位周期为3个慢时钟周期。
这样的时序情况下可能会引起一些异常(但是这个时序后面FIFO还是可以进行读写工作的)。
仿真
在modelsim仿真的时序中,如果FIFO的复位出现在了wr_clk或者rd_clk之前,那FIFO是不能进行读写的(注意FULL信号和EMPTY信号是会强行拉高的):
而后,再次进行FIFO的复位,FULL和EMPTY信号恢复正常,FIFO可以正常读写了:
总结
用FIFO IP的时候要注意 RST信号,建议满足:
1. 有效复位必须在wr_clk和rd_clk有效之后;
2. 有效复位至少要维持慢时钟的8个周期;
3. 复位操作过后,建议要等待至少60个慢时钟周期,再去使用FIFO进行读写操作;
按照这三个条件,对FIFO的RST进行配置,目前还没遇到问题,如有问题,评论沟通。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187993.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...