九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > DOC文檔下載  

FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn).doc

  • 資源ID:16792757       資源大?。?span id="24d9guoke414" class="font-tahoma">1.02MB        全文頁(yè)數(shù):27頁(yè)
  • 資源格式: DOC        下載積分:5積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要5積分
郵箱/手機(jī):
溫馨提示:
用戶(hù)名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢(xún)和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn).doc

FPGA/CPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn) FPGA/CPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)分享摘要:在數(shù)字電路的設(shè)計(jì)中,時(shí)序設(shè)計(jì)是一個(gè)系統(tǒng)性能的主要標(biāo)志,在高層次設(shè)計(jì)方法中,對(duì)時(shí)序控制的抽象度也相應(yīng)提高,因此在設(shè)計(jì)中較難把握,但在理解RTL電路時(shí)序模型的基礎(chǔ)上,采用合理的設(shè)計(jì)方法在設(shè)計(jì)復(fù)雜數(shù)字系統(tǒng)是行之有效的,通過(guò)許多設(shè)計(jì)實(shí)例證明采用這種方式可以使電路的后仿真通過(guò)率大大提高,并且系統(tǒng)的工作頻率可以達(dá)到一個(gè)較高水平。關(guān)鍵詞:FPGA 數(shù)字電路 時(shí)序 時(shí)延路徑 建立時(shí)間 保持時(shí)間1 數(shù)字電路設(shè)計(jì)中的幾個(gè)基本概念:1.1 建立時(shí)間和保持時(shí)間:建立時(shí)間(setup time)是指在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以前,數(shù)據(jù)穩(wěn)定不變的時(shí)間,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器;保持時(shí)間(hold time)是指在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以后,數(shù)據(jù)穩(wěn)定不變的時(shí)間, 如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。 如圖1 。 數(shù)據(jù)穩(wěn)定傳輸必須滿(mǎn)足建立和保持時(shí)間的要求,當(dāng)然在一些情況下,建立時(shí)間和保持時(shí)間的值可以為零。 PLD/FPGA開(kāi)發(fā)軟件可以自動(dòng)計(jì)算兩個(gè)相關(guān)輸入的建立和保持時(shí)間(如圖2)圖1 建立時(shí)間和保持時(shí)間關(guān)系圖注:l 在考慮建立保持時(shí)間時(shí),應(yīng)該考慮時(shí)鐘樹(shù)向后偏斜的情況,在考慮建立時(shí)間時(shí)應(yīng)該考慮時(shí)鐘樹(shù)向前偏斜的情況。在進(jìn)行后仿真時(shí),最大延遲用來(lái)檢查建立時(shí)間,最小延時(shí)用來(lái)檢查保持時(shí)間。l 建立時(shí)間的約束和時(shí)鐘周期有關(guān),當(dāng)系統(tǒng)在高頻時(shí)鐘下無(wú)法工作時(shí),降低時(shí)鐘頻率就可以使系統(tǒng)完成工作。保持時(shí)間是一個(gè)和時(shí)鐘周期無(wú)關(guān)的參數(shù),如果設(shè)計(jì)不合理,使得布局布線工具無(wú)法布出高質(zhì)量的時(shí)鐘樹(shù),那么無(wú)論如何調(diào)整時(shí)鐘頻率也無(wú)法達(dá)到要求,只有對(duì)所設(shè)計(jì)系統(tǒng)作較大改動(dòng)才有可能正常工作,導(dǎo)致設(shè)計(jì)效率大大降低。因此合理的設(shè)計(jì)系統(tǒng)的時(shí)序是提高設(shè)計(jì)質(zhì)量的關(guān)鍵。在可編程器件中,時(shí)鐘樹(shù)的偏斜幾乎可以不考慮,因此保持時(shí)間通常都是滿(mǎn)足的。1.2 FPGA中的競(jìng)爭(zhēng)和冒險(xiǎn)現(xiàn)象信號(hào)在FPGA器件內(nèi)部通過(guò)連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、工作電壓、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過(guò)渡時(shí)間。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,并不是同時(shí)變化,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱(chēng)為"毛刺"。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說(shuō)明該電路存在"冒險(xiǎn)"。(與分立元件不同,由于PLD內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級(jí)傳遞,因此毛刺現(xiàn)象在PLD、FPGA設(shè)計(jì)中尤為突出)圖2是一個(gè)邏輯冒險(xiǎn)的例子,從圖3的仿真波形可以看出,"A、B、C、D"四個(gè)輸入信號(hào)經(jīng)過(guò)布線延時(shí)以后,高低電平變換不是同時(shí)發(fā)生的,這導(dǎo)致輸出信號(hào)"OUT"出現(xiàn)了毛刺。(我們無(wú)法保證所有連線的長(zhǎng)度一致,所以即使四個(gè)輸入信號(hào)在輸入端同時(shí)變化,但經(jīng)過(guò)PLD內(nèi)部的走線,到達(dá)或門(mén)的時(shí)間也是不一樣的,毛刺必然產(chǎn)生)??梢愿爬ǖ闹v,只要輸入信號(hào)同時(shí)變化,(經(jīng)過(guò)內(nèi)部走線)組合邏輯必將產(chǎn)生毛刺。 將它們的輸出直接連接到時(shí)鐘輸入端、清零或置位端口的設(shè)計(jì)方法是錯(cuò)誤的,這可能會(huì)導(dǎo)致嚴(yán)重的后果。 所以我們必須檢查設(shè)計(jì)中所有時(shí)鐘、清零和置位等對(duì)毛刺敏感的輸入端口,確保輸入不會(huì)含有任何毛刺圖2 存在邏輯冒險(xiǎn)的電路示例圖3 圖2所示電路的仿真波形冒險(xiǎn)往往會(huì)影響到邏輯電路的穩(wěn)定性。時(shí)鐘端口、清零和置位端口對(duì)毛刺信號(hào)十分敏感,任何一點(diǎn)毛刺都可能會(huì)使系統(tǒng)出錯(cuò),因此判斷邏輯電路中是否存在冒險(xiǎn)以及如何避免冒險(xiǎn)是設(shè)計(jì)人員必須要考慮的問(wèn)題。如何處理毛刺我們可以通過(guò)改變?cè)O(shè)計(jì),破壞毛刺產(chǎn)生的條件,來(lái)減少毛刺的發(fā)生。例如,在數(shù)字電路設(shè)計(jì)中,常常采用格雷碼計(jì)數(shù)器取代普通的二進(jìn)制計(jì)數(shù)器,這是因?yàn)楦窭状a計(jì)數(shù)器的輸出每次只有一位跳變,消除了競(jìng)爭(zhēng)冒險(xiǎn)的發(fā)生條件,避免了毛刺的產(chǎn)生。毛刺并不是對(duì)所有的輸入都有危害,例如D觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害,我們可以說(shuō)D觸發(fā)器的D輸入端對(duì)毛刺不敏感。 根據(jù)這個(gè)特性,我們應(yīng)當(dāng)在系統(tǒng)中盡可能采用同步電路,這是因?yàn)橥诫娐沸盘?hào)的變化都發(fā)生在時(shí)鐘沿,只要毛刺不出現(xiàn)在時(shí)鐘的沿口并且不滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。 (由于毛刺很短,多為幾納秒,基本上都不可能滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間)去除毛刺的一種常見(jiàn)的方法是利用D觸發(fā)器的D輸入端對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號(hào),這種方法類(lèi)似于將異步電路轉(zhuǎn)化為同步電路。 圖4給出了這種方法的示范電路,圖5是仿真波形。圖4 消除毛刺信號(hào)方法之二圖5 圖4所示電路的仿真波形如前所述,優(yōu)秀的設(shè)計(jì)方案,如采用格雷碼計(jì)數(shù)器,同步電路等,可以大大減少毛刺,但它并不能完全消除毛刺。 毛刺并不是對(duì)所有輸入都有危害,例如D觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。因此我們可以說(shuō)D觸發(fā)器的D輸入端對(duì)毛刺不敏感。但對(duì)于D觸發(fā)器的時(shí)鐘端,置位端,清零端,則都是對(duì)毛刺敏感的輸入端,任何一點(diǎn)毛刺就會(huì)使系統(tǒng)出錯(cuò),但只要認(rèn)真處理,我們可以把危害降到最低直至消除。下面我們就對(duì)幾種具體的信號(hào)進(jìn)行探討。1.3 清除和置位信號(hào)在FPGA的設(shè)計(jì)中,全局的清零和置位信號(hào)必須經(jīng)過(guò)全局的清零和置位管腳輸入,因?yàn)樗麄円矊儆谌值馁Y源,其扇出能力大,而且在FPGA內(nèi)部是直接連接到所有的觸發(fā)器的置位和清零端的,這樣的做法會(huì)使芯片的工作可靠、性能穩(wěn)定,而使用普通的IO腳則不能保證該性能。在FPGA的設(shè)計(jì)中,除了從外部管腳引入的全局清除和置位信號(hào)外在FPGA內(nèi)部邏輯的處理中也經(jīng)常需要產(chǎn)生一些內(nèi)部的清除或置位信號(hào)。清除和置位信號(hào)要求象對(duì)待時(shí)鐘那樣小心地考慮它們,因?yàn)檫@些信號(hào)對(duì)毛刺也是非常敏感的。在同步電路設(shè)計(jì)中,有時(shí)候可以用同步置位的辦法來(lái)替代異步清0。在用硬件描述語(yǔ)言的設(shè)計(jì)中可以用如下的方式來(lái)描述:異步清0的描述方法:process(rst,clk)begin if rst=1 then count<=(others=>0);elsif clkevent and clk=1 then count<=count+1;end if;end process;同步清0的描述方法:processbegin wait until clkevent and clk=1;if rst=1 then count<=(others=>0);else count<=count+1;end if;end process;圖6 異步清0、置位邏輯圖圖7 同步清0、置位關(guān)系圖1.4 觸發(fā)器和鎖存器:我們知道,觸發(fā)器是在時(shí)鐘的沿進(jìn)行數(shù)據(jù)的鎖存的,而鎖存器是用電平使能來(lái)鎖存數(shù)據(jù)的。所以觸發(fā)器的Q輸出端在每一個(gè)時(shí)鐘沿都會(huì)被更新,而鎖存器只能在使能電平有效器件才會(huì)被更新。在FPGA設(shè)計(jì)中建議如果不是必須那么應(yīng)該盡量使用觸發(fā)器而不是鎖存器。 那么在使用硬件描述語(yǔ)言進(jìn)行電路設(shè)計(jì)的時(shí)候如何區(qū)分觸發(fā)器和鎖存器的描述方法哪?其實(shí)有不少人在使用的過(guò)程中可能并沒(méi)有特意區(qū)分過(guò),所以也忽略了二者在描述方法上的區(qū)別。下面是用VHDL語(yǔ)言描述的觸發(fā)器和鎖存器以及綜合器產(chǎn)生的電路邏輯圖。觸發(fā)器的語(yǔ)言描述:processbegin wait until clkevent and clk=1; q<=d;end process;圖 觸發(fā)器鎖存器的語(yǔ)言描述:process(en,d)begin if en=1 then q<=d;end if;end process;圖 所存器由上述對(duì)Latch的描述可見(jiàn),其很容易于選擇器的描述相混淆,用VHDL語(yǔ)言對(duì)選擇器的描述方法如下:process(en,a,b)begin if en=1 then q<=a; else q<=b;end if;end process;2 FPGA/CPLD中的一些設(shè)計(jì)方法2.1 FPGA設(shè)計(jì)中的同步設(shè)計(jì)異步設(shè)計(jì)不是總能滿(mǎn)足(它們所饋送的觸發(fā)器的)建立和保持時(shí)間的要求。因此,異步輸入常常會(huì)把錯(cuò)誤的數(shù)據(jù)鎖存到觸發(fā)器,或者使觸發(fā)器進(jìn)入亞穩(wěn)定的狀態(tài),在該狀態(tài)下,觸發(fā)器的輸出不能識(shí)別為l或0。如果沒(méi)有正確地處理,亞穩(wěn)性會(huì)導(dǎo)致嚴(yán)重的系統(tǒng)可靠性問(wèn)題。另外,在FPGA的內(nèi)部資源里最重要的一部分就是其時(shí)鐘資源(全局時(shí)鐘網(wǎng)絡(luò)),它一般是經(jīng)過(guò)FPGA的特定全局時(shí)鐘管腳進(jìn)入FPGA內(nèi)部,后經(jīng)過(guò)全局時(shí)鐘BUF適配到全局時(shí)鐘網(wǎng)絡(luò)的,這樣的時(shí)鐘網(wǎng)絡(luò)可以保證相同的時(shí)鐘沿到達(dá)芯片內(nèi)部每一個(gè)觸發(fā)器的延遲時(shí)間差異是可以忽略不計(jì)的。在FPGA中上述的全局時(shí)鐘網(wǎng)絡(luò)被稱(chēng)為時(shí)鐘樹(shù),無(wú)論是專(zhuān)業(yè)的第三方工具還是器件廠商提供的布局布線器在延時(shí)參數(shù)提取、分析的時(shí)候都是依據(jù)全局時(shí)鐘網(wǎng)絡(luò)作為計(jì)算的基準(zhǔn)的。如果一個(gè)設(shè)計(jì)沒(méi)有使用時(shí)鐘樹(shù)提供的時(shí)鐘,那么這些設(shè)計(jì)工具有的會(huì)拒絕做延時(shí)分析有的延時(shí)數(shù)據(jù)將是不可靠的。在我們?nèi)粘5脑O(shè)計(jì)中很多情形下會(huì)用到需要分頻的情形,好多人的做法是先用高頻時(shí)鐘計(jì)數(shù),然后使用計(jì)數(shù)器的某一位輸出作為工作時(shí)鐘進(jìn)行其他的邏輯設(shè)計(jì)。其實(shí)這樣的方法是不規(guī)范的。比如下面的描述方法:processbegin wait until clkevent and clk=1; if fck=1 thencount<=(others=>0); else count<=count+1; end if;end process;processbegin wait until count(2)event and count(2)=1 ; shift_reg<=data;end process;在上述的第一個(gè)process電路描述中,首先計(jì)數(shù)器的輸出結(jié)果(count(2))相對(duì)于全局時(shí)鐘clk已經(jīng)產(chǎn)生了一定的延時(shí)(延時(shí)的大小取決于計(jì)數(shù)器的位數(shù)和所選擇使用的器件工藝);而在第二個(gè)process中使用計(jì)數(shù)器的bit2作為時(shí)鐘,那么shift_reg相對(duì)于全局clk的延時(shí)將變得不好控制。布局布線器最終給出的時(shí)間分析也是不可靠的。這樣產(chǎn)生的結(jié)果波形仿真如下圖所示:正確的做法可以將第二個(gè)process這樣來(lái)寫(xiě)。processbegin wait until clkevent and clk=1 ; if count(2 downto 0)=”000” then shift_reg<=data;end if;end process;或者分成兩步來(lái)寫(xiě):process(count)begin if count(2 downto 0)=”000” thenen<=1;else en<=0;end if;end process;processbegin wait until clkevent and clk=1 ; if en=1 then shift_reg<=data;end if;end process;這樣做是相當(dāng)于產(chǎn)生了一個(gè)8分頻的使能信號(hào),在使能信號(hào)有效的時(shí)候?qū)ata數(shù)據(jù)采樣到shift_reg寄存器中。但此種情形下shift_reg的延時(shí)是相對(duì)于全局時(shí)鐘clk的。下面的圖形更能看得清楚。圖 上圖中波形的局部放大2.2 FPGA設(shè)計(jì)中的延時(shí)電路的產(chǎn)生:在日常的電路設(shè)計(jì)中,有時(shí)候我們需要對(duì)信號(hào)進(jìn)行延時(shí)處理來(lái)適應(yīng)對(duì)外接口的時(shí)序關(guān)系,最經(jīng)常也是最典型的情況是做處理機(jī)的接口;因?yàn)榕c處理的接口時(shí)序關(guān)系是異步的,而一個(gè)規(guī)范的FPGA設(shè)計(jì)應(yīng)該是盡可能采用同步設(shè)計(jì)。那么遇到這種情況該如何處理呢?首先在FPGA中要產(chǎn)生延時(shí),信號(hào)必須經(jīng)過(guò)一定的物理資源。在硬件描述語(yǔ)言中有關(guān)鍵詞Wait for xx ns,需要說(shuō)明的是該語(yǔ)法是僅僅用于仿真而不能用于綜合的,可綜合的延時(shí)方法有:n 使信號(hào)經(jīng)過(guò)邏輯門(mén)得到延時(shí)(如非門(mén));n 使用器件提供的延時(shí)單元(如Altera公司的LCELL,Xilinx公司的);注意:當(dāng)使用多級(jí)非門(mén)的時(shí)候綜合器往往會(huì)將其優(yōu)化掉,因?yàn)榫C合器會(huì)認(rèn)為一個(gè)信號(hào)非兩次還是它自己。需要說(shuō)明的是在FPGA/CPLD內(nèi)部結(jié)構(gòu)是一種標(biāo)準(zhǔn)的宏單元,下圖是Xilinx公司的Spartans II系列器件的一個(gè)標(biāo)準(zhǔn)宏單元。雖然不同的廠家的芯片宏單元的結(jié)構(gòu)不同,但概括而言都是由一些組合邏輯外加一或二個(gè)觸發(fā)器而構(gòu)成。在實(shí)際應(yīng)用中,當(dāng)一個(gè)模塊內(nèi)的組合邏輯被使用了那么與其對(duì)應(yīng)的觸發(fā)器也就不能用了;同樣如果觸發(fā)器單元被用了那么組合邏輯單元也就廢了。這就是有時(shí)候(特別是使用CPLD)雖然設(shè)計(jì)使用的資源并不多但布局布線器卻報(bào)告資源不夠使用的原因?,F(xiàn)面的一個(gè)例子是前一段時(shí)間我在公司遇到的一個(gè)設(shè)計(jì)。設(shè)計(jì)使用Altera公司的EPM7256型號(hào)的CPLD。該設(shè)計(jì)實(shí)際使用的寄存器資源只有109個(gè),占整個(gè)器件資源的42%??墒窃撛O(shè)計(jì)使用了如下圖所示的延時(shí)方法來(lái)做處理器接口的時(shí)序:在該電路的設(shè)計(jì)中使用了大量的LCELL來(lái)產(chǎn)生100多納秒的延時(shí),這樣做的后果是雖然整個(gè)電路的觸發(fā)器資源只使用了42%,可是用MaxplusII進(jìn)行布局布線已經(jīng)不能夠通過(guò)了。而且我懷疑經(jīng)過(guò)這么多邏輯的延時(shí)后所產(chǎn)生的信號(hào)還能保持原來(lái)的性能不。當(dāng)需要對(duì)某一信號(hào)作一段延時(shí)時(shí),初學(xué)者往往在此信號(hào)后串接一些非門(mén)或其它門(mén)電路,此方法在分離電路中是可行的。但在中,開(kāi)發(fā)軟件在綜合設(shè)計(jì)時(shí)會(huì)將這些門(mén)當(dāng)作冗余邏輯去掉,達(dá)不到延時(shí)的效果。用ALTERA公司的MaxplusII開(kāi)發(fā)時(shí),可以通過(guò)插入一些原語(yǔ)來(lái)產(chǎn)生一定的延時(shí),但這樣形成的延時(shí)在芯片中并不穩(wěn)定,會(huì)隨溫度等外部環(huán)境的改變而改變,因此并不提倡這樣做。在此,可以用高頻時(shí)鐘來(lái)驅(qū)動(dòng)一移位寄存器,待延時(shí)信號(hào)作數(shù)據(jù)輸入,按所需延時(shí)正確設(shè)置移位寄存器的級(jí)數(shù),移位寄存器的輸出即為延時(shí)后的信號(hào)。此方法產(chǎn)生的延時(shí)信號(hào)與原信號(hào)比有誤差,誤差大小由高頻時(shí)鐘的周期來(lái)決定。對(duì)于數(shù)據(jù)信號(hào)的延時(shí),在輸出端用數(shù)據(jù)時(shí)鐘對(duì)延時(shí)后信號(hào)重新采樣,就可以消除誤差。對(duì)于這樣大的延時(shí)我建議的實(shí)現(xiàn)方法是采用時(shí)鐘鎖存來(lái)產(chǎn)生延時(shí)的方法,我們知道當(dāng)一個(gè)信號(hào)用時(shí)鐘鎖存一次,將會(huì)占用一個(gè)觸發(fā)器資源,信號(hào)會(huì)向后推移一個(gè)時(shí)鐘周期;該同事的設(shè)計(jì)里CPLD芯片正好連接有32MHz的時(shí)鐘,那么每用時(shí)鐘鎖存一次ssp信號(hào)就會(huì)推移31ns,這樣只需多使用3個(gè)觸發(fā)器資源就可以達(dá)到目的了。電路圖和仿真波形如下圖所示:當(dāng)然這樣做對(duì)原來(lái)信號(hào)高低電平的寬度會(huì)稍有改變,但只要是在與其接口的芯片的容許范圍之內(nèi)就不會(huì)影響到功能的實(shí)現(xiàn)。圖 用于延時(shí)的電路圖上圖仿真波形2.3 如何提高系統(tǒng)的運(yùn)行速度同步電路的速度是指同步時(shí)鐘的速度。同步時(shí)鐘愈快,電路處理數(shù)據(jù)的時(shí)間間隔越短,電路在單位時(shí)間處理的數(shù)據(jù)量就愈大.我們先來(lái)看一看同步電路中數(shù)據(jù)傳遞的一個(gè)基本模型,如下圖:(Tco是觸發(fā)器時(shí)鐘到數(shù)據(jù)輸出的延時(shí);Tdelay是組合邏輯的延時(shí);Tsetup是觸發(fā)器的建立時(shí)間)假設(shè)數(shù)據(jù)已經(jīng)被時(shí)鐘的上升沿打入D觸發(fā)器,那么數(shù)據(jù)到達(dá)第一個(gè)觸發(fā)器的Q端需要Tco,再經(jīng)過(guò)組合邏輯的延時(shí)Tdelay到達(dá)的第二個(gè)觸發(fā)器的D端,要想時(shí)鐘能在第二個(gè)觸發(fā)器再次被穩(wěn)定的鎖入觸發(fā)器,則時(shí)鐘的延遲不能晚于Tco+Tdelay+Tsetup,(我們可以回顧一下前面講過(guò)的建立和保持時(shí)間的概念,就可以理解為什么公式最后要加上一個(gè)Tdelay) 由以上分析可知:最小時(shí)鐘周期:T=Tco+Tdelay+Tsetup 最快時(shí)鐘頻率 F= 1/T PLD開(kāi)發(fā)軟件也正是通過(guò)這個(gè)公式來(lái)計(jì)算系統(tǒng)運(yùn)行速度Fmax注:在這個(gè)邏輯圖中有個(gè)參數(shù):Tpd ,即時(shí)鐘的延時(shí)參數(shù),我們?cè)趧偛抛鰰r(shí)間分析的時(shí)候,沒(méi)有提這個(gè)參數(shù),(如果使用PLD的全局時(shí)鐘型號(hào),Tpd可以為0,如果是普通時(shí)鐘,則不為0)。所以如果考慮到時(shí)鐘的延時(shí),精確的公式應(yīng)該是T=Tco+Tdelay+Tsetup-Tpd。當(dāng)然以上全部分析的都是器件內(nèi)部的運(yùn)行速度,如果考慮芯片I/O管腳延時(shí)對(duì)系統(tǒng)速度的影響,那么還需要加一些修正。由于Tco、Tsetup是由具體的器件和工藝決定的,我們?cè)O(shè)計(jì)電路時(shí)只可以改變Tdelay。所以縮短觸發(fā)器間組合邏輯的延時(shí)是提高同步電路速度的關(guān)鍵。由于一般同步電路都不止一級(jí)鎖存(如圖3),而要使電路穩(wěn)定工作,時(shí)鐘周期必須滿(mǎn)足最大延時(shí)要求,縮短最長(zhǎng)延時(shí)路徑,才可提高電路的工作頻率。如圖2所示:我們可以將較大的組合邏輯分解為較小的幾塊,中間插入觸發(fā)器,這樣可以提高電路的工作頻率。這也是所謂“流水線”(pipelining)技術(shù)的基本原理。對(duì)于圖3的上半部分,它時(shí)鐘頻率受制于第二個(gè)較大的組合邏輯的延時(shí),通過(guò)適當(dāng)?shù)姆椒ㄆ骄峙浣M合邏輯,可以避免在兩個(gè)觸發(fā)器之間出現(xiàn)過(guò)大的延時(shí),消除速度瓶頸。FPGA/CPLD開(kāi)發(fā)軟件中也有一些參數(shù)設(shè)置,通過(guò)修改這些設(shè)置,可以提高編譯/布局布線后系統(tǒng)速度,但是根據(jù)經(jīng)驗(yàn)這種速度的提高是很有限的,假如按照要求我們需要設(shè)計(jì)一個(gè)可以工作到50MHz的系統(tǒng),實(shí)際布局布線器報(bào)告出來(lái)的Fmax只有40MHz,此時(shí)如果我們使用布局布線器的設(shè)置選項(xiàng)最多可以提高到45MHz,這還是運(yùn)氣比較好的情況。而且你必須了解這些選項(xiàng)的含義、使用背景等。其實(shí)在一個(gè)設(shè)計(jì)里影響速度的瓶頸經(jīng)常只會(huì)有幾條,我們將延時(shí)最大的路徑稱(chēng)作關(guān)鍵路徑。當(dāng)設(shè)計(jì)的運(yùn)行速度不符合系統(tǒng)設(shè)計(jì)要求的時(shí)候我們可以首先找到不能滿(mǎn)足要求的關(guān)鍵路徑,按照上述的方法將關(guān)鍵路徑上的組合邏輯拆分成多個(gè)中間用觸發(fā)器隔開(kāi),這樣很容易就可以從根本上提升系統(tǒng)的運(yùn)行速度了。有的設(shè)計(jì)在設(shè)計(jì)開(kāi)始就知道那部分電路會(huì)產(chǎn)生比較大的組合邏輯,導(dǎo)致速度瓶頸的產(chǎn)生,那么就應(yīng)該在開(kāi)始就想好解決辦法。比如現(xiàn)在設(shè)計(jì)需要產(chǎn)生一個(gè)32位的加法器,并且要求能夠工作在50MHz。根據(jù)經(jīng)驗(yàn)直接用32位加法器肯定是達(dá)不到50MHz的要求的,這時(shí)我們可以將其分成3個(gè)12位計(jì)數(shù)器來(lái)操作,后面的計(jì)數(shù)器只要將前面計(jì)數(shù)器結(jié)果的高位(進(jìn)位位)相加就可以了。下面是原來(lái)在寬帶接入服務(wù)器設(shè)計(jì)中的流量統(tǒng)計(jì)單元中的32位加法器的描述:- flow count element -temporary computing 12 bits adderprocess(Count_0_en,count_buffer,Len,Carry_0_0,Carry_0_1)begin case Count_0_en is -1st Step addition (10 downto 0) + (10 downto 0) when "001" => add_12_a_0 <= (0 & count_buffer(0)(10 downto 0); add_12_b_0 <= (0 & Len(10 downto 0); -2nd Step addition (21 downto 11) + Carry_0_0 when "010" => add_12_a_0 <= (0 & count_buffer(0)(21 downto 11); add_12_b_0 <= ("00000000000" & Carry_0_0); -3rd Step addition (31 downto 22) + Carry_0_1 when "100" => add_12_a_0 <= ("00" & count_buffer(0)(31 downto 22); add_12_b_0 <= ("00000000000" & Carry_0_1); when others => add_12_a_0 <=(others=>X); add_12_b_0 <=(others=>X); end case;end process;-12 bits adderadd_12_result_0 <= add_12_a_0 + add_12_b_0;-Bytes Countprocess(RST,CLK_25MHz,IO,OE_bar,data_sel,Count_0_en)begin if(RST = 1)then -system Reset count_buffer(0) <= (others => 0); Carry_0_0 <= 0; Carry_0_1 <= 0; Carry_0_2 <= 0; elsif(CLK_25MHzevent and CLK_25MHz = 0)then if(OE_bar = 0 and data_sel = 0)then count_buffer(0) <= IO; Carry_0_2 <= 0; else case Count_0_en is -1st Step addition (10 downto 0) + (10 downto 0) when "001" => count_buffer(0)(10 downto 0) <= add_12_result_0(10 downto 0); Carry_0_0 <= add_12_result_0(11);-first step carry -2nd Step addition (21 downto 11) + Carry_0_0 when "010" => count_buffer(0)(21 downto 11) <= add_12_result_0(10 downto 0); Carry_0_1 <= add_12_result_0(11);-Second step carry -3rd Step addition (31 downto 22) + Carry_0_1 when "100" => count_buffer(0)(31 downto 22) <= add_12_result_0(9 downto 0); Carry_0_2 <= add_12_result_0(10);-Third step carry when others => Carry_0_2 <= 0; end case; end if; end if;end process;2.4 信號(hào)輸出 當(dāng)你需要將FPGA/CPLD內(nèi)部的信號(hào)通過(guò)管腳輸出給外部相關(guān)器件的時(shí)候,如果不影響功能最好是將這些信號(hào)通過(guò)用時(shí)鐘鎖存后輸出。因?yàn)橥ǔG闆r下一個(gè)板子是工作于一種或兩種時(shí)鐘模式下,與FPGA/CPLD相連接的芯片的工作時(shí)鐘大多數(shù)情形下與FPGA的時(shí)鐘同源,如果輸出的信號(hào)經(jīng)過(guò)時(shí)鐘鎖存可以起到如下的作用:n 容易滿(mǎn)足芯片間信號(hào)連接的時(shí)序要求;n 容易滿(mǎn)足信號(hào)的建立保持時(shí)間;如上圖所示,比如FPGA/CPLD在CLK的時(shí)鐘沿1鎖存一個(gè)信號(hào)得到SIG所示的波形,SIG信號(hào)需要給另外的一個(gè)與其接口的芯片,那么該芯片將一定會(huì)在CLK的時(shí)鐘沿2正確采樣到SIG信號(hào)。但是如果該信號(hào)在FPGA/CPLD中輸出的時(shí)候不是用時(shí)鐘沿鎖存的,那將有可能出現(xiàn)SIG1/SIG2所示的時(shí)序關(guān)系,則與其接口的芯片在時(shí)鐘沿2處采樣該信號(hào)的時(shí)候有可能出現(xiàn)建立保持時(shí)間不滿(mǎn)足要求而出現(xiàn)采樣不可靠、沿打沿等情況。另外通過(guò)組合邏輯輸出還有可能出現(xiàn)毛刺的情況。所有這些不規(guī)范的設(shè)計(jì)都會(huì)引起系統(tǒng)工作時(shí)的不可靠、不穩(wěn)定的情形。2.5 寄存異步輸入信號(hào)我們?cè)谌粘5脑O(shè)計(jì)工作中,F(xiàn)PGA/CPLD總是要與別的芯片相連接的,F(xiàn)PGA/CPLD會(huì)給別的芯片輸出信號(hào),同時(shí)也要處理別的芯片送來(lái)的信號(hào),這些信號(hào)往往對(duì)FPGA/CPLD內(nèi)部的時(shí)鐘系統(tǒng)而言是異步的,為了可靠的采樣到這些輸入信號(hào),建議將這些輸入信號(hào)使用相應(yīng)的時(shí)鐘鎖存后在處理,這樣做:n 將原來(lái)的異步信號(hào)轉(zhuǎn)化成同步來(lái)處理;n 去除輸入信號(hào)中的毛刺(特別是對(duì)于數(shù)據(jù)總線);圖 FPGA/CPLD中信號(hào)的輸入、輸出鎖存2.6 FPGA/CPLD中的時(shí)鐘設(shè)計(jì)無(wú)淪是用離散邏輯、可編程邏輯,還是用全定制硅器件實(shí)現(xiàn)的任何數(shù)字設(shè)計(jì),為了成功地操作,可靠的時(shí)鐘是非常關(guān)鍵的。設(shè)計(jì)不良的時(shí)鐘在極限的溫度、電壓或制造工藝的偏差情況下將導(dǎo)致錯(cuò)誤的行為,并且調(diào)試?yán)щy、花銷(xiāo)很大。在設(shè)計(jì)FPGA/CPLD時(shí)通常采用幾種時(shí)鐘類(lèi)型。時(shí)鐘可分為如下四種類(lèi)型:全局時(shí)鐘、門(mén)控時(shí)鐘、多級(jí)邏輯時(shí)鐘和波動(dòng)式時(shí)鐘。多時(shí)鐘系統(tǒng)能夠包括上述四種時(shí)鐘類(lèi)型的任意組合。無(wú)論采用何種方式,電路中真實(shí)的時(shí)鐘樹(shù)也無(wú)法達(dá)到假定的理想時(shí)鐘,因此我們必須依據(jù)理想時(shí)鐘,建立一個(gè)實(shí)際工作時(shí)鐘模型來(lái)分析電路,這樣才可以使得電路的實(shí)際工作效果和預(yù)期的一樣。在實(shí)際的時(shí)鐘模型中,我們要考慮時(shí)鐘樹(shù)傳播中的偏斜、跳變和絕對(duì)垂直的偏差以及其它一些不確定因素。對(duì)于寄存器而言,當(dāng)時(shí)鐘工作沿到來(lái)時(shí)它的數(shù)據(jù)端應(yīng)該已經(jīng)穩(wěn)定,這樣才能保證時(shí)鐘工作沿采樣到數(shù)據(jù)的正確性,這段數(shù)據(jù)的預(yù)備時(shí)間我們稱(chēng)之為建立時(shí)間(setup time)。數(shù)據(jù)同樣應(yīng)該在時(shí)鐘工作沿過(guò)去后保持一段時(shí)間,這段時(shí)間稱(chēng)為保持時(shí)間(hold time)。因此具體的時(shí)鐘如圖5所示。其中網(wǎng)絡(luò)延遲是指時(shí)鐘的傳播延時(shí)以及因?yàn)樘儾淮怪钡刃У钠?,在此基礎(chǔ)上考慮一些不確定因素實(shí)際的工作時(shí)鐘沿如圖中所示。保持時(shí)間(hold)和建立時(shí)間(setup)都是相對(duì)于實(shí)際時(shí)鐘跳變而言的。因此在確定電路時(shí)序時(shí),必須要考慮到這些因素,使得建立時(shí)間和保持時(shí)間符合要求。為了使電路正常工作,建立時(shí)間和保持時(shí)間應(yīng)該分別滿(mǎn)足:其中tclock_Q_max是時(shí)鐘沿變化到數(shù)據(jù)輸出端變化的最慢變化情況,tlogic_max是寄存器間組合邏輯的最大可能延遲,tclock_Q_min和tlogic_min表示最快情況。在考慮建立保持時(shí)間時(shí),應(yīng)該考慮時(shí)鐘樹(shù)向后偏斜的情況,在考慮建立時(shí)間時(shí)應(yīng)該考慮時(shí)鐘樹(shù)向前偏斜的情況。在進(jìn)行后仿真時(shí),最大延遲用來(lái)檢查建立時(shí)間,最小延時(shí)用來(lái)檢查保持時(shí)間。2.6.1 全局時(shí)鐘對(duì)于一個(gè)設(shè)計(jì)項(xiàng)目來(lái)說(shuō),全局時(shí)鐘(或同步時(shí)鐘)是最簡(jiǎn)單和最可預(yù)測(cè)的時(shí)鐘。在PLD/FPGA設(shè)計(jì)中最好的時(shí)鐘方案是:由專(zhuān)用的全局時(shí)鐘輸入引腳驅(qū)動(dòng)的單個(gè)主時(shí)鐘去鐘控設(shè)計(jì)項(xiàng)目中的每一個(gè)觸發(fā)器。只要可能就應(yīng)盡量在設(shè)計(jì)項(xiàng)目中采用全局時(shí)鐘。PLD/FPGA都具有專(zhuān)門(mén)的全局時(shí)鐘引腳,它直接連到器件中的每一個(gè)寄存器。這種全局時(shí)鐘提供器件中最短的時(shí)鐘到輸出的延時(shí)。圖1 示出全局時(shí)鐘的實(shí)例。圖1 定時(shí)波形示出觸發(fā)器的數(shù)據(jù)輸入D1.3應(yīng)遵守建立時(shí)間和保持時(shí)間的約束條件。建立和保持時(shí)間的數(shù)值在PLD數(shù)據(jù)手冊(cè)中給出,也可用軟件的定時(shí)分析器計(jì)算出來(lái)。如果在應(yīng)用中不能滿(mǎn)足建立和保持時(shí)間的要求,則必須用時(shí)鐘同步輸入信號(hào)(參看下一章“異步輸入”)。圖1 全局時(shí)鐘(最好的方法是用全局時(shí)鐘引腳去鐘控PLD內(nèi)的每一個(gè)寄存器,于是數(shù)據(jù)只要遵守相對(duì)時(shí)鐘的建立時(shí)間tsu和保持時(shí)間th)2.6.2 門(mén)控時(shí)鐘在許多應(yīng)用中,整個(gè)設(shè)計(jì)項(xiàng)目都采用外部的全局時(shí)鐘是不可能或不實(shí)際的。PLD具有乘積項(xiàng)邏輯陣列時(shí)鐘(即時(shí)鐘是由邏輯產(chǎn)生的),允許任意函數(shù)單獨(dú)地鐘控各個(gè)觸發(fā)器。然而,當(dāng)你用陣列時(shí)鐘時(shí),應(yīng)仔細(xì)地分析時(shí)鐘函數(shù),以避免毛刺。 通常用陣列時(shí)鐘構(gòu)成門(mén)控時(shí)鐘。門(mén)控時(shí)鐘常常同微處理器接口有關(guān),用地址線去控制寫(xiě)脈沖。然而,每當(dāng)用組合函數(shù)鐘控觸發(fā)器時(shí),通常都存在著門(mén)控時(shí)鐘。如果符合下述條件,門(mén)控時(shí)鐘可以象全局時(shí)鐘一樣可靠地工作:l 驅(qū)動(dòng)時(shí)鐘的邏輯必須只包含一個(gè)“與”門(mén)或一個(gè)“或”門(mén)。如果采用任何附加邏在某些工作狀態(tài)下,會(huì)出現(xiàn)競(jìng)爭(zhēng)產(chǎn)生的毛刺。l 邏輯門(mén)的一個(gè)輸入作為實(shí)際的時(shí)鐘,而該邏輯門(mén)的所有其它輸入必須當(dāng)成地址或控制線,它們遵守相對(duì)于時(shí)鐘的建立和保持時(shí)間的約束。圖2和圖3 是可靠的門(mén)控時(shí)鐘的實(shí)例。在 圖2 中,用一個(gè)“與”門(mén)產(chǎn)生門(mén)控時(shí)鐘,在 圖3 中,用一個(gè)“或”門(mén)產(chǎn)生門(mén)控時(shí)鐘。在這兩個(gè)實(shí)例中,引腳nWR和nWE考慮為時(shí)鐘引腳,引腳ADDo3是地址引腳,兩個(gè)觸發(fā)器的數(shù)據(jù)是信號(hào)D1.n經(jīng)隨機(jī)邏輯產(chǎn)生的。圖2 “與”門(mén)門(mén)控時(shí)鐘圖3 “或”門(mén)門(mén)控時(shí)鐘圖2和圖3 的波形圖顯示出有關(guān)的建立時(shí)間和保持時(shí)間的要求。這兩個(gè)設(shè)計(jì)項(xiàng)目的地址線必須在時(shí)鐘保持有效的整個(gè)期間內(nèi)保持穩(wěn)定(nWR和nWE是低電平有效)。如果地址線在規(guī)定的時(shí)間內(nèi)未保持穩(wěn)定,則在時(shí)鐘上會(huì)出現(xiàn)毛刺,造成觸發(fā)器發(fā)生錯(cuò)誤的狀態(tài)變化。另一方面,數(shù)據(jù)引腳D1n只要求在nWR和nWE的有效邊沿處滿(mǎn)足標(biāo)準(zhǔn)的建立和保持時(shí)間的規(guī)定。我們往往可以將門(mén)控時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘以改善設(shè)計(jì)項(xiàng)目的可靠性。圖4 示出如何用全局時(shí)鐘重新設(shè)計(jì) 圖2 的電路。地址線在控制D觸發(fā)器的使能輸入,許多PLD設(shè)計(jì)軟件,如MAX+PLUSII軟件都提供這種帶使能端的D觸發(fā)器。當(dāng)ENA為高電平時(shí),D輸入端的值被鐘控到觸發(fā)器中:當(dāng)ENA為低電平時(shí),維持現(xiàn)在的狀態(tài)。圖4 “與”門(mén)門(mén)控時(shí)鐘轉(zhuǎn)化成全局時(shí)鐘圖4 中重新設(shè)計(jì)的電路的定時(shí)波形表明地址線不需要在nWR有效的整個(gè)期間內(nèi)保持穩(wěn)定;而只要求它們和數(shù)據(jù)引腳一樣符合同樣的建立和保持時(shí)間,這樣對(duì)地址線的要求就少很多。圖5給出一個(gè)不可靠的門(mén)控時(shí)鐘的例子。3位同步加法計(jì)數(shù)器的RCO輸出用來(lái)鐘控觸發(fā)器。然而,計(jì)數(shù)器給出的多個(gè)輸入起到時(shí)鐘的作用,這違反了可靠門(mén)控時(shí)鐘所需的條件之一。在產(chǎn)生RCO信號(hào)的觸發(fā)器中,沒(méi)有一個(gè)能考慮為實(shí)際的時(shí)鐘線,這是因?yàn)樗杏|發(fā)器在幾乎相同的時(shí)刻發(fā)生翻轉(zhuǎn)。而我們并不能保證在PLD/FPGA內(nèi)部QA,QB,QC到D觸發(fā)器的布線長(zhǎng)短一致,因此,如 圖5 的時(shí)間波形所示,在器從3計(jì)到4時(shí),RCO線上會(huì)出現(xiàn)毛刺(假設(shè)QC到D觸發(fā)器的路徑較短,即QC的輸出先翻轉(zhuǎn))。圖5 不可靠的門(mén)控時(shí)鐘(定時(shí)波形示出在計(jì)數(shù)器從3到4改變時(shí),RCO信號(hào)如何出現(xiàn)毛刺的)圖6 給出一種可靠的全局鐘控的電路,它是圖5不可靠計(jì)數(shù)器電路的改進(jìn),RCO控制D觸發(fā)器的使能輸入。這個(gè)改進(jìn)不需要增加PLD的邏輯單元。圖6 不可靠的門(mén)控時(shí)鐘轉(zhuǎn)換為全局時(shí)鐘2.6.3 多級(jí)邏輯時(shí)鐘當(dāng)產(chǎn)生門(mén)控時(shí)鐘的組合邏輯超過(guò)一級(jí)(即超過(guò)單個(gè)的“與”門(mén)或“或”門(mén))時(shí),證設(shè)計(jì)項(xiàng)目的可靠性變得很困難。即使樣機(jī)或仿真結(jié)果沒(méi)有顯示出靜態(tài)險(xiǎn)象,但實(shí)際上仍然可能存在著危險(xiǎn)。通常,我們不應(yīng)該用多級(jí)組合邏輯去鐘控PLD設(shè)計(jì)中的觸發(fā)器。圖7 給出一個(gè)含有險(xiǎn)象的多級(jí)時(shí)鐘的例子。時(shí)鐘是由SEL引腳控制的多路選擇器輸出的。多路選擇器的輸入是時(shí)鐘(CLK)和該時(shí)鐘的2分頻(DIV2)。由圖7 的定時(shí)波形圖看出,在兩個(gè)時(shí)鐘均為邏輯1的情況下,當(dāng)SEL線的狀態(tài)改變時(shí),存在靜態(tài)險(xiǎn)象。險(xiǎn)象的程度取決于工作的條件。 多級(jí)邏輯的險(xiǎn)象是可以去除的。例如,你可以插入“冗余邏輯”到設(shè)計(jì)項(xiàng)目中。然而,PLD/FPGA編譯器在邏輯綜合時(shí)會(huì)去掉這些冗余邏輯,使得驗(yàn)證險(xiǎn)象是否真正被去除變得困難了。為此,必須應(yīng)尋求其它方法來(lái)實(shí)現(xiàn)電路的功能。圖7 有靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘圖8 給出 圖7 電路的一種單級(jí)時(shí)鐘的替代方案。圖中SEL引腳和DIV2信號(hào)用于使能D觸發(fā)器的使能輸入端,而不是用于該觸發(fā)器的時(shí)鐘引腳。采用這個(gè)電路并不需要附加PLD的邏輯單元,工作卻可靠多了。 不同的系統(tǒng)需要采用不同的方法去除多級(jí)時(shí)鐘,并沒(méi)有固定的模式。圖7 無(wú)靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘(這個(gè)電路邏輯上等效于圖7,但卻可靠的多)2.6.4 行波時(shí)鐘另一種流行的時(shí)鐘電路是采用行波時(shí)鐘,即一個(gè)觸發(fā)器的輸出用作另一個(gè)觸發(fā)器的時(shí)鐘輸入。如果仔細(xì)地設(shè)計(jì),行波時(shí)鐘可以象全局時(shí)鐘一樣地可靠工作。然而,行波時(shí)鐘使得與電路有關(guān)的定時(shí)計(jì)算變得很復(fù)雜。行波時(shí)鐘在行波鏈上各觸發(fā)器的時(shí)鐘之間產(chǎn)生較大的時(shí)間偏移,并且會(huì)超出最壞情況下的建立時(shí)間、保持時(shí)間和電路中時(shí)鐘到輸出的延時(shí),使系統(tǒng)的實(shí)際速度下降。 用計(jì)數(shù)翻轉(zhuǎn)型觸發(fā)器構(gòu)成異步計(jì)數(shù)器時(shí)常采用行波時(shí)鐘,一個(gè)觸發(fā)器的輸出鐘控下一個(gè)觸發(fā)器的輸入,參看圖9 同步計(jì)數(shù)器通常是代替異步計(jì)數(shù)器的更好方案,這是因?yàn)閮烧咝枰瑯佣嗟暮陠卧接?jì)數(shù)器有較快的時(shí)鐘到輸出的時(shí)間。圖10 給出具有全局時(shí)鐘的同步計(jì)數(shù)器,它和 圖9 功能相同,用了同樣多的邏輯單元實(shí)現(xiàn),卻有較快的時(shí)鐘到輸出的時(shí)間。幾乎所有PLD開(kāi)發(fā)軟件都提供多種多樣的同步計(jì)數(shù)器。圖9 行波時(shí)鐘圖10 行波時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘(這個(gè)3位計(jì)數(shù)器是圖9異步計(jì)數(shù)器的替代電路,它用了同樣的3個(gè)宏單元,但有更短的時(shí)鐘到輸出的延時(shí))2.6.5 多時(shí)鐘系統(tǒng)許多系統(tǒng)要求在同一個(gè)PLD內(nèi)采用多時(shí)鐘。最常見(jiàn)的例子是兩個(gè)異步微處理器器之間的接口,或微處理器和異步通信通道的接口。由于兩個(gè)時(shí)鐘信號(hào)之間要求一定的建立和保持時(shí)間,所以,上述應(yīng)用引進(jìn)了附加的定時(shí)約束條件。它們也會(huì)要求將某些異步信號(hào)同步化。圖11 給出一個(gè)多時(shí)鐘系統(tǒng)的實(shí)例。CLK_A用以鐘控REG_A,CLK_B用于鐘控REG_B,由于REG_A驅(qū)動(dòng)著進(jìn)入REG_B的組合邏輯,故CLK_A的上升沿相對(duì)于CLK_B的上升沿有建立時(shí)間和保持時(shí)間的要求。由于REG_B不驅(qū)動(dòng)饋到REG_A的邏輯,CLK_B的上升沿相對(duì)于CLK_A沒(méi)有建立時(shí)間的要求。此外,由于時(shí)鐘的下降沿不影響觸發(fā)器的狀態(tài),所以CLK_A和CLK_B的下降沿之間沒(méi)有時(shí)間上的要求。如圖4,2II所示,電路中有兩個(gè)獨(dú)立的時(shí)鐘,可是,在它們之間的建立時(shí)間和保持時(shí)間的要求是不能保證的。在這種情況下,必須將電路同步化。圖12 給出REG_A的值(如何在使用前)同CLK_B同步化。新的觸發(fā)器REG_C由GLK_B觸控,保證REG_G的輸出符合REG_B的建立時(shí)間。然而,這個(gè)方法使輸出延時(shí)了一個(gè)時(shí)鐘周期。圖ll 多時(shí)鐘系統(tǒng)(定時(shí)波形示出CLK_A的上升沿相對(duì)于CLK_B的上升沿有建立時(shí)間和保持時(shí)間的約束條件)圖12 具有同步寄存器輸出的多時(shí)鐘系統(tǒng)(如果CLK_A和CLK_B是相互獨(dú)立的,則REGA的輸出必須在它饋送到1REG_B之前,用REG_C同步化)在許多應(yīng)用中只將異步信號(hào)同步化還是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,我們將面臨復(fù)雜的時(shí)間問(wèn)題。最好的方法是將所有非同源時(shí)鐘同步化。使用PLD內(nèi)部的鎖項(xiàng)環(huán)(PLL或DLL)是一個(gè)效果很好的方法,但不是所有PLD都帶有PLL、DLL,而且?guī)в蠵LL功能的芯片大多價(jià)格昂貴,所以除非有特殊要求,一般場(chǎng)合可以不使用帶PLL的PLD。 這時(shí)我們需要使用帶使能端的D觸發(fā)器,并引入一個(gè)高頻時(shí)鐘。圖13 不同源時(shí)鐘如圖13所示,系統(tǒng)有兩個(gè)不同源時(shí)鐘,一個(gè)為3MHz,一個(gè)為5MHz,不同的觸發(fā)器使用不同的時(shí)鐘。為了系統(tǒng)穩(wěn)定,我們引入一個(gè)20MHz時(shí)鐘,將3M和5M時(shí)鐘同步化,如圖15所示。 20M的高頻時(shí)鐘將作為系統(tǒng)時(shí)鐘,輸入到所有觸發(fā)器的的時(shí)鐘端。3M_EN 和5M_EN將控制所有觸發(fā)器的使能端。即原來(lái)接3M時(shí)鐘的觸發(fā)器,接20M時(shí)鐘,同時(shí)3M_EN 將控制該觸發(fā)器使能 ,原接5M時(shí)鐘的觸發(fā)器,也接20M時(shí)鐘,同時(shí)5M_EN 將控制該觸發(fā)器使能。 這樣我們就可以將任何非同源時(shí)鐘同步化。圖13 同步化任意非同源時(shí)鐘(一個(gè)DFF和后面非門(mén),與門(mén)構(gòu)成時(shí)鐘上升沿檢測(cè)電路) 另外,異步信號(hào)輸入總是無(wú)法滿(mǎn)足數(shù)據(jù)的建立保持時(shí)間,容易使系統(tǒng)進(jìn)入亞穩(wěn)態(tài),所以也建議設(shè)計(jì)者把所有異步輸入都先經(jīng)過(guò)雙觸發(fā)器進(jìn)行同步化. 小結(jié):穩(wěn)定可靠的時(shí)鐘是系統(tǒng)穩(wěn)定可靠的重要條件,我們不能夠?qū)⑷魏慰赡芎忻痰妮敵鲎鳛闀r(shí)鐘信號(hào),并且盡可能只使用一個(gè)全局時(shí)鐘,對(duì)多時(shí)鐘系統(tǒng)要注意同步異步信號(hào)和非同源時(shí)鐘。2.6.6 多時(shí)鐘系統(tǒng)設(shè)計(jì)的一些方法:如果時(shí)鐘間存在著固定的頻率倍數(shù),這種情況下它們的相位一般具有固定關(guān)系,可以采用下述方法處理;l 使用高頻時(shí)鐘作為工作時(shí)鐘,使用低頻時(shí)鐘作為使能信號(hào),當(dāng)功耗不作為首要因素時(shí)建議使用這種方式;l 在仔細(xì)分析時(shí)序的基礎(chǔ)上描述兩個(gè)時(shí)鐘轉(zhuǎn)換處的電路;如果電路中存在兩個(gè)不同頻率的時(shí)鐘,并且頻率無(wú)關(guān),可以采用如下策略:l 利用高頻時(shí)鐘采樣兩個(gè)時(shí)鐘,在電路中使用高頻時(shí)鐘作為電路的工作時(shí)鐘,經(jīng)采樣后的低頻時(shí)鐘作為使能;l 在時(shí)鐘同步單元中采用兩次同步法ll 使用握手信號(hào)l 使用雙時(shí)鐘FIFO進(jìn)行數(shù)據(jù)緩沖時(shí)鐘同步化,如果系統(tǒng)中存在兩個(gè)時(shí)鐘clk_a和clk_b,設(shè)計(jì)者可以使用頻率高于max(clk_a,clk_b)兩倍的時(shí)鐘來(lái)作為采樣時(shí)鐘,兩個(gè)低頻時(shí)鐘經(jīng)過(guò)處理后可以作為觸發(fā)器的使能信號(hào),采用這種方案的好處是整個(gè)電路采用單時(shí)鐘工作,但需要一個(gè)額外的高頻時(shí)鐘,當(dāng)電路有功耗要求時(shí),設(shè)計(jì)者應(yīng)該仔細(xì)考慮;使用20M采樣3M和5M,syn_5M作為原來(lái)5M信號(hào)驅(qū)動(dòng)寄存器的使能信號(hào); 圖 使用高頻時(shí)鐘采樣2個(gè)低頻時(shí)鐘原理圖圖 使用高頻時(shí)鐘采樣2個(gè)低頻時(shí)鐘波形圖在構(gòu)件由兩個(gè)不同系統(tǒng)時(shí)鐘控制工作的模塊之間的同步模塊時(shí),應(yīng)該遵守下面原則:兩個(gè)采用不同時(shí)鐘工作的寄存器之間不應(yīng)該再出現(xiàn)邏輯電路,而應(yīng)該僅僅是一種連接關(guān)系,具體如下圖所示,這種方法有利于控制建立保持時(shí)間的滿(mǎn)足。握手信號(hào)機(jī)制是異步系統(tǒng)之間通信的基本方式,我們?cè)谔幚聿煌瑫r(shí)鐘之間的接口時(shí),也可以采用這種方式,但需要注意的是設(shè)計(jì)者應(yīng)該仔細(xì)分析握手和應(yīng)答信號(hào)有效持續(xù)的時(shí)間,確保采樣數(shù)據(jù)的正確性。目前各種器件中提供的雙時(shí)鐘FIFO宏單元很好的提供了對(duì)異步雙時(shí)鐘的訪問(wèn),單元的內(nèi)部有協(xié)調(diào)兩個(gè)時(shí)鐘的電路,確保讀寫(xiě)的正確性??梢岳眠@個(gè)器件完成數(shù)據(jù)的同步。1. 采用全局時(shí)鐘,不要將時(shí)鐘參與運(yùn)算。系統(tǒng)提供一定數(shù)量的全局時(shí)鐘線,在布局布線時(shí),盡量滿(mǎn)足這些信號(hào)的要求以減小時(shí)鐘偏移和傾斜。如果時(shí)序安排不合理使用了較多gated clock,那么這些時(shí)鐘的偏斜就會(huì)較大,不能保障建立時(shí)間和保持時(shí)間,導(dǎo)致電路工作頻率降低或無(wú)法工作。2. 以寄存器為邊界劃分工作模塊。在設(shè)計(jì)較大規(guī)模的電路時(shí),分模塊設(shè)計(jì)是必不可少的,在各模塊通過(guò)之后再進(jìn)行系統(tǒng)的聯(lián)調(diào)。但由于在單模塊調(diào)試和聯(lián)調(diào)時(shí)布線資源的占用緊張程度不同,使得每個(gè)模塊的輸出無(wú)法保持與單獨(dú)布線時(shí)相同,在聯(lián)調(diào)時(shí)造成困難。如果每一個(gè)模塊的輸出端口都采用寄存器輸出,那么即使在整體布局布線后,各模塊的輸出依然可以保證原來(lái)的時(shí)序,這使得聯(lián)調(diào)的工作效率大大提高。加入這些寄存器也使得電路的可測(cè)性有所提高。3. 組合邏輯盡量采用并行結(jié)構(gòu),降低寄存器間組合路徑的延遲是提高系統(tǒng)工作頻率最主要的手段,因此在完成相同功能的前提下應(yīng)該盡量使用并行邏輯,如圖6所示。如果沒(méi)有優(yōu)先級(jí)要求應(yīng)該盡量采用case語(yǔ)句來(lái)描述,這樣綜合出來(lái)的電路并行度要大一些,如果采用if-then-else結(jié)構(gòu),綜合出來(lái)的電路都是串行的,增大了時(shí)延路徑。4. 在描述中應(yīng)該消除鎖存器,如果某個(gè)數(shù)據(jù)需要保存應(yīng)該合理安排使用寄存器,因?yàn)殒i存器在整個(gè)工作電平有效期間都對(duì)輸入敏感,輸入中的任何毛刺經(jīng)過(guò)鎖存器后都不會(huì)消除,這樣使得在其后的組合電路發(fā)生競(jìng)爭(zhēng)冒險(xiǎn)的可能性大為提高,影響電路性能。一些不適當(dāng)?shù)拿枋鲆矔?huì)使得產(chǎn)生不必要的鎖存器,增加了電路的面積。5. 在設(shè)計(jì)中應(yīng)該盡量采用同步設(shè)計(jì),信號(hào)被時(shí)鐘采樣后再參與邏輯運(yùn)算,這樣可以隔斷組合路徑,也可以消除毛刺。在設(shè)計(jì)中,組合信號(hào)的輸出不允許反饋?zhàn)鳛樵摻M合邏輯的輸入,這樣可以避免組合環(huán)。27

注意事項(xiàng)

本文(FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn).doc)為本站會(huì)員(小**)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!