- 數(shù)字IC設計入門(微課視頻版)
- 白櫟旸編著
- 2336字
- 2024-12-27 23:28:54
2.1 數(shù)字器件與Verilog語法的關(guān)系
雖然Foundry提供的可用元器件種類較多,但數(shù)字設計師并不特別在意這些元器件,在其頭腦中,只存在10種簡單元器件,即與門、或門、非門、異或門、加法器、乘法器、選擇器、比較器、移位器、觸發(fā)器。至于如何將這些門電路組合成更為復雜的門電路,并應用到電路中是綜合器的工作,設計者并不關(guān)心。
數(shù)字IC設計又稱為數(shù)字邏輯設計,之所以有這樣的別名,是因為數(shù)字電路本身就是邏輯的,即只有0和1兩種邏輯,非此即彼。為了實現(xiàn)0和1的計算與傳輸,需要兩種類型的電路,一種叫組合邏輯,另一種叫時序邏輯。組合邏輯是電平輸入和電平輸出。一個與門的邏輯如圖2-1所示,其中,與門的符號表示和引腳命名如(a)所示,邏輯波形如(b)所示。當輸入a或b維持0電平時,輸出z也維持0電平,當輸入a和b同時為1時,z輸出1。

圖2-1 與門
組合邏輯雖然符合人的思維習慣,并且元器件結(jié)構(gòu)簡單,但問題是如果輸入含有毛刺,輸出就有毛刺,如圖2-2所示,輸入b突然從0變成1后又在短時間內(nèi)恢復0,可以視為毛刺,輸出z受到b的影響,也產(chǎn)生了毛刺。

圖2-2 帶毛刺的輸入和輸出
時序邏輯就是以時鐘作為驅(qū)動源的電路。一個觸發(fā)器,在時鐘的驅(qū)動下,將D輸入端的信號送到Q端輸出,如圖2-3所示,其中,(a)是觸發(fā)器的符號和引腳名稱,(b)是觸發(fā)器的輸入和輸出波形。這里引入節(jié)拍的概念,也可稱為拍。時序邏輯上的時鐘,一個周期為一拍,英文中常寫作1T。(b)中共有7拍,在第3拍,復位信號rst_n解復位,該觸發(fā)器才正常工作。在第4拍,D信號由0變1,如果是組合邏輯,則Q端應該在D變化的同時發(fā)生變化,但時序邏輯的特點是必須等待時鐘驅(qū)動,因此Q端從0變1發(fā)生在第5拍。在第6拍,D信號又從1變?yōu)?,所以Q端在第7拍之后變?yōu)?。時序邏輯能夠消除毛刺,D在第5拍和第6拍之間出現(xiàn)毛刺,若是組合邏輯,則Q端會同時出現(xiàn)毛刺,但在觸發(fā)器中,在出現(xiàn)毛刺的位置上,時鐘并沒有驅(qū)動,因此Q仍然保持原來的狀態(tài)。這就是所謂“數(shù)字電路有去除毛刺的天然特性”說法的由來。在這里必須明確定義什么是時鐘驅(qū)動。時序邏輯中,時鐘的上升沿或下降沿才能驅(qū)動電路運行,該時鐘邊沿就是時鐘驅(qū)動。定義中用了“或”而不是“和”,是因為普通的觸發(fā)器是單邊沿采樣的,即不能同時使用上升和下降兩種沿進行采樣,至于使用哪種沿采樣,要看設計時使用的Verilog語句。這里再定義采樣的概念,即時鐘邊沿出現(xiàn)時,觸發(fā)器會將當時D端輸入的值放在Q端輸出,這就是所謂對D信號進行采樣。圖2-3中凡是時鐘的上升沿都標有箭頭,即說明該觸發(fā)器是上升沿觸發(fā)采樣的。觸發(fā)器也可稱為寄存器(Register,reg)。之所以叫寄存器是因為如果沒有時鐘驅(qū)動,則Q端會保持原有狀態(tài)不變,也就寄存了上一次觸發(fā)時的D端信息,而對于組合邏輯,輸出端是無法寄存信息的,必須隨輸入的變化而立即發(fā)生變化。在第7.2節(jié)介紹的綜合腳本中,會有reg2reg一項,意思是Register to Register,指的是兩個觸發(fā)器中間的路徑。讀者在進行前仿時,看到的仿真波形會和本圖一樣,是理想的,而使用版圖網(wǎng)表進行后仿時,仿真波形是帶延遲的。很多初學者會認為前仿波形就是電路的實際狀況,因而在分析波形時經(jīng)常發(fā)生理解錯誤。圖2-3也畫出了觸發(fā)器的符號表示,它共有4個引腳,除輸入的D端和輸出的Q端外,三角形位置表示時鐘,下方的rst_n表示復位,其上的圓圈表示0電平有效,即rst_n等于0時,寄存器處于復位狀態(tài)。此時,Q端保持0,即使時鐘和D端有動作,Q端也不會變化,只有當rst_n等于1時,才解除復位狀態(tài),寄存器方能正常工作。

