專家教你如何設計高級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:兩個時鍾域之間的時序關係
dangzhexieshizhongyiqidong,tamenzhijiancunzaiyigegudingdexiangweiguanxi,rucikeyibimianrenhejianlishijianhebaochishijianweigui。zhiyaoshizhongmeiyoupiaoyi,jiumeiyourenheshixuweiguichuxian,bingqieqijianhuiruyuxiangnayanggongzuo。xianzaiwomenzaikaolvlingwaiyizhongqingkuang,tongyangdeshizhongshangdianhoudexiangweiguanxirutu6-5所示。

圖6-5:會造成時序違規的時鍾相位關係
圖6-5zhonglianggeshizhongzhijiandezhezhongxiangweiguanxijiuhuizaochengshixuwenti。zhezhongqingkuanghuizairenyipinlvdelianggeshizhongyuzhijian。raner,ruguoshizhongdepinlvpipeibudui,zhezhongshixuwentizaizhezhongqingkuangxiayebuhuifasheng。
總結來說,時鍾同步問題在FPGA設(she)計(ji)中(zhong)通(tong)常(chang)是(shi)一(yi)種(zhong)不(bu)可(ke)複(fu)現(xian)的(de)問(wen)題(ti),而(er)且(qie)會(hui)對(dui)設(she)計(ji)的(de)可(ke)靠(kao)性(xing)帶(dai)來(lai)嚴(yan)重(zhong)後(hou)果(guo)。後(hou)麵(mian)我(wo)們(men)會(hui)討(tao)論(lun)解(jie)決(jue)這(zhe)類(lei)問(wen)題(ti)的(de)方(fang)案(an),在(zai)此(ci)之(zhi)前(qian),我(wo)們(men)必(bi)須(xu)要(yao)討(tao)論(lun)當(dang)建(jian)立(li)和(he)保(bao)持(chi)時(shi)間(jian)違(wei)規(gui)時(shi)到(dao)底(di)會(hui)發(fa)生(sheng)什(shen)麼(me)。下(xia)一(yi)小(xiao)節(jie)就(jiu)是(shi)關(guan)於(yu)這(zhe)個(ge)主(zhu)題(ti)。
6.1.1 亞穩態
觸發器的建立時間和保持時間在時鍾上升沿左右定義了一個時間窗口,如果觸發器的數據輸入端口上數據在這個時間窗口內發生變化(或者數據更新),那麼就會產生時序違規。存在這個時序違規是因為建立時間要求和保持時間要求被違反了,此時觸發器內部的一個節點(一個內部節點或者要輸出到外部節點)可能會在一個電壓範圍內浮動,無法穩定在邏輯0或者邏輯1狀態。換句話說,如果數據在上述窗口中被采集,觸發器中的晶體管不能可靠地設置為邏輯0或者邏輯1對應的電平上。所以此時的晶體管並未處於飽和區對應的高或者低電平,而是在穩定到一個確定電平之前,徘徊在一個中間電平狀態(這個中間電平或許是一個正確值,也許不是)。如圖6-6所示,這就是所謂的亞穩態。

