同步FIFO与异步FIFO设计

1. 同步FIFO

1.1 设计要求

设计一个深度为512,位宽是10bit的同步FIFO

输入端口:CLK,RSTN, RD_EN, WRT_EN, DATA_WRT[9:0]

输出端口:FULL, EMPTY, DATA_ED[9:0]

fifo其实就是基于ram做的一些扩展,区别一:顺序读写,区别二:防止ram写满溢出以及读空。

1.2 补充

1.3 设计代码

顶层fifo:

调用的ram模块

2. 异步FIFO

2.1 跨时钟域问题

design在两个时钟域下工作,会有两个问题:

1. 静态时序分析工具不能起作用;2.电路会存在亚稳态。

对于单bit异步信号:当异步信号来临时(异步信号发生变化),如果触发器B采样的DATA不满足建立时间,就会出现亚稳态,导致触发器B在Q端输出的值可能是1,也可能是2,而触发器B的Q端会连接其他触发器,那么其他触发器拿到的值就会不一样,这样是有问题的。

2.2 跨时钟域-解决办法1:两级同步

1. 慢时钟域传到快时钟域可以采用触发器挡两拍的方式防止x的传播(但必须保证异步信号CLKA是一个慢时钟)

2. 局限:不能处理多bit同时变化的情况

2.3 跨时钟域-解决办法2:握手协议

1. 握手协议(等待数据稳定再采数据,可以解决任意时钟频率的问题,但是效率较低)

2. 可以处理任意bit位宽,效率较低,发送方必须接到AWK信号后才能发送下一个数据。

2.4 跨时钟域-解决办法3:异步FIFO

异步FIFO:可以处理任意位宽,效率较高。适用于有连续跨时钟域数据的传递。

格雷码:与普通的二进制编码相比,格雷码在递增或递减的过程中只会出现一位数码的变换。有效解决异步FIFO中的多bit异步信号问题。

2.5 异步FIFO

2.5.1 设计要求:设计一个深度为512,位宽是10bit的异步FIFO

输入端口:CLK_W,CLK_R,RSTN, RD_EN, WRT_EN, DATA_WRT[9:0]

输出端口:FULL, EMPTY, DATA_ED[9:0]

异步FIFO和同步FIFO的设计类似,只是多了格雷码的转换和两级同步。

2.5.2 设计代码:

顶层fifo_512x10模块

调用的ram模块

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值