專家教你如何設計高級FPGA時鍾域
發布時間:2014-04-19 責任編輯:xiongjianhua
整個設計最好采用唯一的時鍾域可以簡化時序分析以及減少很多與多時鍾域有關的問題,但是由於FPGA外各種係統限製,隻使用一個時鍾常常又不現實。FPGA時常需要在兩個不同時鍾頻率係統之間交換數據,在係統之間通過多I/O接口接收和發送數據,處理異步信號,以及為帶門控時鍾的低功耗ASIC 進行原型驗證。
這裏提到的時鍾域,是指一組邏輯,這組邏輯中的所有同步單元(觸發器、同步RAM塊以及流水乘法器等)都使用同一個網絡作為時鍾。假如設計中所有的觸發器都使用一個全局網絡,比如FPGA的主時鍾輸入,那麼我們說這個設計隻有一個時鍾域。假如設計有兩個輸入時鍾,如圖6-1所示,一個時鍾給接口1使用,另一給接口2使用,那麼我們說這個設計中有兩個時鍾域。

圖6-1:雙時鍾域設計
平時我們在設計中遇到的門控時鍾、衍生時鍾以及事件驅動的觸發器都可歸為時鍾域類別。如圖6-2所示,通過一個簡單門控時鍾創建了一個新的時鍾域。我們知道,這類時鍾控製在FPGA設計中並不被推崇(可以使用時鍾使能替代時鍾門控),然而它卻非常有利於我們理解時鍾域這一概念。
本章我們將著重詳細討論以下主題:
l 兩個不同時鍾域之間傳輸信號。
n 亞穩態的產生以及對設計的可靠性的影響
n 通過相位控製避免亞穩態
n 在時鍾域之間傳輸單個信號,將信號打兩拍
n 使用FIFO在時鍾域之間傳輸多位數據
n 使用分區同步器模塊提高設計的組織架構
l 處理ASIC驗證原型裏的門控時鍾
n 建立一個單時鍾模塊
n 自動門控移除

圖6-2:通過門控時鍾創建的時鍾域
[page]
6.1 跨時鍾域
設計中包含多時鍾域,首先要解決的是在不同時鍾域之間傳輸信號的問題。信號跨時鍾域傳輸將會是一個大問題,原因如下:
1、 信(xin)號(hao)跨(kua)時(shi)鍾(zhong)域(yu)傳(chuan)輸(shu)產(chan)生(sheng)的(de)故(gu)障(zhang)總(zong)是(shi)不(bu)太(tai)容(rong)易(yi)複(fu)現(xian)。設(she)計(ji)中(zhong)如(ru)果(guo)存(cun)在(zai)兩(liang)個(ge)異(yi)步(bu)時(shi)鍾(zhong)域(yu),故(gu)障(zhang)往(wang)往(wang)與(yu)這(zhe)兩(liang)個(ge)時(shi)鍾(zhong)沿(yan)的(de)相(xiang)對(dui)時(shi)序(xu)有(you)關(guan)。來(lai)自(zi)片(pian)外(wai)時(shi)鍾(zhong)源(yuan)的(de)時(shi)鍾(zhong)通(tong)常(chang)與(yu)器(qi)件(jian)實(shi)際(ji)功(gong)能(neng)並(bing)無(wu)任(ren)何(he)關(guan)聯(lian)。
2、 根據技術的不同,問題也不一樣。(盡管由於其他因素的影響,這種情況並不總是成立)我wo們men常chang常chang會hui發fa現xian,如ru果guo約yue束shu較jiao小xiao的de建jian立li和he保bao持chi時shi間jian,從cong統tong計ji上shang來lai說shuo高gao速su設she計ji技ji術shu比bi低di速su設she計ji技ji術shu更geng不bu容rong易yi產chan生sheng故gu障zhang。同tong時shi,其qi它ta因yin素su,比bi如ru同tong步bu器qi件jian中zhong設she計ji實shi現xian對dui輸shu出chu的de緩huan衝chong,也ye會hui對dui一yi個ge可ke能neng的de故gu障zhang產chan生sheng顯xian著zhu影ying響xiang。
3、 EDA工gong具ju一yi般ban不bu會hui探tan測ce和he標biao注zhu這zhe類lei問wen題ti,靜jing態tai時shi序xu分fen析xi工gong具ju是shi基ji於yu獨du立li的de時shi鍾zhong區qu域yu來lai進jin行xing時shi序xu分fen析xi,而er且qie隻zhi有you在zai特te定ding的de方fang式shi下xia根gen據ju指zhi定ding的de要yao求qiu才cai能neng進jin行xing跨kua時shi鍾zhong域yu的de時shi序xu分fen析xi。
4、 通(tong)常(chang)來(lai)說(shuo),如(ru)果(guo)沒(mei)有(you)很(hen)好(hao)地(di)理(li)解(jie),跨(kua)時(shi)鍾(zhong)域(yu)故(gu)障(zhang)難(nan)以(yi)探(tan)測(ce)且(qie)難(nan)以(yi)調(tiao)試(shi)。所(suo)以(yi)所(suo)有(you)跨(kua)時(shi)鍾(zhong)域(yu)接(jie)口(kou)都(dou)必(bi)須(xu)要(yao)在(zai)任(ren)何(he)功(gong)能(neng)實(shi)現(xian)之(zhi)前(qian)被(bei)很(hen)好(hao)地(di)定(ding)義(yi)和(he)處(chu)理(li)。
讓我們首先來看看在不同時鍾域之間傳輸信號到底會產生什麼錯誤。考慮圖6-3所示的情況,一個信號在兩個時鍾域之間傳播。
如圖6-4所示,低速時鍾的周期是高速時鍾周期的兩倍。低速時鍾上升沿與高速時鍾上升沿之間的間隔為常量,而且總是等於dC。由於這兩個時鍾的這種相位匹配關係,dC總是保持不變(假定頻率沒有漂移),而且在這個例子中,dC總是大於邏輯延時與高速時鍾驅動的觸發器建立時間之和。

圖6-3:時鍾域之間的簡單信號傳輸

