基本的同步時(shí)序路徑約束
先讀文章:《時(shí)序邏輯電路的建立,保持時(shí)間裕量分析》
我們?cè)O(shè)計(jì)的同步時(shí)序電路示意圖如下。
從上面的示意圖可知,一個(gè)同步時(shí)序電路的時(shí)序路徑無非就是四種:
(1)從輸入端口到內(nèi)部寄存器(從D_IN經(jīng)過組合邏輯1,到第一個(gè)寄存器數(shù)據(jù)端口D)。
(2)從內(nèi)部寄存器到內(nèi)部寄存器(從第一個(gè)寄存器的Q端,經(jīng)過組合邏輯2,到第二個(gè)寄存器的D端)。
(3)從內(nèi)部寄存器到輸出端口( 從第二個(gè)寄存器的Q端,經(jīng)過組合邏輯3,到輸出端口 D_O端)。
(4)從輸入端口到輸出端口(從D_IN經(jīng)過組合邏輯4到達(dá)輸出端口D_O)。
先看路徑(2),從內(nèi)部寄存器到內(nèi)部寄存器。如文章《時(shí)序邏輯電路的建立,保持時(shí)間裕量分析》中的詳細(xì)描述,要滿足如下建立保持時(shí)間要求。
建立時(shí)間裕量:
tsetup_slack=tcycle-(tcq+tlogic) -tsetup+tclk_delay-tjitter>0
保持時(shí)間裕量:
thold_slack=tcq+tlogic-thold-tclk_delay-tjitter>0
對(duì)于EDA來說,tsetup(寄存器建立時(shí)間要求),tcq(寄存器輸出延時(shí)),thold(寄存器保持時(shí)間要求)它都是知道的。在忽略tjitter(時(shí)鐘抖動(dòng))的情況下,我們需要告訴EDA我們的時(shí)鐘周期,tcycle。如此EDA工具就會(huì)根據(jù)我們的給出的tcycle,去優(yōu)化寄存器到寄存器之間的組合邏輯2的延時(shí)(tlogic)和tclk_delay,去滿足建立保持時(shí)間裕量要求。EDA也會(huì)根據(jù)我們給出的tcycle,去計(jì)算建立保持時(shí)間裕量。
因此此時(shí)我們只需要對(duì)時(shí)鐘進(jìn)行約束,約束示例語句如下(在端口clk上創(chuàng)建的時(shí)鐘,周期為10ns)。
create_clock -period 10 [get_ports clk]
對(duì)于路徑(1),從輸入端口到內(nèi)部寄存器(從D_IN經(jīng)過組合邏輯1,到達(dá)第一個(gè)寄存器的數(shù)據(jù)端口D),我們需要把上一級(jí)的電路示意圖也畫出來。大家就明白了。如下圖所示,上一級(jí)的電路模型也可以等效為一個(gè)寄存器再通過一個(gè)組合邏輯電路。因此時(shí)序約束其實(shí)也就是變成了,從外部寄存器到內(nèi)部寄存器之間的時(shí)序約束。
從圖中可以看到tin_delay(既數(shù)據(jù)到輸入端口的延時(shí))其實(shí)等于上一級(jí)電路寄存器的輸出延時(shí)(tcq)加上一級(jí)組合邏輯的延時(shí)。
此時(shí)我們需要滿足的建立保持時(shí)間要求如下(tlogic1為組合邏輯1的延時(shí))。
建立時(shí)間裕量
tsetup_slack=tcycle-tin_delay-tlogic1-tsetup+tclk_delay-tjitter>0
保持時(shí)間裕量
thold_slack=tin_delay+tlogic1-thold-tclk_delay-tjitter>0
同樣在忽略tjitter的情況下,我們只需要告訴EDA工具tcycle,tin_delay,如此EDA就會(huì)根據(jù)我們的條件去約束組合邏輯1的延時(shí)以及tclk_delay,從而使得電路滿足建立保持時(shí)間要求。
設(shè)置tcycle的方式,上面已經(jīng)說過。設(shè)置輸入延時(shí)(tin_delay)的約束命令示例如下(-clock用于指定時(shí)鐘域,2表示設(shè)置輸入延時(shí)為2ns):
set_input_delay -clock clk 2 [get_ports D_IN]
對(duì)于輸入端口的完整約束示例如下:
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 2 [get_ports D_IN]
當(dāng)然對(duì)于輸入延時(shí)的定義也可以用 -max -min去分別定義一個(gè)最大值和最小值。在分析建立時(shí)間裕量時(shí),EDA工具會(huì)用最大值去分析;在分析保持時(shí)間裕量時(shí),EDA工具會(huì)用最小值去分析。定義示例如下:
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk -max 4 [get_ports D_IN]
set_input_delay -clock clk -min 1 [get_ports D_IN]
對(duì)于路徑(3),從內(nèi)部寄存器到輸出端口(從第二個(gè)寄存器的Q端經(jīng)過組合邏輯3到輸出端口D_O),同樣我們把它的下一級(jí)電路示意圖也畫出來。其下一級(jí)電路也是通過組合邏輯送到寄存器這種結(jié)構(gòu)。問題也就可以等效為寄存器到寄存器之間的時(shí)序約束。
同樣在忽略時(shí)鐘抖動(dòng)的情況下,我們需要告訴EDA工具數(shù)據(jù)從輸出端口到下一級(jí)電路寄存器的延時(shí)tout_delay和tcycle。此時(shí)EDA工具就會(huì)根據(jù)如下要求去優(yōu)化組合邏輯3的延時(shí)tlogic3以及tclk_delay,以及計(jì)算靜態(tài)時(shí)序裕量。
建立時(shí)間裕量
tsetup_slack=tcycle-tout_delay-tlogic3-tsetup+tclk_delay-tjitter>0
保持時(shí)間裕量
thold_slack=tout_delay+tlogic3-thold-tclk_delay-tjitter>0
約束輸出延時(shí)(tout_delay)的示例如下(-clock 指定時(shí)鐘域)。
create_clock -name clk -period 10 [get_ports clk]
set_output_delay -clock clk 6 [get_ports D_O]
同樣,輸出延時(shí)也可以用 -max -min指定一個(gè)最大值和一個(gè)最小值。
create_clock -name clk -period 10 [get_ports clk]
set_output_delay -clock clk -max 6 [get_ports D_O]
set_output_delay -clock clk -min 2 [get_ports D_O]
對(duì)于路徑(4)(從輸入端口經(jīng)過組合邏輯4再到輸出端口),這時(shí)候我們必須聯(lián)合上下兩級(jí)電路來考慮。我們要先明確從上一級(jí)電路獲取數(shù)據(jù)的輸入延時(shí)tin_delay,以及其送到下一級(jí)電路的tout_delay。如此EDA工具才知道如何去做組合邏輯4的時(shí)序優(yōu)化與做靜態(tài)時(shí)序計(jì)算。
此時(shí)需要滿足的時(shí)序要求如下:
建立時(shí)間裕量
tsetup_slack=tcycle-tin_delay-tout_delay-tlogic4-tsetup+tclk_delay-tjitter
保持時(shí)間裕量
thold_slack=tin_delay+tout_delay+tlogic4-thold-tclk_delay-tjitter
在忽略時(shí)鐘抖動(dòng)的情況下,我們需要約束輸入延時(shí),輸出延時(shí)。示例約束語句如下。
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 4 [get_ports D_IN]
set_output_delay -clock clk 1 [get_ports D_O]
-
時(shí)序邏輯電路
+關(guān)注
關(guān)注
2文章
94瀏覽量
16555 -
同步時(shí)序
+關(guān)注
關(guān)注
0文章
12瀏覽量
7890
原文標(biāo)題:基本的同步時(shí)序路徑約束
文章出處:【微信號(hào):LF-FPGA,微信公眾號(hào):小魚FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論