時序約束高級進階使用詳解三:Create_Clock

目錄

一、前言

二、設計示例

2.1 設計代碼

2.2 schematic

2.3 no overwriteing

2.4 約束到非時鐘引腳

三、Create_clock應用

3.1 時鐘輸入端口

3.2?7系列高速收發器輸出管腳

3.3?部分原語的輸出管腳

3.4?主時鐘路徑上創建主時鐘

3.5?虛擬時鐘

3.6?差分時鐘的約束


一、前言

? ? ? ?時序約束中,使用Create_clock約束來生成主時鐘,主時鐘可以說是設計的心臟。主時鐘是來自FPGA芯片外部的時鐘,通過時鐘輸入端口或高速收發器GT的輸出引腳進入FPGA內部。對于賽靈思7系列的器件,主時鐘必須手動定義到GT的輸出,對于Ultrascale和Ultrascale+系列的器件,定時器會自動地接入到GT的輸出。

? ? ? ?生成時鐘通常來源于設計內部的時鐘管理單元,如MMCM,PLL等,生成時鐘是與主時鐘(使用create_clock創建的時鐘)相關,其來源來自主時鐘或其他生成時鐘。因此,需先定義主時鐘,再定義生成時鐘。優點是主時鐘變化時生成時鐘會同步進行變化。

二、設計示例

2.1 設計代碼

module create_clock(CLKIN1,CLKIN2,CLKINSEL,CLKFBIN,rst,d,ff_clkout0_a,ff1);
input CLKIN1,CLKIN2,CLKINSEL,CLKFBIN,rst,d;
output reg ff_clkout0_a,ff1;
reg ff_clkout0,ff0;PLLE2_ADV #(.BANDWIDTH("OPTIMIZED"),  // OPTIMIZED, HIGH, LOW.CLKFBOUT_MULT(8),        // Multiply value for all CLKOUT, (2-64).CLKFBOUT_PHASE(90.0),     // Phase offset in degrees of CLKFB, (-360.000-360.000).// CLKIN_PERIOD: Input clock period in nS to ps resolution (i.e. 33.333 is 30 MHz)..CLKIN1_PERIOD(0.0),.CLKIN2_PERIOD(0.0),// CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT (1-128).CLKOUT0_DIVIDE(1),.CLKOUT1_DIVIDE(2),.CLKOUT2_DIVIDE(4),// CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT0_DUTY_CYCLE(0.4),.CLKOUT1_DUTY_CYCLE(0.5),.CLKOUT2_DUTY_CYCLE(0.5),// CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT0_PHASE(0.0),.CLKOUT1_PHASE(0.0),.CLKOUT2_PHASE(0.0),.COMPENSATION("EXTERNAL"),   // ZHOLD, BUF_IN, EXTERNAL, INTERNAL.DIVCLK_DIVIDE(1),        // Master division value (1-56)// REF_JITTER: Reference input jitter in UI (0.000-0.999)..REF_JITTER1(0.0),.REF_JITTER2(0.0),.STARTUP_WAIT("FALSE")    // Delay DONE until PLL Locks, ("TRUE"/"FALSE"))PLLE2_ADV_inst (// Clock Outputs: 1-bit (each) output: User configurable clock outputs.CLKOUT0(CLKOUT0),   // 1-bit output: CLKOUT0.CLKOUT1(CLKOUT1),   // 1-bit output: CLKOUT1.CLKOUT2(CLKOUT2),   // 1-bit output: CLKOUT2// Feedback Clocks: 1-bit (each) output: Clock feedback ports.CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock// Clock Inputs: 1-bit (each) input: Clock inputs.CLKIN1(CLKIN1),     // 1-bit input: Primary clock.CLKIN2(CLKIN2),     // 1-bit input: Secondary clock// Control Ports: 1-bit (each) input: PLL control ports.CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2.RST(rst),           // 1-bit input: Reset// Feedback Clocks: 1-bit (each) input: Clock feedback ports.CLKFBIN(CLKFBIN)    // 1-bit input: Feedback clock);// End of PLLE2_ADV_inst instantiationalways@(posedge CLKOUT0,negedge rst)if(!rst)ff_clkout0<=1'b0;else beginff_clkout0<=d;end
always@(posedge CLKOUT0,negedge rst)if(!rst)ff_clkout0_a<=1'b0;else beginff_clkout0_a<=ff_clkout0;end
always@(posedge CLKIN1,negedge rst)if(!rst)ff0<=1'b0;else beginff0<=ff_clkout0;end
always@(posedge CLKIN1,negedge rst)if(!rst)ff1<=1'b0;else beginff1<=ff0;end
endmodule 