圖6-4:兩個時鍾域之間的時序關係
當(dang)這(zhe)些(xie)時(shi)鍾(zhong)一(yi)啟(qi)動(dong),它(ta)們(men)之(zhi)間(jian)存(cun)在(zai)一(yi)個(ge)固(gu)定(ding)的(de)相(xiang)位(wei)關(guan)係(xi),如(ru)此(ci)可(ke)以(yi)避(bi)免(mian)任(ren)何(he)建(jian)立(li)時(shi)間(jian)和(he)保(bao)持(chi)時(shi)間(jian)違(wei)規(gui)。隻(zhi)要(yao)時(shi)鍾(zhong)沒(mei)有(you)漂(piao)移(yi),就(jiu)沒(mei)有(you)任(ren)何(he)時(shi)序(xu)違(wei)規(gui)出(chu)現(xian),並(bing)且(qie)器(qi)件(jian)會(hui)如(ru)預(yu)想(xiang)那(na)樣(yang)工(gong)作(zuo)。現(xian)在(zai)我(wo)們(men)再(zai)考(kao)慮(lv)另(ling)外(wai)一(yi)種(zhong)情(qing)況(kuang),同(tong)樣(yang)的(de)時(shi)鍾(zhong)上(shang)電(dian)後(hou)的(de)相(xiang)位(wei)關(guan)係(xi)如(ru)圖(tu)6-5所示。

圖6-5:會造成時序違規的時鍾相位關係
圖6-5中zhong兩liang個ge時shi鍾zhong之zhi間jian的de這zhe種zhong相xiang位wei關guan係xi就jiu會hui造zao成cheng時shi序xu問wen題ti。這zhe種zhong情qing況kuang會hui在zai任ren意yi頻pin率lv的de兩liang個ge時shi鍾zhong域yu之zhi間jian。然ran而er,如ru果guo時shi鍾zhong的de頻pin率lv匹pi配pei不bu對dui,這zhe種zhong時shi序xu問wen題ti在zai這zhe種zhong情qing況kuang下xia也ye不bu會hui發fa生sheng。
總結來說,時鍾同步問題在FPGAshejizhongtongchangshiyizhongbukefuxiandewenti,erqiehuiduishejidekekaoxingdailaiyanzhonghouguo。houmianwomenhuitaolunjiejuezheleiwentidefangan,zaicizhiqian,womenbixuyaotaolundangjianlihebaochishijianweiguishidaodihuifashengshenme。xiayixiaojiejiushiguanyuzhegezhuti。
6.1.1 亞穩態
觸發器的建立時間和保持時間在時鍾上升沿左右定義了一個時間窗口,如果觸發器的數據輸入端口上數據在這個時間窗口內發生變化(或者數據更新),那麼就會產生時序違規。存在這個時序違規是因為建立時間要求和保持時間要求被違反了,此時觸發器內部的一個節點(一個內部節點或者要輸出到外部節點)可能會在一個電壓範圍內浮動,無法穩定在邏輯0或者邏輯1狀態。換句話說,如果數據在上述窗口中被采集,觸發器中的晶體管不能可靠地設置為邏輯0或者邏輯1對應的電平上。所以此時的晶體管並未處於飽和區對應的高或者低電平,而是在穩定到一個確定電平之前,徘徊在一個中間電平狀態(這個中間電平或許是一個正確值,也許不是)。如圖6-6所示,這就是所謂的亞穩態。

