在fpga设计中,我们经常会碰到这样的情形:从快时钟域到慢时钟域完成位宽转换,这时,这两个时钟是同步的。例如:源时钟是400mhz,数据位宽为4;目的时钟为200mhz,数据位宽为8,这样源时钟域和目的时钟域的吞吐率是一致的。这种位宽转换可直接通过寄存器采样实现,时序关系如下图所示。
图中source为源时钟域(400mhz)4位数据,l0代码0号数据的低4位,h0代表0号数据的高4位,l1代表1号数据的低4位,h1代表1号数据的高4位,依此类推。delay1为源时钟域经一级流水寄存器的输出结果。destination为目的时钟域(200mhz)8位数据。
我们很容易搭建此电路,如下图所示。图中绿色计数器为400mhz时钟域计数器,产生源端4位数据,蓝色模块为源端流水寄存器,红色模块为目的端采样寄存器。
在这种情况下,能否使用多周期路径约束呢?这里我们看一下数据的发起沿和捕获沿的位置,如下图所示。图中红色方框为数据发起沿(400mhz),绿色方框(黄色标记线所在位置)为捕获沿,两者相差一个400mhz时钟对应的时钟周期。因此,并不满足多周期规则。这时,我们只用做常规的时钟周期约束即可,工具会自动将这里的跨时钟域按400mhz进行约束。
那么快时钟域到慢时钟域在什么情况下可以用多周期路径进行约束呢?本质上,多周期路径是指数据的采样率(samplerate)是按慢时钟域的速率进行变化,其变化周期在慢时钟域是单周期(一个时钟周期变化一次),而在快时钟域是多周期(多个时钟周期变化一次)。满足这种情形就可以判断为多周期路径。
有时在设计中会有测试模块,或者出现这样的状况:模块1和模块2都工作在相同的时钟下,该时钟会根据设计的需要频率会发生变化,但无论怎么变化模块2只要满足最低时钟频率的要求即可。因此,这时可对模块2放松时序要求。只按照最低时钟频率约束即可。问题是只要定义了全局时钟(通过create_clock创建),该时钟就会在模块2中发生作用。如何覆盖这个约束呢?如果仍通过create_clock创建时钟,选项-period的值为时钟周期最大值(对应最低频率),但以模块2作为顶层,指定该约束针对的对象为模块2是否可行呢?答案是否定的,因为这时时序分析工具会把bufg作为时钟的起点,而不是把全局时钟管脚作为起点。
一种可行的方法是用set_max_delay,其对象是模块2内的所有时序单元(模块2内只有一个时钟),采用如下方式约束。第一条tcl命令用于获取模块2内所有的时序单元。
这时就可以看到时钟的起点是期望的位置了。这里可以看到set_max_delay的一个用法就是覆盖create_clock创建的约束。
神经学家使用星际迷航技术为失明者恢复视力
有哪些半入耳蓝牙耳机推荐,盘点学生党平价蓝牙耳机
德州仪器推出轨至轨运算放大器OPA2314
谷歌与Ascension将在云计算领域开展合作
小米MIX2S和小米MIX2有什么区别
FPGA设计中这两种情形该怎么约束
三星进军 AR 智能眼镜领域
吉事励产品广泛应用于新能源汽车测试
台积电买下茂迪20%股权 跨足太阳能领域
寒武纪思元MLU云端智能加速卡在中国移动推出,助推AI业务发展
开关阀与调节阀的区别是什么?截止阀和闸阀可以混用吗?
【技术】铜缆和光纤连接方案在数据中心的应用
华为P10闪存门最新消息:受闪存门影响华为P10连续降价,华为Mate9深受其害
北京通州区电子巡更系统巡更棒销售安装公司有哪些
一文详解MOSFET的导通电阻
西门子直流伺服驱动系统故障维修10例
新兴产业规划出炉:构建工业机器人体系提上议程
在内卷的洗地机市场,戴森又一次实现了逆势狂奔
Mobileye携手长城汽车推出高级驾驶辅助系统和自动驾驶解决方案
国内首条G11掩膜板项目开工 成都或成我国最大掩膜版制造基地