2.2 schematic

? ?

????生成時鐘與主時鐘關系可以是分頻,倍頻,非整數倍頻率,相移,占空比切換,以及上述關系的組合。

2.3 no overwriteing

在使用Create_clock約束的時候,存在一個設置項Add this clock to the existing clock(no overwriteing),即不要覆蓋已存在的時鐘,通俗理解就是如果約束的位置存在create_clock時,不要覆蓋,勾選則是兩個時鐘共存。以如下約束為例,在端口CLKIN1上約束創建了兩個主時鐘clkin1,clkin1_1,但clkin1_1未勾選no overwriting?

create_clock -period 10.000 -name clkin1 -waveform {0.000 5.000} [get_ports CLKIN1]
create_clock -period 10.000 -name clkin1_1 -waveform {0.000 5.000} [get_ports CLKIN1]
create_clock -period 10.000 -name clkin2 -waveform {0.000 5.000} [get_ports CLKIN2]
create_generated_clock -name clkout0 -source [get_ports CLKIN1] -multiply_by 2 -add -master_clock [get_clocks clkin1] [get_pins PLLE2_ADV_inst/CLKOUT0]

查看Clock summary,只有clkin1_1,因clkin1被覆蓋了所以沒有clkin1

如果clkin1_1勾選no overwriting,約束如下

create_clock -period 10.000 -name clkin1_1 -waveform {0.000 5.000} -add [get_ports CLKIN1]

clock summary中clkin1和clkin1_1同時存在

同時,在時序報告中,會分析clkin1和clkin1_1間的時序結果,即將兩者作為獨立的時鐘

在clock interaction中顯示clkin1和clkin1_1的關系為Timed(unsafe)

2.4 約束到非時鐘引腳

create_clock如果約束到非時鐘引腳上,仍能進行正常時序分析,只是屬于不合理的用法

如下示例,約束到LUT單元ff0_i_1/o上,時鐘名為clk_lut

create_clock -period 10.000 -name clkin2 -waveform {0.000 5.000} [get_ports CLKIN2]
create_clock -period 10.000 -name clkin1 -waveform {0.000 5.000} [get_ports CLKIN1]
create_generated_clock -name clkout0 -source [get_ports CLKIN1] -multiply_by 2 -add -master_clock clkin1 [get_pins PLLE2_ADV_inst/CLKOUT0]
create_clock -period 9.000 -name clk_lut -waveform {0.000 4.500} [get_pins ff0_i_1/O]

ff0_i_1的輸出連接到觸發器ff0_reg上

時序分析報告中存在clk_lut到clkin1的時序路徑

此時路徑的source clock delay為0,data path的起點為ff0_i_1/o

三、Create_clock應用

3.1 時鐘輸入端口

時鐘輸入端口使用create_clock創建主時鐘是最常見的場景,如下圖,在sysclk端口上創建主時鐘,時鐘經過IBUF和BUFG驅動觸發器REGA和REGB

時鐘周期為10ns,占空比為50%的約束示例如下:

create_clock -name SysClk -period 10 -waveform {0 5} [get_ports sysclk]

3.2?7系列高速收發器輸出管腳

第二種場景是設計中存在高速收發器GT,GT的時鐘輸出引腳提供時鐘,如下連接設計

在gt0的TXOUTCLK引腳上創建主時鐘,通過驅動mmcm0來驅動設計中的其他時序單元,

create_clock -name SysClk -period 10 -waveform {0 5} [get_pins gt0/TXOUTCLK]

注意:標題之所以指明7系列器件是因為UltraScale和UltraScale+器件的設計,?AMD?不建議在?GT?的輸出上定義基準時鐘,?因為在定義?REFCLK?輸入時鐘時,?將自動衍生?GT?時鐘。

3.3?部分原語的輸出管腳

如下圖,對于instA,因為沒有輸入IN到輸出OUT的arc,sysclk上的時鐘無法傳播到OUT,此時如果要實現傳播后的效果,可使用create_clock在instA/OUT上創建主時鐘,從而驅動后面的時序單元。

3.4?主時鐘路徑上創建主時鐘

對于在主時鐘驅動的路徑上重新創建主時鐘的做法是不建議的,如下圖,在sysclk上創建了一個主時鐘clk0,在clk0驅動的BUFG1上又創建了一個主時鐘clk1,clk1將會覆蓋傳播到該處的clk0,從而導致時序分析時,REGA和REGB間發起時鐘和捕獲時鐘的時鐘偏斜較大,分析不準,不符合實際情況。

3.5?虛擬時鐘

