勇敢的芯伴你玩轉Altera FPGA連載37:Verilog代碼風(fēng)格之同步以及時(shí)鐘的設計原則

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

本文地址:http://selenalain.com/thread-521634-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页