圖6-6:時序違規導致亞穩態
如圖6-6的波形所示,信號的跳變發生在建立和保持邊界組成的時間窗口內,這意味著輸出不會是邏輯0或邏輯1對dui應ying的de確que定ding電dian平ping,而er是shi它ta們men之zhi間jian的de一yi個ge中zhong間jian電dian平ping。如ru果guo觸chu發fa器qi包bao含han有you一yi個ge輸shu出chu緩huan衝chong,那na麼me亞ya穩wen態tai本ben身shen就jiu可ke以yi稱cheng為wei隨sui著zhe內nei部bu信xin號hao的de逐zhu漸jian穩wen定ding而er在zai輸shu出chu上shang表biao現xian的de雜za散san過guo渡du。輸shu出chu保bao持chi亞ya穩wen態tai的de時shi間jian是shi隨sui機ji的de,甚shen至zhi可ke能neng在zai整zheng個ge時shi鍾zhong周zhou期qi內nei都dou保bao持chi亞ya穩wen態tai。那na麼me,如ru果guo這zhe個ge亞ya穩wen態tai值zhi輸shu入ru到dao組zu合he邏luo輯ji,根gen據ju邏luo輯ji門men電dian路lu的de切qie換huan門men檻kan,錯cuo誤wu的de操cao作zuo就jiu可ke以yi發fa生sheng。從cong時shi序xu收shou斂lian的de角jiao度du來lai說shuo,兩liang個ge觸chu發fa器qi之zhi間jian的de組zu合he邏luo輯ji延yan時shi都dou要yao求qiu要yao小xiao於yu最zui小xiao的de時shi鍾zhong周zhou期qi,但dan是shi這zhe種zhong亞ya穩wen態tai信xin號hao保bao持chi亞ya穩wen態tai的de時shi間jian,本ben身shen就jiu是shi變bian相xiang地di增zeng加jia了le邏luo輯ji延yan時shi。很hen顯xian然ran,一yi個ge亞ya穩wen態tai信xin號hao會hui給gei設she計ji帶dai來lai致zhi命ming的de功gong能neng故gu障zhang,而er且qie該gai信xin號hao也ye將jiang無wu法fa在zai各ge個ge時shi鍾zhong沿yan上shang采cai集ji到dao一yi致zhi的de結jie果guo。
事實上需要注意的是,在FPGA設she計ji流liu程cheng中zhong想xiang通tong過guo仿fang真zhen來lai確que定ding亞ya穩wen態tai對dui設she計ji的de危wei害hai是shi非fei常chang困kun難nan的de。純chun數shu字zi的de仿fang真zhen器qi並bing不bu能neng檢jian查zha到dao建jian立li和he保bao持chi違wei規gui,從cong而er在zai違wei規gui發fa生sheng時shi,仿fang真zhen出chu一yi個ge邏luo輯ji“X”(未知)值。而普通的RTL仿(fang)真(zhen),並(bing)不(bu)會(hui)出(chu)現(xian)建(jian)立(li)和(he)保(bao)持(chi)違(wei)規(gui),所(suo)以(yi)也(ye)就(jiu)不(bu)會(hui)有(you)信(xin)號(hao)出(chu)現(xian)亞(ya)穩(wen)態(tai)狀(zhuang)態(tai)。盡(jin)管(guan)門(men)級(ji)仿(fang)真(zhen)的(de)時(shi)候(hou)會(hui)檢(jian)查(zha)建(jian)立(li)和(he)保(bao)持(chi)是(shi)否(fou)違(wei)規(gui),但(dan)是(shi)仿(fang)真(zhen)由(you)兩(liang)個(ge)異(yi)步(bu)信(xin)號(hao)對(dui)齊(qi)而(er)導(dao)致(zhi)一(yi)個(ge)同(tong)步(bu)故(gu)障(zhang)依(yi)然(ran)是(shi)一(yi)件(jian)十(shi)分(fen)困(kun)難(nan)的(de)事(shi)情(qing)。尤(you)其(qi)困(kun)難(nan)的(de)是(shi),設(she)計(ji)或(huo)者(zhe)驗(yan)證(zheng)工(gong)程(cheng)師(shi)並(bing)不(bu)是(shi)在(zai)設(she)計(ji)伊(yi)始(shi)即(ji)查(zha)找(zhao)問(wen)題(ti)。那(na)麼(me),理(li)解(jie)如(ru)何(he)保(bao)持(chi)設(she)計(ji)的(de)可(ke)靠(kao)性(xing)以(yi)及(ji)如(ru)何(he)避(bi)免(mian)需(xu)要(yao)通(tong)過(guo)仿(fang)真(zhen)來(lai)揭(jie)露(lu)設(she)計(ji)的(de)同(tong)步(bu)問(wen)題(ti),就(jiu)顯(xian)得(de)十(shi)分(fen)重(zhong)要(yao)了(le)。解(jie)決(jue)亞(ya)穩(wen)態(tai)的(de)方(fang)法(fa)有(you)很(hen)多(duo),後(hou)麵(mian)我(wo)們(men)將(jiang)逐(zhu)一(yi)進(jin)行(xing)討(tao)論(lun)。
[page]
6.1.2 解決亞穩態方案1:相位控製
考慮這樣一個設計,兩個時鍾域的周期不同,而且相位關係任意。如果至少有一個時鍾由FPGA內部的PLL或者DLL控製,而且在PLL或者DLL的精度範圍內,其中一個時鍾的周期是另外一個時鍾周期的數倍。那麼如圖6-7所示,通過相位對齊可以避免實現違規。
kaolvzheyangyigelizi,yigexinhaocongdisushizhongyuchuandijinrulingyigeshizhongyu,ercishizhongyudezhouqishidisushizhongyudeyiban。genjuqianmiandefenxi,ruguomeiyourenhexiangweiguanxidebaozheng,nameshixuweiguijiuyoukenengfasheng。ranhou,tongguoshiyongDLL由低速時鍾派生這個高速時鍾,那麼相位對齊就可以達成。
圖6-7中,DLL調整高速時鍾(采集)的相位來對齊低速時鍾(發送)。數據在兩個時鍾域之間傳遞的時間是dC,該gai傳chuan遞di時shi間jian總zong是shi處chu於yu其qi最zui大da可ke能neng值zhi。本ben例li中zhong,隻zhi要yao從cong低di速su觸chu發fa器qi到dao高gao速su觸chu發fa器qi的de傳chuan播bo延yan時shi小xiao於yu高gao速su時shi鍾zhong周zhou期qi,那na麼me就jiu不bu會hui有you建jian立li時shi間jian違wei規gui發fa生sheng。如ru果guo因yin為wei時shi鍾zhong歪wai斜xie不bu夠gou小xiao而er導dao致zhi保bao持chi時shi間jian要yao求qiu無wu法fa滿man足zu,那na麼me可ke以yi通tong過guo配pei置zhi實shi用yong高gao速su時shi鍾zhong的de下xia降jiang沿yan來lai采cai集ji信xin號hao,當dang然ran前qian提ti是shi有you足zu夠gou的de時shi序xu餘yu量liang能neng確que保bao建jian立li時shi間jian要yao求qiu得de到dao滿man足zu。

