建立基本時鐘週期約束。(驗證咱們的設計可否在指望的頻率上運行)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端口對應的時鐘便可。