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

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

上傳人:jun****875 文檔編號(hào):17817797 上傳時(shí)間:2020-12-07 格式:DOC 頁數(shù):27 大?。?.06MB
收藏 版權(quán)申訴 舉報(bào) 下載
FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)_第1頁
第1頁 / 共27頁
FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)_第2頁
第2頁 / 共27頁
FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)_第3頁
第3頁 / 共27頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《FPGACPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)(27頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、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)是行之有效的,通過許多設(shè)計(jì)實(shí)例證明采用這種方式可以使電路的后仿真通過率大大提高,并且系統(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)上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時(shí)間

2、,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器;保持時(shí)間(hold time)是指在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時(shí)間, 如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。 如圖1 。 數(shù)據(jù)穩(wěn)定傳輸必須滿足建立和保持時(shí)間的要求,當(dāng)然在一些情況下,建立時(shí)間和保持時(shí)間的值可以為零。 PLD/FPGA開發(fā)軟件可以自動(dòng)計(jì)算兩個(gè)相關(guān)輸入的建立和保持時(shí)間(如圖2) 圖1 建立時(shí)間和保持時(shí)間關(guān)系圖 注: l 在考慮建立保持時(shí)間時(shí),應(yīng)該考慮時(shí)鐘樹向后偏斜的情況,在考慮建立時(shí)間時(shí)應(yīng)該考慮時(shí)鐘樹向前偏斜的情況。在進(jìn)行后仿真時(shí),最大延遲用來檢查建立時(shí)間,最小延時(shí)用來檢查保持時(shí)間。

3、l 建立時(shí)間的約束和時(shí)鐘周期有關(guān),當(dāng)系統(tǒng)在高頻時(shí)鐘下無法工作時(shí),降低時(shí)鐘頻率就可以使系統(tǒng)完成工作。保持時(shí)間是一個(gè)和時(shí)鐘周期無關(guān)的參數(shù),如果設(shè)計(jì)不合理,使得布局布線工具無法布出高質(zhì)量的時(shí)鐘樹,那么無論如何調(diào)整時(shí)鐘頻率也無法達(dá)到要求,只有對(duì)所設(shè)計(jì)系統(tǒng)作較大改動(dòng)才有可能正常工作,導(dǎo)致設(shè)計(jì)效率大大降低。因此合理的設(shè)計(jì)系統(tǒng)的時(shí)序是提高設(shè)計(jì)質(zhì)量的關(guān)鍵。在可編程器件中,時(shí)鐘樹的偏斜幾乎可以不考慮,因此保持時(shí)間通常都是滿足的。 1.2 FPGA中的競爭和冒險(xiǎn)現(xiàn)象 信號(hào)在FPGA器件內(nèi)部通過連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、工作電壓

4、、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過渡時(shí)間。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,并不是同時(shí)變化,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱為"毛刺"。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說明該電路存在"冒險(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)過布線延時(shí)以后,高低電平變換不是同時(shí)發(fā)生的,這導(dǎo)致輸出信號(hào)"OUT"出現(xiàn)了毛刺。(我們無

5、法保證所有連線的長度一致,所以即使四個(gè)輸入信號(hào)在輸入端同時(shí)變化,但經(jīng)過PLD內(nèi)部的走線,到達(dá)或門的時(shí)間也是不一樣的,毛刺必然產(chǎn)生)??梢愿爬ǖ闹v,只要輸入信號(hào)同時(shí)變化,(經(jīng)過內(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ò),因此判斷邏輯電路中是否存在

6、冒險(xiǎn)以及如何避免冒險(xiǎn)是設(shè)計(jì)人員必須要考慮的問題。 如何處理毛刺 我們可以通過改變?cè)O(shè)計(jì),破壞毛刺產(chǎn)生的條件,來減少毛刺的發(fā)生。例如,在數(shù)字電路設(shè)計(jì)中,常常采用格雷碼計(jì)數(shù)器取代普通的二進(jìn)制計(jì)數(shù)器,這是因?yàn)楦窭状a計(jì)數(shù)器的輸出每次只有一位跳變,消除了競爭冒險(xiǎn)的發(fā)生條件,避免了毛刺的產(chǎn)生。 毛刺并不是對(duì)所有的輸入都有危害,例如D觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿足數(shù)據(jù)的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害,我們可以說D觸發(fā)器的D輸入端對(duì)毛刺不敏感。 根據(jù)這個(gè)特性,我們應(yīng)當(dāng)在系統(tǒng)中盡可能采用同步電路,這是因?yàn)橥诫娐沸盘?hào)的變化都發(fā)生在時(shí)鐘沿,只要毛刺不出現(xiàn)在時(shí)鐘的沿口并且不滿足數(shù)據(jù)

