FPGA和CPLD內部自復位電路設計方案
本文描述了復位的定義,分類(lèi)及不同復位設計的影響,并討論了針對FPGA和CPLD的內部自復位方案。
本文引用地址:http://dyxdggzs.com/article/201808/386146.htm1、定義
復位信號是一個(gè)脈沖信號,它會(huì )使設計的電路進(jìn)入設定的初始化狀態(tài),一般它作用于寄存器,使寄存器初始化為設定值;其脈沖有效時(shí)間長(cháng)度必須大于信號到達寄存器的最大時(shí)延,這樣才有可能保證復位的可靠性。
下面將討論FPGA/CPLD的復位電路設計。
2、分類(lèi)及不同復位設計的影響
根據電路設計,復位可分為異步復位和同步復位。
對于異步復位,電路對復位信號是電平敏感的,如果復位信號受到干擾,如出現短暫的脈沖跳變,電路就會(huì )部分或全部被恢復為初始狀態(tài),這是我們不愿看到的。因此,異步復位信號是一個(gè)關(guān)鍵信號,在電路設計時(shí),如PCB Layout需要對其優(yōu)先考慮和作特別保護,避免信號線(xiàn)出現的干擾產(chǎn)生非期望的復位。
對于同步復位,電路在時(shí)鐘信號下對復位信號進(jìn)行采樣,復位信號只在時(shí)鐘的跳變沿(邊沿)有效;如果復位信號受到干擾,只要該干擾脈沖不出現在時(shí)鐘的跳變沿,或者脈沖能量不足以使時(shí)鐘采樣到有效的信號,電路就不會(huì )被異常復位,這樣可有效降低信號線(xiàn)上出現毛刺等干擾信號所產(chǎn)生誤復位操作的概率,提高了電路的抗干擾能力。
在FPGA/CPLD設計中,如果復位信號是通過(guò)組合邏輯產(chǎn)生的,我們在仿真的時(shí)候經(jīng)??梢钥吹?,由于組合邏輯的競爭冒險產(chǎn)生的毛刺,會(huì )導致采用異步復位設計的電路被誤復位;因此在設計當中要對異步復位信號進(jìn)行同步化處理,避免誤操作產(chǎn)生。
具體的做法是:設計一個(gè)專(zhuān)門(mén)的復位模塊,它對復位信號(記為R)進(jìn)行同步化處理,產(chǎn)生新的復位信號(記為RS),這個(gè)RS信號可作為其他模塊的復位輸入信號;而其他模塊的電路可全部采用異步復位的設計方式;這樣的設計對復位信號進(jìn)行統一處理,可根據需要調整,相對靈活,需要注意的是,要盡量降低時(shí)鐘邊沿與復位信號R失效時(shí)刻的亞穩態(tài)出現概率。
在實(shí)際的FPGA/CPLD應用當中,會(huì )出現沒(méi)有外部復位信號的情景,而FPGA/CPLD的時(shí)序設計又需要一個(gè)復位信號來(lái)使內部的寄存器初始化為設定的狀態(tài),這時(shí)候就需要通過(guò)內部邏輯產(chǎn)生一個(gè)內部復位信號。
3、FPGA內部自復位方法
內部自復位信號是器件上電后僅產(chǎn)生一次的信號,之后一直保持無(wú)效至器件掉電。這種一次性信號,產(chǎn)生它的數字電路自身需要一個(gè)初始的確定狀態(tài),并且需要上電后就處于該種狀態(tài);對于FPGA來(lái)說(shuō),其內部寄存器在上電后的狀態(tài)是不確定的,即無(wú)法預期的,因此利用寄存器的狀態(tài)來(lái)產(chǎn)生復位信號,不是那么可靠;但我們可以考慮FPGA的其他資源,一般FPGA內部都有RAM資源,這些RAM都可以被配置數據初始化的,也就是說(shuō)當FPGA上電配置完成后,被初始化的RAM的數據內容是確定的。利用這個(gè)特點(diǎn),我們就可以設計可靠的內部自復位信號。
下面給出實(shí)現方法:
1)配置一個(gè)數據長(cháng)度為1位,地址長(cháng)度為n位,且全部初始化為1的單口RAM;
2)設計一個(gè)針對該單口RAM的讀寫(xiě)模塊,其內部維護一個(gè)n位讀指針rp和一個(gè)n位寫(xiě)指針wp,rp在每個(gè)時(shí)鐘節拍將其值賦給wp后并加1,保證rp領(lǐng)先于wp,將單口RAM的輸出數據作為復位信號,另外RAM的輸入數據固定為0;這樣RAM數據被先讀出,然后被置為0,因此上電配置完成后經(jīng)過(guò)2n個(gè)時(shí)鐘節拍,RAM的數據從全1變成全0,從而實(shí)現一次性脈沖信號的產(chǎn)生。另外,通過(guò)控制地址長(cháng)度n或時(shí)鐘頻率,就可得到所需的脈沖寬度。
4、CPLD內部自復位方法
CPLD其內部沒(méi)有RAM,這樣就不能依靠RAM的初始化數據來(lái)產(chǎn)生可靠的復位;從原理上說(shuō),器件上電后,其寄存器的狀態(tài)是不確定的,因此我們是沒(méi)法得到一個(gè)確定的初始狀態(tài)去產(chǎn)生一個(gè)可靠的內部復位信號,不過(guò)我們還是可以產(chǎn)生一個(gè)有一定失敗概率但概率可控的復位信號,其基本原理是:設計一個(gè)n位的狀態(tài)機,見(jiàn)下圖,其中一種狀態(tài)表示復位結束(記為L(cháng)OOP),只要進(jìn)入該狀態(tài)就會(huì )一直保持在LOOP狀態(tài)上,至于其他狀態(tài)都會(huì )跳入復位狀態(tài)(記為RESET),RESET狀態(tài)是暫態(tài),一個(gè)時(shí)鐘周期就離開(kāi)進(jìn)入LOOP狀態(tài);由于狀態(tài)LOOP出現的概率僅為:1/2n,我們控制n的長(cháng)度,就可以將復位失敗概率控制在設定的要求內。