圖6-7:使用DLL對齊相位
總結來說,相位控製技術可以在一個時鍾頻率是另外一個時鍾的數倍且其中一個時鍾可以由FPGA內部PLL或者DLL控製時使用。
在很多例子中,設計控製時鍾域之間的相位關係是很奢侈的。尤其是時序要求由FPG**外的芯片施加,或者時鍾域之間沒有任何確定相位關係的時候。舉例來說,如果FPGAzailianggexitongzhijiantigongleyigejiekou,erzhelianggexitongshijiazaixinpianshurushuchuyanshishangdeshixuyaoqiufeichangjinzhang,tiaozhengrenhezhelianggexitongdeshizhongxiangweishibukenengde。leisizhezhonglizizaishijianzhonghuijingchangyudao,suoyixuyaoshiyongxindefangfalaijiejue,xiayijiejiangtaolunzhezhongxindefangfa。
6.1.3 解決亞穩態方案2:打兩拍處理,即寄存兩拍
跨(kua)越(yue)兩(liang)個(ge)異(yi)步(bu)時(shi)鍾(zhong)域(yu)傳(chuan)輸(shu)單(dan)比(bi)特(te)信(xin)號(hao)時(shi),可(ke)以(yi)使(shi)用(yong)打(da)兩(liang)拍(pai)技(ji)術(shu)。根(gen)據(ju)上(shang)一(yi)節(jie)的(de)討(tao)論(lun),建(jian)立(li)或(huo)保(bao)持(chi)時(shi)間(jian)違(wei)規(gui)會(hui)導(dao)致(zhi)一(yi)個(ge)觸(chu)發(fa)器(qi)內(nei)節(jie)點(dian)上(shang)電(dian)平(ping)徘(pai)徊(huai)在(zai)一(yi)個(ge)中(zhong)間(jian)狀(zhuang)態(tai),從(cong)而(er)產(chan)生(sheng)亞(ya)穩(wen)態(tai)問(wen)題(ti),而(er)且(qie)信(xin)號(hao)從(cong)這(zhe)種(zhong)中(zhong)間(jian)狀(zhuang)態(tai)到(dao)一(yi)個(ge)穩(wen)定(ding)狀(zhuang)態(tai)需(xu)要(yao)時(shi)間(jian),此(ci)時(shi)間(jian)的(de)長(chang)度(du)未(wei)知(zhi)。這(zhe)個(ge)未(wei)知(zhi)的(de)時(shi)間(jian)會(hui)被(bei)加(jia)入(ru)到(dao)時(shi)鍾(zhong)到(dao)輸(shu)出(chu)的(de)時(shi)間(jian)(Tco)裏(影響隨後路徑上的延時),qiehuizaixiayijidaozhiyigeshixuweigui。ruguogaixinhaoshurudaoyigekongzhifenzhihuozheyigepanjueshu,najiangshifeichangweixiande。buxingdeshi,meiyouhenhaodebanfalaiyucezhezhongyawentaijianghuichixuduochangshijian,yemeiyouhenhaodebanfajiangzhexiexinxifanbiaozhudaoshixufenxigongjuyijiyouhuagongju。jiadinglianggeshizhongyuzhijianwanquanyibu(即無法實現相位控製),那麼盡可能避免亞穩態的一個最簡單辦法就是使用雙觸發。在其它也許教科書中也稱這種方法為同步位、兩級觸發器或兩級同步器。
圖6-8所示的配置中,同步器電路(其輸入為Din)中的第一拍後也許會產生亞穩態,但是信號有機會在其被第二級鎖存以及被其它邏輯看到之前穩定下來,如圖6-9所示。

圖6-8:打兩拍處理

圖6-9:打兩拍重同步器
圖6-9中,Dsync是同步器中第一個觸發器的輸出,而Dout是第二個觸發器的輸出。Dout本(ben)質(zhi)上(shang)是(shi)等(deng)到(dao)同(tong)步(bu)後(hou)的(de)信(xin)號(hao)一(yi)旦(dan)穩(wen)定(ding)下(xia)來(lai)後(hou)將(jiang)其(qi)往(wang)下(xia)傳(chuan),並(bing)且(qie)確(que)保(bao)其(qi)它(ta)電(dian)路(lu)不(bu)會(hui)收(shou)到(dao)亞(ya)穩(wen)態(tai)信(xin)號(hao)。同(tong)步(bu)器(qi)兩(liang)級(ji)觸(chu)發(fa)器(qi)之(zhi)間(jian)不(bu)要(yao)添(tian)加(jia)任(ren)何(he)邏(luo)輯(ji),這(zhe)樣(yang)可(ke)以(yi)使(shi)得(de)信(xin)號(hao)獲(huo)得(de)盡(jin)可(ke)能(neng)長(chang)的(de)時(shi)間(jian)來(lai)回(hui)到(dao)穩(wen)定(ding)狀(zhuang)態(tai)。所(suo)以(yi)總(zong)結(jie)來(lai)說(shuo),打(da)兩(liang)拍(pai)同(tong)步(bu)器(qi)在(zai)單(dan)比(bi)特(te)信(xin)號(hao)跨(kua)異(yi)步(bu)時(shi)鍾(zhong)傳(chuan)輸(shu)時(shi),用(yong)來(lai)將(jiang)該(gai)單(dan)比(bi)特(te)信(xin)號(hao)重(zhong)新(xin)同(tong)步(bu)到(dao)異(yi)步(bu)時(shi)鍾(zhong)域(yu)。
lilunshanglaishuo,diyigechufaqideshuchuyinggaiyizhibaochibuquedingdeyawentai,danshizaixianshizhongtahuishoudaoshijixitongyixilieyinsuyingxianghouwendingxialai。dagebifang,xiangxiangyixiayigepiqiuwendingditingzhuzaiyigeshanjianshang,congrenhefangxiangshangqingtuiyixiaqiu,tadouhuiyouxiangfandefangxiangcongshanshanggunluo。tongyang,chuyuyawentaideyigeluojimen,youfare、輻射等產生的隨機波動都會促使該亞穩態回到邏輯0或者邏輯1對應的穩態。
使shi用yong打da兩liang拍pai技ji術shu采cai樣yang一yi個ge異yi步bu信xin號hao時shi,無wu法fa完wan全quan預yu知zhi我wo們men想xiang要yao的de信xin號hao跳tiao變bian,將jiang在zai當dang前qian時shi鍾zhong發fa生sheng還hai是shi下xia一yi個ge時shi鍾zhong發fa生sheng。當dang信xin號hao屬shu於yu一yi個ge數shu據ju總zong線xian中zhong的de一yi部bu分fen(有些數據位比其它比特晚一個時鍾周期跳變)時shi,或huo者zhe關guan鍵jian數shu據ju必bi須xu要yao精jing確que到dao單dan個ge時shi鍾zhong周zhou期qi內nei到dao達da時shi,這zhe種zhong打da兩liang拍pai技ji術shu是shi沒mei有you幫bang助zhu的de。不bu過guo,對dui於yu控kong製zhi信xin號hao來lai說shuo,如ru果guo它ta們men可ke以yi忍ren受shou正zheng負fu一yi個ge或huo更geng多duo個ge時shi鍾zhong周zhou期qi的de變bian化hua,這zhe種zhong技ji術shu還hai是shi非fei常chang有you用yong的de。
舉例來說,一個外部事件控製一個比特來觸發FPGA內nei部bu動dong作zuo,這zhe個ge觸chu發fa動dong作zuo發fa生sheng的de頻pin率lv可ke以yi非fei常chang的de低di,比bi如ru兩liang個ge事shi件jian之zhi間jian的de間jian隔ge可ke以yi達da到dao微wei秒miao甚shen至zhi毫hao秒miao級ji。在zai這zhe個ge例li子zi中zhong,一yi些xie額e外wai的de數shu納na秒miao的de延yan時shi並bing不bu會hui影ying響xiang該gai事shi件jian的de行xing為wei。如ru果guo由you外wai部bu事shi件jian驅qu動dong的de改gai比bi特te輸shu入ru到dao一yi個ge狀zhuang態tai機ji的de控kong製zhi結jie構gou中zhong,通tong過guo同tong步bu器qi打da兩liang拍pai處chu理li,那na麼me想xiang要yao的de信xin號hao變bian化hua隻zhi是shi被bei延yan遲chi了le一yi個ge時shi鍾zhong周zhou期qi。然ran而er,如ru果guo沒mei有you進jin行xing打da兩liang拍pai處chu理li,那na麼me判pan決jue邏luo輯ji也ye許xu會hui從cong該gai異yi步bu信xin號hao的de亞ya穩wen態tai狀zhuang態tai解jie碼ma出chu不bu同tong狀zhuang態tai跳tiao轉zhuan信xin息xi,並bing使shi得de狀zhuang態tai機ji同tong時shi跳tiao轉zhuan到dao不bu同tong的de分fen支zhi。
除了純數字係統外,還有一種混合信號係統,這種係統會通常會產生異步反饋信號到FPGA,如圖6-10所示。