虛擬時鐘是設計中的一種特殊時鐘,它的生成不需要物理引腳,通常用于FPGA芯片的外部接口時序分析,因為,外部器件的時鐘不會直接連接到FPGA上,所以可以通過虛擬時鐘來模擬外部時鐘與FPGA引腳的關系。

虛擬時鐘通過create_clock約束生成,約束時不指定Source objects,只需設置名稱和波形,下圖示例為創建周期為10ns的虛擬時鐘

create_clock -period 10.000 -name virtual_clcok -waveform {0.000 5.000}

虛擬時鐘通常結合set_input_delay和set_output_delay使用

create_clock -period 10.000 -name virtual_clcok -waveform {0.000 5.000}
set_output_delay -clock [get_clocks virtual_clcok] 1.123 [get_ports ff_clkout0_a]
set_input_delay -clock [get_clocks virtual_clcok] 1.110 [get_ports d]

input_delay的報告如下圖,輸入延時值在data path中體現

3.6?差分時鐘的約束

差分時鐘因為有兩個輸入端口,輸入時鐘的約束怎么約?實際只需要約束差分時鐘輸入端口中的p端口,也就是IBUFGDS的I端口

create_clock -name clk -period 10 [get_ports clk_I]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79783.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

箱線圖(盒須圖)QCPStatiBox

一、QCPStatisticalBox 概述 QCPStatisticalBox 是 QCustomPlot 中用于繪制箱線圖(盒須圖)的類&#xff0c;可以顯示數據的五個關鍵統計量&#xff1a;最小值、第一四分位數(Q1)、中位數、第三四分位數(Q3)和最大值&#xff0c;以及可能的異常值。 二、主要屬性 屬性類型描述…

人形機器人馬拉松:北京何以孕育“領跑者”?

“機器人每跑一小步&#xff0c;都是人類科技的一大步”&#xff0c;這句對阿姆斯特朗登月名言的仿寫&#xff0c;恰如其分地詮釋了全球首場人形機器人半程馬拉松賽事的里程碑意義。 2025年4月19日&#xff0c;北京亦莊半程馬拉松暨人形機器人半程馬拉松圓滿結束。在總長21.09…

基于Python的推薦算法的電影推薦系統的設計

標題:基于Python的推薦算法的電影推薦系統的設計與實現 內容:1.摘要 本文圍繞基于Python的推薦算法的電影推薦系統展開研究。背景在于隨著電影數量的急劇增加&#xff0c;用戶在海量電影中找到符合自身喜好的影片變得困難。目的是設計并實現一個高效準確的電影推薦系統&#x…

【深度學習】詳解矩陣乘法、點積,內積,外積、哈達瑪積極其應用|tensor系列02

博主簡介&#xff1a;努力學習的22級計算機科學與技術本科生一枚&#x1f338;博主主頁&#xff1a; Yaoyao2024往期回顧&#xff1a;【深度學習】你真的理解張量了嗎&#xff1f;|標量、向量、矩陣、張量的秩|01每日一言&#x1f33c;: “腦袋想不明白的&#xff0c;就用腳想”…

面試常用基礎算法

目錄 快速排序歸并排序堆排序 n n n皇后問題最大和子數組爬樓梯中心擴展法求最長回文子序列分割回文串動態規劃求最長回文子序列最長回文子串單調棧雙指針算法修改 分割回文串滑動窗口棧 快速排序 #include <iostream> #include <algorithm>using namespace std;…

相對路徑和絕對路徑解析

在 Linux/Unix 和文件系統中&#xff0c;絕對路徑和相對路徑是描述文件或目錄位置的兩種方式&#xff0c;它們的核心區別在于路徑的起點和使用場景。以下是詳細對比&#xff1a; 目錄 1. 定義與起點 2. 符號與語法 3. 使用場景 4. 實際示例 示例 1&#xff1a;定位文件 示…

【算法數據結構】leetcode37 解數獨

37. 解數獨 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 題目要求每一行 &#xff0c;每一列&#xff0c;每個3*3 的子框只能出現一次。每個格子的數字范圍1-9. 需要遍歷每個空格填入可能的數字&#xff0c;并驗證符合規則。如果符合就填入&#xff0c;不符…

Vector的學習

vector簡介 vector的相關文檔對于想深入了解的同學可以參考這個文檔進行學習。 vector是表示可變大小數組的序列容器。 就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c;和數組一樣高效。但是又不…

Vue常用指令入門

1. v-for 作用&#xff1a;用于遍歷對象或數組 注意&#xff1a;需要提供key屬性&#xff0c;可以提高性能和避免渲染錯誤&#xff0c;值通常為index或item.id <li v-for"(item, index) in items" :key"index">{{ item }} </li>2. v-if,v-el…