Figure 1 內部復位狀態(tài)圖
在實(shí)際的應用中,我們發(fā)現某些CPLD產(chǎn)品有一個(gè)特性,見(jiàn)下圖:

Figure 2 摘自某產(chǎn)品的《handbook.pdf》
從上圖可知,該CPLD在完成內部配置后,其內部所有寄存器都處于清零狀態(tài),因此可以說(shuō)寄存器在上電后是有一個(gè)確定的初始狀態(tài),但這個(gè)特性應該是對通過(guò)修改具有固定內連電路的邏輯功能來(lái)編程的CPLD所特有的,對通過(guò)改變內部連線(xiàn)的布線(xiàn)來(lái)編程的FPGA來(lái)說(shuō),并未查到它具有這種特性,因此我們可以采取更簡(jiǎn)單的方法來(lái)產(chǎn)生內部自復位信號:維護一個(gè)n位計數器,它隨時(shí)鐘節拍一直遞增直至某個(gè)設定的最大值M,之后就停止計數,這樣M之前的狀態(tài)就可實(shí)現為一個(gè)一次性的脈沖信號。
另外,該產(chǎn)品用戶(hù)如果希望配置完成后CPLD內部各個(gè)寄存器的狀態(tài)處于可控或者特定的狀態(tài)(尤其當其值不一定是清零的狀態(tài)),那么用戶(hù)可以使用器件提供的專(zhuān)用管腳DEV_CLRn來(lái)達到所期望的效果。
5、結語(yǔ)
復位信號是時(shí)序電路設計的基本信號,雖然只是一個(gè)脈沖信號,但要使設計的電路可靠地工作,復位信號也是一個(gè)需認真對待的因素。
評論