圖2-3 觸發(fā)器
時序邏輯是整個數(shù)字電路的基礎,在10種元器件中,只有觸發(fā)器屬于時序邏輯器件,因而觸發(fā)器是整個數(shù)字電路的基礎,這一點,從Verilog的另一個稱呼RTL就可知曉。RTL意為寄存器傳輸層,直譯過來就是:從一個觸發(fā)器的輸出到另一個觸發(fā)器的輸入,通過觸發(fā)器的層層傳遞,最終實現(xiàn)了一個功能完整的數(shù)字電路。數(shù)字的時序分析,主要是分析兩個觸發(fā)器之間的路徑延遲。10種元器件中的其他9種屬于組合邏輯。這10種元器件經(jīng)過復雜地組織,能夠?qū)崿F(xiàn)所有數(shù)字芯片的邏輯運算需求,從簡單的加、減、乘、除,到復雜的浮點運算、復數(shù)運算、矩陣運算都能解決。可能有讀者會問一堆問題,諸如“乘法不就是重復的加法嗎?”“加法器也可以由與或非門實現(xiàn)呀?”“比較器用異或門也能實現(xiàn)嗎?”之類,這里筆者概括為10種,是從Verilog常用的表達形式的角度來講的,也就是說,雖然加法器也可以由與或非門實現(xiàn),但一般直接使用“+”這個符號表示加法,較少會使用門電路去搭建加法器,因為現(xiàn)代芯片規(guī)模龐大,要實現(xiàn)的功能十分復雜,工程師應該將精力更多地投入到重點難題的實現(xiàn)上,而對于加法如何實現(xiàn)這類最底層問題,都交由綜合步驟自動完成,現(xiàn)代EDA工具也更加智能,能夠根據(jù)設計描述自動匹配出面積最省、速度最快的電路,例如DC綜合器中包含的DesignWare器件庫。基本元器件中不包括除法,原因是除法的實現(xiàn)不同于乘法,它受到被除數(shù)、除數(shù)、商的數(shù)值范圍的限制,有時需要用到迭代等復雜方法實現(xiàn),還有分母為0等異常情況需要報告,所以并不屬于Verilog中常用的直接運算方式。
讀者務必注意與或非加乘等指的是元器件,而非C語言中代表的運算含義。寫Verilog最忌諱的是用C語言的編程思維來寫,雖然兩者在語法上十分相似。C語言的代碼叫程序,即流程順序,按照編寫順序逐條執(zhí)行。數(shù)字前端寫的Verilog僅僅是代碼,而非程序。代碼即代替電路圖的一種文本語言描述。因而在編寫Verilog時,人們腦中會呈現(xiàn)出該代碼對應的電路概貌和時序,理解這一點,對于新人格外重要。
10種數(shù)字器件的符號表示以及Verilog表示方法見表2-1。
表2-1 10種數(shù)字邏輯器件和Verilog表示

真正的元器件庫中有很多復雜元器件,如圖2-4所示,但這些元器件都可以看作10種基本元器件的組合,不會超出原有的功能范圍,因此在設計時,頭腦中只需使用這10種元器件進行電路組織。

圖2-4 復雜元器件示例
- Building Computer Vision Projects with OpenCV 4 and C++
- 大數(shù)據(jù)技術(shù)基礎
- 計算機信息技術(shù)基礎實驗與習題
- Learning JavaScriptMVC
- MySQL基礎教程
- R數(shù)據(jù)科學實戰(zhàn):工具詳解與案例分析(鮮讀版)
- Python醫(yī)學數(shù)據(jù)分析入門
- INSTANT Cytoscape Complex Network Analysis How-to
- 中國數(shù)字流域
- Starling Game Development Essentials
- 白話大數(shù)據(jù)與機器學習
- 大數(shù)據(jù)架構(gòu)商業(yè)之路:從業(yè)務需求到技術(shù)方案
- PostgreSQL指南:內(nèi)幕探索
- 視覺大數(shù)據(jù)智能分析算法實戰(zhàn)
- SIEMENS數(shù)控技術(shù)應用工程師:SINUMERIK 840D-810D數(shù)控系統(tǒng)功能應用與維修調(diào)整教程