建立基本时钟周期约束。(验证咱们的设计可否在指望的频率上运行)html
(学习记录,晚一点会作实验传上来的。)异步
时钟基本概念:https://blog.csdn.net/wordwarwordwar/article/details/78259208ide
时序约束的基本概念:https://blog.csdn.net/zz_Caleb/article/details/84453792学习
- 约束是如何构成的
- 时序约束
- 物理约束
- 当前的约束是用在哪一个过程当中
- 一般状况下,时序约束是在综合和实现的时候都会用到,物理约束通常是在实现的时候会被用到。
或
- 若是咱们有多个约束文件,咱们必定须要一个target文件,用于保存最新额约束。方法是左键选择
- 时钟描述
- 基本要素
- 时钟周期
- Period=10
- 占空比
- Waveform={0,5} //0指上升沿,5指降低沿,单位是ns不用谢
- 相位
- 主时钟(primary clock)这是咱们首先要肯定的。
- 实际上指的是板子上的晶振。
(sysclk是package pin上的管脚)
- 对于GTH Transceivers :http://www.bubuko.com/infodetail-2087865.html
- 基本要素
- 生成时钟(Generated clock)
- 用户自定义的生成时钟
- 经过
进行定义。
- 一般用户定义的时钟,是经过RTL代码描述的时钟。
- 举例以下:
- 二分频时钟源
- 先要定义primary clock source point
- 再肯定生成时钟的位置(蓝色)
- –source:用get_ports指定
- –name:生成时钟的名字
- –divide_by 2:生成时钟的位置
- 第二种方式是咱们使用get_pin
- –source:rega的时钟端口
- 第三种方式
- 编号从1开始,clkin的第一个上升沿对准clkdiv2的第一个边沿。Clkdiv2的降低沿对应clkin的第三个边沿。clkdiv2的第二个上升沿对应clkin的第五个沿。
- 经过
- 自动推断出来的时钟(咱们不须要进行约束,只须要对primary time进行约束便可)
- 咱们着重注意-source属性
- 典型应用:时钟进来之后经过MMCM或者PLL生成不一样的时钟。一般咱们会调用MMCM的这个Ip包。
生成时钟的名字,就是与clkout链接的net上的名字(cpiclk)。
- 当咱们使用Clocking wizard ip核的时候,咱们能够对port 进行rename。
- 🔗:https://blog.csdn.net/u011327754/article/details/79780999
- 用户自定义的生成时钟
- Report_clocks命令
- Propagated:表面时钟的特性,波形抖动,会日后传播。
- Generated:生成时钟。
- 时钟分组(clock Group)
- 时钟分类(一般vivado认为时钟都是相关的,因此若是咱们实际项目中有时钟来自于两个不一样的晶振,咱们须要时钟约束告诉fpga时钟是不相关的。)
- 同步时钟
- 使用creat_clock进行时钟约束。
- 异步时钟
- 咱们要告诉这两个源时钟源是没有关系的。
- Unexpandable clocks
- 由于launch edge和capture edge的时钟不一样步,因此在咱们作setup分析的时候,创建于两的值会有两个。(如图红色虚线)他最终会使用较短的时间做为创建时的requerament(及最小公倍数)。
- 可是若是这个最小公倍数不存在或者很难找到(好比clk0=5.125ns clk1=6.666ns)那么 Path requirement between two clocks are not reasonable。
- 须要经过
方法进行约束
- Exclusive clock group
- 由于多路选择器的存在,Clk0和clk1不可能同时工做。
- 同步时钟
- 时钟分类(一般vivado认为时钟都是相关的,因此若是咱们实际项目中有时钟来自于两个不一样的晶振,咱们须要时钟约束告诉fpga时钟是不相关的。)
- 特性
- 全部的时钟都是默认相关的
- 对于异步时钟咱们能够经过set_clock_group建立时钟组,可是咱们须要很好的设计保证可靠性。
- 约束时钟频率
- 若是咱们的设计是差分时钟,咱们只用去约束p端口对应的时钟便可。