写自己的双时钟FIFO(DCFIFO)IP核,解决跨时钟域方式之一_通俗易懂篇!

双时钟fifo是遵循先入先出的原则,且读写的数据,在独立的线路上传输,所以连续的bit位传输,可以在不同的时钟下进行,可以有效地解决跨时钟域传输的问题。

双时钟fifo写法简述:

两个时钟,rd_clk,wr_clk.

读命令模块:当有读请求,判断是否读空信号为1,非空则发出读命令。组合逻辑

写命令模块:当有写请求,判断是否写满信号为1,非满则发出写命令。组合逻辑

存储模块:双口ram,当读为1,将读指针,指向的数据发送出去;当写为1,则将数据写入写指针所在的地址位。时序逻辑 q<= mem[rptr;mem[wptr]]<=d;

读指针模块:当有读信号来,读指针+1;输出到存储器模块。时序逻辑rd_clk

写指针模块:当有写信号来,写指针+1;输出到存储器模块。时序逻辑wr_clk

usedword模块: usedword=写指针-读指针+存储器的总容量   

跨时钟,数据传输的处理部分,为空,满信号的输出判断做准备。

bintogray模块:将usedword转变为格雷码。(每一次只有一位不同的特性,降低跨时钟传输的错误率)

将转换好的格雷码转分别换到   rd_clk,wr_clk.的频率上,再分别输出为二进制码。

读、写命令利用同步寄存器解决控制bit位的传输。(同步寄存器链可以解决,单bit控制使能位的跨时钟域问题,降低亚稳态发生概率)

读时钟下的握手模块:输出读时钟下的写满和读空;输出至读控制模块,作为输出读命令的控制条件。

写时钟下的握手模块:输出写时钟下的写满和读空;输出至写控制模块,作为输出写命令的控制条件。

系统闭环循环,相互激励,相互控制。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值