第一章 FPGA時(shí)序約束分享03_input delay約束
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作者:潘文明
? ?本文章探討一下FPGA的時(shí)序input delay約束,本文章內(nèi)容,來源于配置的明德?lián)P時(shí)序約束專題課視頻。
?《FPGA時(shí)序約束分享01_約束四大步驟》概括性地介紹 了時(shí)序約束的四個(gè)步驟,對(duì)時(shí)序約束進(jìn)行了分類,并得到了一個(gè)分類表。
?《FPGA時(shí)序約束分享02_時(shí)鐘約束》詳細(xì)介紹了關(guān)于時(shí)鐘的約束,根據(jù)時(shí)鐘來源可以分成輸入時(shí)鐘約束、PLL等衍生時(shí)鐘約束和自己分頻的時(shí)鐘約束等三種類型。這三種類型的約束方法均有所不同,讀者需要掌握區(qū)分方法。
? 本文,筆者將詳細(xì)介紹輸入延時(shí)(input delay)的概念、場(chǎng)景分類、約束參數(shù)獲取方法以及約束方法。
? 在高速輸入設(shè)備與FPGA通信場(chǎng)合,設(shè)置輸入延時(shí)(input delay)約束非常重要。
? 例如明德?lián)P研發(fā)的高速ADC模塊:mdyFmcAd9653,該模塊集成了2個(gè)125M采樣率、分辨率為16位的AD9653,采集數(shù)據(jù)時(shí)通過LVDS傳輸至FPGA上。該LVDS的時(shí)鐘頻率為125M,數(shù)據(jù)位寬為16位,F(xiàn)PGA接收時(shí),需要進(jìn)行輸入延時(shí)(input delay)約束,將LVDS時(shí)鐘和數(shù)據(jù)的相位關(guān)系告知FPGA,從而讓FPGA能夠正確接收,如果約束不正確,則會(huì)出現(xiàn)接收錯(cuò)誤的情況。
? 還有一個(gè)常用場(chǎng)景,就是網(wǎng)絡(luò)芯片的RGMII接口。RGMII接口用于網(wǎng)絡(luò)芯片和FPGA之間的網(wǎng)絡(luò)數(shù)據(jù)傳輸,網(wǎng)絡(luò)芯片往FPGA發(fā)數(shù)據(jù),即FPGA接收數(shù)據(jù)時(shí),就需要設(shè)置輸入延時(shí)(input delay)約束。RGMII接口務(wù)必要做時(shí)序約束,否則會(huì)出現(xiàn)偶發(fā)性的數(shù)據(jù)接收錯(cuò)誤的情況,筆者在做“弱小信號(hào)采集系統(tǒng)項(xiàng)目”時(shí),就在這里吃過虧。
? 開始正文,首先討論并明確輸入延時(shí)(input delay)的概念。
?
第1節(jié) 輸入延時(shí)概念
上圖是一個(gè)典型的輸入延時(shí)的模型,該模型由一個(gè)上游器件source device以及一個(gè)FPGA組成。上游器件將數(shù)據(jù)傳送給FPGA,F(xiàn)PGA接收數(shù)據(jù)。從FPGA角度來看,輸入接口由時(shí)鐘接口和數(shù)據(jù)接口組成,上圖右邊FPGA的輸入管腳,上面即是數(shù)據(jù)接口,下面是時(shí)鐘接口。
Din是由時(shí)鐘clk產(chǎn)生的,理想情況下,Din的變化時(shí)刻一定是時(shí)鐘的上升沿,即變化點(diǎn)和時(shí)鐘上升沿對(duì)齊,如上圖所示。
但在傳輸過程中,由于時(shí)鐘和數(shù)據(jù)會(huì)存在延時(shí)差異,從而到達(dá)FPGA管腳是處于不同的時(shí)刻,數(shù)據(jù)和時(shí)鐘之間會(huì)存在相位差,如下圖所示。
上圖描述了連續(xù)3個(gè)時(shí)鐘下,數(shù)據(jù)接口din和時(shí)鐘clk的相位差,第1個(gè)時(shí)鐘相差了1ns,第2個(gè)時(shí)鐘差了1.8ns,第3個(gè)時(shí)鐘相差了1.3ns。相位差的變化有可能是延時(shí)原因,也有可能是上游器件的原因,總之,這些相位差數(shù)據(jù)是變化的,但它的變化應(yīng)該在一個(gè)確定的范圍,即肯定是存在一個(gè)最小值,同時(shí)存在一個(gè)最大值,相位差在這兩個(gè)范圍內(nèi)變動(dòng)。
將其變化范圍匯總起來,制作成如下的一張圖。
上圖中的灰色區(qū)域,就是相位差的變化范圍。
現(xiàn)在可以給出輸入延時(shí)(input delay)的定義:數(shù)據(jù)相對(duì)于時(shí)鐘的延時(shí),即數(shù)據(jù)時(shí)間-時(shí)鐘上升沿時(shí)間。
a.注意是數(shù)據(jù)時(shí)間-時(shí)鐘上升沿時(shí)間,這意味著輸入延時(shí)可正可負(fù)。當(dāng)延時(shí)在時(shí)鐘右邊時(shí),輸入延時(shí)是正的,當(dāng)延時(shí)變化點(diǎn)在時(shí)鐘上升沿左邊時(shí),輸入延時(shí)是負(fù)的。
b.輸入延時(shí)通常是一個(gè)變化范圍,其有兩個(gè)參數(shù),最小延時(shí)min和最大延時(shí)max。最小延時(shí)即上圖中灰色區(qū)域最左邊點(diǎn),最大延時(shí)是灰色區(qū)域最右邊點(diǎn)。
c.輸入的實(shí)際延時(shí)一定在最小和最大之間。約束時(shí),需要設(shè)置好最小min和最大max的值。
d.上圖中的clk和din是指FPGA管腳的,非上游器件管腳的。
e.牢記輸入延時(shí)的概念定義,后面場(chǎng)景無論如何變化,萬(wàn)變不離其宗,都是按這個(gè)定義約束的。
第2節(jié) 約束語(yǔ)句
設(shè)置輸入延時(shí)的約束語(yǔ)句,其語(yǔ)法非常簡(jiǎn)單,如下
set_input_delay -clock
?是想要設(shè)定input約束的端口名,可以是一個(gè)或數(shù)個(gè)port。
?-clock之后的clock_name,是時(shí)鐘域的名字。
?注意,這個(gè)clock_name是設(shè)置約束約束時(shí)定義的時(shí)鐘域的名字,而非“時(shí)鐘”名。
?可以是一個(gè)真實(shí)存在的時(shí)鐘
?也可以是預(yù)先定義好的虛擬時(shí)鐘
?delay分兩種
?-max ,輸入的最大延時(shí),用于建立時(shí)間setup的分析,具體原因看后面部分。
?-min ,輸入的最小延時(shí),用于保持時(shí)間hold的分析,具體原因看后面部分。
下面是具體的兩個(gè)例子
set_input_delay -clock [get_clocks clk0] -min 0.5 [get_ports Din[*]]
set_input_delay -clock [get_clocks clk0] -max 1.5[get_ports Din]*]]
上面約束了信號(hào)Din相對(duì)于時(shí)鐘域clk0,有最小延時(shí)0.5和最大延時(shí)1.5ns。
第3節(jié) 輸入延時(shí)的目的
請(qǐng)繼續(xù)看上面的輸入延時(shí)的模式,注意看FPGA的內(nèi)部結(jié)構(gòu)。上游器件將數(shù)據(jù)發(fā)到FPGA的輸入管腳,F(xiàn)PGA對(duì)其進(jìn)行采樣,采樣一定會(huì)使用到D觸發(fā)器,所以輸入的時(shí)鐘和數(shù)據(jù),最終均會(huì)連到FPGA內(nèi)部的D觸發(fā)器上。
由前面幾篇文章的討論可知,D觸發(fā)器是有建立時(shí)間和保持時(shí)間要求的。這個(gè)建立時(shí)間和保持時(shí)間,是這個(gè)D觸發(fā)器的物理特性,是一定會(huì)有的,但這個(gè)數(shù)值是多少,工程師不知道,而綜合工具如VIVADO、QUARTUS等會(huì)知道。
當(dāng)Din和clk的延時(shí)不滿足D觸發(fā)器的建立時(shí)間和保持時(shí)間時(shí),綜合工具自動(dòng)調(diào)整內(nèi)部延時(shí),例如增加一些BUF,或者增加線長(zhǎng)等方式,使得信號(hào)最終到達(dá)D觸發(fā)器時(shí),能夠滿足建立時(shí)間和保持時(shí)間的要求。
所以綜合工具需要知道輸入的延時(shí)是多少,進(jìn)而調(diào)整內(nèi)部延時(shí),最終滿足D觸發(fā)器的建立時(shí)間和保持時(shí)間要求,這就是設(shè)置輸入延時(shí)的目的。
有幾點(diǎn)需要注意的。
a.設(shè)置輸入延時(shí),只是客觀描述外部信號(hào),即數(shù)據(jù)和時(shí)鐘和相位關(guān)系。只要知道綜合工具這種相位關(guān)系,剩下的調(diào)整是綜合工具自動(dòng)完成的。
b.雖然綜合工具可以調(diào)整內(nèi)部延時(shí),從而達(dá)到內(nèi)部D觸發(fā)器正確采樣的目的,但這個(gè)延時(shí)是有一定范圍的,存在無論怎么調(diào)都無法滿足的情況。
第4節(jié) 獲取參數(shù)的兩種方法
由本文的約束語(yǔ)句一節(jié),可以知道為了設(shè)置輸入延時(shí)約束,需要知道兩個(gè)參數(shù):最大延時(shí)值max和最小延時(shí)值min。
那我們一般如何獲取這兩個(gè)參數(shù)呢?有兩種方法,一種是查閱數(shù)據(jù)手冊(cè),另一種是通過示波器測(cè)量。
?
4.1 查閱數(shù)據(jù)手冊(cè)
數(shù)據(jù)和時(shí)鐘的相位偏差,通常來自于上流器件的寄存器延時(shí)和走線延時(shí)。
一個(gè)正規(guī)的器件,其數(shù)據(jù)手冊(cè)會(huì)清楚地標(biāo)明輸出數(shù)據(jù)和時(shí)鐘的延時(shí)范圍,通常是寄存器延時(shí)TCKO等,大家可以查找一下。
至于走線延時(shí),通??梢酝ㄟ^線長(zhǎng)度,計(jì)算得到延時(shí)值。
所以第一種方法,就是查閱數(shù)據(jù)手冊(cè),獲取時(shí)序參數(shù),具體如何使用,可以看后面內(nèi)容。
?
4.2 示波器測(cè)量
第二種方法是示波器測(cè)量的方法。
方便的話,使用示波器接到FPGA的輸入的時(shí)鐘和數(shù)據(jù)管腳,調(diào)整示波器處于眼圖模式,就可以得到眼圖,其樣式大致如下。
上圖是按照時(shí)鐘基準(zhǔn)來獲取到的眼圖,從上圖就可以得到數(shù)據(jù)相對(duì)于時(shí)鐘的延時(shí)信號(hào),從而得到max和min值。
知道了上面兩種方法后,還要結(jié)合應(yīng)用場(chǎng)景,才能正確地設(shè)置時(shí)序參數(shù)。
第5節(jié) 應(yīng)用場(chǎng)景概念
?
5.1 系統(tǒng)同步和源同步
數(shù)據(jù)接口的同步方式,分成系統(tǒng)同步和源同步。
系統(tǒng)同步是指板上有一個(gè)時(shí)鐘源,該時(shí)鐘源將時(shí)鐘送給各個(gè)器件,并且保證送給各個(gè)器件 的相位是相同的。如上圖中,時(shí)鐘system_clock送給了source device和FPGA,并且兩者時(shí)鐘TsrcClk和TdstClk相位是一樣的,上游器件只發(fā)數(shù)據(jù)給FPGA即可。
系統(tǒng)同步要求時(shí)鐘信號(hào)在系統(tǒng)級(jí)上同源,板級(jí)走線的延時(shí)也要對(duì)齊,要求很高,也比較難做。
?
源同步如上圖,F(xiàn)PGA的時(shí)鐘來自于上游器件 ,即上游器件將數(shù)據(jù)送給FPGA的同時(shí),送一個(gè)隨路時(shí)鐘給FPGA,F(xiàn)PGA利用這個(gè)隨路時(shí)鐘來采樣數(shù)據(jù)。源同步方式,沒有時(shí)鐘相位同步的要求,所以相比系統(tǒng)同步簡(jiǎn)單很多,應(yīng)用也更加廣泛。
SDR是指數(shù)據(jù)只在時(shí)鐘上升沿有效,當(dāng)前時(shí)鐘上升沿產(chǎn)生數(shù)據(jù),在下一個(gè)時(shí)鐘上升沿對(duì)這個(gè)數(shù)據(jù)進(jìn)行采樣的方式,上圖就是SDR的示例。
DDR是指數(shù)據(jù)在時(shí)鐘上升沿和下降沿都有效的一種傳輸方式。時(shí)鐘上升沿產(chǎn)生的數(shù)據(jù),在下一個(gè)時(shí)鐘下降沿被采樣;時(shí)鐘下降沿產(chǎn)生的數(shù)據(jù),在下一個(gè)時(shí)鐘上升沿被采樣。
由引可見,同樣時(shí)鐘頻率下,DDR的速率是SDR的兩倍,速率更高,要求自然也更高。
系統(tǒng)同步由于要求時(shí)鐘信號(hào)在系統(tǒng)級(jí)上同源,板級(jí)走線的延時(shí)也要對(duì)齊,無法達(dá)到更高速的設(shè)計(jì)要求,所以大部分情況也僅僅應(yīng)用SDR方式,本文針對(duì)系統(tǒng) 同步,只討論SDR的方式。
源同步接口最大的優(yōu)點(diǎn)就是大大提升了總線的速度,可以是SDR方式,也可以是DDR方式,本文針對(duì)源同步,將討論
SDR和DDR兩種方式。
?
5.3 中心對(duì)齊和邊沿對(duì)齊
在DDR的傳輸方式中,我們又可以分成中心對(duì)齊和邊沿對(duì)齊兩種方式。
上面是FPGA收到的一個(gè)理想的傳輸波形圖。Din1的變化點(diǎn)與時(shí)鐘clk的邊沿點(diǎn)對(duì)齊,這種傳輸方式就是邊沿對(duì)齊。Din2的變化點(diǎn)則是在clk的低電平或者高電平中間,這種傳輸方式就是中心對(duì)齊。
上圖是一個(gè)理想的波形,是假設(shè)Din1和Din2 零延時(shí)的情況,但實(shí)質(zhì)上這是不可能的。在實(shí)際中,必會(huì)有延時(shí),而且必定會(huì)有抖動(dòng),這個(gè)抖動(dòng)圍繞著數(shù)據(jù)變化點(diǎn)可能向左偏,也可能向右偏。由此,邊沿對(duì)齊的實(shí)質(zhì)波形如下圖(在時(shí)鐘邊沿左右抖動(dòng),中間穩(wěn)定)。
同理,中心對(duì)齊的實(shí)質(zhì)波形將如下圖所示(時(shí)鐘邊沿處穩(wěn)定,中間抖動(dòng))。
第6節(jié) 各種場(chǎng)景下的約束方法
經(jīng)過前面的鋪墊和討論,現(xiàn)在正式討論各個(gè)應(yīng)用場(chǎng)景下,輸入延時(shí)的約束方法。
?
6.1 系統(tǒng)同步
系統(tǒng)同步的特點(diǎn)是時(shí)鐘到各個(gè)器件的延時(shí)是一樣的,這意味著設(shè)置輸入延時(shí)時(shí),不需要考慮時(shí)鐘的延時(shí),可以認(rèn)為時(shí)鐘延時(shí)是0,我們只需要考慮數(shù)據(jù)延時(shí)。
數(shù)據(jù)延時(shí)為兩種,一種是上游器件在時(shí)鐘控制下將數(shù)據(jù)輸出到上游器件管腳的延時(shí);另一種是數(shù)據(jù)從上游器件管腳,到FPGA管腳的延時(shí)。
?查閱數(shù)據(jù)手冊(cè)
假設(shè)通過查閱數(shù)據(jù)手冊(cè),得到TCKO最小是1ns,最大是2ns;通過計(jì)算布線長(zhǎng)度,得到線延時(shí)最小是0.3ns,最大是0.4ns。由此可計(jì)算得到,輸入最小延時(shí):最小的TCKO+最小的線延時(shí),即1.3ns;輸入最大延時(shí):最大的TCKO+最大的線延時(shí),即2.4ns。所以可以有如下約束語(yǔ)句。
set_input_delay -clock sysclk -min 1.3 ?[get_ports Din]
set_input_delay -clock sysclk -max 2.4 [get_ports Din]
?示波器測(cè)量
如果您找不到數(shù)據(jù)手冊(cè),或者電路板做得不標(biāo)準(zhǔn),也可以使用示波器測(cè)量方法得到參數(shù)。假設(shè)眼圖如下:
上圖中,中間的A處是時(shí)鐘上升沿時(shí)刻,B處是眼圖閉合的左側(cè),C處是眼圖閉合的右側(cè)。從示波器中,可以得到B到A的距離,以及C到A的距離。而這兩個(gè)距離,則正對(duì)應(yīng)輸入延時(shí)的最小值和最大值。如下圖,圖中的灰色區(qū)域,就是上圖中的B到C的區(qū)域。
?
如前面所述,系統(tǒng)同步要求較高,大部分都是SDR情形,所以不在此討論DDR的情節(jié)。
6.2 源同步SDR
源同步SDR的約束方法,與系統(tǒng)同步非常相似。
源同步是上游器件同時(shí)傳輸了時(shí)鐘和數(shù)據(jù),如果布線做得標(biāo)準(zhǔn)的話,即線等長(zhǎng)的話,可以認(rèn)為數(shù)據(jù)延時(shí)和時(shí)鐘延時(shí)是一致的,也就是說我們可以不考慮線延時(shí)的情況。
所以通過數(shù)據(jù)手冊(cè),查詢 到TCKO延時(shí),就可以設(shè)置最大最小值了。
通過示波器測(cè)量,也可以獲取到參數(shù),下圖就是眼圖。
上圖中,A是時(shí)鐘上升沿處,B是眼圖的左側(cè),定義為DV(befre),C處是眼圖的右側(cè),定義為DV(altera),這兩值都可以測(cè)量到。
上圖是對(duì)應(yīng)的波形圖。
如何通過DV(befre)和DV(altera),獲取到最小延時(shí)和最大延時(shí)呢?
認(rèn)真觀察,可以知道,最小延時(shí)就是DV(after);而最大延時(shí)則要計(jì)算一下,時(shí)鐘周期-DV(before)。
下面就是一個(gè)配置的例子。
6.3 源同步-DDR
討論完成源同步的SDR,接下來討論源同步的DDR情形。源同步的DDR是時(shí)鐘上升沿和下降沿都會(huì)采數(shù)據(jù)的情況,可以進(jìn)一步劃分成中心對(duì)齊和邊沿對(duì)齊情形。
6.3.1 DDR中心對(duì)齊
上圖是DDR中心對(duì)齊的波形圖,其中有4個(gè)參數(shù)可以通過示波器得到,分別是上升沿前dv_bre、上升沿后dv_are、下降沿前dv_bfe和下降沿后dv_afe。
注意,上圖中,F(xiàn)all_Data是由時(shí)鐘上升沿產(chǎn)生,在時(shí)鐘下降沿采樣的;Rise_Data是由時(shí)鐘下降沿產(chǎn)生,時(shí)鐘上升沿采樣的。
根據(jù)輸入延時(shí)的定義,上升沿的輸入最小延時(shí)是上圖中的B到A的時(shí)間;輸入最大延時(shí)是上圖中的C到A的時(shí)間。因此,可知上升沿輸入最小延時(shí)等于:dv_are;上升沿輸大最小延時(shí)等于:半個(gè)時(shí)鐘周期-dv_bfe。
下降沿的情況看上圖。根據(jù)定義,下降沿的輸入最小延時(shí)是B到A的時(shí)間;下降沿輸入最大延時(shí)是C到A的時(shí)間。注意,根據(jù)周期性,上圖中的C和D是相同的點(diǎn)。
可此可知,下降沿的輸入最小延時(shí)是dv_afe;下降沿輸入最大延時(shí)是:半個(gè)時(shí)鐘周期-dv_bre。
現(xiàn)在舉例說明,假設(shè)
?時(shí)鐘的頻率為:100M,即周期為10ns;
?數(shù)據(jù)data的dv_bre:0.4ns
?數(shù)據(jù)data的dv_are:0.6ns
?數(shù)據(jù)data的dv_bfe:0.7ns
?數(shù)據(jù)data的dv_afe:0.2ns
則有,上升沿的輸入最大延時(shí):半個(gè)時(shí)鐘周期-dv_bfe=4.3ns;上升沿的輸入最小延時(shí):dv_are=0.6ns;下降沿的輸入最大延時(shí):半個(gè)時(shí)鐘周期-dv_bre=4.6ns;下降沿的輸入最小延時(shí):dv_afe=0.2ns;
可以列出出如的約束語(yǔ)句:
set_input_delay -clock clk -max 4.3 [get_ports data]
set_input_delay -clock clk -min 0.6 [get_ports data]?
set_input_delay -clock clk -max 4.6 [get_ports data] -clock_fall -add_delay
set_input_delay -clock clk -min 0.2 [get_ports data] -clock_fall -add_delay
上面的語(yǔ)法中,使用-clock_fall表示下降沿;使用-add_delay表示與前面的約束一起生效。
6.3.2 DDR邊沿對(duì)齊
上圖是DDR中心對(duì)齊的波形圖,其中有4個(gè)參數(shù)可以通過示波器得到,分別是上升沿前skew_bre、上升沿后skew_are、下降沿前skew_bfe和下降沿后skew_afe。
注意,上圖中,F(xiàn)all_Data是由時(shí)鐘上升沿產(chǎn)生,在時(shí)鐘下降沿采樣的;Rise_Data是由時(shí)鐘下降沿產(chǎn)生,時(shí)鐘上升沿采樣的。
根據(jù)輸入延時(shí)的定義,上升沿的輸入最小延時(shí)是上圖中的B到A的時(shí)間;輸入最大延時(shí)是上圖中的C到A的時(shí)間。有讀者會(huì)疑問,為什么不是D和E呢?注意一下輸入延時(shí)的定義,是“產(chǎn)生的數(shù)據(jù)”到“產(chǎn)生該數(shù)據(jù)的時(shí)鐘沿”的距離。Fall_data是由A產(chǎn)生的,B到C區(qū)域,都是Fall_Data的變化區(qū)域,所以應(yīng)該看的是B和C到A的距離 。這個(gè)時(shí)候,B在A的左邊,說明該值是負(fù)數(shù)。
理解了上面的定義,可知上升沿輸入最小延時(shí)等于:-skew_bre;上升沿輸入最大延時(shí)等于:skew_are。
下降沿的情況看上圖。根據(jù)定義,下降沿的輸入最小延時(shí)是到D到F的時(shí)間;下降沿輸入最大延時(shí)是E到F的時(shí)間。
可此可知,下降沿的輸入最小延時(shí)是:-skew_bfe;下降沿輸入最大延時(shí)是:skew_afe。
現(xiàn)在舉例說明,假設(shè)
?時(shí)鐘的頻率為:100M,即周期為10ns;
?數(shù)據(jù)data的skew_bre:0.6ns
?數(shù)據(jù)data的skew_are:0.4ns
?數(shù)據(jù)data的skew_bfe:0.3ns
?數(shù)據(jù)data的skew_afe:0.7ns
則有,上升沿的輸入最大延時(shí):skew_are=0.4ns;上升沿的輸入最小延時(shí):-skew_bre=-0.6ns;下降沿的輸入最大延時(shí):skew_afe=0.7ns;下降沿的輸入最小延時(shí):-skew_bfe=-0.3ns;
可以列出出如的約束語(yǔ)句:
set_input_delay -clock clk -max 0.4 [get_ports data]
set_input_delay -clock clk -min -0.6 [get_ports data]?
set_input_delay -clock clk -max 0.7 [get_ports data] -clock_fall -add_delay
set_input_delay -clock clk -min -0.3 [get_ports data] -clock_fall -add_delay
上面的語(yǔ)法中,使用-clock_fall表示下降沿;使用-add_delay表示與前面的約束一起生效。
6.4 有數(shù)據(jù)無時(shí)鐘
? ? ? 有一種特殊的輸入信號(hào),該信號(hào)是沒有對(duì)應(yīng)的時(shí)鐘,是一種異步信號(hào)。例如最常見的UART串口信號(hào),上位機(jī)發(fā)給FPGA只有一根線,雙方按照約定的波特率進(jìn)行通信。
FPGA使用內(nèi)部的時(shí)鐘去采這個(gè)異步信號(hào),由于時(shí)鐘和信號(hào)是異步的,因此無論怎么調(diào)整,都不能保證一定能夠滿足D觸發(fā)器的建立時(shí)間和保持時(shí)間要求,這個(gè)時(shí)候要做異步信號(hào)同步化處理后,才能采集,否則會(huì)出現(xiàn)亞穩(wěn)態(tài)現(xiàn)象,嚴(yán)重的會(huì)導(dǎo)致芯片崩潰。關(guān)于這部分內(nèi)容,可以看時(shí)序約束的其他章節(jié)。
本文要探討的是,對(duì)于這種異步信號(hào),需不需要做輸入延時(shí)的約束呢?
答案是需要的。對(duì)其進(jìn)行時(shí)鐘約束,其主要目的不是為了調(diào)整延時(shí),而是為了告訴綜合工具,這個(gè)信號(hào)是處于不同時(shí)鐘域的,避免被系統(tǒng)認(rèn)為屬于某一時(shí)鐘域,從而不產(chǎn)生警告,進(jìn)而導(dǎo)致工程師遺漏了此問題的解決。
由于異步信號(hào)沒有時(shí)鐘,因此我們需要構(gòu)造一個(gè)虛擬時(shí)鐘,如以下語(yǔ)句,就是產(chǎn)生了一個(gè)50M的虛擬時(shí)鐘clk_50_virtual,注意該語(yǔ)句并沒有關(guān)聯(lián)任何端口,所以是虛擬的;還要注意的是,定義為50M是隨便的,您可以定義為其他任何頻率。
create_clock -period 20 -name clk_50_virtual
當(dāng)構(gòu)造了虛擬時(shí)鐘了,就可以設(shè)置異步信號(hào)的輸入延時(shí)了,例如下面語(yǔ)句。注意5.2也是任意的。
set_input_delay -max 5.2 -clock clk_50_virtual [get_ports i_data]
第7節(jié) 總結(jié)與建議 ??
最后,對(duì)本文進(jìn)行簡(jiǎn)單的總結(jié) 。
a.本文先介紹 了輸入延時(shí)的概念,然后分成不同的應(yīng)用場(chǎng)景,根據(jù)這些應(yīng)用場(chǎng)景不同,分別使用不同的約束方法。
b.輸入延時(shí)約束關(guān)鍵的是獲取約束參數(shù),可分成查閱數(shù)據(jù)手冊(cè)和示波器測(cè)量方法。
c.輸入延時(shí)約束,只是客觀反映外部信號(hào)的情況,千萬(wàn)不要理解成“要求系統(tǒng),讓輸入延時(shí)多少ns”。即不是要求系統(tǒng)做什么,而是告訴系統(tǒng)輸入信號(hào)的情況,而系統(tǒng)決定怎么做。
第8節(jié) 相關(guān)產(chǎn)品 ??
本文提到的mdyFmcAd9653,是由明德?lián)P科教研發(fā)的多通道,高分辨率和高采樣率數(shù)模轉(zhuǎn)換器的ADC系列子板,搭載兩片ADC芯片,支持ADI、上海貝嶺、北京時(shí)代民芯科技、中電24所等生產(chǎn)的芯片,完全PIN對(duì)PIN兼容;共支持8通道同步輸入;共支持16位采樣分辨率;支持最高125MSPS的采樣率,適用于醫(yī)療電子、雷達(dá)、衛(wèi)星導(dǎo)航等多種應(yīng)用場(chǎng)合。
?
第9節(jié) 相關(guān)文章 ??
1.《FPGA時(shí)序約束分享01_約束四大步驟》
2.《FPGA時(shí)序約束分享02_時(shí)鐘約束》
3.《mdyFmcAd9653產(chǎn)品說明書》
?
評(píng)論
查看更多