00、緒論
1、什么是信號處理電路?它通常由哪兩大部分組成?
數(shù)字信號處理電路是進行一些復(fù)雜的數(shù)字運算和數(shù)據(jù)處理,并且又有實時響應(yīng)需求的電路。
它們通常是由高速專用數(shù)字邏輯系統(tǒng)或?qū)S脭?shù)字信號處理器所構(gòu)成,通常包括高速數(shù)據(jù)通道接口和高速算法電路。
2、為什么要設(shè)計專用的信號處理電路?
因為有的數(shù)字信號處理對時間的要求非常苛刻,以至于用高速的通用處理器也無法在規(guī)定的時間內(nèi)完成必要的運算。通用微處理器芯片是為一般目的而設(shè)計的,運算的步驟必須通過編程編譯后生成的機器碼指令加載到存儲器中,然后在微處理器芯片的控制下,按時鐘的節(jié)拍,逐條取出指令分析指令和執(zhí)行指令,直到程序的結(jié)束。微處理器芯片中的內(nèi)部總線和運算部件也是為通用目的而設(shè)計,即使是專為信號處理而設(shè)計的通用微處理器,因為它的通用性也不可能為某一特殊的算法來設(shè)計一系列的專用的運算電路,而且其內(nèi)部總線的寬度也不能隨便的改變,只有通過改變程序,才能實現(xiàn)這個特殊的算法,因而其算法速度也受到限制,所以要設(shè)計專用的信號處理器。
3、什么是實時處理系統(tǒng)?
實時處理系統(tǒng)是具有實時響應(yīng)的處理系統(tǒng)。
4、為什么要用硬件描述語言來設(shè)計復(fù)雜的算法邏輯電路?
因為現(xiàn)代復(fù)雜數(shù)字邏輯系統(tǒng)的設(shè)計都是借住于EDA工具完成的,無論電路系統(tǒng)的仿真和綜合都需要掌握硬件描述語言。
5、能不能完全用C語言來代替硬件描述語言進行算法邏輯電路的設(shè)計?
不能,因為基礎(chǔ)算法的描述和驗證常用C語言來做。
如果要設(shè)計一個專用的電路來進行這種對速度有要求的實時數(shù)據(jù)處理,除了以上C語言外,還須編寫硬件描述語言進行仿真以便從電路結(jié)構(gòu)上保證算法能在規(guī)定的時間內(nèi)完成,并能通過與前端和后端的設(shè)備接口正確無誤的交換數(shù)據(jù)。
6、為什么在算法邏輯電路的設(shè)計中需要用C語言和硬件描述語言配合使用來提高設(shè)計效率?
首先,C語言很靈活,查錯功能強,還可以通過 PLI (編程語言接口)編寫自己的系統(tǒng)任務(wù),并直接與硬件仿真器結(jié)合使用。C語言是目前世界上應(yīng)用最為廣泛的一種編程語言,因而C程序的設(shè)計環(huán)境比VerilogHDL更完整。
此外,C語言有可靠地編譯環(huán)境,語法完備,缺陷缺少,應(yīng)用于許多的領(lǐng)域。比較起來,Verilog語言只是針對硬件描述的,在別處使用并不方便。而用Verilog的仿真,綜合,查錯等大部分軟件都是商業(yè)軟件,與C語言相比缺乏長期大量的使用,可靠性較差,亦有很多缺陷。所以只有在C語言的配合使用下,Verilog才能更好地發(fā)揮作用。C語言與VerilogHDL語言相輔相成,互相配合使用。這就是既利用C語言的完整性又要結(jié)合Verilog對硬件描述的精確性,來更快更好地設(shè)計出符合性能要求的硬件電路系統(tǒng),從而來提高效率。
01、第1章Verilog的基本知識
1、什么是硬件描述語言? 它的主要作用是什么?
- 硬件描述語言(HDL, hardware description language)是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言。
- 作用:數(shù)字電路系統(tǒng)的設(shè)計者利用這種語言可以從上層到下層(從抽象到具體)逐層描述自己的設(shè)計思想,用一系列分層次的模塊來表示極其復(fù)雜的數(shù)字系統(tǒng)。然后利用電子設(shè)計自動化(簡稱為EDA)工具逐層進行仿真驗證,再把其中需要變?yōu)榫唧w物理電路的模塊組合經(jīng)由自動綜合工具轉(zhuǎn)換到門級電路網(wǎng)表。接下去再用專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)自動布局布線工具把網(wǎng)表轉(zhuǎn)換為具體電路布線結(jié)構(gòu)的實現(xiàn)。
2、目前世界上符合IEEE標(biāo)準(zhǔn)的硬件描述語言有哪兩種 ?它們各有什么特點?
-
Verilog HDL和 VHDL都是用于邏輯設(shè)計的硬件描述語言,并且都已成為IEEE標(biāo)準(zhǔn)。VHDL是在1987年成為IEEE標(biāo)準(zhǔn),Verilog HDL則在1995年才正式成為IEEE標(biāo)準(zhǔn)。VHDL其英文全名為 VHSIC Hardware Description Language。而 VHSIC則是 Very High Speed Integerated Circuit的縮寫詞,意為甚高速集成電路,故VHDL其準(zhǔn)確的中文譯名為甚高速集成電路的硬件描述語言。
-
Verilog HDL和VHDL其共同的特點在于:
-
- 能形式化地抽象表示電路的行為和結(jié)構(gòu);
- 支持邏輯設(shè)計中層次與范圍的描述;
- 可借用高級語言的精巧結(jié)構(gòu)來簡化電路行為的描述;
- 具有電路仿真與驗證機制以保證設(shè)計的正確性;
- 支持電路描述由高層到低層的綜合轉(zhuǎn)換;
- 硬件描述與實現(xiàn)工藝無關(guān)(有關(guān)工藝參數(shù)可通過語言提供的屬性包括進去);
- 便于文檔管理;
- 易于理解和設(shè)計重用。
-
與VHDL相比Verilog HDL的最大優(yōu)點是:它是一種非常容易掌握的硬件描述語言,只要有C語言的編程基礎(chǔ),通過20學(xué)時的學(xué)習(xí),再加上一段實際操作,一般同學(xué)可在2~3個月內(nèi)掌握這種設(shè)計方法的基本技術(shù)。而掌握VHDL設(shè)計技術(shù)就比較困難。這是因為VHDL不很直觀,需要有Ada編程基礎(chǔ),一般認(rèn)為至少需要半年以上的專業(yè)培訓(xùn),才能掌握VHDL的基本設(shè)計技術(shù)。
-
下圖所示為Verilog HDL和VHDL建模能力的比較圖。
3、什么情況下需要采用硬件描述語言的設(shè)計方法?
- 近年來,F(xiàn)PGA和ASIC的設(shè)計在規(guī)模和復(fù)雜度方面不斷取得進展,而對邏輯電路及系統(tǒng)的設(shè)計時間要求卻越來越短。這些因素促使設(shè)計人員采用高水準(zhǔn)的設(shè)計工具,如:硬件描述語言(Verilog HDL或VHDL)來進行設(shè)計。
4、采用硬件描述語言設(shè)計方法的優(yōu)點是什么? 有什么缺點?
- 采用Verilog輸入法最大的優(yōu)點是其與工藝無關(guān)性。這使得工程師在功能設(shè)計,邏輯驗證階段,可以不必過多考慮門級及工藝實現(xiàn)的具體細節(jié),只需要利用系統(tǒng)設(shè)計時對芯片的要求,施加不同的約束條件,即可設(shè)計出實際電路。
- 缺點是:需要響應(yīng)的EDA工具,而EDA工具的穩(wěn)定性需要進一步的在工程中提升。
5、簡單敘述一下利用 EDA工具并采用硬件描述語言(HDL)的設(shè)計方法和流程。
- 采用自頂向下的設(shè)計(即Top_Down設(shè)計)方法:從系統(tǒng)級開始把系統(tǒng)劃分為基本單元,然后再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接用EDA元件庫中的基本元件來實現(xiàn)為止。
- 其基本流程主要由兩大功能部分組成:
- (1)設(shè)計開發(fā),即從編寫設(shè)計文檔→綜合到布局布線→電路生產(chǎn)這樣一序列步驟。
- (2)設(shè)計驗證,也就是進行各種仿真的一序列步驟,如果在仿真過程中發(fā)現(xiàn)問題就返回設(shè)計輸入進行修改。
6、硬件描述語言可以用哪兩種方式參與復(fù)雜數(shù)字電路的設(shè)計?
- 復(fù)雜數(shù)字電路的設(shè)計和復(fù)雜數(shù)字電路的仿真驗證。
7、用硬件描述語言設(shè)計的數(shù)字系統(tǒng)需要經(jīng)過哪些步驟才能與具體的電路相對應(yīng)?
- 編寫設(shè)計文件;
- 功能仿真;
- 優(yōu)化,布局布線;
- 布線后門級仿真。
8、為什么說用硬件描述語言設(shè)計的數(shù)字邏輯系統(tǒng)具有最大的靈活性并可以映射到任何工藝的電路上?
- 硬件描述語言的設(shè)計具有與工藝無關(guān)性。
- 這使得工程師在功能設(shè)計,邏輯驗證階段,可以不必過多考慮門級及工藝實現(xiàn)的具體細節(jié),只需要利用系統(tǒng)設(shè)計時對芯片的要求,施加不同的約束條件,即可設(shè)計出實際電路。
9、軟核是什么?虛擬器件是什么?它們的作用是什么?
- 把功能經(jīng)過驗證的、可綜合的、實現(xiàn)后電路結(jié)構(gòu)總門數(shù)在5 000門以上的Verilog HDL模型稱為**“軟核”(Soft Core)**。
- 把由軟核構(gòu)成的器件稱為虛擬器件,在新電路的研制過程中,軟核和虛擬器件可以很容易地借助EDA綜合工具與其他外部邏輯結(jié)合為一體。這樣,軟核和虛擬器件的重用性就可大大縮短設(shè)計周期,加快了復(fù)雜電路的設(shè)計。
10、集成電路行業(yè)中 IP 的含義是什么?固核是什么?硬核是什么?與軟核相比它們各有什么特點?各適用于什么場合?
- 在數(shù)字邏輯設(shè)計領(lǐng)域,迫切需要一種共同的工業(yè)標(biāo)準(zhǔn)來統(tǒng)一對數(shù)字邏輯電路及系統(tǒng)的描述,這樣就能把系統(tǒng)設(shè)計工作分解為邏輯設(shè)計(前端),電路實現(xiàn)(后端)和驗證三個互相獨立而又相關(guān)的部分。由于邏輯設(shè)計的相對獨立性就可以把專家們設(shè)計的各種常用數(shù)字邏輯電路和組件(如 FFT算法、DCT算法部件、DDRAM 讀寫控制器等)建成宏單元( megcell)或軟(固/硬)核,也稱作Soft(firm/hard)Core,即 IP(知識產(chǎn)權(quán)內(nèi)核的英文縮寫)庫供設(shè)計者引用。設(shè)計者可以直接利用它們的行為模型設(shè)計并驗證其他電路,以減少重復(fù)勞動,提高工作效率。
- 在集成電路行業(yè)中IP是知識產(chǎn)權(quán)(IntellectualProperty)的含義。
- 把在某一現(xiàn)場可編程門陣列(FPGA)器件上實現(xiàn)的、經(jīng)檢驗證明是正確的、總門數(shù)在5000門以上的電路結(jié)構(gòu)編碼文件稱為**“固核”(firm core)**。
- 把在某一專用集成電路工藝的(ASIC)器件上實現(xiàn)的、經(jīng)檢驗證明是正確的、總門數(shù)在5000門以上的門電路結(jié)構(gòu)版圖掩膜稱為**“硬核”(hard core)**。
- 在工具實現(xiàn)手段和工藝技術(shù)尚未確定的邏輯設(shè)計階段,IP核具有很大的靈活性,很容易借助EDA工具與其他外部邏輯結(jié)合為一體。相比之下固核和硬核與其他外部邏輯結(jié)合為一體的靈活性要差很多。
11、簡述Top_Down設(shè)計方法和硬件描述語言的關(guān)系。
- Top_Down的設(shè)計方法是首先從系統(tǒng)設(shè)計入手,從頂層進行功能劃分和結(jié)構(gòu)設(shè)計。系統(tǒng)的總仿真時頂層進行功能劃分的總要環(huán)節(jié),而該過程需要采用硬件描述語言的方法。
12、System Verilog 與Verilog有什么關(guān)系?適用于何種設(shè)計?
-
Verilog適合系統(tǒng)級( system)、算法級(alogrithem)、寄存器傳輸級(RTL)、邏輯級(logic)、門級(gate)、電路開關(guān)級(switch)設(shè)計。
-
而SystemVerilog 是Verilog語言的擴展和延伸,更適用于可重用的可綜合IP和可重用的驗證用IP設(shè)計,以及特大型(千萬門級以上)基于IP的系統(tǒng)級設(shè)計和驗證。
02、第2章Verilog語法的基本概念
1、Verilog語言有什么作用?
Verilog HDL是一種用于數(shù)字系統(tǒng)設(shè)計的語言。用Verilog HDL描述的電路設(shè)計就是該電路的Verilog HDL模型,也稱為模塊。Verilog HDL既是一種行為描述的語言也是一種結(jié)構(gòu)描述的語言。這就是說,無論描述電路功能行為的模塊或描述元器件或較大部件互聯(lián)的模塊都可以用Verilog 語言來建立電路模型。如果按照一定的規(guī)則和風(fēng)格編寫,功能行為模塊可以通過工具自動地轉(zhuǎn)換為門級互聯(lián)的結(jié)構(gòu)模塊。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別和它們所對應(yīng)的模型類型共有以下5種,現(xiàn)分別給以簡述。
-
(1)系統(tǒng)級(system-level):用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)待設(shè)計模塊的外部性能的模型。
-
(2)算法級( algorithm-level):用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)算法運行的模型。
-
(3)RTL級(register transfer level):描述數(shù)據(jù)在寄存器之間的流動和如何處理、控制這些數(shù)據(jù)流動的模型。
以上三種都屬于行為描述,只有RTL級才有與邏輯電路有明確的對應(yīng)關(guān)系。
-
(4)門級(gate-level):描述邏輯門以及邏輯門之間連接的模型。
與邏輯電路有確定的連接關(guān)系,以上4種數(shù)字系統(tǒng)設(shè)計工程師必須掌握。
-
(5)開關(guān)級(switch-level):描述器件中三極管和儲存節(jié)點以及它們之間連接的模型。
這與具體的物理電路有對應(yīng)關(guān)系,工藝庫元件和宏部件設(shè)計人員必須掌握,將在高級教程中介紹。
一個復(fù)雜電路系統(tǒng)的完整Verilog HDL模型是由若干個Verilog HDL模塊構(gòu)成的,每一個模塊又可以由若干個子模塊構(gòu)成。其中有些模塊需要綜合成具體電路,而有些模塊只是與用戶所設(shè)計的模塊有交互聯(lián)系的現(xiàn)存電路或激勵信號源。利用Verilog HDL語言結(jié)構(gòu)所提供的這種功能就可以構(gòu)造一個模塊間的清晰層次結(jié)構(gòu),以此來描述極其復(fù)雜的大型設(shè)計,并對所作設(shè)計的邏輯電路進行嚴(yán)格的驗證。
Verilog HDL行為描述語言作為一種結(jié)構(gòu)化和過程性的語言,其語法結(jié)構(gòu)非常適合于算法級和RTL級的模型設(shè)計。這種行為描述語言具有以下功能:
- 可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構(gòu);
- 用延遲表達式或事件表達式來明確地控制過程的啟動時間;
- 通過命名的事件來觸發(fā)其他過程里的激活行為或停止行為;
- 提供了條件如 if-else,case等循環(huán)程序結(jié)構(gòu);
- 提供了可帶參數(shù)且非零延續(xù)時間的任務(wù)(task)程序結(jié)構(gòu);
- 提供了可定義新的操作符的函數(shù)結(jié)構(gòu)(function);
- 提供了用于建立表達式的算術(shù)運算符、邏輯運算符、位運算符;
- Verilog HDL語言作為一種結(jié)構(gòu)化的語言非常適用于門級和開關(guān)級的模型設(shè)計。因其結(jié)構(gòu)化的特點又使它具有以下功能:
- 提供了一套完整的表示組合邏輯的基本元件的原語(primitive) ;
- 提供了雙向通路(總線)和電阻器件的原語;
- 可建立MOS器件的電荷分享和電荷衰減動態(tài)模型。
Verilog HDL的構(gòu)造性語句可以精確地建立信號的模型。這是因為在 Verilog HDL中,提供了延遲和輸出強度的原語來建立精確程度很高的信號模型。信號值可以有不同的強度,可以通過設(shè)定寬范圍的模糊值來降低不確定條件的影響。
Verilog HDL作為一種高級的硬件描述編程語言,與C語言的風(fēng)格有許多類似之處。其中有許多語句,如 if語句,case語句和C語言中的對應(yīng)語句十分相似。
2、構(gòu)成模塊的關(guān)鍵詞是什么?
module
endmodule
3、為什么說可以用Verilog構(gòu)成非常復(fù)雜的電路結(jié)構(gòu)?
- 因為Verilog可描述順序執(zhí)行和并行執(zhí)行的程序結(jié)構(gòu);
- 用延遲表達式或事件表達式來明確的控制過程的啟動時間;
- 通過命名的事件來觸發(fā)其它過程里的激活行為或停止行為;
- 提供了條件如if-else,case等循環(huán)程序結(jié)構(gòu);
- 提供了可帶參數(shù)且非零延續(xù)時間的任務(wù)程序結(jié)構(gòu);
- 提供了可定義新的操作符的函數(shù)結(jié)構(gòu);
- 提供了用于建立表達式的算術(shù)運算符、邏輯運算符、位運算符;
- Verilog HDL語言作為一種結(jié)構(gòu)化的語言非常適用于門級和開關(guān)級的模型設(shè)計;
- 提供了一套完整的表示組合邏輯的基本元件的原話(primitive);
- 提供了雙向通路(總線)和電阻器件的原語;
- 可建立MOS器件的電荷分享和電荷衰減動態(tài)模型;
- Verilog HDL的構(gòu)造性語句可以精確地建立信號的模型;
4、為什么可以用比較抽象的描述來設(shè)計具體的電路結(jié)構(gòu)?
因為有可以用比較抽象描述設(shè)計電路結(jié)構(gòu)的語言,而這種語言是適合數(shù)字系統(tǒng)設(shè)計的語言。
5、任意抽象的符合語法的 Verilog模塊是否都可以通過綜合工具轉(zhuǎn)變?yōu)殡娐方Y(jié)構(gòu)?
不能;
要符合語法,還要符合一些基本規(guī)則的Verilog模塊才可以通過綜合工具轉(zhuǎn)變?yōu)殡娐方Y(jié)構(gòu)。
6、什么叫綜合?
在編寫Verilog模塊時,不但符合語法,還符合一些基本規(guī)則,就可以通過計算機上的綜合工具把行為級描述的模塊通過邏輯網(wǎng)表自動轉(zhuǎn)化為門級形式的模塊叫綜合。
7、綜合是由什么工具來完成的?
由EDA工具來完成綜合。
8、通過綜合產(chǎn)生的是什么?產(chǎn)生的結(jié)果有什么用處?
產(chǎn)生的是由與門,或門和非門組成的加法器、比較器和三態(tài)門等組合邏輯。
產(chǎn)生的模塊很容易與某種工藝的基本元件逐一對應(yīng)起來,再通過布局布線工具自動地轉(zhuǎn)變?yōu)槟撤N工具工藝的電路布線結(jié)構(gòu)。
9、仿真是什么?為什么要進行仿真?
仿真是對電路模塊進行動態(tài)的全面測試。
通過觀察測試模塊的輸出信號是否符合要求,可以調(diào)試和驗證邏輯系統(tǒng)的設(shè)計和結(jié)構(gòu)準(zhǔn)確與否,并發(fā)現(xiàn)問題及時修改。
10、仿真可以在幾個層面上進行?每個層面的仿真有什么意義?
分別為前(RTL)仿真、邏輯網(wǎng)表仿真、門級仿真和布線后仿真;
前仿真,邏輯網(wǎng)表仿真,門級仿真可以調(diào)試和驗證邏輯系統(tǒng)的設(shè)計和結(jié)構(gòu)準(zhǔn)確與否,并發(fā)現(xiàn)問題及時修改。
布線后仿真,分析設(shè)計的電路模塊的運行是否正常。
11、模塊的端口是如何描述的?
用 “ . ”表示被引用模塊的端口。
12、在引用實例模塊的時候,如何在主模塊中連接信號線?
小括號中表示本模塊中與之連接的線路。
13、如何產(chǎn)生連續(xù)的周期性測試時鐘?
用always語句來產(chǎn)生連續(xù)的周期性測試模塊。
always #50 clock = ~clock; //產(chǎn)生一個不斷重復(fù)的周期為100個時鐘單位的時鐘信號clock
14、如果不用initial塊,能否產(chǎn)生測試時鐘?
不能,如果沒有initial塊,就不知道時鐘信號的初始值。
15、從本講的簡單例子,是否能明白always塊與initial塊有什么不同?
initial塊只執(zhí)行一次,而always塊執(zhí)行無數(shù)次。
16、為什么說Verilog可以用來設(shè)計數(shù)字邏輯電路和系統(tǒng)?
- 因為Verilog可描述順序執(zhí)行和并行執(zhí)行的程序結(jié)構(gòu);
- 用延遲表達式或事件表達式來明確的控制過程的啟動時間;
- 通過命名的事件來觸發(fā)其它過程里的激活行為或停止行為;
- 提供了條件如if-else,case等循環(huán)程序結(jié)構(gòu);
- 提供了可帶參數(shù)且非零延續(xù)時間的任務(wù)程序結(jié)構(gòu);
- 提供了可定義新的操作符的函數(shù)結(jié)構(gòu);
- 提供了用于建立表達式的算術(shù)運算符、邏輯運算符、位運算符;
- Verilog HDL語言作為一種結(jié)構(gòu)化的語言非常適用于門級和開關(guān)級的模型設(shè)計;
- 提供了一套完整的表示組合邏輯的基本元件的原話(primitive);
- 提供了雙向通路(總線)和電阻器件的原語;
- 可建立MOS器件的電荷分享和電荷衰減動態(tài)模型;
- Verilog HDL的構(gòu)造性語句可以精確地建立信號的模型;
03、第3章模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號
1、模塊由幾個部分組成?
- Verilog的基本設(shè)計單元是“模塊”(block)。
- 一個模塊是由兩部分組成的,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。
2、端口分為幾種?
- 輸入口:input
- 輸出口:output
- 輸入\輸出口:inout
3、為什么端口要說明信號的位寬?
- 因為如果不說明信號的位寬可能會在信號發(fā)生改變時發(fā)生錯誤,不容易看出接收到的信號的數(shù)據(jù)寬度,就很難進行數(shù)據(jù)的處理。
4、能否說模塊相當(dāng)于電路圖中的功能模塊,端口相當(dāng)于功能模塊的引腳?
- 在許多方面,程序模塊和電路圖符號是一致的,這是因為電路圖符號的引腳也就是程序模塊的接口。而程序模塊描述了電路圖符號所能實現(xiàn)的邏輯功能。
5、模塊中的功能描述可以由哪幾類語句或語句塊組成?它們出現(xiàn)的順序會不會影響功能的描述?
-
模塊中最重要的部分是邏輯功能定義部分。有以下3種方法可在模塊中產(chǎn)生邏輯。
-
-
(1)用“assign”聲明語句
//如: assign a=b & c; //這種方法的句法很簡單,只須寫一個“assign”,后面再加一個方程式即可。 //例中的方程式描述了一個有兩個輸入的與門。
-
(2)用實例元件
//如: and #2 ul( q,a,b ); //采用實例元件的方法像在電路圖輸入方式下調(diào)入庫元件一樣,鍵入元件的名字和相連的引腳即可。 //這表示在設(shè)計中用到一個跟與門(and)一樣的名為ul的與門,其輸入端為a,b,輸出為q。 //輸出延遲為2個單位時間。 //要求每個實例元件的名字必須是唯一的,以避免與其他調(diào)用與門(and)的實例混淆。
-
(3)用“always”塊
//如: always @( posedge clk or posedge clr) begin if(clr) q<= 0; else if(en) q<= d; end
-
-
采用“assign”語句是描述組合邏輯最常用的方法之一。
-
而**“always”塊既可用于描述組合邏輯,也可描述時序邏輯。**用“ always”塊的例子生成了一個帶有異步清除端的D觸發(fā)器。“always”塊可用很多種描述手段來表達邏輯,例如上例就用了if…else語句來表達邏輯關(guān)系。如按一定的風(fēng)格來編寫“always”塊,可以通過綜合工具把源代碼自動綜合成用門級結(jié)構(gòu)表示的組合或時序邏輯電路。
-
上面的3個例子分別采用了“assign”語句、實例元件和“always"塊。這3個例子描述的邏輯功能是同時執(zhí)行的。也就是說,如果把這3項寫到一個Verilog模塊文件中去,它們的順序不會影響實現(xiàn)的功能。這3項是同時執(zhí)行的,也就是并發(fā)的。
-
然而,在“always”模塊內(nèi),邏輯是按照指定的順序執(zhí)行的?!癮lways”塊中的語句稱為“順序語句”,因為它們是順序執(zhí)行的。所以,**"always”塊也稱為“過程塊”。**請注意,兩個或更多的“always”模塊都是同時執(zhí)行的,而模塊內(nèi)部的語句是順序執(zhí)行的??匆幌隆癮lways”內(nèi)的語句,就會明白它是如何實現(xiàn)功能的。if…else…if必須順序執(zhí)行,否則其功能就沒有任何意義。
6、這幾類描述中哪一種直接與電路結(jié)構(gòu)有關(guān)?
- 用實例元件直接與電路結(jié)構(gòu)有關(guān)。
- 采用實例元件的方法像在電路圖輸入方式下調(diào)入庫元件一樣,鍵入元件的名字和相連的引腳即可。
7、最基本的Verilog變量有幾種類型?
-
wire型
wire型數(shù)據(jù)常用來表示用以 assign關(guān)鍵字指定的組合邏輯信號。Verilog程序模塊中輸入、輸出信號類型默認(rèn)時自動定義為wire型。wire型信號可以用做任何方程式的輸入,也可以用做“assign”語句或?qū)嵗妮敵觥?/p>
-
reg型
寄存器是數(shù)據(jù)儲存單元的抽象,寄存器數(shù)據(jù)類型的關(guān)鍵字是reg。reg類型數(shù)據(jù)的默認(rèn)初始值為不定值x。reg型數(shù)據(jù)常用來表示“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。在“always”模塊內(nèi)被賦值的每一個信號都必須定義成reg型。
-
memory型
Verilog HDL通過對reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器、ROM存儲器和 reg文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。在Verilog語言中沒有多維數(shù)組存在。memory型數(shù)據(jù)是通過擴展reg型數(shù)據(jù)的地址范圍來生成的。其格式如下:
reg [n一1:0] 存儲器名 [m―1:0] ; //或 reg [n―1:0] 存儲器名 [m: 1] ; //在這里,reg[n一1:0]定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器; //存儲器名后的[m—1:0]或[m:1]則定義了該存儲器中有多少個這樣的寄存器。 //下面舉例說明: reg [7:0] mema [255:0] ; //這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0到255。
8、reg型和 wire型變量的差別是什么?
- reg型變量是寄存器變量,wire型變量是連線型變量。
- 兩者根本性的差別在于reg型變量有個寄存器來存放變量,這個值只有變量發(fā)生改變時才會改變,否則保證原來的值不變,wire型變量的值不是確定的值。
- 網(wǎng)絡(luò)數(shù)據(jù)類型表示結(jié)構(gòu)實體(例如門)之間的物理連接。網(wǎng)絡(luò)類型的變量不能儲存值,而且它必須受到驅(qū)動器(例如門或連續(xù)賦值語句assign)的驅(qū)動。如果沒有驅(qū)動器連接到網(wǎng)絡(luò)類型的變量上,則該變量就是高阻的,即其值為z。常用的網(wǎng)絡(luò)數(shù)據(jù)類型包括wire型和 tri型。
9、由連續(xù)賦值語句( assign)賦值的變量能否是reg類型的?
- 可以是reg類型的變量。
10、在 always模塊中被賦值的變量能否是 wire類型的?如果不能是 wire類型,那么必須是什么類型的?它們表示的一定是實際的寄存器嗎?
- 不能。
- 必須是reg類型的變量,它們表示的不一定是實際的寄存器。
11、參數(shù)類型的變量有什么用處?
- 在Verilog HDL中用parameter定義常量,即用parameter來定義一個標(biāo)識符代表一個常量,稱為符號常量,即標(biāo)識符形式的常量,
- 采用標(biāo)識符代表一個常量可提高程序的可讀性和可維護性。
12、Verilog語法規(guī)定的參數(shù)傳遞和重新定義功能有什么直接的應(yīng)用價值?
- 可以用于定義延遲時間和變量寬度。
13、邏輯比較運算符小于等于 “<=” 和非阻塞賦值大于等于 “<=” 的表示是完全一樣的,為什么Verilog在語句解釋和編譯時不會搞錯?
- 因為邏輯比較時“<=”兩邊是兩個操作數(shù),此時“<=”是雙目運算符;
- 而在非阻塞賦值時“<=”的右邊是操作數(shù),此時“<=”是單目運算符。
14、是否可以說實例引用的描述實際上就是嚴(yán)格意義上的電路結(jié)構(gòu)描述?
- 不能,實例引用的描述是在門級電路上加以描述的,和嚴(yán)格意義上的電路結(jié)構(gòu)描述還是有點差距的。
04、第4章運算符、賦值語句和結(jié)構(gòu)說明語句
1、邏輯運算符與按位邏輯運算符有什么不同,它們各在什么場合使用?
- 邏輯運算符(&&與、||或、!非)運算時是兩個操作數(shù)進行邏輯運算,返回結(jié)果為真或假。多用于條件的判斷;
- 按位邏輯運算符是兩個操作數(shù)對應(yīng)的每一位進行邏輯運算。按位邏輯運算符用于信號的運算和檢測。
2、指出兩種邏輯等式運算符的不同點,解釋書上的真值表。
-
== 和 != 又稱為邏輯等式運算符,其結(jié)果由兩個操作數(shù)的值決定。由于操作數(shù)中某些位可能是不定值x和高阻值z,結(jié)果可能為不定值x。== 的真值表如下。
== 0 1 x z 0 1 0 x x 1 0 1 x x x x x x x z x x x x -
而 === 和 !== 運算符則不同,它在對操作數(shù)進行比較時對某些位的不定值 x 和高阻值 z 也進行比較,兩個操作數(shù)必須完全一致,其結(jié)果才是1,否則為0。 === 和 !== 運算符常用于case表達式的判別,所以又稱為“case等式運算符”。=== 的真值表如下。
=== 0 1 x z 0 1 0 0 0 1 0 1 0 0 x 0 0 1 0 z 0 0 0 1
3、拼接符的作用是什么?為什么說合理地使用拼接符可以提高程序的可讀性和可維護性?拼接符表示的操作其物理意義是什么?
- 位拼接運算符(Concatation){}:可以把兩個或多個信號的某些位拼接起來進行運算操作;
- 因為借助拼接符可以用一個符號名來表示由多位信號組成的復(fù)雜信號;
- 其物理意義是將多個信號結(jié)合成一個信號。
4、如果都不帶時間延遲,阻塞和非阻塞賦值有什么不同?舉例說明它們的不同點?
-
阻塞和非阻塞賦值的區(qū)別在于阻塞是順序執(zhí)行而非阻塞是并行執(zhí)行。
-
非阻塞賦值:
always @(posedge clk) begin b <= a; c <= b; end //定義了兩個reg型信號b和c,clk信號的上升沿到來時,b就等于a,c就等于b。 //非阻塞賦值b<=a;c<=b;兩條語句是同時執(zhí)行的。
賦值是在“always”塊結(jié)束后執(zhí)行的,c應(yīng)為原來b的值,這里用到了兩個觸發(fā)器,這個“always”塊實際描述的電路功能如圖所示。
-
阻塞賦值:
always @(posedge clk) begin b = a; c = b; end //阻塞賦值b=a;c=b;兩條語句先執(zhí)行b=a后執(zhí)行c=b,最終的結(jié)果是c = a。
阻塞賦值方式:clk信號的上升沿到來時,b馬上取 a的值,c馬上取b的值(即等于a) ,生成的電路如圖所示,只用了一個觸發(fā)器來寄存a的值,又輸出給b和c。
5、舉例說明順序塊和并行塊的不同。
- 塊語句通常用來將兩條或多條語句組合在一起,使其在格式上看更像一條語句。塊語句有兩種:
- 一種是 begin_end 語句,通常用來標(biāo)識順序執(zhí)行的語句,用它來標(biāo)識的塊稱為順序塊;
- 另一種是 fork_join語句,通常用來標(biāo)識并行執(zhí)行的語句,用它來標(biāo)識的塊稱為并行塊。
- 下面兩個塊執(zhí)行起來效果是完全一樣的,第一個模塊是按順序執(zhí)行,而第二個模塊是每個語句同時執(zhí)行的。
//順序塊
parameter d =50;
reg [7:0] r;
begin
#d r = 'h35;
#d r = 'hE2;
#d r = 'h00;
#d r = 'hF7;
#d r -> end_wave;//觸發(fā)事件end——wave
end
//并行塊
reg [7:0] r;
fork
#50 r = 'h35;
#100 r = 'hE2;
#150 r = 'h00;
#200 r = 'hF7;
#250 r -> end_wave;//觸發(fā)事件end——wave
join
6、如果在順序塊中,前面有一條語句是無限循環(huán),下面的語句能否進行?文章來源:http://www.zghlxwxcb.cn/news/detail-412102.html
- 下面的語句不能執(zhí)行。
7、如果在并行塊中,發(fā)生上述情況,會如何呢?文章來源地址http://www.zghlxwxcb.cn/news/detail-412102.html
- 下面的語句可以執(zhí)行。
05、第5章條件語句、循環(huán)語句、塊語句與生成語句
06、第6章結(jié)構(gòu)語句、系統(tǒng)任務(wù)、函數(shù)語句和顯示系統(tǒng)任務(wù)
07、第7章調(diào)試用系統(tǒng)任務(wù)和常用編譯預(yù)處理語句
08、第8章語法概念總復(fù)習(xí)練習(xí)
到了這里,關(guān)于Verilog數(shù)字系統(tǒng)設(shè)計(夏宇聞)—課后思考題記錄(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!