|
同步以及時(shí)鐘的設(shè)計(jì)原則 本文節(jié)選自特權(quán)同學(xué)的圖書(shū)《FPGA設(shè)計(jì)實(shí)戰(zhàn)演練(邏輯篇)》 配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 有了前面的鋪墊,大家應(yīng)該明白了寄存器的代碼編寫(xiě)。接下來(lái)我們要更進(jìn)一步從深沉次來(lái)探討基于寄存器的同步以及時(shí)鐘的設(shè)計(jì)原則。(特權(quán)同學(xué),版權(quán)所有) 雖然在上一章已經(jīng)對(duì)組合邏輯和時(shí)序邏輯的基本概念做過(guò)描述,但是這里還是要再額外嘮叨幾句組合邏輯和時(shí)序邏輯的歷史淵源,好讓大家更加信服為什么時(shí)序邏輯要明顯優(yōu)于組合邏輯的設(shè)計(jì)。早期的可編程邏輯設(shè)計(jì),限于當(dāng)時(shí)的工藝水平,無(wú)論是邏輯資源還是布線資源都比較匱乏,所以工程師們更多是用可編程器件做一些簡(jiǎn)單的邏輯粘合。所謂的邏輯粘合,無(wú)非是一些與、或、非等邏輯門(mén)電路簡(jiǎn)單拼湊的組合邏輯,沒(méi)有時(shí)序邏輯,因此不需要引入時(shí)鐘。而今天的FPGA器件的各種資源都非常豐富,已經(jīng)很少有人只是用其實(shí)現(xiàn)簡(jiǎn)單的組合邏輯功能,而是更多的大量使用時(shí)序邏輯來(lái)實(shí)現(xiàn)各種復(fù)雜的功能,而一旦大量的使用時(shí)序邏輯,時(shí)鐘設(shè)計(jì)的各種攻略也就被不斷的提上臺(tái)面。可不是,時(shí)鐘好比時(shí)序邏輯的心臟,它的好壞直接關(guān)系到整個(gè)系統(tǒng)的是非成敗。那么,時(shí)鐘設(shè)計(jì)到底有什么講究,哪些基本原則是必須遵循的呢?搞清楚這個(gè)問(wèn)題之前,我們勢(shì)必要先全面的了解時(shí)鐘以及整個(gè)時(shí)序電路的工作原理。(特權(quán)同學(xué),版權(quán)所有) 在一個(gè)時(shí)序邏輯中,時(shí)鐘信號(hào)掌控著所有輸入和輸出信號(hào)的進(jìn)出。在每個(gè)時(shí)鐘有效沿(通常是上升沿),寄存器的輸入數(shù)據(jù)將會(huì)被采樣并傳送到輸出端,此后輸出信號(hào)可能會(huì)在經(jīng)歷長(zhǎng)途跋涉般的“旅途”中經(jīng)過(guò)各種組合邏輯電路并會(huì)隨著信號(hào)的傳播延時(shí)而處于各種“搖擺晃蕩”之中,直到所有相關(guān)的信號(hào)都到達(dá)下一級(jí)寄存器的輸入端。這個(gè)輸入端的信號(hào)將會(huì)一直保持直到下一個(gè)時(shí)鐘有效沿的來(lái)臨。每一級(jí)寄存器都在不斷的重復(fù)著這樣的數(shù)據(jù)流采集和傳輸。單是這樣枯燥的文字描述時(shí)序邏輯和時(shí)鐘之間的工作機(jī)理未免有些乏味,不妨舉個(gè)輪船通行三峽大壩的例子做類(lèi)比。(特權(quán)同學(xué),版權(quán)所有) 如圖5.8所示,三峽大壩有五級(jí)船閘,船由上游駛往下游時(shí),船位于上游。①先關(guān)閉上游閘門(mén)和上游閥門(mén)。②關(guān)閉第一級(jí)下游閘門(mén)和閥門(mén),打開(kāi)上游閥門(mén),水由上游流進(jìn)閘室,閘室水面與上游相平時(shí),打開(kāi)上游閘門(mén),船由上游駛進(jìn)閘室。③關(guān)閉上游閘門(mén)和閥門(mén),打開(kāi)第一級(jí)下游閥門(mén),當(dāng)閘室水面降到跟下游水面相平時(shí),打開(kāi)下游閘門(mén),船駛出第一級(jí)閘室。如此操作4次,通過(guò)后面的四級(jí)船閘,開(kāi)往下游。船閘的原理實(shí)際上是靠?jī)蓚(gè)閥門(mén)開(kāi)關(guān),人為地先后造成兩個(gè)連通器,使船閘內(nèi)水面先后與上、下游水面相平。(特權(quán)同學(xué),版權(quán)所有)
圖5.8 三峽大壩五級(jí)閘門(mén)示意圖 對(duì)于單個(gè)數(shù)據(jù)的傳輸,就非常類(lèi)似這里輪船通過(guò)多級(jí)閘門(mén)的例子。輪船就是我們要傳輸?shù)臄?shù)據(jù),閘門(mén)的開(kāi)關(guān)就好比時(shí)鐘的有效邊沿變化,水位的升降過(guò)程也好像相關(guān)數(shù)據(jù)在兩個(gè)寄存器間經(jīng)過(guò)各種組合邏輯的傳輸過(guò)程。當(dāng)輪船還處于上一級(jí)閘門(mén)準(zhǔn)備進(jìn)入下一級(jí)閘門(mén)時(shí),要么當(dāng)前閘門(mén)的水位要降低到下一級(jí)閘門(mén)的水平,要么下一級(jí)閘門(mén)的水位要升到上一級(jí)閘門(mén)的水平,只要這個(gè)條件不滿足,最終結(jié)果都有可能造成輪船的顛簸甚至翻船。這多少頁(yè)有點(diǎn)像寄存器鎖存數(shù)據(jù)需要保證的建立時(shí)間和保持時(shí)間要求。關(guān)于建立時(shí)間和保持時(shí)間,有如下的定義: ● 在時(shí)鐘的有效沿之前,必須確保輸入寄存器的數(shù)據(jù)在“建立時(shí)間”內(nèi)是穩(wěn)定的。(特權(quán)同學(xué),版權(quán)所有) ● 在時(shí)鐘的有效沿之后,必須確保寄存器的輸出數(shù)據(jù)至少在“保持時(shí)間”內(nèi)是穩(wěn)定的。(特權(quán)同學(xué),版權(quán)所有) 在大家理解了時(shí)鐘和時(shí)序邏輯的工作機(jī)理后,也就能夠理解為什么時(shí)鐘信號(hào)對(duì)于時(shí)序邏輯而言是如此的重要。關(guān)于時(shí)鐘的設(shè)計(jì)要點(diǎn),主要有以下幾個(gè)方面: ① 避免使用門(mén)控時(shí)鐘或系統(tǒng)內(nèi)部邏輯產(chǎn)生的時(shí)鐘,多用使能時(shí)鐘去替代。(特權(quán)同學(xué),版權(quán)所有) 門(mén)控時(shí)鐘或系統(tǒng)內(nèi)部邏輯產(chǎn)生的時(shí)鐘很容易導(dǎo)致功能或時(shí)序出現(xiàn)問(wèn)題。尤其是內(nèi)部邏輯(組合邏輯)產(chǎn)生的時(shí)鐘容易出現(xiàn)毛刺,影響設(shè)計(jì)的功能實(shí)現(xiàn);組合邏輯固有的延時(shí)也容易導(dǎo)致時(shí)序問(wèn)題。(特權(quán)同學(xué),版權(quán)所有) ② 對(duì)于需要分頻或倍頻的時(shí)鐘,用器件內(nèi)部的專(zhuān)用時(shí)鐘管理(如PLL或DLL)單元去生成。(特權(quán)同學(xué),版權(quán)所有) 用FPGA內(nèi)部的邏輯去做分頻倒不是難事,倍頻恐怕就不行了。但是無(wú)論是分頻還是倍頻,在通常情況下都不建議用內(nèi)部邏輯去實(shí)現(xiàn),而應(yīng)該采用器件內(nèi)部的專(zhuān)用時(shí)鐘管理單元(如PLL或DLL)來(lái)產(chǎn)生,這類(lèi)專(zhuān)用時(shí)鐘管理單元的使用并不復(fù)雜,在EDA工具中打開(kāi)配置頁(yè)面進(jìn)行簡(jiǎn)單參數(shù)的設(shè)置,然后在代碼中對(duì)接口進(jìn)行例化就可以很方便的使用引出的相應(yīng)分頻或倍頻時(shí)鐘進(jìn)行使用了。(特權(quán)同學(xué),版權(quán)所有) ③ 盡量對(duì)輸入的異步信號(hào)用時(shí)鐘進(jìn)行鎖存。(特權(quán)同學(xué),版權(quán)所有) 所謂異步信號(hào),是指兩個(gè)處于不同時(shí)鐘頻率或相位控制下的信號(hào)。這樣的信號(hào)在相互接口的時(shí)候如果沒(méi)有可靠的同步機(jī)制,則存在很大的隱患,甚至極有可能導(dǎo)致數(shù)據(jù)的誤采集。筆者在工程實(shí)踐中常常遇到這類(lèi)異步信號(hào)誤觸發(fā)或誤采集的問(wèn)題,因此也需要引起初學(xué)者足夠的重視。在筆者的《深入淺出玩轉(zhuǎn)FPGA》筆記6中列舉的一些改進(jìn)的復(fù)位設(shè)計(jì)方法就是非常典型的異步信號(hào)的同步機(jī)制。(特權(quán)同學(xué),版權(quán)所有) ④ 避免使用異步信號(hào)進(jìn)行復(fù)位或置位控制。(特權(quán)同學(xué),版權(quán)所有) 這個(gè)點(diǎn)和上一個(gè)點(diǎn)所強(qiáng)調(diào)的是同一類(lèi)問(wèn)題,異步信號(hào)不建議直接作為內(nèi)部的復(fù)位或置位控制信號(hào),最好能夠用本地時(shí)鐘鎖存多拍后做同步處理,然后再使用。(特權(quán)同學(xué),版權(quán)所有) 上述幾個(gè)點(diǎn)對(duì)于初學(xué)者可能很難理解和體會(huì),沒(méi)有關(guān)系,當(dāng)你有了實(shí)踐經(jīng)歷以后回頭再品味一下或許就有味道多了。由于這幾個(gè)點(diǎn)多少也算是比較高級(jí)的技巧了,所以無(wú)法一一擴(kuò)展開(kāi)來(lái)深入剖析。更多相關(guān)擴(kuò)展的知識(shí)點(diǎn)讀者可以參考筆者的《深入淺出玩轉(zhuǎn)FPGA》一書(shū),那里有更多更詳細(xì)的介紹和說(shuō)明。(特權(quán)同學(xué),版權(quán)所有) |