圖6-10:重新同步模擬反饋
上述對異步信號打兩拍的同步器的Verilog代碼如下所示:
module analog_interface(
...
output regfbr2,
input feedback);
reg fbr1;
always @ (posedge clk) begin
fbr1<=feedback;
fbr2<=fbr1;//;doubleflop
end
...
反饋信號會產生時序違規,而且fbr1在時鍾沿後一個不確定的時間內處於亞穩態。那麼,其它邏輯隻可以使用的信號fbr2。
shiyongdaliangpaitongbuchulijishushizhidingshixuyueshushifeichangzhongyaode,xuyaoshijiadeyueshushijiangweiyudiyigehediergejicunqishizhongyuzhijiandexinhaolujingzhidingweijialujing,jirangshixufenxiqibufencilujing。yinweidaliangpaitongbuqijiegouyongyuzhongxintongbuxinhao,zaizhelianggeshizhongyuzhijianbingmeiyouxuyaofenxidetongbulujing。ciwai,ruqiansuoshuzhelianggechufaqizhijiandeshixuyaojinkenengdexiao,zheyangkeyijianxiaoyawentaibeichuanbodaodierjichufaqidekenengxing。
[page]
6.1.4 解決亞穩態方案3:使用FIFO結構
跨時鍾域傳輸數據用得最多的方法就是使用先入先出(即FIFO)結構。FIFO可以用於在兩個異步時鍾域之間傳輸多個比特信號。我們通常看到的FIFO應用包括在兩個標準總線之間傳輸數據,以及從可突發訪問的存儲器中讀出數據或者對其寫入數據。例如,如圖6-11所示,顯示的是一個可突發訪問存儲器與一個 PCI總線之間的接口。

圖6-11:FIFO在PCI應用中
在很多不同的應用中,FIFO都是一種非常有用的數據結構,不過這裏我們僅僅關注其處理跨時鍾域突發數據的能力。
FIFO非fei常chang類lei似si於yu在zai超chao市shi裏li的de結jie賬zhang通tong道dao,每mei個ge客ke戶hu到dao達da結jie賬zhang台tai的de時shi間jian多duo少shao有you點dian隨sui機ji性xing,結jie賬zhang速su度du在zai一yi定ding意yi義yi上shang說shuo是shi勻yun速su的de。有you時shi候hou結jie賬zhang客ke戶hu可ke能neng會hui很hen少shao,而er其qi他ta某mou些xie時shi候hou又you會hui突tu發fa很hen多duo客ke戶hu需xu要yao結jie賬zhang,收shou款kuan員yuan不bu可ke能neng立li刻ke為wei每mei個ge客ke戶hu服fu務wu,所suo以yi需xu要yao排pai隊dui。抽chou象xiang地di來lai說shuo,我wo們men稱cheng這zhe種zhong排pai成cheng一yi隊dui的de數shu據ju為wei一yi個ge序xu列lie。隨sui後hou,收shou款kuan員yuan會hui以yi或huo多duo或huo少shao平ping均jun的de速su度du為wei每mei一yi個ge顧gu客ke服fu務wu,並bing不bu會hui理li會hui隊dui列lie的de長chang度du。假jia如ru需xu要yao結jie賬zhang的de顧gu客ke湧yong入ru收shou銀yin台tai的de速su度du超chao過guo了le收shou款kuan員yuan的de服fu務wu速su度du,那na麼me這zhe種zhong收shou款kuan結jie構gou就jiu無wu法fa支zhi撐cheng了le。那na麼me此ci時shi,就jiu需xu要yao采cai取qu措cuo施shi,要yao麼me加jia快kuai收shou款kuan員yuan的de服fu務wu速su率lv,要yao麼me減jian少shao新xin增zeng顧gu客ke數shu。
tongyangdedaoliyecunzaiyushujuchuanshuzhong,shujukenengdaodamougeshizhongyudejiangeshiwanquansuijide,youshihouhuoxuhuimianlinyigehendatufashujukuai。zhezhongqingkuangxia,chuzailingyigeshizhongyudejieshoushebeizhinengyizhidingdesulvlaichulishuju。rutu6-12所示,一個FIFO被用於緩存數據,這樣在設備中就形成了一個數據序列。