圖6-6:時序違規導致亞穩態
如圖6-6的波形所示,信號的跳變發生在建立和保持邊界組成的時間窗口內,這意味著輸出不會是邏輯0或邏輯1duiyingdequedingdianping,ershitamenzhijiandeyigezhongjiandianping。ruguochufaqibaohanyouyigeshuchuhuanchong,nameyawentaibenshenjiukeyichengweisuizheneibuxinhaodezhujianwendingerzaishuchushangbiaoxiandezasanguodu。shuchubaochiyawentaideshijianshisuijide,shenzhikenengzaizhenggeshizhongzhouqineidoubaochiyawentai。name,ruguozhegeyawentaizhishurudaozuheluoji,genjuluojimendianludeqiehuanmenkan,cuowudecaozuojiukeyifasheng。congshixushouliandejiaodulaishuo,lianggechufaqizhijiandezuheluojiyanshidouyaoqiuyaoxiaoyuzuixiaodeshizhongzhouqi,danshizhezhongyawentaixinhaobaochiyawentaideshijian,benshenjiushibianxiangdizengjialeluojiyanshi。henxianran,yigeyawentaixinhaohuigeishejidailaizhimingdegongnengguzhang,erqiegaixinhaoyejiangwufazaigegeshizhongyanshangcaijidaoyizhidejieguo。
事實上需要注意的是,在FPGAshejiliuchengzhongxiangtongguofangzhenlaiquedingyawentaiduishejideweihaishifeichangkunnande。chunshuzidefangzhenqibingbunengjianzhadaojianlihebaochiweigui,congerzaiweiguifashengshi,fangzhenchuyigeluoji“X”(未知)值。而普通的RTLfangzhen,bingbuhuichuxianjianlihebaochiweigui,suoyiyejiubuhuiyouxinhaochuxianyawentaizhuangtai。jinguanmenjifangzhendeshihouhuijianzhajianlihebaochishifouweigui,danshifangzhenyoulianggeyibuxinhaoduiqierdaozhiyigetongbuguzhangyiranshiyijianshifenkunnandeshiqing。youqikunnandeshi,shejihuozheyanzhenggongchengshibingbushizaishejiyishijizhazhaowenti。name,lijieruhebaochishejidekekaoxingyijiruhebimianxuyaotongguofangzhenlaijielushejidetongbuwenti,jiuxiandeshifenzhongyaole。jiejueyawentaidefangfayouhenduo,houmianwomenjiangzhuyijinxingtaolun。
[page]
6.1.2 解決亞穩態方案1:相位控製
考慮這樣一個設計,兩個時鍾域的周期不同,而且相位關係任意。如果至少有一個時鍾由FPGA內部的PLL或者DLL控製,而且在PLL或者DLL的精度範圍內,其中一個時鍾的周期是另外一個時鍾周期的數倍。那麼如圖6-7所示,通過相位對齊可以避免實現違規。
kaolvzheyangyigelizi,yigexinhaocongdisushizhongyuchuandijinrulingyigeshizhongyu,ercishizhongyudezhouqishidisushizhongyudeyiban。genjuqianmiandefenxi,ruguomeiyourenhexiangweiguanxidebaozheng,nameshixuweiguijiuyoukenengfasheng。ranhou,tongguoshiyongDLL由低速時鍾派生這個高速時鍾,那麼相位對齊就可以達成。
圖6-7中,DLL調整高速時鍾(采集)的相位來對齊低速時鍾(發送)。數據在兩個時鍾域之間傳遞的時間是dC,gaichuandishijianzongshichuyuqizuidakenengzhi。benlizhong,zhiyaocongdisuchufaqidaogaosuchufaqidechuanboyanshixiaoyugaosushizhongzhouqi,namejiubuhuiyoujianlishijianweiguifasheng。ruguoyinweishizhongwaixiebugouxiaoerdaozhibaochishijianyaoqiuwufamanzu,namekeyitongguopeizhishiyonggaosushizhongdexiajiangyanlaicaijixinhao,dangranqiantishiyouzugoudeshixuyuliangnengquebaojianlishijianyaoqiudedaomanzu。