7、的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。 (由于毛刺很短,多為幾納秒,基本上都不可能滿足數(shù)據(jù)的建立和保持時(shí)間) 去除毛刺的一種常見的方法是利用D觸發(fā)器的D輸入端對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號(hào),這種方法類似于將異步電路轉(zhuǎn)化為同步電路。 圖4給出了這種方法的示范電路,圖5是仿真波形。 圖4 消除毛刺信號(hào)方法之二 圖5 圖4所示電路的仿真波形 如前所述,優(yōu)秀的設(shè)計(jì)方案,如采用格雷碼計(jì)數(shù)器,同步電路等,可以大大減少毛刺,但它并不能完全消除毛刺。 毛刺并不是對(duì)所有輸入都有危害,例如D觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿足數(shù)據(jù)的

8、建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。因此我們可以說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)過全局的清零和置位管腳輸入,因?yàn)樗麄円矊儆谌值馁Y源,其扇出能力大,而且在FPGA內(nèi)部是直接連接到所有的觸發(fā)器的置位和清零端的,這樣的做法會(huì)使芯片的工作可靠、性能穩(wěn)定,而使用普通的IO腳則不能保證該性能。 在FPGA的設(shè)計(jì)中,除了從外部管腳引入的全局清除和置位

9、信號(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í)候可以用同步置位的辦法來替代異步清0。在用硬件描述語言的設(shè)計(jì)中可以用如下的方式來描述: 異步清0的描述方法: process(rst,clk) begin if rst=’1’ then count<=(others=>’0’); elsif clk’event and clk=’1’ then count<=count+1; end if; end process; 同步

10、清0的描述方法: process begin wait until clk’event 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ù)的鎖存的,而鎖存器是用電平使能來鎖存數(shù)據(jù)的。所以觸發(fā)器的Q輸出端在每一個(gè)時(shí)鐘沿都會(huì)被更新,而鎖存器只能在使能電平有效器件才會(huì)被更新。在FPGA設(shè)計(jì)

11、中建議如果不是必須那么應(yīng)該盡量使用觸發(fā)器而不是鎖存器。 那么在使用硬件描述語言進(jìn)行電路設(shè)計(jì)的時(shí)候如何區(qū)分觸發(fā)器和鎖存器的描述方法哪?其實(shí)有不少人在使用的過程中可能并沒有特意區(qū)分過,所以也忽略了二者在描述方法上的區(qū)別。下面是用VHDL語言描述的觸發(fā)器和鎖存器以及綜合器產(chǎn)生的電路邏輯圖。 觸發(fā)器的語言描述: process begin wait until clk’event and clk=’1’; q<=d; end process; 圖 觸發(fā)器 鎖存器的語言描述: process(en,d) begin if en=’1’ then

12、 q<=d; end if; end process; 圖 所存器 由上述對(duì)Latch的描述可見,其很容易于選擇器的描述相混淆,用VHDL語言對(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ì)不是總能滿足(它們所饋送的觸發(fā)器的)建立和保持時(shí)間的要求。因此,異步輸入常常會(huì)把錯(cuò)誤的數(shù)據(jù)鎖存到觸發(fā)器,或者使觸發(fā)器進(jìn)入亞穩(wěn)定的狀態(tài),在

13、該狀態(tài)下,觸發(fā)器的輸出不能識(shí)別為l或0。如果沒有正確地處理,亞穩(wěn)性會(huì)導(dǎo)致嚴(yán)重的系統(tǒng)可靠性問題。 另外,在FPGA的內(nèi)部資源里最重要的一部分就是其時(shí)鐘資源(全局時(shí)鐘網(wǎng)絡(luò)),它一般是經(jīng)過FPGA的特定全局時(shí)鐘管腳進(jìn)入FPGA內(nèi)部,后經(jīng)過全局時(shí)鐘BUF適配到全局時(shí)鐘網(wǎng)絡(luò)的,這樣的時(shí)鐘網(wǎng)絡(luò)可以保證相同的時(shí)鐘沿到達(dá)芯片內(nèi)部每一個(gè)觸發(fā)器的延遲時(shí)間差異是可以忽略不計(jì)的。 在FPGA中上述的全局時(shí)鐘網(wǎng)絡(luò)被稱為時(shí)鐘樹,無論是專業(yè)的第三方工具還是器件廠商提供的布局布線器在延時(shí)參數(shù)提取、分析的時(shí)候都是依據(jù)全局時(shí)鐘網(wǎng)絡(luò)作為計(jì)算的基準(zhǔn)的。如果一個(gè)設(shè)計(jì)沒有使用時(shí)鐘樹提供的時(shí)鐘,那么這些設(shè)計(jì)工具有的會(huì)拒絕做延時(shí)分析

14、有的延時(shí)數(shù)據(jù)將是不可靠的。 在我們?nèi)粘5脑O(shè)計(jì)中很多情形下會(huì)用到需要分頻的情形,好多人的做法是先用高頻時(shí)鐘計(jì)數(shù),然后使用計(jì)數(shù)器的某一位輸出作為工作時(shí)鐘進(jìn)行其他的邏輯設(shè)計(jì)。其實(shí)這樣的方法是不規(guī)范的。比如下面的描述方法: process begin wait until clk’event and clk=’1’; if fck=’1’ then count<=(others=>’0’); else count<=count+1; end if; end process; process begin wa

15、it 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這樣來寫。 proce

16、ss begin wait until clk’event and clk=’1’ ; if count(2 downto 0)=”000” then shift_reg<=data; end if; end process; 或者分成兩步來寫: process(count) begin if count(2 downto 0)=”000” then en<=’1’; else en<=’0’; end if; end process; process begin wait until clk’event and

17、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í)處理來適應(yīng)對(duì)外接口的時(shí)序關(guān)系,最經(jīng)常也是最典型的情況是做處理機(jī)的接口;因?yàn)榕c處理的接口時(shí)序關(guān)系是異步的,而一個(gè)規(guī)范的FP

18、GA設(shè)計(jì)應(yīng)該是盡可能采用同步設(shè)計(jì)。那么遇到這種情況該如何處理呢? 首先在FPGA中要產(chǎn)生延時(shí),信號(hào)必須經(jīng)過一定的物理資源。在硬件描述語言中有關(guān)鍵詞Wait for xx ns,需要說明的是該語法是僅僅用于仿真而不能用于綜合的,可綜合的延時(shí)方法有: n 使信號(hào)經(jīng)過邏輯門得到延時(shí)(如非門); n 使用器件提供的延時(shí)單元(如Altera公司的LCELL,Xilinx公司的); 注意:當(dāng)使用多級(jí)非門的時(shí)候綜合器往往會(huì)將其優(yōu)化掉,因?yàn)榫C合器會(huì)認(rèn)為一個(gè)信號(hào)非兩次還是它自己。 需要說明的是在FPGA/CPLD內(nèi)部結(jié)構(gòu)是一種標(biāo)準(zhǔn)的宏單元,下圖是Xilinx公司的Spartans II系列器件的一個(gè)標(biāo)

19、準(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)告資源不夠使用的原因。 現(xiàn)面的一個(gè)例子是前一段時(shí)間我在公司遇到的一個(gè)設(shè)計(jì)。設(shè)計(jì)使用Altera公司的EPM7256型號(hào)的CPLD。該設(shè)計(jì)實(shí)際使用的寄存器資源只有109個(gè),占整個(gè)器件資源的42%。可是該設(shè)計(jì)使用了如下圖所示的延時(shí)方法來做處理器接口的時(shí)序: 在該電路的設(shè)計(jì)中使用了大量的L

20、CELL來產(chǎn)生100多納秒的延時(shí),這樣做的后果是雖然整個(gè)電路的觸發(fā)器資源只使用了42%,可是用MaxplusII進(jìn)行布局布線已經(jīng)不能夠通過了。而且我懷疑經(jīng)過這么多邏輯的延時(shí)后所產(chǎn)生的信號(hào)還能保持原來的性能不。 當(dāng)需要對(duì)某一信號(hào)作一段延時(shí)時(shí),初學(xué)者往往在此信號(hào)后串接一些非門或其它門電路,此方法在分離電路中是可行的。但在FPGA中,開發(fā)軟件在綜合設(shè)計(jì)時(shí)會(huì)將這些門當(dāng)作冗余邏輯去掉,達(dá)不到延時(shí)的效果。用ALTERA公司的MaxplusII開發(fā)FPGA?xí)r,可以通過插入一些LCELL原語來產(chǎn)生一定的延時(shí),但這樣形成的延時(shí)在FPGA芯片中并不穩(wěn)定,會(huì)隨溫度等外部環(huán)境的改變而改變,因此并不提倡這樣做。在此,

21、可以用高頻時(shí)鐘來驅(qū)動(dòng)一移位寄存器,待延時(shí)信號(hào)作數(shù)據(jù)輸入,按所需延時(shí)正確設(shè)置移位寄存器的級(jí)數(shù),移位寄存器的輸出即為延時(shí)后的信號(hào)。此方法產(chǎn)生的延時(shí)信號(hào)與原信號(hào)比有誤差,誤差大小由高頻時(shí)鐘的周期來決定。對(duì)于數(shù)據(jù)信號(hào)的延時(shí),在輸出端用數(shù)據(jù)時(shí)鐘對(duì)延時(shí)后信號(hào)重新采樣,就可以消除誤差。 對(duì)于這樣大的延時(shí)我建議的實(shí)現(xiàn)方法是采用時(shí)鐘鎖存來產(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á)到目的了。電路圖和仿真波形如下圖所示

22、:當(dāng)然這樣做對(duì)原來信號(hào)高低電平的寬度會(huì)稍有改變,但只要是在與其接口的芯片的容許范圍之內(nèi)就不會(huì)影響到功能的實(shí)現(xiàn)。 圖 用于延時(shí)的電路圖 上圖仿真波形 2.3 如何提高系統(tǒng)的運(yùn)行速度 同步電路的速度是指同步時(shí)鐘的速度。同步時(shí)鐘愈快,電路處理數(shù)據(jù)的時(shí)間間隔越短,電路在單位時(shí)間處理的數(shù)據(jù)量就愈大. 我們先來看一看同步電路中數(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)過組合邏輯的延時(shí)Tdelay到達(dá)的第

23、二個(gè)觸發(fā)器的D端,要想時(shí)鐘能在第二個(gè)觸發(fā)器再次被穩(wěn)定的鎖入觸發(fā)器,則時(shí)鐘的延遲不能晚于Tco+Tdelay+Tsetup,(我們可以回顧一下前面講過的建立和保持時(shí)間的概念,就可以理解為什么公式最后要加上一個(gè)Tdelay) 由以上分析可知:最小時(shí)鐘周期:T=Tco+Tdelay+Tsetup 最快時(shí)鐘頻率 F= 1/T PLD開發(fā)軟件也正是通過這個(gè)公式來計(jì)算系統(tǒng)運(yùn)行速度Fmax 注:在這個(gè)邏輯圖中有個(gè)參數(shù):Tpd ,即時(shí)鐘的延時(shí)參數(shù),我們?cè)趧偛抛鰰r(shí)間分析的時(shí)候,沒有提這個(gè)參數(shù),(如果使用PLD的全局時(shí)鐘型號(hào),Tpd可以為0,如果是普通時(shí)鐘,則不為0)。所以如果考慮到時(shí)鐘的延時(shí),精確的公式應(yīng)

24、該是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í)鐘周期必須滿足最大延時(shí)要求,縮短最長延時(shí)路徑,才可提高電路的工作頻率。 如圖2所示:我們可以將較大的組合邏輯分解為較小的幾塊,中間插入觸發(fā)器,這樣可以提高電路的工作頻率。這也是所謂“流水線”(pipelining)技術(shù)的基本

25、原理。 對(duì)于圖3的上半部分,它時(shí)鐘頻率受制于第二個(gè)較大的組合邏輯的延時(shí),通過適當(dāng)?shù)姆椒ㄆ骄峙浣M合邏輯,可以避免在兩個(gè)觸發(fā)器之間出現(xiàn)過大的延時(shí),消除速度瓶頸。 FPGA/CPLD開發(fā)軟件中也有一些參數(shù)設(shè)置,通過修改這些設(shè)置,可以提高編譯/布局布線后系統(tǒng)速度,但是根據(jù)經(jīng)驗(yàn)這種速度的提高是很有限的,假如按照要求我們需要設(shè)計(jì)一個(gè)可以工作到50MHz的系統(tǒng),實(shí)際布局布線器報(bào)告出來的Fmax只有40MHz,此時(shí)如果我們使用布局布線器的設(shè)置選項(xiàng)最多可以提高到45MHz,這還是運(yùn)氣比較好的情況。而且你必須了解這些選項(xiàng)的含義、使用背景等。 其實(shí)在一個(gè)設(shè)計(jì)里影響速度的瓶頸經(jīng)常只會(huì)有幾條,我們將延時(shí)

26、最大的路徑稱作關(guān)鍵路徑。當(dāng)設(shè)計(jì)的運(yùn)行速度不符合系統(tǒng)設(shè)計(jì)要求的時(shí)候我們可以首先找到不能滿足要求的關(guān)鍵路徑,按照上述的方法將關(guān)鍵路徑上的組合邏輯拆分成多個(gè)中間用觸發(fā)器隔開,這樣很容易就可以從根本上提升系統(tǒng)的運(yùn)行速度了。 有的設(shè)計(jì)在設(shè)計(jì)開始就知道那部分電路會(huì)產(chǎn)生比較大的組合邏輯,導(dǎo)致速度瓶頸的產(chǎn)生,那么就應(yīng)該在開始就想好解決辦法。比如現(xiàn)在設(shè)計(jì)需要產(chǎn)生一個(gè)32位的加法器,并且要求能夠工作在50MHz。根據(jù)經(jīng)驗(yàn)直接用32位加法器肯定是達(dá)不到50MHz的要求的,這時(shí)我們可以將其分成3個(gè)12位計(jì)數(shù)器來操作,后面的計(jì)數(shù)器只要將前面計(jì)數(shù)器結(jié)果的高位(進(jìn)位位)相加就可以了。 下面是原來在寬帶接入服務(wù)器設(shè)計(jì)中的

27、流量統(tǒng)計(jì)單元中的32位加法器的描述: ---------------------------------------------------------- ---- flow count element ---------------------------------------------------------- -----temporary computing 12 bits adder process(Count_0_en,count_buffer,Len,Carry_0_0,Carry_0_1) begin case Count_0_en is

28、 ---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 <=

29、 (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));

30、 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 adder add_12_result_0 <= add_12_a_0 + add_12_b_0; ------Bytes Count process(RST,CLK_25MHz,IO,OE

31、_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)the

32、n 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

33、 <= 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);--Seco

34、nd 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

35、 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ān)器件的時(shí)候,如果不影響功能最好是將這些信號(hào)通過用時(shí)鐘鎖存后輸出。因?yàn)橥ǔG闆r下一個(gè)板子是工作于一種或兩種時(shí)鐘模式下,與FPGA/CPLD相連接的芯片的工作時(shí)鐘大多數(shù)情形下與FPGA的時(shí)鐘同源,如果輸出的信號(hào)經(jīng)過時(shí)鐘鎖存可以起到如下的作用: n 容易滿足芯片間信號(hào)連接的時(shí)序要求; n 容易滿

36、足信號(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í)間不滿足要求而出現(xiàn)采樣不可靠、沿打沿等情況。另外通過組合邏輯輸出還有可能出現(xiàn)毛刺的情況。所有這些不規(guī)范的設(shè)計(jì)都會(huì)引起系統(tǒng)工作時(shí)的不可靠、不穩(wěn)定的情形。 2.5 寄存異步輸入信號(hào) 我們?cè)谌粘5脑O(shè)計(jì)工作中,

37、FPGA/CPLD總是要與別的芯片相連接的,F(xiàn)PGA/CPLD會(huì)給別的芯片輸出信號(hào),同時(shí)也要處理別的芯片送來的信號(hào),這些信號(hào)往往對(duì)FPGA/CPLD內(nèi)部的時(shí)鐘系統(tǒng)而言是異步的,為了可靠的采樣到這些輸入信號(hào),建議將這些輸入信號(hào)使用相應(yīng)的時(shí)鐘鎖存后在處理,這樣做: n 將原來的異步信號(hào)轉(zhuǎn)化成同步來處理; n 去除輸入信號(hào)中的毛刺(特別是對(duì)于數(shù)據(jù)總線); 圖 FPGA/CPLD中信號(hào)的輸入、輸出鎖存 2.6 FPGA/CPLD中的時(shí)鐘設(shè)計(jì) 無淪是用離散邏輯、可編程邏輯,還是用全定制硅器件實(shí)現(xiàn)的任何數(shù)字設(shè)計(jì),為了成功地操作,可靠的時(shí)鐘是非常關(guān)鍵的。設(shè)計(jì)不良的時(shí)鐘在極限的溫度、電壓或制造工

38、藝的偏差情況下將導(dǎo)致錯(cuò)誤的行為,并且調(diào)試?yán)щy、花銷很大。在設(shè)計(jì)FPGA/CPLD時(shí)通常采用幾種時(shí)鐘類型。時(shí)鐘可分為如下四種類型:全局時(shí)鐘、門控時(shí)鐘、多級(jí)邏輯時(shí)鐘和波動(dòng)式時(shí)鐘。多時(shí)鐘系統(tǒng)能夠包括上述四種時(shí)鐘類型的任意組合。 無論采用何種方式,電路中真實(shí)的時(shí)鐘樹也無法達(dá)到假定的理想時(shí)鐘,因此我們必須依據(jù)理想時(shí)鐘,建立一個(gè)實(shí)際工作時(shí)鐘模型來分析電路,這樣才可以使得電路的實(shí)際工作效果和預(yù)期的一樣。在實(shí)際的時(shí)鐘模型中,我們要考慮時(shí)鐘樹傳播中的偏斜、跳變和絕對(duì)垂直的偏差以及其它一些不確定因素。 對(duì)于寄存器而言,當(dāng)時(shí)鐘工作沿到來時(shí)它的數(shù)據(jù)端應(yīng)該已經(jīng)穩(wěn)定,這樣才能保證時(shí)鐘工作沿采樣到數(shù)據(jù)的正確性,這段

39、數(shù)據(jù)的預(yù)備時(shí)間我們稱之為建立時(shí)間(setup time)。數(shù)據(jù)同樣應(yīng)該在時(shí)鐘工作沿過去后保持一段時(shí)間,這段時(shí)間稱為保持時(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)該分別滿足: 其中tclock_Q_max是時(shí)鐘沿變化到數(shù)據(jù)輸出端變化的最慢變化情況,tlogic_max是寄存器間

40、組合邏輯的最大可能延遲,tclock_Q_min和tlogic_min表示最快情況。在考慮建立保持時(shí)間時(shí),應(yīng)該考慮時(shí)鐘樹向后偏斜的情況,在考慮建立時(shí)間時(shí)應(yīng)該考慮時(shí)鐘樹向前偏斜的情況。在進(jìn)行后仿真時(shí),最大延遲用來檢查建立時(shí)間,最小延時(shí)用來檢查保持時(shí)間。 2.6.1 全局時(shí)鐘 對(duì)于一個(gè)設(shè)計(jì)項(xiàng)目來說,全局時(shí)鐘(或同步時(shí)鐘)是最簡單和最可預(yù)測的時(shí)鐘。在PLD/FPGA設(shè)計(jì)中最好的時(shí)鐘方案是:由專用的全局時(shí)鐘輸入引腳驅(qū)動(dòng)的單個(gè)主時(shí)鐘去鐘控設(shè)計(jì)項(xiàng)目中的每一個(gè)觸發(fā)器。只要可能就應(yīng)盡量在設(shè)計(jì)項(xiàng)目中采用全局時(shí)鐘。PLD/FPGA都具有專門的全局時(shí)鐘引腳,它直接連到器件中的每一個(gè)寄存器。這種全局時(shí)鐘提

41、供器件中最短的時(shí)鐘到輸出的延時(shí)。 圖1 示出全局時(shí)鐘的實(shí)例。圖1 定時(shí)波形示出觸發(fā)器的數(shù)據(jù)輸入D[1..3]應(yīng)遵守建立時(shí)間和保持時(shí)間的約束條件。建立和保持時(shí)間的數(shù)值在PLD數(shù)據(jù)手冊(cè)中給出,也可用軟件的定時(shí)分析器計(jì)算出來。如果在應(yīng)用中不能滿足建立和保持時(shí)間的要求,則必須用時(shí)鐘同步輸入信號(hào)(參看下一章“異步輸入”)。 圖1 全局時(shí)鐘 (最好的方法是用全局時(shí)鐘引腳去鐘控PLD內(nèi)的每一個(gè)寄存器,于是數(shù)據(jù)只要遵守相對(duì)時(shí)鐘的建立時(shí)間tsu和保持時(shí)間th) 2.6.2 門控時(shí)鐘 在許多應(yīng)用中,整個(gè)設(shè)計(jì)項(xiàng)目都采用外部的全局時(shí)鐘是不可能或不實(shí)際的。PLD具有乘積項(xiàng)邏輯陣列時(shí)鐘(即時(shí)鐘是由邏輯產(chǎn)

42、生的),允許任意函數(shù)單獨(dú)地鐘控各個(gè)觸發(fā)器。然而,當(dāng)你用陣列時(shí)鐘時(shí),應(yīng)仔細(xì)地分析時(shí)鐘函數(shù),以避免毛刺。 通常用陣列時(shí)鐘構(gòu)成門控時(shí)鐘。門控時(shí)鐘常常同微處理器接口有關(guān),用地址線去控制寫脈沖。然而,每當(dāng)用組合函數(shù)鐘控觸發(fā)器時(shí),通常都存在著門控時(shí)鐘。如果符合下述條件,門控時(shí)鐘可以象全局時(shí)鐘一樣可靠地工作: l 驅(qū)動(dòng)時(shí)鐘的邏輯必須只包含一個(gè)“與”門或一個(gè)“或”門。如果采用任何附加邏在某些工作狀態(tài)下,會(huì)出現(xiàn)競爭產(chǎn)生的毛刺。 l 邏輯門的一個(gè)輸入作為實(shí)際的時(shí)鐘,而該邏輯門的所有其它輸入必須當(dāng)成地址或控制線,它們遵守相對(duì)于時(shí)鐘的建立和保持時(shí)間的約束。 圖2和圖3 是可靠的門控時(shí)鐘的實(shí)例。在 圖2 中,

43、用一個(gè)“與”門產(chǎn)生門控時(shí)鐘,在 圖3 中,用一個(gè)“或”門產(chǎn)生門控時(shí)鐘。在這兩個(gè)實(shí)例中,引腳nWR和nWE考慮為時(shí)鐘引腳,引腳ADD[o..3]是地址引腳,兩個(gè)觸發(fā)器的數(shù)據(jù)是信號(hào)D[1..n]經(jīng)隨機(jī)邏輯產(chǎn)生的。 圖2 “與”門門控時(shí)鐘     圖3 “或”門門控時(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ù)引腳D[1..n]只要求在nWR和nWE的有效邊沿處滿足

44、標(biāo)準(zhǔn)的建立和保持時(shí)間的規(guī)定。 我們往往可以將門控時(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 “與”門門控時(shí)鐘轉(zhuǎn)化成全局時(shí)鐘 圖4 中重新設(shè)計(jì)的電路的定時(shí)波形表明地址線不需要在nWR有效的整個(gè)期間內(nèi)保持穩(wěn)定;而只要求它們和數(shù)據(jù)引腳一樣符合同樣的建立和保持時(shí)間,這樣對(duì)地址線的要求就少很多。 圖5給出一個(gè)不可靠的門控時(shí)鐘的例子。3位同步

45、加法計(jì)數(shù)器的RCO輸出用來鐘控觸發(fā)器。然而,計(jì)數(shù)器給出的多個(gè)輸入起到時(shí)鐘的作用,這違反了可靠門控時(shí)鐘所需的條件之一。在產(chǎn)生RCO信號(hào)的觸發(fā)器中,沒有一個(gè)能考慮為實(shí)際的時(shí)鐘線,這是因?yàn)樗杏|發(fā)器在幾乎相同的時(shí)刻發(fā)生翻轉(zhuǎn)。而我們并不能保證在PLD/FPGA內(nèi)部QA,QB,QC到D觸發(fā)器的布線長短一致,因此,如 圖5 的時(shí)間波形所示,在器從3計(jì)到4時(shí),RCO線上會(huì)出現(xiàn)毛刺(假設(shè)QC到D觸發(fā)器的路徑較短,即QC的輸出先翻轉(zhuǎn))。 圖5 不可靠的門控時(shí)鐘 (定時(shí)波形示出在計(jì)數(shù)器從3到4改變時(shí),RCO信號(hào)如何出現(xiàn)毛刺的) 圖6 給出一種可靠的全局鐘控的電路,它是圖5不可靠計(jì)數(shù)器電路的改進(jìn),RC

46、O控制D觸發(fā)器的使能輸入。這個(gè)改進(jìn)不需要增加PLD的邏輯單元。 圖6 不可靠的門控時(shí)鐘轉(zhuǎn)換為全局時(shí)鐘 2.6.3 多級(jí)邏輯時(shí)鐘 當(dāng)產(chǎn)生門控時(shí)鐘的組合邏輯超過一級(jí)(即超過單個(gè)的“與”門或“或”門)時(shí),證設(shè)計(jì)項(xiàng)目的可靠性變得很困難。即使樣機(jī)或仿真結(jié)果沒有顯示出靜態(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)象。

47、險(xiǎn)象的程度取決于工作的條件。 多級(jí)邏輯的險(xiǎn)象是可以去除的。例如,你可以插入“冗余邏輯”到設(shè)計(jì)項(xiàng)目中。然而,PLD/FPGA編譯器在邏輯綜合時(shí)會(huì)去掉這些冗余邏輯,使得驗(yàn)證險(xiǎn)象是否真正被去除變得困難了。為此,必須應(yīng)尋求其它方法來實(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í)鐘,并沒有固定的模式。   圖7 無靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘 (這個(gè)電路邏輯上等效于圖

48、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í)間。圖1

49、0 給出具有全局時(shí)鐘的同步計(jì)數(shù)器,它和 圖9 功能相同,用了同樣多的邏輯單元實(shí)現(xiàn),卻有較快的時(shí)鐘到輸出的時(shí)間。幾乎所有PLD開發(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í)鐘。最常見的例子是兩個(gè)異步微處理器器之間的接口,或微處理器和異步通信通道的接口。由于兩個(gè)時(shí)鐘信號(hào)之間要求一定的建立和保持時(shí)間,所以,上述應(yīng)用引進(jìn)了附加的定時(shí)約束條件。它們也會(huì)要求將某些異步信號(hào)同步化。 圖11

50、 給出一個(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沒有建立時(shí)間的要求。此外,由于時(shí)鐘的下降沿不影響觸發(fā)器的狀態(tài),所以CLK_A和CLK_B的下降沿之間沒有時(shí)間上的要求。如圖4,2.II所示,電路中有兩個(gè)獨(dú)立的時(shí)鐘,可是,在它們之間的建立時(shí)間和保持時(shí)間的要求是不能保證的。在這種情況下,必須將電路同步化。圖12 給出REG_A的值(如何在使用前)同CLK_B同步化。新的

51、觸發(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ú)立的,則REG—A的輸出必須在它饋送到1REG_B之前,用REG_C同步化)  在許多應(yīng)用中只將異步信號(hào)同步化還是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,我們將面臨復(fù)雜的時(shí)間問題。最好的方法是將所有非同源時(shí)鐘同步化。使用PLD內(nèi)

52、部的鎖項(xiàng)環(huán)(PLL或DLL)是一個(gè)效果很好的方法,但不是所有PLD都帶有PLL、DLL,而且?guī)в蠵LL功能的芯片大多價(jià)格昂貴,所以除非有特殊要求,一般場合可以不使用帶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ā)器的使能端。即原來接3M時(shí)鐘的觸發(fā)器,接20M時(shí)鐘,

53、同時(shí)3M_EN 將控制該觸發(fā)器使能 ,原接5M時(shí)鐘的觸發(fā)器,也接20M時(shí)鐘,同時(shí)5M_EN 將控制該觸發(fā)器使能。 這樣我們就可以將任何非同源時(shí)鐘同步化。 圖13 同步化任意非同源時(shí)鐘 (一個(gè)DFF和后面非門,與門構(gòu)成時(shí)鐘上升沿檢測電路) 另外,異步信號(hào)輸入總是無法滿足數(shù)據(jù)的建立保持時(shí)間,容易使系統(tǒng)進(jìn)入亞穩(wěn)態(tài),所以也建議設(shè)計(jì)者把所有異步輸入都先經(jīng)過雙觸發(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ì)的一些方

54、法: 如果時(shí)鐘間存在著固定的頻率倍數(shù),這種情況下它們的相位一般具有固定關(guān)系,可以采用下述方法處理; l 使用高頻時(shí)鐘作為工作時(shí)鐘,使用低頻時(shí)鐘作為使能信號(hào),當(dāng)功耗不作為首要因素時(shí)建議使用這種方式; l 在仔細(xì)分析時(shí)序的基礎(chǔ)上描述兩個(gè)時(shí)鐘轉(zhuǎn)換處的電路; 如果電路中存在兩個(gè)不同頻率的時(shí)鐘,并且頻率無關(guān),可以采用如下策略: l 利用高頻時(shí)鐘采樣兩個(gè)時(shí)鐘,在電路中使用高頻時(shí)鐘作為電路的工作時(shí)鐘,經(jīng)采樣后的低頻時(shí)鐘作為使能; l 在時(shí)鐘同步單元中采用兩次同步法 l l 使用握手信號(hào) l 使用雙時(shí)鐘FIFO進(jìn)行數(shù)據(jù)緩沖 時(shí)鐘同步化,如果系統(tǒng)中存在兩個(gè)時(shí)鐘clk_a和clk_b,設(shè)計(jì)

55、者可以使用頻率高于max(clk_a,clk_b)兩倍的時(shí)鐘來作為采樣時(shí)鐘,兩個(gè)低頻時(shí)鐘經(jīng)過處理后可以作為觸發(fā)器的使能信號(hào),采用這種方案的好處是整個(gè)電路采用單時(shí)鐘工作,但需要一個(gè)額外的高頻時(shí)鐘,當(dāng)電路有功耗要求時(shí),設(shè)計(jì)者應(yīng)該仔細(xì)考慮; 使用20M采樣3M和5M,syn_5M作為原來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)系,具體如下圖所示,這種方法有利于控制

56、建立保持時(shí)間的滿足。 握手信號(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í)鐘的訪問,單元的內(nèi)部有協(xié)調(diào)兩個(gè)時(shí)鐘的電路,確保讀寫的正確性??梢岳眠@個(gè)器件完成數(shù)據(jù)的同步。 1. 采用全局時(shí)鐘,不要將時(shí)鐘參與運(yùn)算。系統(tǒng)提供一定數(shù)量的全局時(shí)鐘線,在布局布線時(shí),盡量滿足這些信號(hào)的要求以減小時(shí)鐘偏移和傾斜。如果時(shí)序安排不合理使用了較多gated clock,那么這些時(shí)鐘的偏斜就會(huì)較大,不能保障建立時(shí)間和保持時(shí)

57、間,導(dǎo)致電路工作頻率降低或無法工作。 2. 以寄存器為邊界劃分工作模塊。在設(shè)計(jì)較大規(guī)模的電路時(shí),分模塊設(shè)計(jì)是必不可少的,在各模塊通過之后再進(jìn)行系統(tǒng)的聯(lián)調(diào)。但由于在單模塊調(diào)試和聯(lián)調(diào)時(shí)布線資源的占用緊張程度不同,使得每個(gè)模塊的輸出無法保持與單獨(dú)布線時(shí)相同,在聯(lián)調(diào)時(shí)造成困難。如果每一個(gè)模塊的輸出端口都采用寄存器輸出,那么即使在整體布局布線后,各模塊的輸出依然可以保證原來的時(shí)序,這使得聯(lián)調(diào)的工作效率大大提高。加入這些寄存器也使得電路的可測性有所提高。 3. 組合邏輯盡量采用并行結(jié)構(gòu),降低寄存器間組合路徑的延遲是提高系統(tǒng)工作頻率最主要的手段,因此在完成相同功能的前提下應(yīng)該盡量使用并行邏輯,如圖6所示

58、。 如果沒有優(yōu)先級(jí)要求應(yīng)該盡量采用case語句來描述,這樣綜合出來的電路并行度要大一些,如果采用if-then-else結(jié)構(gòu),綜合出來的電路都是串行的,增大了時(shí)延路徑。 4. 在描述中應(yīng)該消除鎖存器,如果某個(gè)數(shù)據(jù)需要保存應(yīng)該合理安排使用寄存器,因?yàn)殒i存器在整個(gè)工作電平有效期間都對(duì)輸入敏感,輸入中的任何毛刺經(jīng)過鎖存器后都不會(huì)消除,這樣使得在其后的組合電路發(fā)生競爭冒險(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)。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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