圖6-12:異步FIFO
通過使用異步FIFO,數據發送端可以以隨意的間隔發送數據,而接收端也可以以其固有的帶寬從數據序列裏取出數據並進行處理。由於任何由FIFO實現的數據序列的長度都不能無限製,所以需要一些控製來防止FIFO溢出。這時候,有兩種選項可以采用:
l 事先定義好的發送速率(可突發或不可突發),最小接收速率以及對應最大的序列尺寸。
l 握手控製。
注意,發送設備的時鍾頻率沒有必要高於接收端設備,否則容易造成溢出。以較慢的頻率將數據送入FIFO,那麼數據寫入FIFO的de時shi鍾zhong周zhou期qi數shu要yao少shao於yu接jie收shou端duan將jiang要yao處chu理li數shu據ju的de時shi鍾zhong周zhou期qi數shu。那na麼me,如ru果guo不bu采cai取qu握wo手shou控kong製zhi,就jiu必bi須xu要yao理li解jie以yi上shang描miao述shu會hui產chan生sheng溢yi出chu的de最zui壞huai的de情qing況kuang。
在任何一段時間內,假設數據發送寫FIFOdesulvdayujieshouchulishujudesulv,namehenqingyidishixitongwufaweichi。yinweimeiyourenhecunchushebeikeyicundexiawuxiandeshuju,zhezhongwentixuyaozaixitongjiegoucengjicainengjiejue。tongchanglaishuo,tufafasongyibanshiyixiaozhouqixinghuofeizhouqixingfasheng。suoyiFIFO的最大尺寸要大於等於(具體還要根據數據接收器的屬性)突發的尺寸。
在很多例子中,不管是突發尺寸還是數據到達的分配都無法很好地定義。這種時候,就有必要使用握手控製來防止FIFO產生數據溢出。如圖6-13所示,這種握手控製通常由一些標誌信號來實現。這些標誌信號,一個是發送側的滿標誌,用於提示FIFO沒有多餘空間存儲數據了,另一個是而空標誌,用於提示接收側,FIFO中沒有數據需要處理了。管理這些握手信號可能還需要一個狀態機,正如圖6-13所示。

圖6-13:FIFO的握手控製
FIFO在FPGA內一般是通過封裝一個雙口RAM來lai實shi現xian。表biao麵mian上shang看kan微wei不bu足zu道dao的de標biao誌zhi信xin號hao如ru空kong和he滿man指zhi示shi等deng,實shi際ji上shang是shi實shi現xian起qi來lai反fan而er比bi較jiao困kun難nan。原yuan因yin就jiu在zai於yu輸shu入ru控kong製zhi常chang常chang需xu要yao依yi據ju輸shu出chu來lai產chan生sheng,同tong樣yang的de輸shu出chu控kong製zhi也ye常chang常chang需xu要yao依yi據ju輸shu入ru來lai產chan生sheng。例li如ru,驅qu動dong輸shu入ru的de邏luo輯ji必bi須xu要yao知zhi道daoFIFO是否已滿,而這隻能通過獲取從輸出端讀出的數據數量才能得知。同樣的道理,在輸出側從FIFO讀數據的邏輯必須要了解FIFO中是否還有數據(即FIFO是否已空),而這隻能通過輸入端口的寫指針才能判決。
這裏我們探討使用FIFO在兩個異步時鍾域之間傳輸數據,不過同樣會麵臨實現FIFO本身時遇到的握手標誌問題。為了在兩個時鍾域之間傳遞必要的信號,我們必須重回上一節討論到的打兩拍技術。下麵我們以圖6-14所示的簡單異步FIFO框圖為例進行闡述。

