XDC约束技巧--CDC

5 篇文章 2 订阅

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 灵活、针对性好、便于时序分析和调试。但效率低下,容易冲突。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值