在機器視覺檢測中為何選擇線陣工業相機?

線陣工業相機&#xff0c;顧名思義是成像傳感器呈“線”狀的。雖然也是二維圖像&#xff0c;但極寬&#xff0c;幾千個像素的寬度&#xff0c;而高度卻只有幾個像素的而已。一般在兩種情況下使用這種相機&#xff1a; 1. 被測視野為細長的帶狀&#xff0c;多用于滾筒上檢測的問…

線性DP:最長上升子序列(子序列可不連續,子數組必須連續)

目錄 Q1&#xff1a;簡單遍歷 Q2&#xff1a;變式&#xff08;加大數據量&#xff09; Q1&#xff1a;簡單遍歷 Dp問題 狀態表示 f(i,j) 集合所有以第i個數結尾的上升子序列集合-f(i,j)的值存的是什么序列長度最大值max- 狀態計算 &#xff08;其實質是集合的劃分&#xff09;…

【Web前端技術】第二節—HTML標簽(上)

hello&#xff01;好久不見—— 做出一個屬于自己的網站&#xff01; 云邊有個稻草人-個人主頁 Web前端技術—本篇文章所屬專欄 目錄 一、HTML 語法規范 1.1 基本語法概述 1.2 標簽關系 二、HTML 基本結構標簽 2.1 第一個 HTML 網頁 2.2 基本結構標簽總結 三、網頁開發…

論文降重GPT指令-實側有效從98%降低到8%

步驟1&#xff1a;文本接收 指令&#xff1a; 請用戶提供需要優化的文本內容。 對文本進行初步分析&#xff0c;識別文本的基本結構和風格。 操作&#xff1a; 接收并分析用戶提交的文本。 步驟2&#xff1a;文本優化 2.1 連接詞處理 指令&#xff1a; 刪除或替換連接詞&#x…

Jsp技術入門指南【九】詳細講解JSTL

Jsp技術入門指南【九】詳細講解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的準備三、核心標簽庫常用標簽詳解1. <c:out>&#xff1a;輸出內容&#xff08;替代<% %>&#xff09;2. <c:i…

Linux操作系統--進程的創建和終止

目錄 1.進程創建 1.1fork()函數初識 1.2寫時拷貝 1. 提升系統效率 2. 隔離錯誤影響 3. 支持并行計算 2.進程終止&#xff1a; 2.1進程退出場景&#xff1a; 2.2進程常見退出方法&#xff1a; 2.3_exit()系統調用接口 2.4exit函數 2.5return退出 1.進程創建 1.1for…

OSPF綜合實驗——企業邊界路由器、LSA收斂

IP劃分粗略記號&#xff0c;方便后續配置 配置IP和環回--->ISP的IP配置和cheat認證---->配置OSPF和RIP---->企業邊界路由網段匯總---->特殊區域---> 缺省路由&#xff0c;重分發---->nat配置---->實現全網通 路由器配置IP和環回地址 <Huawei>sys…

Java【網絡原理】(4)HTTP協議

目錄 1.前言 2.正文 2.1自定義協議 2.2HTTP協議 2.2.1抓包工具 2.2.2請求響應格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3認識方法 2.2.3.1GET與POST 2.2.3.2PUT與DELETE 2.2.4請求頭關鍵屬性 3.小結 1.前言 哈嘍大家好啊&#xff0c;今天來繼續給大家帶來Java中網絡…

Android學習總結之APK打包流程

一、預處理階段&#xff08;編譯前準備&#xff09; 1. AIDL 文件處理&#xff08;進程間通信基礎&#xff09; 流程&#xff1a; 用于實現 Android 系統中不同進程間的通信&#xff08;IPC&#xff09;。在項目構建時&#xff0c;AIDL 編譯器會將 .aidl 文件編譯為 Java 接口…

BDO分廠積極開展“五個一”安全活動

BDO分廠為規范化學習“五個一”活動主題&#xff0c;按照“上下聯動、分頭準備 、差異管理、資源共享”的原則&#xff0c;全面激活班組安全活動管理新模式&#xff0c;正在積極開展班組安全活動&#xff0c;以單元班組形式對每個班組每周組織一次“五個一”安全活動。 丁二醇單…

【音視頻】FLV格式分析

FLV概述 FLV(Flash Video)是Adobe公司推出的?種流媒體格式&#xff0c;由于其封裝后的?視頻?件體積?、封裝簡單等特點&#xff0c;?常適合于互聯?上使?。?前主流的視頻?站基本都?持FLV。采?FLV格式封裝的?件后綴為.flv。 FLV封裝格式是由?個?件頭(file header)和…