圖6-14:異步FIFO簡單框圖
圖6-14中zhong,在zai產chan生sheng空kong和he滿man信xin號hao時shi,寫xie地di址zhi和he讀du地di址zhi都dou必bi須xu是shi異yi步bu傳chuan遞di到dao對dui方fang時shi鍾zhong域yu中zhong。這zhe樣yang在zai重zhong新xin同tong步bu多duo比bi特te地di址zhi總zong線xian時shi,問wen題ti就jiu來lai了le,即ji根gen據ju各ge個ge比bi特te不bu同tong的de走zou線xian,總zong線xian中zhong某mou些xie比bi特te可ke能neng會hui比bi其qi它ta比bi特te晚wan一yi個ge時shi鍾zhong周zhou期qi。換huan句ju話hua說shuo,由you於yu兩liang個ge時shi鍾zhong域yu異yi步bu的de自zi然ran屬shu性xing,使shi得de地di址zhi總zong線xian有you些xie比bi特te在zai一yi個ge時shi鍾zhong沿yan上shang被bei采cai集ji,而er另ling一yi些xie比bi特te卻que在zai下xia一yi個ge時shi鍾zhong沿yan上shang被bei采cai集ji,當dang然ran這zhe取qu決jue於yu數shu據ju是shi否fou在zai第di一yi個ge觸chu發fa器qi的de時shi鍾zhong沿yan到dao達da之zhi前qian提ti前qian足zu夠gou長chang時shi間jian有you效xiao。如ru果guo上shang述shu情qing況kuang發fa生sheng,那na麼me會hui給gei係xi統tong帶dai來lai嚴yan重zhong後hou果guo,因yin為wei二er進jin製zhi地di址zhi中zhong有you些xie位wei變bian化hua有you些xie位wei卻que沒mei有you,因yin此ci接jie收shou邏luo輯ji將jiang會hui得de到dao一yi個ge完wan全quan無wu效xiao的de地di址zhi,這zhe個ge地di址zhi既ji不bu是shi當dang前qian地di址zhi也ye不bu是shi上shang一yi個ge地di址zhi。
zhegewentikeyitongguojiangerjinzhidizhizhuanhuanweigeleimalaijiejue。geleimashiyizhongfeichangteshudejishuqi,lianggexianglindizhizhongzhiyouyigebiteshibutongde。suoyidangdizhigaibianshi,zhixuyaogaibiandizhizhongdeyigebitejike,zheyangjiukeyibimianshangmiantidaodewenti。ruguofashengbianhuadenagebitebingmeiyoubeixiayigeshizhongzhengquecaiji,dizhixianshanghui“同步地”保留舊的地址值。那麼,任何不正確的地址(即既不是當前地址也不是舊地址)操作都被消除了。所以總結來說,格雷碼常用來在異步時鍾域之間傳遞多比特計數值,且多用於FIFO內。
需xu要yao額e外wai注zhu意yi的de一yi點dian是shi,由you於yu隻zhi有you讀du寫xie地di址zhi是shi需xu要yao在zai異yi步bu時shi鍾zhong域yu之zhi間jian傳chuan遞di,所suo以yi地di址zhi就jiu有you可ke能neng比bi預yu想xiang的de晚wan一yi個ge時shi鍾zhong周zhou期qi,同tong時shi意yi味wei著zhe空kong或huo者zhe滿man標biao誌zhi置zhi位wei晚wan一yi個ge時shi鍾zhong周zhou期qi,但dan是shi這zhe並bing不bu表biao示shi錯cuo誤wu導dao致zhi了le數shu據ju溢yi出chu狀zhuang況kuang。如ru果guo這zhe種zhong情qing況kuang在zai傳chuan遞di地di址zhi到dao讀du時shi鍾zhong域yu時shi,讀du邏luo輯ji將jiang簡jian單dan地di認ren為wei數shu據ju沒mei有you寫xie入ru,且qie將jiang認ren為weiFIFO已空盡管此時 FIFO已經被寫入一個數據。這隻會對總的吞吐率有一些小影響,但是不會導致下溢(即讀已空的FIFO)狀況發生。同樣地,當地址被傳遞到寫時鍾域時,如果讀地址被延時了,那麼寫邏輯會認為FIFO裏沒有多餘空間,盡管此時FIFO還未滿。這同樣隻會對總的數據吞吐率有些微小影響,卻不會造成上溢(寫已滿的FIFO)發生。
FIFO是一種足夠通用的模塊,大部分FPGA供應商都提供了工具,可以讓客戶根據自己的要求來自動產生軟核。這些用戶FIFO可以像其它IP模塊那樣由用戶手動地在設計中例化。那麼,在一個FPGA設計中使用自己的FIFO時(shi),上(shang)述(shu)討(tao)論(lun)的(de)問(wen)題(ti)很(hen)可(ke)能(neng)將(jiang)不(bu)必(bi)由(you)設(she)計(ji)自(zi)己(ji)來(lai)解(jie)決(jue)。當(dang)然(ran),同(tong)樣(yang)的(de)問(wen)題(ti)也(ye)經(jing)常(chang)在(zai)異(yi)步(bu)時(shi)鍾(zhong)域(yu)之(zhi)間(jian)傳(chuan)遞(di)數(shu)據(ju)的(de)時(shi)候(hou)發(fa)生(sheng),所(suo)以(yi)理(li)解(jie)這(zhe)類(lei)設(she)計(ji)實(shi)踐(jian)對(dui)於(yu)一(yi)個(ge)高(gao)級(ji)FPGA設計者來說非常重要。
[page]
6.1.5 設計分區同步器模塊
在zai頂ding層ceng為wei設she計ji劃hua分fen好hao設she計ji分fen區qu是shi一yi個ge好hao的de設she計ji實shi踐jian行xing為wei,這zhe樣yang任ren何he功gong能neng模mo塊kuai外wai麵mian都dou包bao含han一yi個ge獨du立li的de同tong步bu器qi模mo塊kuai。這zhe樣yang有you利li於yu在zai劃hua分fen模mo塊kuai的de基ji礎chu上shang實shi現xian所suo謂wei的de理li想xiang時shi鍾zhong域yu情qing況kuang(即整個設計模塊隻有一個時鍾),如圖6-15所示。

圖6-15:設計分區同步器模塊
對dui設she計ji進jin行xing分fen區qu有you很hen多duo理li由you。首shou先xian,對dui每mei個ge獨du立li的de功gong能neng模mo塊kuai進jin行xing時shi序xu分fen析xi變bian得de簡jian易yi,因yin為wei模mo塊kuai都dou是shi完wan全quan的de同tong步bu設she計ji。其qi次ci,整zheng個ge同tong步bu模mo塊kuai中zhong的de時shi序xu例li外wai也ye很hen容rong易yi得de到dao定ding義yi。再zai次ci,底di層ceng模mo塊kuai的de同tong步bu器qi加jia時shi序xu例li外wai在zai代dai入ru到dao設she計ji頂ding層ceng時shi,大da大da降jiang低di了le由you於yu人ren為wei失shi誤wu造zao成cheng的de疏shu漏lou。所suo以yi,同tong步bu寄ji存cun器qi應ying該gai在zai功gong能neng模mo塊kuai外wai單dan獨du分fen區qu。還hai有you很hen多duo類lei似si的de設she計ji實shi踐jian在zai使shi用yongFPGA作為ASIC的設計原型時得到應用,下一節我們將再進行詳細地討論。
6.2 ASIC原型設計中的門控時鍾
ASIC設計一般對功耗非常敏感,同時ASIC的時鍾樹設計又非常靈活,所以會在整個設計中經常使用門控時鍾在邏輯不需要活動的時候來去使能這些邏輯。雖然使用FPGA作為ASIC的原型可以模擬整個邏輯功能,但是二者之間的有些物理屬性,如功耗方麵,還是不太一樣。那麼,要求FPGA來模擬ASIC的整個低功耗優化是沒有必要的。實際上,正是由於FPGA的粗放式的時鍾資源,讓其模擬這方麵功能也是不太可能的。這一節我們將討論一些解決這個問題方法,並且再討論一些可以應用於ASIC設計的技術來使FPGA原型設計更加容易。對於門控時鍾更詳細的容易可以參考前麵第三章。
6.2.1 時鍾模塊
如果一個ASIC設計中使用了大量的門控時鍾,建議將所有這些門控操作統一放在一個專門的時鍾生成模塊中,並與功能模塊隔離,如圖6-16所示。

