不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

FPGA之跨时钟域的处理方法

目录


跨时钟域处理

  传输信号分为控制信号数据信号

1.单bit跨时钟(控制信号)

  慢到快:由于快时钟域的可以采集到慢时钟域的信号,所以两级同步器直接 同步即可,即电平信号同步

  快到慢:此时,快时钟域的信号相对于慢时钟域而言为一个脉冲信号,所以采用脉冲信号同步。首先通过握手机制将脉冲信号展宽,然后在进行打两拍。如果要在快时钟域输出一个脉冲信号,即输出信号持续一个时钟周期,就可以在后面再加一个边沿检测同步器。


握手机制:
(1)快时钟域对脉冲信号进行采样,采样为高电平时输出高电平信号pulse_fast_r,此时不要急于将信号拉低,先保持输出信号为高电平状态。
(2)慢时钟域对快时钟域的pulse_fast_r进行延迟打拍采样,因为pulse_fast_r被快时钟域保持拉高状态,所以肯定会采集到该信号。
(3)慢时钟域确认采样得到高电平信号pulse_fast2s_r后,再反馈给快时钟域。
(4)快时钟域对反馈信号pulse_fast2s_r进行延迟打拍采样,此时拉低快时钟域的pulse_fast_r信号。

边沿检测器


2.多bit跨时钟(数据信号)

  可以通过异步FIFO和握手来实现多bit数据跨时钟传输。
当数据量少的时候用握手来实现,用FIFO的话有点浪费资源。
数据量大的时候建议用异步FIFO。


异步FIFO涉及知识点汇总:
(1)空满同步及标志的产生
(2)虚空和虚满
  对于空标志位来说,将写指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会写入新的数据,因此同步后的写指针一定小于或等于(当且仅有同步时间内没有新数据写入的情况下才会等于)当前的写指针,所以此时判断不一定是真空;
  同理,对于满标志位来说,将读指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会读出新的数据,因此同步后的读指针一定小于或等于当前读指针,所以此时判断并不一定是真满。
(3)异步FIFO的深度只能为2^n?
(4)深度不为2^n时,如何挑选格雷码保证地址相邻数只有1bit不同,包括绕回 https://blog.csdn.net/weixin_44101336/article/details/124263370
(5)FIFO深度计算
  要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走。也就是说FIFO的最小深度就等于没有被读走的数据个数。
  FIFO深度计算
  异步FIFO_小小verifier的博客
  备战秋招[六]-FIFO深度计算
(6)异步FIFO的端口信号,模块框架图及代码
(7)二进制和格雷码相互转换方法及代码
  二进制和格雷码相互转换
https://blog.csdn.net/sinat_25326461/article/details/52384968
(8)异步FIFO测试点
(9)画出同步FIFO和异步FIFO地电路结构框图
(10)异步FIFO的Verilog代码


参考文章

  1. 跨时钟域传输:快到慢
  2. 边沿检测器

posted on   皮皮祥  阅读(942)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示