版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)第三章數(shù)字第三章數(shù)字(shz)IC系統(tǒng)的邏輯設(shè)計(jì)系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)實(shí)現(xiàn)3.1 RTL設(shè)計(jì)基礎(chǔ)設(shè)計(jì)基礎(chǔ)(jch)3.2 RTL設(shè)計(jì)指南設(shè)計(jì)指南(Verilog)第一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)3.1RTL設(shè)計(jì)基礎(chǔ)設(shè)計(jì)基礎(chǔ)3.1.1同步電路設(shè)計(jì)要求同步電路設(shè)計(jì)要求RTL設(shè)計(jì)都采用同步電路設(shè)計(jì)方式。設(shè)計(jì)都采用同步電路設(shè)計(jì)方式。 了了解同步電路設(shè)計(jì)要求,解同步電路設(shè)計(jì)要求, 是進(jìn)行是進(jìn)行RTL設(shè)計(jì)的第設(shè)計(jì)的第一步。一步。 圖圖3.1給出了一個(gè)給出了一個(gè)(y )同步電路的示例。同步電路的示例。 第二頁,共170頁。第三章數(shù)字IC系統(tǒng)的
2、邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.1同步電路(dinl)示例第三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)組合邏輯實(shí)現(xiàn)設(shè)計(jì)所需的功能。 例如, 圖中的組合邏輯可能是乘法、 編碼器等復(fù)雜的邏輯。 寄存器用于暫存數(shù)據(jù), 它由時(shí)鐘控制(kngzh), 只有當(dāng)時(shí)鐘進(jìn)行有效跳變時(shí), 才將新的數(shù)據(jù)鎖存起來, 否則數(shù)據(jù)一直保持原值。 時(shí)鐘相當(dāng)于同步電路中的“指揮”。 對于圖3.1所示的例子, 假設(shè)該電路都采用時(shí)鐘的上升沿進(jìn)行鎖存, 時(shí)鐘周期為8 ns。 從0時(shí)刻開始, 時(shí)鐘變?yōu)楦唠娖健?第四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)第一個(gè)寄存器中, 經(jīng)過很短的時(shí)間(例如0.2 ns)到達(dá)Ri
3、的Q端, 再從Q端送到組合邏輯(lu j)的輸入, 跟其他的信號一起進(jìn)行邏輯(lu j)操作。 這種邏輯(lu j)操作必須在規(guī)定的時(shí)間內(nèi)完成(滿足時(shí)鐘周期的要求)。 假設(shè)組合邏輯(lu j)的結(jié)果在4 ns后穩(wěn)定下來,則在4.2 ns這一時(shí)刻,Rf輸入端的數(shù)據(jù)會(huì)穩(wěn)定下來。 這時(shí)候電路暫時(shí)“靜止下來”。 然后到8 ns這一時(shí)刻, 第二個(gè)時(shí)鐘沿到來, 組合邏輯(lu j)的輸出被第二個(gè)寄存器鎖存, 與此同時(shí), 新的數(shù)據(jù)會(huì)被送到第一個(gè)寄存器。 這個(gè)過程會(huì)一直持續(xù)下去。第五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)由此可見, 在圖3.1所示的電路中, 時(shí)鐘保證了電路能按照需要?jiǎng)幼鳎?而不
4、是雜亂無章地各行其是。 下面先簡單介紹一下時(shí)鐘。 時(shí)鐘一般由晶振產(chǎn)生, 或者由外部輸入, 如果需要, 還需要用鎖相環(huán)進(jìn)行倍頻、 移相等操作。 實(shí)際(shj)的時(shí)鐘不可能是理想的, 也就是說, 時(shí)鐘不可能一直保持同一頻率, 時(shí)鐘邊沿不可以“直上直下”。 設(shè)計(jì)者要根據(jù)芯片的要求對時(shí)鐘提出要求, 并根據(jù)時(shí)鐘規(guī)范進(jìn)行設(shè)計(jì)。第六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)例如, 假設(shè)需要將時(shí)鐘域A中的數(shù)據(jù)傳遞到時(shí)鐘域B。 數(shù)據(jù)由clka生成, 被clkb采樣(ci yn)。 clka與clkb是異步時(shí)鐘, 周期都是10 ns, 時(shí)鐘頻率最大為210-4。 這時(shí)候我們需要設(shè)計(jì)一個(gè)異步FIFO。
5、這個(gè)FIFO的寫入時(shí)鐘為clka, 讀出時(shí)鐘為clkb。 假設(shè)每次傳送的最大包為10 KB, FIFO寬度為8位, 那么這個(gè)FIFO的深度應(yīng)該是多少呢?考慮最壞情形, 時(shí)鐘clka與clkb最大相差為410-4。第七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)FIFO的讀指針(zhzhn)與寫指針(zhzhn)至少要相差: 410-410 K4。 這樣, FIFO的深度至少為8字節(jié)。 接下來, 我們對時(shí)序電路中最關(guān)鍵的組成部分寄存器進(jìn)行說明。 一個(gè)寄存器的結(jié)構(gòu)如圖3.2所示。 第八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.2寄存器的結(jié)構(gòu)(jigu)第九頁,共170
6、頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.3寄存器的功能(gngnng)示意圖寄存器的功能(gngnng)如圖3.3所示。 第十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)由圖3.3可知, 該寄存器在時(shí)鐘的跳變沿鎖存數(shù)據(jù), 然后數(shù)據(jù)會(huì)一直保持, 直到下一個(gè)跳變沿。 寄存器要正常工作, 必須保證D端數(shù)據(jù)的變化與時(shí)鐘的有效沿不能距離太近, 否則(fuz)可能會(huì)鎖存錯(cuò)誤的數(shù)據(jù)。 在綜合庫中, 規(guī)定了數(shù)據(jù)變化端跟時(shí)鐘跳變沿最短的時(shí)間要求, 稱為建立時(shí)間約束與保持時(shí)間約束。建立時(shí)間與保持時(shí)間是時(shí)序電路設(shè)計(jì)中最重要的兩個(gè)概念。 建立時(shí)間規(guī)定, 在時(shí)鐘沿到達(dá)前的某段時(shí)間內(nèi), 數(shù)據(jù)必須穩(wěn)定;
7、 保持時(shí)間定義了在時(shí)鐘沿之后的某段時(shí)間之后, 數(shù)據(jù)才能發(fā)生變化。 圖3.4給出了建立時(shí)間與保持時(shí)間的示例。 第十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.4建立時(shí)間(shjin)與保持時(shí)間(shjin)第十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)一般來說, 設(shè)計(jì)中路徑的延時(shí)過大, 超出設(shè)計(jì)要求, 會(huì)引起建立(jinl)時(shí)間的違例。 如果設(shè)計(jì)中時(shí)鐘樹做得不夠好, 時(shí)鐘偏移(skew)過大, 則會(huì)引起保持時(shí)間違例。 對于一個(gè)寄存器來說, 除了數(shù)據(jù)端與時(shí)鐘端有時(shí)序要求, 異步復(fù)位端與時(shí)鐘端之間也有時(shí)序要求。 假設(shè)一個(gè)寄存器是異步復(fù)位的, 復(fù)位信號低電平有效。 當(dāng)
8、復(fù)位信號為低電平時(shí), 寄存器被初始化。 第十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) 當(dāng)復(fù)位信號跳高時(shí), 寄存器在時(shí)鐘跳變沿鎖存新的數(shù)據(jù)。 如果異步復(fù)位信號跳高的時(shí)刻距離時(shí)鐘有效沿太近, 那么寄存器可能繼續(xù)保持(boch)復(fù)位狀態(tài), 也可能會(huì)鎖存新數(shù)據(jù), 這樣, 就可能發(fā)生鎖存錯(cuò)誤。 因此, 有必要定義時(shí)鐘有效沿與異步復(fù)位無效沿之間的時(shí)序要求, 這就是recovery/removal的時(shí)序要求, 如圖3.5所示。 第十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.5 recovery/removal第十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)寄
9、存器中建立時(shí)間/保持時(shí)間、 recovery/removal的時(shí)序要求, 對設(shè)計(jì)的最大組合邏輯延時(shí)、 時(shí)鐘樹的構(gòu)造、 復(fù)位樹的構(gòu)造都提出了要求。 復(fù)位樹、 時(shí)鐘樹一般由后端工具進(jìn)行處理。 對RTL設(shè)計(jì)者來說, 最需關(guān)注的是建立時(shí)間的問題。 設(shè)計(jì)中的時(shí)序違例通過靜態(tài)時(shí)序分析工具可以檢查出來(ch li)。 本書第7章對靜態(tài)時(shí)序分析進(jìn)行了說明, 這里不再詳述。 第十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)3.1.2RTL設(shè)計(jì)步驟設(shè)計(jì)步驟如何進(jìn)行如何進(jìn)行RTL設(shè)計(jì)?設(shè)計(jì)?RTL設(shè)計(jì)并非僅僅編寫代碼那么簡單。設(shè)計(jì)并非僅僅編寫代碼那么簡單。 在在RTL設(shè)計(jì)前,設(shè)計(jì)前, 要進(jìn)行如下工作:要
10、進(jìn)行如下工作: (1) 仔細(xì)閱讀設(shè)計(jì)規(guī)范,仔細(xì)閱讀設(shè)計(jì)規(guī)范, 了解設(shè)計(jì)的要求了解設(shè)計(jì)的要求(yoqi), 例如芯片的例如芯片的I/O采用何種標(biāo)準(zhǔn)采用何種標(biāo)準(zhǔn), 有多少有多少PIN腳腳, 采用何種封裝采用何種封裝形式形式, 時(shí)序要求時(shí)序要求(yoqi)是多少是多少, 是否需要與其他已有的產(chǎn)品是否需要與其他已有的產(chǎn)品兼容等,兼容等, 規(guī)范越清楚越好。規(guī)范越清楚越好。 第十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)(2) 了解芯片中是否用到其他IP, 這些(zhxi)IP是否滿足功能與性能的要求, 這些(zhxi)IP是否經(jīng)過了驗(yàn)證, 如何與這些(zhxi)IP進(jìn)行接口, 這些(zhx
11、i)IP是軟核還是硬核。(3) 了解芯片是否需要與其他產(chǎn)品進(jìn)行兼容, 包括與其他廠商的芯片進(jìn)行兼容, 是否與以前的產(chǎn)品兼容。 兼容性會(huì)影響到芯片的功能、 寄存器設(shè)置、 PIN腳分配等。 (4)了解流片所用的工藝及綜合庫。 高水平的RTL設(shè)計(jì)者必然熟悉綜合庫, 知道綜合庫中各單元能夠提供怎樣的性能, 從而了解在設(shè)計(jì)中的一個(gè)路徑上, 最多可以放多少邏輯。第十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)例如, 一個(gè)設(shè)計(jì)要求能運(yùn)行在時(shí)鐘頻率100 MHz, 而所用的綜合庫中一個(gè)二輸入與非門的延遲大約為0. 2 ns, 則一條路徑上差不多可以放50個(gè)與非門。 有了這種知識, 設(shè)計(jì)者可以寫出更
12、為合理(hl)的代碼。 特別是對于數(shù)據(jù)通路設(shè)計(jì), 對綜合庫的了解是很有必要的。 (5)了解芯片的外部接口。 例如, 與模擬部分接口是怎么樣的, 接口信號的確切含義是什么, 系統(tǒng)是否有PCI或AGP之類的高速接口, 這些接口需要自己來實(shí)現(xiàn)還是由IP來實(shí)現(xiàn)。第十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)(6) 了解芯片的時(shí)鐘。 要了解芯片中有多少個(gè)時(shí)鐘, 每個(gè)時(shí)鐘的用途是什么, 這些時(shí)鐘來自鎖相環(huán)還是由其他芯片提供, 這些時(shí)鐘有無相位關(guān)系, 頻率是多少以及時(shí)鐘的偏差有多大, 芯片中是否有分頻時(shí)鐘。(7) 了解芯片對功耗的要求, 以決定是否采用低功耗設(shè)計(jì)技術(shù), 以及采用何種低功耗設(shè)計(jì)技
13、術(shù)。 低功耗設(shè)計(jì)技術(shù)的基本思想是盡量減少設(shè)計(jì)中的節(jié)點(diǎn)的翻轉(zhuǎn), 例如可以(ky)采用并行計(jì)算來降低時(shí)鐘頻率、 時(shí)鐘門控(針對模塊或寄存器陣列), 等等。 我們將在第9章對低功耗設(shè)計(jì)技術(shù)進(jìn)行詳述。 第二十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)(8) 了解芯片對可測性的要求(yoqi)。 設(shè)計(jì)者要了解芯片是采用全掃描還是部分掃描, 是否采用內(nèi)建自測試的方式, 是否需要JTAG, 這些對RTL設(shè)計(jì)都有影響。 例如, 掃描鏈的測試覆蓋率受限于RTL設(shè)計(jì)風(fēng)格。 我們將在第6章講述可測性設(shè)計(jì)的內(nèi)容。 在進(jìn)行RTL設(shè)計(jì)時(shí), 要進(jìn)行如下工作: (1) 首先劃分好設(shè)計(jì)的結(jié)構(gòu)。 通常來說, 一個(gè)設(shè)計(jì)
14、可以大致分為如下幾個(gè)部分: I/O Pad、 時(shí)鐘生成電路、 復(fù)位電路、 JTAG電路、 內(nèi)核, 如圖3.6所示。 第二十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.6芯片(xn pin)的劃分示意圖第二十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)當(dāng)然, 芯片劃分跟具體設(shè)計(jì)有關(guān), 要根據(jù)實(shí)際情況選擇合適的劃分方法, 不可一概而論(y gi r ln)。 (2) 要與項(xiàng)目組的其他成員進(jìn)行有效的溝通。 要與市場人員進(jìn)行交流以確定產(chǎn)品的功能; 要與其他設(shè)計(jì)者交流以確定設(shè)計(jì)的命名規(guī)則、 模塊劃分、 各模塊的接口, 等等。 能否進(jìn)行有效的溝通是一個(gè)項(xiàng)目能否成功的關(guān)鍵。
15、(3) 為項(xiàng)目建立統(tǒng)一的目錄結(jié)構(gòu)。 項(xiàng)目的所有成員都在該目錄下進(jìn)行設(shè)計(jì)。 (4) 統(tǒng)一進(jìn)行版本控制。 相信每個(gè)完成過較大設(shè)計(jì)的人都能體會(huì)版本控制的重要性。 第二十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在本書附錄中對版本控制軟件CVS進(jìn)行了介紹。 (5) 進(jìn)行合理的模塊劃分。 要考慮到邏輯功能、 設(shè)計(jì)目標(biāo)、 時(shí)序方面的要求, 盡量將功能相關(guān)的模塊放在一起, 以減少各模塊間的相關(guān)性, 方便以后的綜合及布局布線。 按功能劃分可以保證設(shè)計(jì)具有清晰的結(jié)構(gòu), 并有利于分配給不同成員完成。 (6) 建立統(tǒng)一(tngy)的驗(yàn)證平臺。 同一項(xiàng)目組的不同成員最好使用統(tǒng)一(tngy)的測試驗(yàn)證框架
16、, 然后分別施加自己的激勵(lì)。 如果RTL設(shè)計(jì)開始前已完成了系統(tǒng)設(shè)計(jì), 則可以利用系統(tǒng)設(shè)計(jì)的模型作為RTL設(shè)計(jì)驗(yàn)證的基準(zhǔn)。 測試平臺最好在項(xiàng)目初期就建立好。第二十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)(7) 考慮芯片的調(diào)試方案。 在第一次流片回來后, 需要對芯片進(jìn)行調(diào)試。 由于現(xiàn)在的IC系統(tǒng)規(guī)模較大, 功能復(fù)雜, 容易出錯(cuò), 因此調(diào)試方案的制定就非常關(guān)鍵。 在設(shè)計(jì)初期就應(yīng)該考慮好調(diào)試方案。 為了便于定位錯(cuò)誤, 設(shè)計(jì)者應(yīng)將主要的功能模塊分開進(jìn)行測試。 例如, 對于一個(gè)通信芯片, 要能夠分別調(diào)試模擬部分、 數(shù)字信號處理部分和MAC部分。 在大型的設(shè)計(jì)中, 引腳總是非常寶貴的, 設(shè)計(jì)
17、者要精心設(shè)計(jì)引腳的復(fù)用方案, 確定(qudng)這些引腳在正常工作模塊、 調(diào)試、 DFT時(shí)各有什么功能。 引腳分配方案要以文檔的形式給出。 第二十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)(8) 給出設(shè)計(jì)(shj)文檔。 很遺憾, 在許多項(xiàng)目中都沒有做到這一點(diǎn)。 人們往往等到項(xiàng)目結(jié)束后, 才開始寫設(shè)計(jì)(shj)文檔。 (9) 在寫每個(gè)模塊時(shí), 最好能給出框圖, 一圖勝千言。 第二十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)3.1.3復(fù)位策略復(fù)位策略在在RTL設(shè)計(jì)中,設(shè)計(jì)中, 是采用同步復(fù)位的方式還是異是采用同步復(fù)位的方式還是異步復(fù)位的方式?這種爭論由來已久,步復(fù)位的
18、方式?這種爭論由來已久, 本節(jié)將對這個(gè)本節(jié)將對這個(gè)(zh ge)問題進(jìn)行闡述。問題進(jìn)行闡述。 在在IC系統(tǒng)中,系統(tǒng)中, 復(fù)位的目的是為了將芯片強(qiáng)制到復(fù)位的目的是為了將芯片強(qiáng)制到一個(gè)已知的狀態(tài)。一個(gè)已知的狀態(tài)。 同步復(fù)位與異步復(fù)位都能達(dá)到這同步復(fù)位與異步復(fù)位都能達(dá)到這個(gè)個(gè)(zh ge)目的。目的。 兩者的差別在于:兩者的差別在于: 同步復(fù)位需要時(shí)同步復(fù)位需要時(shí)鐘有效沿到達(dá)時(shí)才能起作用,鐘有效沿到達(dá)時(shí)才能起作用, 而異步復(fù)位不需要。而異步復(fù)位不需要。 第二十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.7同步復(fù)位(f wi)示例第二十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)
19、RTL實(shí)現(xiàn)在同步復(fù)步方式, 復(fù)位信號與數(shù)據(jù)(shj)進(jìn)行組合操作, 作為寄存器的D端輸入, 如圖3.7所示。 實(shí)現(xiàn)同步復(fù)位寄存器的代碼如下: module reg-syn (q1, d, clk, rst-n);output q1;input d, clk, rst-n;reg q1;always (posedge clk)if (!rst-n) q1 = 1b0;else q1 = d;endmodule第二十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)同步復(fù)位的優(yōu)點(diǎn)在于: 在采用基于周期的仿真器的場合(利用開發(fā)算法時(shí)), 采用同步復(fù)位要比采用異步復(fù)位簡單許多。 寄存器可以濾掉復(fù)
20、位上的毛刺。 同步復(fù)位的缺點(diǎn)是: 需要時(shí)鐘, 在某些場合這會(huì)帶來不便。 例如, 假如設(shè)計(jì)中包含三態(tài)總線, 總線上接著許多寄存器。 當(dāng)上電后, 晶振還未起振, 或者鎖相環(huán)還未穩(wěn)定, 這時(shí)候沒有時(shí)鐘, 所以復(fù)位還沒有起作用則總線上就可能發(fā)生沖突, 產(chǎn)生短路。 只有增加上電復(fù)位電路才能解決這個(gè)(zh ge)問題。 第三十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)采用同步復(fù)位, 復(fù)位成為路徑中組合邏輯的一部分。 由于復(fù)位的負(fù)載比較大(jio d)(設(shè)計(jì)中寄存器數(shù)目較多), 因此會(huì)使復(fù)位樹的延遲比較大(jio d), 從而導(dǎo)致在路徑上的延遲較大(jio d)。說明:上電復(fù)位電路中包括一個(gè)門限
21、比較電路。 當(dāng)電平超過某一電平時(shí), 會(huì)給出復(fù)位信號。 實(shí)現(xiàn)異步復(fù)位寄存器的代碼如下: module async-resetFF (q, d, clk, rst-n);output q;input d, clk, rst-n;reg q;第三十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)always (posedge clk or negedge rst-n)if (!rst-n) q = 1b0;else q = d;endmodule 異步復(fù)位的優(yōu)點(diǎn)是無需時(shí)鐘, 且復(fù)位延時(shí)不會(huì)影響到路徑延時(shí)。 異步復(fù)位的缺點(diǎn)是: 復(fù)位上的毛刺不能被由它復(fù)位的寄存器過濾, 必須采用其他的方法來消除
22、; 復(fù)位的無效沿與時(shí)鐘之間存在時(shí)序(sh x)要求(recovery/removal)。 第三十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)如果能夠(nnggu)將同步復(fù)位與異步復(fù)位的優(yōu)點(diǎn)結(jié)合起來, 則顯然是最佳的方案。 圖3.8給出了一種方案, 即有效沿異步、 無效沿同步的復(fù)位方式。 第三十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.8復(fù)位(f wi)方案第三十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在這種方案中, 復(fù)位信號由同步器生成。 復(fù)位同步器由兩個(gè)寄存器組成, 其組成方式如圖3.8所示。 外部(wib)的異步復(fù)位信號(來自PAD)接到同
23、步器的異步復(fù)位端。 第一個(gè)寄存器的數(shù)據(jù)端接高電平(針對低電平有效的復(fù)位信號); 第二個(gè)寄存器的數(shù)據(jù)端接第一個(gè)寄存器的Q端。同步器的輸出(即第二個(gè)寄存器的輸出)作為生成的復(fù)位信號, 經(jīng)過復(fù)位樹接到各個(gè)寄存器上。 第三十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)該電路的原理是: 當(dāng)復(fù)位信號有效時(shí)(低電平), 兩個(gè)(lin )同步器都為低, 因此同步器的輸出立即變低, 而不管此時(shí)是否存在時(shí)鐘。 而當(dāng)復(fù)位信號變高后, 經(jīng)過時(shí)鐘跳變沿后, 才能將高電平鎖存到同步器的輸出, 也就是說, 同步器的輸出的無效沿與時(shí)鐘是同步的。 這樣, 就避免了recovery/removal問題。 復(fù)位同步器的
24、波形如圖3.9所示。 第三十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.9復(fù)位(f wi)同步器的波形第三十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)實(shí)現(xiàn)復(fù)位同步器的RTL代碼(di m)如下: module async-resetFFstyle2 (rst-n, clk, asyncrst-n);output rst-n;input clk, asyncrst-n;reg rst-n, rff1;always (posedge clk or negedge asyncrst-n)if (!asyncrst-n) rst-n, rff1 = 2b0;else
25、rst-n, rff1 = rff1, 1b1;endmodule 第三十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在上述方式中, 復(fù)位信號的毛刺仍然無法(wf)消除。 為了去掉毛刺, 通常先將由PAD得到的復(fù)位信號送到去毛刺電路。 下面給出一種實(shí)現(xiàn)方法: / filtering glitch of resetalways (posedge clk-i )glbl-rst-dly3, glbl-rst-dly2, glbl-rst-dly1 = glbl-rst-dly2, glbl-rst-dly1, rst-n-hw;always (posedge clk-i)glbl-rs
26、t-n-noglitch= glbl-rst-dly3 | glbl-rst-dly2 |glbl-rst-dly1; 第三十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)3.1.4狀態(tài)機(jī)的設(shè)計(jì)狀態(tài)機(jī)的設(shè)計(jì)在生成復(fù)雜的控制邏輯在生成復(fù)雜的控制邏輯(lu j)時(shí),時(shí), 普遍采用普遍采用狀態(tài)機(jī)的方式。狀態(tài)機(jī)的方式。 掌握良好的狀態(tài)機(jī)書寫規(guī)范,掌握良好的狀態(tài)機(jī)書寫規(guī)范, 是對是對RTL設(shè)計(jì)者最基本的要求。設(shè)計(jì)者最基本的要求。 圖圖3.10給出了狀態(tài)機(jī)的基本結(jié)構(gòu)。給出了狀態(tài)機(jī)的基本結(jié)構(gòu)。 第四十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.10狀態(tài)機(jī)的基本(jbn)結(jié)構(gòu)第四十
27、一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)寫狀態(tài)機(jī)代碼時(shí), 可以(ky)采用單進(jìn)程的方式(用一個(gè)always進(jìn)程), 也可以(ky)采用雙進(jìn)程的方式(即采用兩個(gè)always進(jìn)程, 一個(gè)用于生成圖3.10中的next, 一個(gè)用于生成圖3.10中的state)。 一般而言, 用雙進(jìn)程狀態(tài)機(jī), 結(jié)構(gòu)更為清晰, 因此在實(shí)際應(yīng)用中應(yīng)盡量采用這種方式。 圖3.11給出了一個(gè)狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。 第四十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.11狀態(tài)(zhungti)轉(zhuǎn)換圖第四十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)針對如圖3.11所示的狀態(tài)(zhun
28、gti)轉(zhuǎn)換圖, 下面給出雙進(jìn)程狀態(tài)(zhungti)機(jī)的寫法。 module fsm1 (ds, rd, go, ws, clk, rst-n); output ds, rd; input go, ws; input clk, rst-n; reg ds, rd; parameter 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE=2b11;第四十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) reg 1:0 state, next;always (posedge clk or negedge rst-n) if (!rst-n) state =
29、IDLE; else state = next;always (state or go or ws) begin next=2bx; ds=1b0; rd=1b0; case (state) IDLE: if (go) next=READ; else next=IDLE; 第四十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) READ: begin rd=1b1; next=DLY; end DLY: begin rd=1b1; if (ws) next=READ; else next=DONE; end DONE: begin ds=1b1; next=IDLE; end endc
30、ase endendmodule 第四十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)注意注意(zh y):程序中用黑色字體標(biāo)出的一句代碼:程序中用黑色字體標(biāo)出的一句代碼“next=2bx”。 加入這種語句,加入這種語句, 是為了便于發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)是為了便于發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤。誤。 如果設(shè)計(jì)者在寫描述機(jī)時(shí),如果設(shè)計(jì)者在寫描述機(jī)時(shí), 沒有將可能的狀態(tài)遍歷完整,沒有將可能的狀態(tài)遍歷完整, 則則next可能會(huì)進(jìn)入可能會(huì)進(jìn)入x狀態(tài),狀態(tài), 通過仿真可以很容易發(fā)現(xiàn)這個(gè)問通過仿真可以很容易發(fā)現(xiàn)這個(gè)問題。題。 在上面所述的狀態(tài)機(jī)中,在上面所述的狀態(tài)機(jī)中, 輸出信號由組合邏輯輸出。輸出信號由組合邏輯輸
31、出。 為為了保證設(shè)計(jì)的健壯性(消除輸出的毛刺),了保證設(shè)計(jì)的健壯性(消除輸出的毛刺), 方便時(shí)序分析、方便時(shí)序分析、 綜合及布局布線,綜合及布局布線, 通常需要將狀態(tài)機(jī)的輸出用寄存器鎖存。通常需要將狀態(tài)機(jī)的輸出用寄存器鎖存。 圖圖3.12給出了這種狀態(tài)機(jī)的示意圖。給出了這種狀態(tài)機(jī)的示意圖。 第四十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.12狀態(tài)機(jī)示意圖(輸出(shch)鎖存)第四十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)下面給出這種狀態(tài)機(jī)(輸出(shch)鎖存)的代碼實(shí)現(xiàn):module fsm1b (ds, rd, go, ws, clk, rst-n)
32、; output ds, rd; input go, ws; input clk, rst-n; reg ds, rd; parameter 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE=2b11;第四十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) reg 1:0 state, next;always (posedge clk or negedge rst-n) if (!rst-n) state = IDLE; else state = next; always (state or go or ws) begin next=2bx; case
33、(state) IDLE: if (go) next=READ; else next=IDLE; READ: next=DLY; DLY: if (ws) next=READ;第五十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) else next=DONE; DONE: next=IDLE; endcase endalways (posedge clk or negedge rst-n) if (!rst-n) begin ds = 1b0; rd = 1b0; end else begin ds = 1b0; rd = 1b0;第五十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)R
34、TL實(shí)現(xiàn) case (state) IDLE: if (go) rd = 1b1; READ: rd = 1b1; DLY: if (ws) rd = 1b1; else ds = 1b1; endcase endendmodule狀態(tài)機(jī)的編碼方式有多種, 最常見(chn jin)的是獨(dú)熱(onehot)編碼和二進(jìn)制編碼。第五十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)表3.1給出了4位的獨(dú)熱碼的編碼(bin m)規(guī)則。第五十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)獨(dú)熱編碼得到的狀態(tài)機(jī)速度快, 缺點(diǎn)是占用資源多, 通常(tngchng)用于FPGA這類寄存器資源豐
35、富的場合。 二進(jìn)制編碼占用資源最少, 在ASIC中應(yīng)用最普遍。 圖3.13對這兩種編碼方式進(jìn)行了對比。第五十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.13獨(dú)熱編碼(bin m)與二進(jìn)制編碼(bin m)第五十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)前面所舉的例子都采用二進(jìn)制編碼(bin m), 下面給出用獨(dú)熱編碼(bin m)設(shè)計(jì)狀態(tài)機(jī)的示例。module fsm-cc1-3oh(rd, ds, go, ws, clk, rst-n);outputrd;outputds;input go;input ws;input clk;input rst-n;reg
36、 rd;reg ds;parameter IDLE=0, 第五十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)READ=1, DLY =2, DONE=3;reg 3:0 state, next;always (posedge clk or negedge rst-n)if (!rst-n) beginstate = 4b0;stateIDLE = 1b1;endelse state = next;always (state or go or ws) beginnext=4b0;第五十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)case (1b1) / synopsys
37、parallel-casestateIDLE : if (go) nextREAD=1b1;else nextIDLE=1b1;stateREAD : next DLY=1b1;state DLY : if (!ws) nextDONE=1b1;else nextREAD=1b1;stateDONE : nextIDLE=1b1;endcaseendalways (posedge clk or negedge rst-n)if (!rst-n) begin第五十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)rd = 1b0;ds = 1b0;endelse beginrd = 1b0
38、;ds = 1b0; case (1b1) / synopsys parallel-casenextREAD : rd = 1b1;next DLY : rd = 1b1;nextDONE : ds = 1b1;第五十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)endcaseendendmodule 根據(jù)前面的示例, 我們可以總結(jié)出書寫狀態(tài)機(jī)的一些規(guī)則: 使用參數(shù)parameter來定義狀態(tài)機(jī)的編碼(bin m), 而不要用define。 define定義的常量在該模塊之后讀入的所有模塊中都有效, 而parameter定義的常量僅在該模塊中有效。 這樣, 狀態(tài)機(jī)編碼(bin m)的
39、改變不會(huì)影響到其他文件;第六十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)采用雙進(jìn)程(jnchng)狀態(tài)機(jī); 在生成next的always中, 在起始處加入next=3bx這樣的語句; 在生成輸出信號的always中, 先給出該信號的缺省值;狀態(tài)機(jī)的輸出信號最好是寄存器輸出。 第六十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)3.1.5多時(shí)鐘域的處理多時(shí)鐘域的處理 如果所有的設(shè)計(jì)都只有一個(gè)時(shí)鐘,如果所有的設(shè)計(jì)都只有一個(gè)時(shí)鐘, 那么那么RTL設(shè)計(jì)者的生活就太美好了。設(shè)計(jì)者的生活就太美好了。 可惜,可惜, 在大多數(shù)情形在大多數(shù)情形(qng xing)下,下, 我們面我們面臨著
40、多時(shí)鐘的處理問題。臨著多時(shí)鐘的處理問題。 本章主要講述多時(shí)鐘本章主要講述多時(shí)鐘域的設(shè)計(jì)問題。域的設(shè)計(jì)問題。 在第在第7章介紹多時(shí)鐘域的靜態(tài)時(shí)章介紹多時(shí)鐘域的靜態(tài)時(shí)序分析技術(shù)。序分析技術(shù)。 多時(shí)鐘域之所以難處理,多時(shí)鐘域之所以難處理, 是因?yàn)樵趦蓚€(gè)時(shí)是因?yàn)樵趦蓚€(gè)時(shí)鐘域之間傳遞信號時(shí),鐘域之間傳遞信號時(shí), 不可避免地會(huì)出現(xiàn)建立不可避免地會(huì)出現(xiàn)建立時(shí)間時(shí)間/保持時(shí)間違例的問題。保持時(shí)間違例的問題。 寄存器可能會(huì)鎖存寄存器可能會(huì)鎖存錯(cuò)誤的數(shù)據(jù),錯(cuò)誤的數(shù)據(jù), 引起功能錯(cuò)誤。引起功能錯(cuò)誤。下面我們先考慮在兩個(gè)時(shí)鐘域間傳遞下面我們先考慮在兩個(gè)時(shí)鐘域間傳遞1位信位信號的情形號的情形(qng xing)。第六十
41、二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)1. 1位信號的傳遞位信號的傳遞圖圖3.14給出了多時(shí)鐘域間傳遞給出了多時(shí)鐘域間傳遞1位信號的一個(gè)示例。位信號的一個(gè)示例。 在在這個(gè)例子中,這個(gè)例子中, aclk與與bclk是兩個(gè)異步時(shí)鐘。是兩個(gè)異步時(shí)鐘。 由由aclk時(shí)鐘域產(chǎn)生的時(shí)鐘域產(chǎn)生的數(shù)據(jù)數(shù)據(jù)adat要送到要送到bclk的時(shí)鐘域。的時(shí)鐘域。 由于由于bclk與與aclk不同步,不同步, 所以會(huì)出所以會(huì)出現(xiàn)這種情形:現(xiàn)這種情形: 在一定在一定(ydng)時(shí)刻,時(shí)刻, adat的變化沿距離的變化沿距離bclk的采樣的采樣沿非常接近,沿非常接近, 不能滿足建立時(shí)間和保持時(shí)間的要求。不能
42、滿足建立時(shí)間和保持時(shí)間的要求。 這樣,這樣, 寄存寄存器可能會(huì)進(jìn)入亞穩(wěn)態(tài)。器可能會(huì)進(jìn)入亞穩(wěn)態(tài)。 圖圖3.15給出了這種情形下的波形。給出了這種情形下的波形。 第六十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.14多時(shí)鐘域間傳遞(chund)信號第六十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.15多時(shí)鐘(shzhng)域間傳遞信號的波形第六十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)bdat1的值會(huì)傳遞給其他模塊。 在實(shí)際芯片中, 在bdat1處于亞微態(tài)的時(shí)候(sh hou), 有些模塊會(huì)認(rèn)為自己收到的是“1”, 有些會(huì)認(rèn)為是“0”, 如圖
43、3.16所示。 這種不一致會(huì)導(dǎo)致功能錯(cuò)誤。 第六十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.16亞穩(wěn)態(tài)引起(ynq)的數(shù)據(jù)傳遞錯(cuò)誤第六十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在仿真時(shí), 當(dāng)bdat1處于亞微態(tài)時(shí), 它的值會(huì)變成X。 這種X狀態(tài)會(huì)傳遞(chund)下去, 導(dǎo)致其他信號也變成X狀態(tài)。 如何避免這種情形呢?可以采用圖3.17所示的同步器(synchronizer)。 第六十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.17同步器示意圖第六十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)采用(ciyng)同步器后, 相
44、應(yīng)的波形v如圖3.18所示。 第七十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.18異步信號(xnho)的同步第七十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)由圖3.18 可見, 采用同步器后, 同步器的輸出信號可以有效地避免亞穩(wěn)態(tài)(亞微態(tài)出現(xiàn)的概率大大降低, 可以忽略不計(jì))。 這樣, 在不同的接收模塊中, 可以得到一致的值。 對于同步器本身, 第一個(gè)寄存器在鎖存數(shù)據(jù)時(shí), 仍然會(huì)出現(xiàn)建立時(shí)間/保持(boch)時(shí)間違例的情形。 可是我們已在電路結(jié)構(gòu)上消除了隱患, 因此可以將這種違例看作是“虛假的違例”, 通過相應(yīng)命令將其從報(bào)告中去掉即可。 第七十二頁,共170頁。
45、第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) 需要說明的是, 在仿真過程中, 同步器處仍會(huì)出現(xiàn)X狀態(tài), 這樣X狀態(tài)仍然會(huì)擴(kuò)散下去, 導(dǎo)致(dozh)仿真無法進(jìn)行。 處理這種問題有兩種方法, 一種是通過腳本, 修改sdf文件, 將這些同步器的時(shí)序檢查語句去掉; 另一種方法更方便, 只需寫一個(gè)文件, 將同步器的notifier置為固定值即可。 這里對第二種方法進(jìn)行解釋。 為理解這種方法, 先解釋一下notifier的作用。 在寄存器的仿真模型中, 都有notifier這種結(jié)構(gòu)。 當(dāng)notifier的值翻轉(zhuǎn)時(shí), 仿真器就會(huì)給出X狀態(tài)。 第七十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)下面給出
46、一個(gè)寄存器的仿真(fn zhn)模型表示。 其中, nfr表示notifier結(jié)構(gòu), CK表示時(shí)鐘, RN表示復(fù)位信號。table/CKRN Dnfr: : Q; r 1 1 ? : ? : 1;r 1 0 ? : ? : 0;? 0 ? ? : ? : 0;n 1 ? ? : ? : ;? (?1) ? ? : ? :;? ? * ? : ? :;? ? ? * : ? : X;endtable 第七十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)由寄存器仿真模型最后一行可以看出(kn ch), 當(dāng)nfr翻轉(zhuǎn)時(shí)(取值為*), Q取值為X。 那么, nfr何時(shí)會(huì)翻轉(zhuǎn)呢?在寄存器仿真模
47、型中, 有一系列的時(shí)序檢查語句, 用于檢查建立時(shí)間、 保持時(shí)間等是否違例, 如下所示:$setuphold (posedge CK & (RN=1b1), posedge D, tsu-d-h-ck, th-ck-d-l, notifier); $setuphold (posedge CK & (RN=1b1), negedge D, tsu-d-l-ck, th-ck-d-h, notifier); $setuphold (posedge CK & (D=1b1), posedge RN, tsu-rn-h-ck, th-ck-rn-l, notifier); 第七十
48、五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) $width (posedge CK & (RN=1b1), tpw-ck-h, 0, notifier); $width (negedge CK & (RN=1b1), tpw-ck-l, 0, notifier); $width (negedge RN, tpw-rn-l, 0, notifier);$recovery(posedge RN, posedge CK, 0, notifier);當(dāng)仿真器發(fā)現(xiàn)存在這些違例時(shí), nofitier的值會(huì)翻轉(zhuǎn), 從而導(dǎo)致Q取值變?yōu)閄。 了解了仿真器產(chǎn)生X的機(jī)理, 我們就很容易解
49、決這一問題: 只要將同步器的nfr置為固定值, 它的輸出(shch)就不會(huì)變?yōu)閄, 因此也就不會(huì)影響到仿真結(jié)果。 第七十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)下面給出一個(gè)(y )示例:initial begin$display(forcing notifiers on synchronizer flops at time %t, $time);force tb-top.dut.syn1.notifier=0;force tb-top.dut.syn2.notifier=0; force tb-top.dut.syn3.notifier=0;force tb-top.dut.s
50、yn4.notifier=0;force tb-top.dut.syn5.notifier=0;endmodule 第七十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)說明:在一個(gè)設(shè)計(jì)中,說明:在一個(gè)設(shè)計(jì)中, 同步器最好用例化的方式來說明。同步器最好用例化的方式來說明。 例例化名最好有相同的前綴,化名最好有相同的前綴, 這樣這樣(zhyng)有助于生成同步器的有助于生成同步器的列表,列表, 也方便進(jìn)行靜態(tài)時(shí)序分析時(shí)腳本的書寫。也方便進(jìn)行靜態(tài)時(shí)序分析時(shí)腳本的書寫。 2. 相關(guān)的多位信號的傳遞相關(guān)的多位信號的傳遞 同步器適用于在多時(shí)鐘域間傳遞同步器適用于在多時(shí)鐘域間傳遞1位的信號;位的信
51、號; 對于相關(guān)的對于相關(guān)的多位信號,多位信號, 采用這種技術(shù)依然會(huì)出現(xiàn)問題。采用這種技術(shù)依然會(huì)出現(xiàn)問題。 圖圖3.19給出了示給出了示例。例。 第七十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.19在多時(shí)鐘域間傳遞(chund)兩位信號第七十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在這個(gè)例子中, 有兩個(gè)信號b-load和b-en由bclk時(shí)鐘域傳遞到aclk時(shí)鐘域。 這兩個(gè)信號相關(guān)。 我們假設(shè)在某個(gè)(mu )時(shí)鐘周期內(nèi), b-load與b-en同時(shí)有效, 那么這兩個(gè)信號分別經(jīng)過同步器后, 會(huì)是什么情形呢? 圖3.20給出了波形示例。 第八十頁,共170頁。第
52、三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.20多位信號同步(tngb)后的波形第八十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)由圖3.20可見, 由于b-load信號與b-en信號的延遲不同, 兩者的上升(shngshng)沿之間有一些偏移。 如果同步器的采樣時(shí)鐘正好也位于兩個(gè)信號變化沿之間, 則采樣后的信號有可能會(huì)相差一個(gè)周期。 同步器得到的最終信號a-load與a-en與源信號b-load和b-en顯然不一致。 這種不一致可能會(huì)導(dǎo)致問題。 例如, 若這兩個(gè)信號是控制一個(gè)寄存器的讀操作的, 則僅當(dāng)兩個(gè)信號同時(shí)為高時(shí), 寄存器會(huì)將新的值采進(jìn)來。 盡管在bclk時(shí)鐘域兩個(gè)控制信號
53、都變高, 在aclk時(shí)鐘域卻不是這樣, 因此, 新的數(shù)據(jù)并沒有被采樣進(jìn)來, 這顯然與期望結(jié)果不一致。 第八十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn) 如何解決這個(gè)問題呢? 一種方法是將b-load與b-en信號合并, 生成1位信號。 例如, 我們將這兩個(gè)信號進(jìn)行邏輯(lu j)與操作, 然后送到同步器, 如圖3.21所示。 第八十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.21在兩個(gè)時(shí)鐘域間傳遞相關(guān)(xinggun)信號的解決方案第八十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在這種方案(fng n)下, 相應(yīng)的信號波形如圖3.22所示。 圖
54、3.22兩時(shí)鐘(shzhng)域間傳遞相關(guān)信號的波形第八十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)在很多時(shí)候, 無法對傳遞信號進(jìn)行簡單的合并。 這時(shí)候可以考慮先將這些信號編碼成格雷碼, 然后通過(tnggu)同步器傳遞。 由于格雷碼在一個(gè)周期內(nèi)僅有一位發(fā)生變化, 這樣, 通過(tnggu)同步器后, 仍可以得到正確的結(jié)果。表3.2給出了4位數(shù)據(jù)的格雷編碼。 第八十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)第八十七頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖3.23給出了一個(gè)采用格雷編碼(bin m)傳遞多位信號的示例。 對于要傳遞的兩個(gè)信號bdec0和
55、bdec1, 采用格雷編碼(bin m), 生成ben0和ben1。 第八十八頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.23采用格雷編碼進(jìn)行(jnxng)信號傳遞第八十九頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)上述的幾種方案都是基于同步器的。 依據(jù)的基本原理是降低寄存器處于亞穩(wěn)態(tài)的概率(gil)。 還有沒有其他方案呢?我們?yōu)槭裁床桓纱鄬?shù)據(jù)的變化沿與時(shí)鐘的變化沿隔開呢?一種方案是: 我們可以用多組寄存器來存儲(chǔ)信號。 例如, 我們用8組寄存器來存儲(chǔ)一個(gè)信號a。 在時(shí)刻0, 信號a寫到第1個(gè)寄存器中; 在時(shí)刻1, 信號a寫到第2個(gè)寄存器中; 依次類推。過一段時(shí)間,
56、 我們再進(jìn)行讀操作。 第九十頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)例如, 當(dāng)信號a寫入到第4個(gè)寄存器時(shí), 我們才開始從寄存器0讀出信號, 然后依次開始往下讀。 這樣, 針對某一個(gè)寄存器, 例如寄存器0, 它的數(shù)據(jù)變化與讀時(shí)鐘總是相差4個(gè)周期。 這樣, 當(dāng)開始讀操作時(shí), 數(shù)據(jù)早已經(jīng)穩(wěn)定下來, 不會(huì)出現(xiàn)建立時(shí)間/保持時(shí)間違例的情況了。 這就是基于異步FIFO在多時(shí)鐘域間傳遞信號的基本原理。 對于這個(gè)異步FIFO, 如何生成空/滿信號? 由于(yuy)讀指針與寫指針是兩個(gè)時(shí)鐘域的信號, 比較時(shí), 應(yīng)該將它們放在一個(gè)時(shí)鐘域來進(jìn)行。 我們可以將它們編碼為格雷碼, 然后通過同步器傳遞到一個(gè)
57、時(shí)鐘域中。第九十一頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)具體地講, 在生成滿標(biāo)志信號時(shí), 我們將讀指針編成格雷碼, 然后經(jīng)同步器送到寫時(shí)鐘域中, 與寫指針進(jìn)行比較; 生成空標(biāo)志信號時(shí), 我們將寫指針編成格雷碼, 然后經(jīng)同步器送到讀時(shí)鐘域中, 與讀指針進(jìn)行比較。 圖3.24給出了一個(gè)(y )異步FIFO的基本結(jié)構(gòu)。 第九十二頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)圖 3.24異步FIFO示意圖第九十三頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)下面我們給出異步FIFO的實(shí)現(xiàn)(shxin)示例。 我們將這個(gè)異步FIFO分解成五個(gè)部分: 頂層模塊、 FIFO存
58、儲(chǔ)體、 讀指針同步器、 寫指針同步器、 空標(biāo)志及讀地址生成邏輯和滿標(biāo)志及寫地址生成邏輯, 用五個(gè)文件來完成設(shè)計(jì)。 對于這種簡單設(shè)計(jì), 這樣劃分顯然太瑣碎了, 在實(shí)際中可以寫成一個(gè)文件。 異步FIFO的實(shí)現(xiàn)(shxin)代碼如下所示。首先是頂層模塊:第九十四頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)module fifo1 (rdata, wfull, rempty, wdata, winc, wclk, wrst-n, rinc, rclk, rrst-n); parameter DSIZE=8; parameter ASIZE=4; output DSIZE1:0 rdata;
59、output wfull; output rempty; input DSIZE1:0 wdata; input winc, wclk, wrst-n; input rinc, rclk, rrst-n; wire ASIZE1:0 waddr, raddr;第九十五頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)wire ASIZE:0 wptr, rptr, wrptr2, rwptr2; sync-r2w sync-r2w (.wrptr2(wrptr2), .rptr(rptr), .wclk(wclk), .wrst-n(wrst-n); sync-w2r sync-w2r (
60、.rwptr2(rwptr2), .wptr(wptr), .rclk(rclk), .rrst-n(rrst-n); fifomem (DSIZE, ASIZE) fifomem (.rdata(rdata), .wdata(wdata), .waddr(waddr), .raddr(raddr), .wclken(winc), .wclk(wclk);第九十六頁,共170頁。第三章數(shù)字IC系統(tǒng)的邏輯設(shè)計(jì)RTL實(shí)現(xiàn)rptr-empty (ASIZE) rptr-empty (.rempty(rempty), .raddr(raddr), .rptr(rptr), .rwptr2(rwptr2), .rinc(rinc), .r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地下科研設(shè)施引孔施工協(xié)議
- 雇傭合同模板
- 公積金繳納比例調(diào)整影響
- 健身中心泳池翻新協(xié)議
- 城市供水管道改造工程施工合同
- 2025版機(jī)械運(yùn)輸租賃及安裝指導(dǎo)服務(wù)合同范本3篇
- 2024年物流運(yùn)輸車輛維修保養(yǎng)合同模板3篇
- 2025版客車節(jié)能環(huán)保技術(shù)應(yīng)用與推廣承包協(xié)議3篇
- 2025版航空航天設(shè)備設(shè)計(jì)與制造合同范本3篇
- 2025版跨境電商進(jìn)口食品檢驗(yàn)檢疫合同3篇
- 傷口造口護(hù)理質(zhì)量標(biāo)準(zhǔn)
- 熱性驚厥診斷治療與管理專家共識
- 《橋梁輕量化監(jiān)測系統(tǒng)建設(shè)規(guī)范(征求意見稿)》
- 現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)園建設(shè)規(guī)劃方案(2篇)
- 物流配送中心租賃合同
- 幼兒園幼小銜接方案及反思
- 生命科學(xué)前沿技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年蘇州大學(xué)
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園項(xiàng)目可行性研究報(bào)告
- 中國神話故事繪本倉頡造字
- 消化道出血護(hù)理新進(jìn)展
- MOOC 心理健康與創(chuàng)新能力-電子科技大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論