圖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)裏(影響隨後路徑上的延時),且(qie)會(hui)在(zai)下(xia)一(yi)級(ji)導(dao)致(zhi)一(yi)個(ge)時(shi)序(xu)違(wei)規(gui)。如(ru)果(guo)該(gai)信(xin)號(hao)輸(shu)入(ru)到(dao)一(yi)個(ge)控(kong)製(zhi)分(fen)支(zhi)或(huo)者(zhe)一(yi)個(ge)判(pan)決(jue)樹(shu),那(na)將(jiang)是(shi)非(fei)常(chang)危(wei)險(xian)的(de)。不(bu)幸(xing)的(de)是(shi),沒(mei)有(you)很(hen)好(hao)的(de)辦(ban)法(fa)來(lai)預(yu)測(ce)這(zhe)種(zhong)亞(ya)穩(wen)態(tai)將(jiang)會(hui)持(chi)續(xu)多(duo)長(chang)時(shi)間(jian),也(ye)沒(mei)有(you)很(hen)好(hao)的(de)辦(ban)法(fa)將(jiang)這(zhe)些(xie)信(xin)息(xi)反(fan)標(biao)注(zhu)到(dao)時(shi)序(xu)分(fen)析(xi)工(gong)具(ju)以(yi)及(ji)優(you)化(hua)工(gong)具(ju)。假(jia)定(ding)兩(liang)個(ge)時(shi)鍾(zhong)域(yu)之(zhi)間(jian)完(wan)全(quan)異(yi)步(bu)(即無法實現相位控製),那麼盡可能避免亞穩態的一個最簡單辦法就是使用雙觸發。在其它也許教科書中也稱這種方法為同步位、兩級觸發器或兩級同步器。
圖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。
理(li)論(lun)上(shang)來(lai)說(shuo),第(di)一(yi)個(ge)觸(chu)發(fa)器(qi)的(de)輸(shu)出(chu)應(ying)該(gai)一(yi)直(zhi)保(bao)持(chi)不(bu)確(que)定(ding)的(de)亞(ya)穩(wen)態(tai),但(dan)是(shi)在(zai)現(xian)實(shi)中(zhong)它(ta)會(hui)受(shou)到(dao)實(shi)際(ji)係(xi)統(tong)一(yi)係(xi)列(lie)因(yin)素(su)影(ying)響(xiang)後(hou)穩(wen)定(ding)下(xia)來(lai)。打(da)個(ge)比(bi)方(fang),想(xiang)象(xiang)一(yi)下(xia)一(yi)個(ge)皮(pi)球(qiu)穩(wen)定(ding)地(di)停(ting)住(zhu)在(zai)一(yi)個(ge)山(shan)尖(jian)上(shang),從(cong)任(ren)何(he)方(fang)向(xiang)上(shang)輕(qing)推(tui)一(yi)下(xia)球(qiu),它(ta)都(dou)會(hui)由(you)相(xiang)反(fan)的(de)方(fang)向(xiang)從(cong)山(shan)上(shang)滾(gun)落(luo)。同(tong)樣(yang),處(chu)於(yu)亞(ya)穩(wen)態(tai)的(de)一(yi)個(ge)邏(luo)輯(ji)門(men),由(you)發(fa)熱(re)、輻射等產生的隨機波動都會促使該亞穩態回到邏輯0或者邏輯1對應的穩態。
shiyongdaliangpaijishucaiyangyigeyibuxinhaoshi,wufawanquanyuzhiwomenxiangyaodexinhaotiaobian,jiangzaidangqianshizhongfashenghaishixiayigeshizhongfasheng。dangxinhaoshuyuyigeshujuzongxianzhongdeyibufen(有些數據位比其它比特晚一個時鍾周期跳變)shi,huozheguanjianshujubixuyaojingquedaodangeshizhongzhouqineidaodashi,zhezhongdaliangpaijishushimeiyoubangzhude。buguo,duiyukongzhixinhaolaishuo,ruguotamenkeyirenshouzhengfuyigehuogengduogeshizhongzhouqidebianhua,zhezhongjishuhaishifeichangyouyongde。
舉例來說,一個外部事件控製一個比特來觸發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。
同(tong)樣(yang)的(de)道(dao)理(li)也(ye)存(cun)在(zai)於(yu)數(shu)據(ju)傳(chuan)輸(shu)中(zhong),數(shu)據(ju)可(ke)能(neng)到(dao)達(da)某(mou)個(ge)時(shi)鍾(zhong)域(yu)的(de)間(jian)隔(ge)是(shi)完(wan)全(quan)隨(sui)機(ji)的(de),有(you)時(shi)候(hou)或(huo)許(xu)會(hui)麵(mian)臨(lin)一(yi)個(ge)很(hen)大(da)突(tu)發(fa)數(shu)據(ju)塊(kuai)。這(zhe)種(zhong)情(qing)況(kuang)下(xia),處(chu)在(zai)另(ling)一(yi)個(ge)時(shi)鍾(zhong)域(yu)的(de)接(jie)收(shou)設(she)備(bei)隻(zhi)能(neng)以(yi)指(zhi)定(ding)的(de)速(su)率(lv)來(lai)處(chu)理(li)數(shu)據(ju)。如(ru)圖(tu)6-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。
在任何一段時間內,假設數據發送寫FIFO的de速su率lv大da於yu接jie收shou處chu理li數shu據ju的de速su率lv,那na麼me很hen輕qing易yi地di使shi係xi統tong無wu法fa維wei持chi。因yin為wei沒mei有you任ren何he存cun儲chu設she備bei可ke以yi存cun得de下xia無wu限xian的de數shu據ju,這zhe種zhong問wen題ti需xu要yao在zai係xi統tong結jie構gou層ceng級ji才cai能neng解jie決jue。通tong常chang來lai說shuo,突tu發fa發fa送song一yi般ban是shi以yi小xiao周zhou期qi性xing或huo非fei周zhou期qi性xing發fa生sheng。所suo以yiFIFO的最大尺寸要大於等於(具體還要根據數據接收器的屬性)突發的尺寸。
在很多例子中,不管是突發尺寸還是數據到達的分配都無法很好地定義。這種時候,就有必要使用握手控製來防止FIFO產生數據溢出。如圖6-13所示,這種握手控製通常由一些標誌信號來實現。這些標誌信號,一個是發送側的滿標誌,用於提示FIFO沒有多餘空間存儲數據了,另一個是而空標誌,用於提示接收側,FIFO中沒有數據需要處理了。管理這些握手信號可能還需要一個狀態機,正如圖6-13所示。

