首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 【Vivado使用误区与进阶】XDC约束技巧——CDC篇-1
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
【Vivado使用误区与进阶】XDC约束技巧——CDC篇-1
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-3-20 13:13
|
只看该作者
【Vivado使用误区与进阶】XDC约束技巧——CDC篇-1
我们知道XDC与UCF的根本区别之一就是对跨时钟域路径(CDC)的缺省认识不同,那么碰到FPGA设计中常见的CDC路径,到底应该怎么约束,在设计上又要注意些什么才能保证时序报告的准确性?
CDC的定义与分类
CDC是Clock Domain Crossing的简称,CDC时序路径指的是起点和终点由不同时钟驱动的路径。在电路设计中对这些跨时钟域路径往往需要进行特别的处理来避免亚稳态的产生,例如使用简单同步器、握手电路或是FIFO来隔离。
安全的CDC路径
所谓安全的CDC路径是指那些源时钟和目标时钟拥有相同的来源,在FPGA内部共享部分时钟网络的时序路径。这里的安全指的是时钟之间的关系对Vivado来说是全透明可分析的。
不安全的CDC路径
不安全的CDC路径则表示源时钟和目标时钟不同,且由不同的端口进入FPGA,在芯片内部不共享时钟网络。这种情况下,Vivado的报告也只是基于端口处创建的主时钟在约束文件中所描述的相位和频率关系来分析,并不能代表时钟之间真实的关系。
在Vivado中分析CDC
在ISE中想要快速定位那些需要关注的CDC路径并不容易,特别是要找到不安全的CDC时,因为ISE缺省认为所有来源不同的时钟都不相关且不做分析,要报告出这类路径,需要使用ISE Timing Analyzer (TRCE) ,并加上 "-u" (表示unconstrained)这个选项。
在Vivado中则容易许多,我们可以使用report_clock_interaction命令(GUI支持)来鉴别和报告设计中所有的时钟关系。执行命令后会生成一个矩阵图,其中对角线上的路径表示源时钟与目标时钟相同的时钟内部路径,其余都是CDC路径。
Vivado还会根据网表和已读入的约束分析出CDC路径的约束情况,并分颜色表示。例如绿色代表有时序约束,红色代表不安全的CDC路径但是没有约束时序例外,橙色表示有部分路径已约束为false path的不安全CDC路径。
矩阵下方是时钟关系表格,可以就各种条件进行筛选和排序,方便定位CDC路径。建议的做法是:首先,对"Common Primary Clock"排序(显示为Yes 或No),这么做可以快速鉴别出那些安全和不安全的CDC路径,接着观察对应的"Inter-Clock Constraints"栏内的内容,判断已读入的XDC中是否对这类路径进行了合理的约束。
第二步,可以对"Path Req (WNS)"由小到大进行排序,找到那些数值特别小(例如小于100ps)或是显示为"Unexpanded"的CDC路径,结合是否共享"Common Primary Clock"来鉴别此类路径,作出合理的约束。
过小的Path Req (WNS)一般都表示此类跨时钟域路径缺少异步时钟关系或其它时序例外的约束,如果两个时钟连"Common Primary Clock"也不共享,则100%可以确认为异步时钟,应该加上相应的时钟关系约束。
显示为"Unexpanded"的时钟关系,表示Vivado在一定长度(缺省为1000)的周期内都没有为两个时钟的频率和相位找到固定的关系,则无法推导出相应的Path Req 约束值。此类CDC需要特别留意,也要加上异步时钟关系约束。
这个矩阵还支持交互式的时序分析,选中任意一个方框,右键显示下拉菜单:选择Report Timing,会报告出这一格代表的时钟域(本时钟域或是跨时钟域)内最差的时序路径;选择 Set Clock Groups则可以设置时钟关系约束并添加到XDC文件中。
CDC的设计与约束
CDC路径在FPGA设计中普遍存在,在设置相应的约束前,必须了解设计中采取了怎样的方法来处理跨时钟域路径。
简单同步器
对于单根跨时钟域路径,一般采用简单同步器(Simple Synchronizer),就是由至少两级CE端和Reset/Clear端接死的寄存器序列来处理。
这种情况下,为了更长的平均无故障时间MTBF(Mean Time Between Failures),需要配合一个ASYNC_REG的约束,把用作简单同步器的多个寄存器放入同一个SLICE,以降低走线延时的不一致和不确定性。
set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]
在XDC中,对于此类设计的CDC路径,可以采用set_clock_groups来约束。
set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clk_oxo ] \
-group [get_clocks -include_generated_clocks clk_core ]
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议