圖6-16:統一的時鍾模塊
通過將時鍾門控置於一個單一的模塊,不但可以是約束處理更簡單,而且當要對FPGA原yuan型xing進jin行xing任ren何he修xiu改gai時shi也ye更geng容rong易yi。例li如ru,如ru果guo設she計ji者zhe選xuan擇ze某mou次ci編bian譯yi時shi刪shan除chu所suo有you門men控kong單dan元yuan,那na麼me一yi個ge單dan一yi的de模mo塊kuai裏li很hen容rong易yi實shi現xian。下xia一yi節jie我wo們men將jiang對dui此ci進jin行xing詳xiang細xi討tao論lun。
6.2.2 時鍾門控移除
有很多辦法可以從FPGA原型裏刪除時鍾門控,下麵的例子就顯示了一個很明顯,但卻也是很麻煩的一個方法。這個例子的代碼如下所示,該代碼是刪除FPGA原型裏所有的門控功能。
‘define FPGA
//‘define ASIC
module clocks_block(...)
‘ifdef ASIC
assign clock_domain_1=system_clock_1&clock_enable_1;
‘else
assign clock_domain_1=system_clock_1;
‘endif
如果上述代碼需要開放時鍾門控,那麼在FPGA原型設計中隻需要修改宏定義即可。不足之處是,任何時候要將FPGA原型轉化為ASIC設計時總是需要做出一些修改(其實就是修改宏定義)。很多設計者對此會感覺不是太舒服,因為他們認為二者使用的不是一樣的RTL。一(yi)個(ge)更(geng)好(hao)的(de)辦(ban)法(fa)是(shi)使(shi)用(yong)一(yi)個(ge)自(zi)動(dong)門(men)控(kong)刪(shan)除(chu)工(gong)具(ju)來(lai)消(xiao)除(chu)任(ren)何(he)認(ren)為(wei)造(zao)成(cheng)失(shi)誤(wu)的(de)可(ke)能(neng)。許(xu)多(duo)現(xian)代(dai)的(de)綜(zong)合(he)工(gong)具(ju)通(tong)過(guo)正(zheng)確(que)的(de)約(yue)束(shu),現(xian)在(zai)都(dou)提(ti)供(gong)這(zhe)項(xiang)功(gong)能(neng)。例(li)如(ru),Synplify就有一個稱為“Fix gated clocks”選項,就是用於自動地從時鍾線上將門控操作刪除,並將其移動到數據路徑上。我們來看下麵這個代碼示例:
module clockstest(
output reg oDat,
input iClk,iEnable,
input iDat);
wire gated_clock=iClk&iEnable;
always @ (posedge gated_clock)
oDat<=iDat;
endmodule
在上麵的代碼中,係統時鍾被一個使能信號門控產生一個門控時鍾。這個門控時鍾被用於驅動觸發器oDat,而oDat用於寄存器輸入iDat。如果沒有啟用“fixing the clock gating”選項,那麼綜合工具將會直接實現邏輯功能,如圖6-17所示。

圖6-17:直接時鍾門控
圖6-17的de邏luo輯ji實shi現xian中zhong,在zai時shi鍾zhong線xian上shang放fang置zhi了le門men控kong操cao作zuo。那na麼me設she計ji中zhong現xian在zai有you了le兩liang個ge時shi鍾zhong域yu,必bi須xu分fen別bie對dui它ta們men進jin行xing約yue束shu,而er且qie必bi須xu分fen別bie將jiang它ta們men布bu局ju到dao時shi鍾zhong資zi源yuan。但dan是shi,如ru果guo啟qi動dong了le時shi鍾zhong門men控kong刪shan除chu,這zhe個ge邏luo輯ji門men就jiu會hui比bi較jiao容rong易yi地di被bei移yi動dong到dao數shu據ju路lu徑jing上shang,如ru圖tu6-18所示。

圖6-18:時鍾門控刪除
現(xian)在(zai)大(da)部(bu)分(fen)邏(luo)輯(ji)器(qi)件(jian)裏(li)邏(luo)輯(ji)單(dan)元(yuan)都(dou)提(ti)供(gong)了(le)一(yi)個(ge)時(shi)鍾(zhong)使(shi)能(neng)輸(shu)入(ru),有(you)了(le)該(gai)使(shi)能(neng)輸(shu)入(ru)就(jiu)可(ke)以(yi)不(bu)使(shi)用(yong)本(ben)方(fang)案(an)。然(ran)而(er),如(ru)果(guo)一(yi)個(ge)特(te)定(ding)的(de)技(ji)術(shu)並(bing)未(wei)提(ti)供(gong)觸(chu)發(fa)器(qi)時(shi)鍾(zhong)使(shi)能(neng),那(na)麼(me)隻(zhi)能(neng)使(shi)用(yong)本(ben)技(ji)術(shu)來(lai)刪(shan)除(chu)時(shi)鍾(zhong)門(men)控(kong),隻(zhi)是(shi)這(zhe)樣(yang)就(jiu)將(jiang)會(hui)在(zai)數(shu)據(ju)路(lu)徑(jing)上(shang)增(zeng)加(jia)延(yan)時(shi)。
6.3要點總結
l 時鍾同步問題通常是不可複現的問題,並且會給FPGA設計帶來可靠性問題。
l 亞穩態會給FPGA帶來災難性故障。
l 相位控製技術在一個時鍾頻率是另外一個的數倍且其中一個時鍾可以由內部PLL或者DLL控製的時候使用。
l 打兩拍技術可用於在異步時鍾域之間同步單比特信號。
l 在打兩拍同步器中,時序分析應該忽略第一個觸發器,同時要確保兩個同步觸發器之間的延時最小。
l FIFO用於在兩個異步時鍾域之間傳遞多比特信號。
l 格雷碼用於在兩個異步時鍾域之間傳遞計數值數據,而且多用在FIFO內部。
l 同步寄存器應該在功能模塊外麵獨立分區。
l 如果可能,請盡量不要使用時鍾門控。若必須使用,請將所有的門控時鍾放置在一個專門的時鍾模塊中,並與其它功能模塊隔離。
相關閱讀:
【原創】初學者實用:數電和FPGA中常用觸發器的介紹
Altera的FPGA和SoC技術在DesignCon中贏得了設計創意獎
使用FPGA進行工業設計的五大優勢
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 大聯大世平集團首度亮相北京國際汽車展 攜手全球芯片夥伴打造智能車整合應用新典範
- 2026北京車展即將啟幕,高通攜手汽車生態“朋友圈”推動智能化體驗再升級
- 邊緣重構智慧城市:FPGA SoM 如何破解視頻係統 “重而慢”
- 如何使用工業級串行數字輸入來設計具有並行接口的數字輸入模塊
- 意法半導體將舉辦投資者會議探討低地球軌道(LEO)發展機遇
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall




