版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、FPGA/CPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)一位大蝦的經(jīng)驗(yàn)總結(jié),基礎(chǔ)的。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è)較高水平。: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ù)
2、穩(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í)間的值可以為零。CPLD/FPGA 開(kāi)發(fā)軟件可以自動(dòng)計(jì)算兩個(gè)相關(guān)輸入的建立和保持時(shí)間。注:在考慮建立時(shí)間時(shí),應(yīng)該考慮時(shí)鐘樹(shù)向后偏斜的情況,在考慮保持時(shí)間時(shí)應(yīng)該考慮時(shí)鐘樹(shù)向前偏斜的情況。在進(jìn)行后時(shí),最大延遲用來(lái)檢查建立時(shí)間,最小延時(shí)用來(lái)檢查保持時(shí)間。建立時(shí)間的約束和時(shí)鐘周期有關(guān),當(dāng)系統(tǒng)在高頻時(shí)鐘下無(wú)法
3、工作時(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)象信號(hào)在 FPGA 器件內(nèi)部通過(guò)連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、工作電壓、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過(guò)渡時(shí)間。由于存在這
4、兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,并不是同時(shí)變化,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱(chēng)為"毛刺"。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說(shuō)明該電路存在""。(與分立元件不同,由于 PLD 內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級(jí)傳遞,因此毛刺現(xiàn)象在 PLD、FPGA 設(shè)計(jì)中尤為突出)圖 2 是的例子,從圖 3 的波形可以看出,"A、B、C、D"四個(gè)輸入信一個(gè)邏輯號(hào)經(jīng)過(guò)布線延時(shí)以后,高低電平變換不是同時(shí)發(fā)生的,這導(dǎo)致輸出信號(hào)"OU
5、T"出現(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ì)毛刺敏感的輸入端口,確保輸入含有任何毛刺。圖 3 圖 2 所示電路的波形往往會(huì)影響到邏輯電路的穩(wěn)定性。時(shí)鐘端口、清零和置位端口對(duì)毛刺信號(hào)十分敏感,任何一點(diǎn)毛刺都可能會(huì)使系統(tǒng)出錯(cuò),因此邏輯電路中是否存在以及如何避免是
6、設(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)的發(fā)生條件,避免了毛刺的產(chǎn)生。毛刺并不是對(duì)所有的輸入都有危害,例如 D 觸發(fā)器的 D 輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間,就對(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í)間,就對(duì)系統(tǒng)造成
7、危害。 (由于毛刺很短,多為幾納秒,基本上都不可能滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間)去除毛刺的一種常見(jiàn)的方法是利用 D 觸發(fā)器的 D 輸入端對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器組合邏輯的輸出信號(hào),這種方圖 4 給出了這種方法的示范電路,圖 5法類(lèi)似于將異步電路轉(zhuǎn)化為同步電路。是波形。如前所述,優(yōu)秀的設(shè)計(jì)方案,如采用格雷碼計(jì)數(shù)器,同步電路等,可以大大減少毛刺,但它并不能完全消除毛刺。 毛刺并不是對(duì)所有輸入都有危害,例如D 觸發(fā)器的 D 輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿(mǎn)足數(shù)據(jù)的建立和保持時(shí)間,就 對(duì)系統(tǒng)造成危害。因此我們可以說(shuō) D 觸發(fā)器的 D 輸入端對(duì)毛刺不敏感。但對(duì)于 D
8、 觸發(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)樗麄円矊儆谌值模渖瘸瞿芰Υ?,而且?FPGA 內(nèi)部是直接連接到所有的觸發(fā)器的置位和清零端的,這樣的做定,而使用普通的 IO 腳則不能保證該性能。使的工作可靠、性能穩(wěn)在 FPGA 的設(shè)計(jì)中,除了從外部管腳引入的全局清除和置位信號(hào)外在 FPGA內(nèi)部邏輯的處理中也經(jīng)常需要產(chǎn)生一些內(nèi)部的清除或置位信號(hào)。清除和置位信號(hào)要求象對(duì)待
9、時(shí)鐘那樣地考慮它們,因?yàn)檫@些信號(hào)對(duì)毛刺也是非常敏感的。在同步電路設(shè)計(jì)中,有時(shí)候可以用同步置位的辦法來(lái)替代異步清 0。在用硬件描述語(yǔ)言的設(shè)計(jì)中可以用如下的方式來(lái)描述:異步清 0 的描述方法:process(rst,clk) beginif rst=1 then count<=(others=>0);elsif clkevent and clk=1 then count<=count+1;end if;end process;同步清 0 的描述方法:process beginwait until clkevent and clk=1; if rst=1 thencount<
10、=(others=>0);elsecount<=count+1; end if;end process;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)
11、生的電路邏輯圖。觸發(fā)器的語(yǔ)言描述:process beginwait until clkevent and clk=1; q<=d;end process;鎖存器的語(yǔ)言描述:process(en,d) beginif en=1 then q<=d;end if;end process;由上述對(duì) Latch 的描述可見(jiàn),很容易與選擇器的描述相擇器的描述方法如下:process(en,a,b) beginif en=1 then q<=a;elseq<=b; end if;end process;,用 VHDL 語(yǔ)言對(duì)選2 FPGA/CPLD 中的一些設(shè)計(jì)方法2.1 FPG
12、A 設(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è)的第工具
13、還是器件廠商提供的布局布線器在延時(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ī)范的。比如下面的描述方法:process beginwait until clkevent and clk=1; if fck=1 thencount<=(others=>0); elsecount<=count+1; end
14、if;end process;process beginwait 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é)果波形如下圖所示:正確的做法可
15、以將第二個(gè) process 這樣來(lái)寫(xiě)。process beginwait until clkevent and clk=1 ;if count(2 downto 0)=”000” then shift_reg<=data;end if;end process;或者分成兩步來(lái)寫(xiě): process(count) beginif count(2 downto 0)=”000” then en<=1;elseen<=0;end if;end process;process beginwait until clkevent and clk=1 ; if en=1 thenshift_r
16、eg<=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ò)
17、一定的物理。在硬件描述語(yǔ)Wait for xx ns,需要說(shuō)明的是該語(yǔ)法是僅僅用于言中有而不能用于綜合的,可綜合的延時(shí)方法有:使信號(hào)經(jīng)過(guò)邏輯門(mén)得到延時(shí)(如非門(mén));n使用器件提供的延時(shí)單元(如 Altera 公司的 LCELL,Xilinx 公司的);n注意:當(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ā)器而宏單元。在實(shí)際應(yīng)用中,當(dāng)一個(gè)模塊內(nèi)的組合邏
18、輯被使用了那么與其對(duì)應(yīng)的觸發(fā)器也就不能用了;同樣如果觸發(fā)器單元被用了那么組合邏輯單元也就廢了。這就是有時(shí)候(特別是使用 CPLD)雖然設(shè)計(jì)使用的并不多但布局布線器卻報(bào)告不夠使用的。下面的一個(gè)例子是前一段時(shí)間我在公司遇到的一個(gè)設(shè)計(jì)。設(shè)計(jì)使用 Altera公司的 EPM7256 型號(hào)的 CPLD。該設(shè)計(jì)實(shí)際使用的寄存器只有 109 個(gè),占的 42%。整個(gè)器件該設(shè)計(jì)使用了如下圖所示的延時(shí)方法來(lái)做處理器接口的時(shí)序:在該電路的設(shè)計(jì)中使用了大量的 LCELL 來(lái)產(chǎn)生 100 多納秒的延時(shí),這樣做只使用了 42%,用 MaxplusII 進(jìn)行布的后果是雖然整個(gè)電路的觸發(fā)器局布線已經(jīng)不能夠通過(guò)了。而且我懷疑經(jīng)
19、過(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ò)時(shí),但這樣形成的延時(shí)在一些原語(yǔ)來(lái)產(chǎn)生一定的延中并不穩(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)決定。
20、對(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)就影響到功能的實(shí)現(xiàn)。2.3 如何提高系統(tǒng)的運(yùn)行速度同步電路的速度是指同步時(shí)鐘的速度。同步時(shí)鐘,電路處理數(shù)據(jù)的時(shí)間間隔越
21、短,電路在時(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=Tc
22、o+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。
23、所以縮短觸發(fā)器間組合邏輯的延時(shí)是提高同步電路速度的關(guān)鍵。由于一般同步電路都不止一級(jí)鎖存,而要使電路穩(wěn)定工作,時(shí)鐘周期必須滿(mǎn)足最大延時(shí)要求,縮短最長(zhǎng)延時(shí)路徑,才可提高電路的工作頻率。如圖 14 所示:我們可以將較大的組合邏輯分解為較小的幾塊,中間觸發(fā)器,這樣可以提高電路的工作頻率。這也是所謂“流水線”(pipelining)技術(shù)的基本原理。對(duì)于圖 15 的上半部分,它時(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)速度,但是
24、根據(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)
25、致速度瓶頸的產(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 adder process(Count_0_en,count_buffer,Len,Carry_0_0,Carry_0_1) be
26、gincase 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_0when "010"=> add_12_a_0 <= (
27、'0' & count_buffer(0)(21 downto11);add_12_b_0<=("00000000000"&Carry_0_0);-3rd Step addition(31 downto 22) + Carry_0_1when "100"=> add_12_a_0 <= ("00" & count_buffer(0)(31 downto22);add_12_b_0 <= ("00000000000" & Carry_0_1);
28、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 Count process(RST,CLK_25MHz,IO,OE_bar,data_sel,Count_0_en) beginif(RST = '1')then-system Resetcount_buffer(0) <= (others
29、 => '0');Carry_0_0 Carry_0_1Carry_0_2<= '0'<= '0'<= '0'elsif(CLK_25MHz'event and CLK_25MHz = '0')then if(OE_bar = '0' and data_sel = '0')thencount_buffer(0) <= IO;Carry_0_2else<= '0'case Count_0_en is-1st Step addi
30、tion(10 downto 0) + (10 downto 0)when"001"=>count_buffer(0)(10downto0)<=add_12_result_0(10 downto 0);Carry_0_0<= add_12_result_0(11);-firstcarrystep-2nd Step addition(21 downto 11) + Carry_0_0when"010"=>count_buffer(0)(21downto11)<=add_12_result_0(10 downto 0);Carr
31、y_0_1carry-3rd Step addition<= add_12_result_0(11);-Secondstep(31 downto 22) + Carry_0_1when "100"downto 0);=> count_buffer(0)(31 downto 22) <= add_12_result_0(9Carry_0_2<= add_12_result_0(10);-Third stepcarrywhen others => Carry_0_2 end case;end if; end if;end process;<=
32、 '0'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í)鐘鎖存可以起到如下的作用:容易滿(mǎn)足間信號(hào)連接的時(shí)序要求;n容易滿(mǎn)足信號(hào)的建立保持時(shí)間;n如上圖所示,比如 FPGA/CPLD 在 CLK 的時(shí)鐘沿 1 鎖存一個(gè)信號(hào)得到 SIG 所示的波形,SIG 信號(hào)需要給另外的一個(gè)與其接口的,那么該將一定會(huì)在CLK 的時(shí)鐘沿 2 正確采樣到
33、 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)
34、,建議將這些輸入信號(hào)使用相應(yīng)的時(shí)鐘鎖存后在處理,這樣做:將原來(lái)的異步信號(hào)轉(zhuǎn)化成同步來(lái)處理;n去除輸入n信號(hào)中的毛刺(特別是對(duì)于數(shù)據(jù)總線);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)試、花銷(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í)
35、鐘,因此我們必須依據(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)樘儾淮怪钡刃У钠睿诖嘶A(chǔ)上考慮一些不確定因素實(shí)際的工作時(shí)鐘沿如圖中所示。保持時(shí)
36、間(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ō),
37、全局時(shí)鐘(或同步時(shí)鐘)是最簡(jiǎn)單和最可的時(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 都具有專(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)(參看下一章“異步輸
38、入”)。(最好的方法是用全局時(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í)鐘門(mén)控時(shí)鐘。門(mén)控時(shí)鐘常常同微處理器接口有關(guān),用地址線去寫(xiě)脈沖。然而,每當(dāng)用組合函數(shù)鐘控觸發(fā)器時(shí),通常都存在著門(mén)控時(shí)鐘。如果符合下述條件,門(mén)控時(shí)鐘可以象全局時(shí)鐘一樣可靠地工作:1、驅(qū)動(dòng)時(shí)鐘的邏輯必須只包含一個(gè)“與”門(mén)或一個(gè)“或”
39、門(mén)。如果采用任何附加邏在某些工作狀態(tài)下,會(huì)出現(xiàn)競(jìng)爭(zhēng)產(chǎn)生的毛刺。2、邏輯門(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 和圖 3 的波形圖顯示出有關(guān)的建立時(shí)間和保持時(shí)間的要求。這兩個(gè)設(shè)計(jì)項(xiàng)目的地址線必須在時(shí)鐘保持有效的整個(gè)期間內(nèi)保持穩(wěn)定(nWR 和 nWE 是低電
40、平有效)。如果地址線在規(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ī)定。設(shè)計(jì)項(xiàng)目的可靠性。圖 4D 觸發(fā)器的使能輸入,我們往往可以將門(mén)控時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘以示出如何用全局時(shí)鐘重新設(shè)計(jì) 圖2 的電路。地址線在許多 PLD 設(shè)計(jì)軟件,如 MAX+PLUSII 軟件都提供這種帶使能端的 D 觸發(fā)器。當(dāng)ENA 為高電現(xiàn)在的狀態(tài)。,D 輸入端的值被鐘控到觸發(fā)器中:當(dāng) ENA 為低電,維持圖4 中重新設(shè)計(jì)的電路的定時(shí)波形表明地址線不需要在nWR 有效的整個(gè)期間內(nèi)保持穩(wěn)定;而只要求它
41、們和數(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))。(定時(shí)波形示出在計(jì)
42、數(shù)器從 3 到 4 改變時(shí),RCO 信號(hào)如何出現(xiàn)毛刺的)圖 6 給出一種可靠的全局鐘控的電路,它是圖 5 不可靠計(jì)數(shù)器電路的改進(jìn),D 觸發(fā)器的使能輸入。這個(gè)改進(jìn)不需要增加 PLD 的邏輯單元。RCO2.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í)際。通常,我們不應(yīng)該用多級(jí)組合邏輯去鐘控 PLD 設(shè)計(jì)中上仍然可能存在著的觸發(fā)器。圖 7 給出一個(gè)含有險(xiǎn)象的多級(jí)時(shí)鐘的例子。時(shí)鐘是由 SEL 引腳的多路選擇器輸出的。多路選擇器的輸入是時(shí)鐘(CLK)和該時(shí)鐘的 2 分頻(DIV2)。由圖7 的定時(shí)
43、波形圖看出,在兩個(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)電路的功能。圖 8 給出了圖 7 電路的一種單級(jí)時(shí)鐘的替代方案。圖中 SEL 引腳和 DIV2 信號(hào)用于使能 D 觸發(fā)器的使能輸入端,而不是用于該觸發(fā)器的時(shí)鐘引腳。采用這個(gè)電路并不需要附加 PLD 的邏輯單元,工作卻可靠多了。不同的系統(tǒng)需要采用不同的方法去除多級(jí)時(shí)鐘,并沒(méi)有固定的模式。(
44、這個(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ù)翻觸發(fā)器異步計(jì)數(shù)器時(shí)常采用行波時(shí)鐘,一個(gè)觸發(fā)器的輸出鐘控下一個(gè)觸發(fā)器的輸入,參看圖 9 同步計(jì)數(shù)器通常是代替異步計(jì)數(shù)器的更好方案,這是因?yàn)閮烧咝枰瑯佣嗟暮陠卧接?jì)數(shù)器有較快的時(shí)鐘到輸出的時(shí)間。圖
45、10 給出具有全局時(shí)鐘的同步計(jì)數(shù)器,它和圖 9 功能相同,用了同樣多的邏輯單元實(shí)現(xiàn),卻有較快的時(shí)鐘到輸出的時(shí)間。幾乎所有 PLD 開(kāi)發(fā)軟件都提供多種多樣的同步計(jì)數(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_
46、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)饋到(定時(shí)波形示出CLK_A 的上升沿相對(duì)于CLK_B 的上升沿有建立時(shí)間和保持時(shí)間的約束條件)REG_A 的邏輯,CLK_B 的上升沿相對(duì)于 CLK_A 沒(méi)有建立時(shí)間的要求。此外,由于時(shí)鐘的下降沿不影響觸發(fā)器的狀態(tài),所以 CLK_A 和 CLK_B 的下降沿之間沒(méi)有時(shí)間上的要求。如圖 4,2II 所示,電路中有兩個(gè)的時(shí)鐘,在它們之間的建立時(shí)間和保持時(shí)間的要求是不能保證的。在這種情況下,必須將電路同步
47、化。圖 12 給出 REG_A 的值(如何在使用前)同 CLK_B 同步化。新的觸發(fā)器REG_C 由 GLK_B 觸控,保證 REG_G 的輸出符合 REG_B 的建立時(shí)間。然而,這個(gè)方法使輸出延時(shí)了一個(gè)時(shí)鐘周期。(如果CLK_A 和CLK_B 是相互的,則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 都帶有 PL
48、L、DLL,而且?guī)в蠵LL 功能的大多價(jià)格昂貴,所以除非有特殊要求,一般場(chǎng)合可以不使用帶 PLL的 PLD。 這時(shí)我們需要使用帶使能端的 D 觸發(fā)器,并引入一個(gè)高頻時(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 將5M 時(shí)鐘的觸發(fā)器,也接 20M 時(shí)鐘,同時(shí) 5M_EN 將我們就可以將任何非同源時(shí)鐘同步化。該觸發(fā)器使能 ,原接該觸發(fā)器使能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)托具市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)彩印塑料編織袋市場(chǎng)調(diào)查研究報(bào)告
- 2025至2030年中國(guó)雙吊卷板吊具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度個(gè)人二手車(chē)交易車(chē)輛交易稅收籌劃協(xié)議3篇
- 二零二五版物業(yè)高空作業(yè)安全設(shè)備維護(hù)與檢查合同3篇
- 二零二五版?zhèn)D(zhuǎn)股投資合作協(xié)議書(shū)(股權(quán)投資)6篇
- 二零二五版消防工程維保與消防設(shè)備安裝、維保一體化合同3篇
- 2025版環(huán)保產(chǎn)業(yè)園區(qū)環(huán)境治理與改善合同3篇
- 二零二五年度個(gè)人資產(chǎn)管理合同模板詳述4篇
- 2025年度個(gè)人房產(chǎn)交易資金監(jiān)管服務(wù)合同范本
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級(jí)上學(xué)期語(yǔ)文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書(shū)范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語(yǔ)六年級(jí)下冊(cè)全冊(cè)教案
- 汽車(chē)噴漆勞務(wù)外包合同范本
- 微項(xiàng)目 探討如何利用工業(yè)廢氣中的二氧化碳合成甲醇-2025年高考化學(xué)選擇性必修第一冊(cè)(魯科版)
- 廣東省廣州市黃埔區(qū)2024-2025學(xué)年八年級(jí)物理上學(xué)期教學(xué)質(zhì)量監(jiān)測(cè)試題
- 2024年重慶南開(kāi)(融僑)中學(xué)中考三模英語(yǔ)試題含答案
- 財(cái)務(wù)管理學(xué)(第10版)課件 第1章 總論
評(píng)論
0/150
提交評(píng)論