我是靠谱客的博主 坚定心情,最近开发中收集的这篇文章主要介绍XDC约束技巧--CDC,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、CDC定义与分类
quad CDC 是 Clock Domain Crossing 的简称, CDC 时序路径指的是起点和终点由不同时钟驱动的路径。在电路设计中对这些跨时钟域路径往往需要进行特别的处理来避免亚稳态的产生,例如使用简单同步器、 握手电路或是 FIFO 来隔离。

2、CDC设计与约束
2.1、简单的同步器
quad ASYNC_REG约束,把用作简单同步器的多个寄存器放入同一个SLICE,以降低走线延时的不一致和不确定。
quad 约束命令如下:
quad set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]
quad (* ASYNC_REG=“true” *)reg A;

2.2、FIFO隔离CDC
quad 总线跨时钟域通常用异步FIFO
1) Build_in 硬核fifo
quad 这种fifo是直接用BRAM搭建的,也是推荐的fifo实现方式。所有的控制逻辑都在BRAM内。用set_clock_groups约束即可。
2) 带有格雷码控制的fifo
quad 为了在亚稳态下做读写指针抽样也能正确判断空满状态,设计中也常用一种带有格雷码控制的FIFO来实现异步时钟域的隔离。计数器和读写指针等需要用 BRAM 外部的逻辑搭建,这样的结构就不能简单约束 set_clock_groups,还要考虑这些外部逻辑如何约束。

quad 因为set_clock_groups相当于set_false_path,而set_false_path优先级最高,这样就导致所有跨读写时钟域的路径全部不做时序分析,读写指针和相关控制逻辑也就失去了存在的意义。

quad 所以建议的做法是不设 set_clock_groups 约束, 转而采用 set_max_delay 来约束这些跨时钟域路径。以写入侧举例,一个基本的原则就是约束从 cell1 到 cell2 的路径之间的延时等于或略小于 cell2 的驱动时钟一个周期的值。 读出侧的约束同理。

quad 约束命令:set_max_delay $delay –from [get_cells cell1] –to [get_cells cell2] –datapath_only

quad 如果用户使用 Vivado 的 IP Catalog 来产生此类 FIFO,这样的 XDC 会随 IP 的源代码一起输出,使用者仅需注意确保这个 FIFO 的读写时钟域没有被用户自己的XDC 约束为 false path 或是异步 clock groups 。

3、CDC约束方案对比
1) 全部忽略的约束
quad set_clock_groups
quad 简单、省时、效率高。但容易误伤。
2) 使用datapath_only约束
quad set_max_delay
quad 简单、效率高。但约束必须合理,不能过紧也不能过松,要注意约束冲突。
3) 逐条进行时序例外约束
quad set_false_path、set_max_delay、set_min_delay、set_multicycle_path
quad 灵活、针对性好、便于时序分析和调试。但效率低下,容易冲突。

最后

以上就是坚定心情为你收集整理的XDC约束技巧--CDC的全部内容,希望文章能够帮你解决XDC约束技巧--CDC所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部