圖6-13:FIFO的握手控製
FIFO在FPGA內一般是通過封裝一個雙口RAMlaishixian。biaomianshangkanweibuzudaodebiaozhixinhaorukonghemanzhishideng,shijishangshishixianqilaifanerbijiaokunnan。yuanyinjiuzaiyushurukongzhichangchangxuyaoyijushuchulaichansheng,tongyangdeshuchukongzhiyechangchangxuyaoyijushurulaichansheng。liru,qudongshurudeluojibixuyaozhidaoFIFO是否已滿,而這隻能通過獲取從輸出端讀出的數據數量才能得知。同樣的道理,在輸出側從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)為(wei)FIFO已空盡管此時 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級jiFPGA設計者來說非常重要。
[page]
6.1.5 設計分區同步器模塊
zaidingcengweishejihuafenhaoshejifenqushiyigehaodeshejishijianxingwei,zheyangrenhegongnengmokuaiwaimiandoubaohanyigedulidetongbuqimokuai。zheyangyouliyuzaihuafenmokuaidejichushangshixiansuoweidelixiangshizhongyuqingkuang(即整個設計模塊隻有一個時鍾),如圖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)用(yong)FPGA作為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。yigegenghaodebanfashishiyongyigezidongmenkongshanchugongjulaixiaochurenherenweizaochengshiwudekeneng。xuduoxiandaidezonghegongjutongguozhengquedeyueshu,xianzaidoutigongzhexianggongneng。liru,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)圖(tu)6-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可編程電源,賦能高端裝備製造
- 從土豆電池到精準農業:科學經典的現代回響
- 讓AI更懂生活:貿澤電子EIT係列探索AI在日常產品中的實用化設計
- 從“可演示”到“可部署”:人形機器人全鏈路測試驗證體係構建
- e絡盟與Same Sky簽署全球分銷協議,拓展高性能元器件版圖
- 告別“偏色”煩惱:光譜傳感器如何重塑手機攝影的真實色彩
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall


