(課件)-電路計算機輔助設(shè)計_第1頁
(課件)-電路計算機輔助設(shè)計_第2頁
(課件)-電路計算機輔助設(shè)計_第3頁
(課件)-電路計算機輔助設(shè)計_第4頁
(課件)-電路計算機輔助設(shè)計_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、 電路計算機輔助設(shè)計 吉林大學(xué)通信工程學(xué)院 高燕梅教學(xué)內(nèi)容與要求第1章 EDA技術(shù)簡介第2章 Verilog HDL語言編程 (10學(xué)時)第3章 VHDL語言編程(4學(xué)時) 第4章 MATLAB程序入門 (12學(xué)時)第5章 MATLAB在電路中的應(yīng)用(4學(xué)時) 每章有實驗室上機實驗 實驗教學(xué) 成績評定標(biāo)準(zhǔn)五級分制作業(yè)加上機考核:1、作業(yè)必做,上機交作業(yè)時隨機考兩個問題。2、點名沒有缺勤,加分。3、每次課最后有互動搶答,3次答對,只需交作業(yè),可免試。第1章 EDA技術(shù)簡介1.1 EDA技術(shù)的主要內(nèi)容1.2 EDA軟件系統(tǒng)的構(gòu)成1.3 EDA的工程設(shè)計流程1.4 數(shù)字系統(tǒng)的設(shè)計方法第2章 Veri

2、log HDL語言編程2.1 Verilog HDL設(shè)計模塊的基本結(jié)構(gòu)2.2 Verilog HDL詞法構(gòu)成2.3 Verilog HDL的語句2.4 Verilog HDL模型2.5 Verilog HDL設(shè)計電路流程2.6 用Verilog HDL描述邏輯電路的實例第3章 VHDL 語言編程基礎(chǔ)3.1 概述 3.2 VHDL程序基本結(jié)構(gòu) 3.3 VHDL語言要素 3.4 VHDL順序語句 3.5 VHDL并行語句 3.6 子程序(SUBPROGRAM) 3.7 庫、程序包及其他 3.8 VHDL描述風(fēng)格 3.9 基本邏輯電路設(shè)計 3.10 狀態(tài)機的VHDL設(shè)計 第4章 MATLAB程序入門

3、4.1基本語法4.1.1 變量及其賦值4.4.2 矩陣的初等運算4.1.3 元素群運算4.1.4 邏輯判斷及流程控制4.2 基本繪圖方法4.2.1 M文件及程序調(diào)試4.2.2 MATLAB的開發(fā)環(huán)境和工具第5章 MATLAB在電路中的應(yīng)用5.1 電阻電路和動態(tài)電路5.2 正弦穩(wěn)態(tài)電路和頻率響應(yīng)5.3 二端口電路5.4 濾波器第1章 EDA技術(shù)簡介 1.1 EDA技術(shù)的主要內(nèi)容EDA是電子設(shè)計自動化(Electronic Design Automation)的縮寫。 EDA技術(shù)就是以計算機為工具,設(shè)計者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計文件,然后由計算機自動地完成邏輯編譯、化簡、分

4、割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計的效率和可靠性,減輕了設(shè)計者的勞動強度。在電子技術(shù)設(shè)計領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計帶來了極大的靈活性。CPLD、FPGA器件可以通過軟件編程而對硬件結(jié)構(gòu)和工作方式進行重構(gòu),從而使得硬件的設(shè)計可以如同軟件設(shè)計那樣方便快捷。促進了EDA技術(shù)的迅速發(fā)展。EDA技術(shù)涉及面廣,內(nèi)容豐富,主要應(yīng)掌握如下四個方面的內(nèi)容: 大規(guī)??删幊踢壿嬈骷笠?guī)模可編程邏輯器件是利用EDA技術(shù)進行電子系統(tǒng)設(shè)計的載體。 FPGA和

5、CPLD 硬件描述語言,硬件描述語言是利用EDA技術(shù)進行電子系統(tǒng)設(shè)計的主要表達(dá)手段。VHDL、Verilog、ABEL 軟件開發(fā)工具,軟件開發(fā)工具是利用EDA技術(shù)進行電子系統(tǒng)設(shè)計的智能化的自動化設(shè)計工具。Altera的MAX+plus II、Lattice的ispEXPERT、Xilinx的Foundation Series。 實驗開發(fā)系統(tǒng),實驗開發(fā)系統(tǒng)則是利用EDA技術(shù)進行電子系統(tǒng)設(shè)計的下載工具及硬件驗證工具。 1 大規(guī)模可編程邏輯器件 可編程邏輯器件(簡稱PLD)是一種由用戶編程以實現(xiàn)某種邏輯功能的新型邏輯器件。FPGA是現(xiàn)場可編程門陣列的簡稱,CPLD是復(fù)雜可編程邏輯器件的簡稱。高集成度

6、、高速度和高可靠性是FPGA/CPLD最明顯的特點,其時鐘延時可小至ns級,結(jié)合其并行工作方式,在超高速應(yīng)用領(lǐng)域和實時測控方面有著非常廣闊的應(yīng)用前景。FPGA/CPLD的高可靠性還表現(xiàn)在幾乎可將整個系統(tǒng)下載于同一芯片中,實現(xiàn)所謂片上系統(tǒng),從而大大縮小了體積,易于管理和屏蔽。 2 硬件描述語言(HDL) 常用的硬件描述語言有VHDL、Verilog、ABEL。 VHDL:作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,在電子工程領(lǐng)域,已成為事實上的通用硬件描述語言。 Verilog:支持的EDA工具較多,適用于RTL級(寄存器轉(zhuǎn)換級)和門電路級的描述,其綜合過程較VHDL稍簡單,但其在高級描述方面不如VHD

7、L。有專家認(rèn)為,在新世紀(jì)中,VHDL與Verilog語言將承擔(dān)幾乎全部的數(shù)字系統(tǒng)設(shè)計任務(wù)。 3 軟件開發(fā)工具 目前比較流行的、主流廠家的EDA的軟件工具有:Altera的MAX+plus II、升級版Quartus II;Lattice的ispEXPERT;Xilinx的Foundation Series。 MAX+plus II是Altera公司開發(fā)的EDA工具軟件。Altera公司是世界上最大的可編程邏輯器件供應(yīng)商之一。MAX+plus II軟件是一個集成化的可編程邏輯器件開發(fā)環(huán)境,設(shè)計者能在這個環(huán)境下進行邏輯設(shè)計,完成設(shè)計文件的輸入編輯、編譯、仿真、綜合、布局布線和編程下載等設(shè)計工作。軟

8、件界面友好、方便易學(xué)、功能全面,是非常流行的大眾化EDA平臺。MAX+plus II:支持原理圖、VHDL和Verilog語言文本文件,以及以波形與EDIF等格式的文件作為設(shè)計輸入,并支持這些文件的任意混合設(shè)計。它具有門級仿真器,可以進行功能仿真和時序仿真,能夠產(chǎn)生精確的仿真結(jié)果。在適配之后,MAX+plus II生成供時序仿真用的EDIF、VHDL和Verilog這三種不同格式的網(wǎng)表文件。它界面友好,使用便捷,被譽為業(yè)界最易學(xué)易用的EDA的軟件 ,并支持主流的第三方EDA工具,支持所有Altera公司的FPGA/CPLD大規(guī)模邏輯器件。 4 實驗開發(fā)系統(tǒng) 提供芯片下載電路及EDA實驗/開發(fā)的

9、外圍資源(類似于用于單片機開發(fā)的仿真器),供硬件驗證用。一般包括: 實驗或開發(fā)所需的各類基本信號發(fā)生模塊,包括時鐘、脈沖、高低電平等; FPGA/CPLD輸出信息顯示模塊,包括數(shù)碼顯示、發(fā)光管顯示、聲響指示等; 監(jiān)控程序模塊,提供“電路重構(gòu)軟配置”; 目標(biāo)芯片適配座以及上面的FPGA/CPLD目標(biāo)芯片和編程下載電路。自己閱讀 1.2 EDA軟件系統(tǒng)的構(gòu)成EDA技術(shù)研究的對象是電子設(shè)計的全過程,有系統(tǒng)級、電路級和物理級3個層次的設(shè)計。涉及的電子系統(tǒng)從低頻、高頻到微波,從線性到非線性,從模擬到數(shù)字,從通用集成電路到專用集成電路構(gòu)造的電子系統(tǒng),因此EDA技術(shù)研究的范疇相當(dāng)廣泛。EDA軟件系統(tǒng)應(yīng)當(dāng)包含

10、以下子模塊:設(shè)計輸入子模塊、設(shè)計數(shù)據(jù)庫子模塊、分析驗證子模塊、綜合仿真子模塊、布局布線子模塊等。自己閱讀 (1) 設(shè)計輸入子模塊;用戶編輯輸入模塊的設(shè)計描述,并進行語義正確性、語法規(guī)則的檢查,檢查通過后,將用戶的設(shè)計描述數(shù)據(jù)轉(zhuǎn)換為EDA軟件系統(tǒng)的內(nèi)部數(shù)據(jù)格式,存入設(shè)計數(shù)據(jù)庫被其他子模塊調(diào)用。設(shè)計輸入子模塊不僅能接受圖形描述輸入、硬件描述語言(HDL)描述輸入,還能接受圖文混合描述輸入。該子模塊一般包含針對不同描述方式的編輯器,如圖形編輯器、文本編輯器等,同時包含對應(yīng)的分析器。自己閱讀 (2)設(shè)計數(shù)據(jù)庫子模塊:該模塊存放系統(tǒng)提供的庫單元以及用戶的設(shè)計描述和中間設(shè)計結(jié)果。 (3) 分析驗證子模塊:

11、該模塊包括各個層次的模擬驗證、設(shè)計規(guī)則的檢查、故障診斷等。 (4) 綜合仿真子模塊:該模塊包括各個層次的綜合工具,理想的情況是:從高層次到低層次的綜合仿真全部由EDA工具自動實現(xiàn)。 (5) 布局布線子模塊:該模塊實現(xiàn)由邏輯設(shè)計到物理實現(xiàn)的映射,因此與物理實現(xiàn)的方式密切相關(guān)。例如,最終的物理實現(xiàn)可以是門陣列、可編程邏輯器件等,由于對應(yīng)的器件不同,因此各自的布局布線工具會有很大的差異。 自己閱讀1.3 EDA的工程設(shè)計流程1 源程序的編輯和編譯 利用EDA技術(shù)進行一項工程設(shè)計,首先需利用EDA工具的文本編輯器或圖形編輯器將它用文本方式或圖形方式表達(dá)出來,進行排錯編譯,變成Verilog、VHDL文

12、件格式,為進一步的邏輯綜合作準(zhǔn)備。 常用的源程序輸入方式有三種。 (1) 原理圖輸入方式:利用EDA工具提供的圖形編輯器以原理圖的方式進行輸入。原理圖輸入方式比較容易掌握,直觀且方便,所畫的電路原理圖與傳統(tǒng)的器件連接方式完全一樣,很容易被人接受,而且編輯器中有許多現(xiàn)成的單元器件可以利用,自己也可以根據(jù)需要設(shè)計元件。 (2) 狀態(tài)圖輸入方式:以圖形的方式表示狀態(tài)圖進行輸入。當(dāng)填好時鐘信號名、狀態(tài)轉(zhuǎn)換條件、狀態(tài)機類型等要素后,就可以自動生成VHDL程序。這種設(shè)計方式簡化了狀態(tài)機的設(shè)計,比較流行。 (3) Verilog、VHDL軟件程序的文本方式:最一般化、最具普遍性的輸入方法,任何支持VHDL的

13、EDA工具都支持文本方式的編輯和編譯。 2 邏輯綜合和優(yōu)化 將VHDL的軟件設(shè)計與硬件的可實現(xiàn)性掛鉤,需要利用EDA軟件系統(tǒng)的綜合器進行邏輯綜合。 綜合器的功能就是將設(shè)計者在EDA平臺上完成的針對某個系統(tǒng)項目的HDL、原理圖或狀態(tài)圖形的描述,針對給定硬件結(jié)構(gòu)組件進行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門級電路甚至更底層的電路描述文件。綜合器工作前,必須給定最后實現(xiàn)的硬件結(jié)構(gòu)參數(shù),它的功能就是將軟件描述與給定硬件結(jié)構(gòu)用某種網(wǎng)表文件的方式聯(lián)系起來。綜合器是軟件描述與硬件實現(xiàn)的一座橋梁。綜合過程就是將電路的高級語言描述轉(zhuǎn)換成低級的,可與FPGA/CPLD或構(gòu)成ASIC的門陣列基本結(jié)構(gòu)相映射的網(wǎng)表文件。自

14、己閱讀 1.4數(shù)字系統(tǒng)的設(shè)計方法 數(shù)字系統(tǒng)設(shè)計有多種方法,如模塊設(shè)計法、自頂向下設(shè)計法和自底向上設(shè)計法等。 數(shù)字系統(tǒng)的設(shè)計一般采用自頂向下、由粗到細(xì)、逐步求精的方法。自頂向下是指將數(shù)字系統(tǒng)的整體逐步分解為各個子系統(tǒng)和模塊,若子系統(tǒng)規(guī)模較大,則還需將子系統(tǒng)進一步分解為更小的子系統(tǒng)和模塊,層層分解,直至整個系統(tǒng)中各子系統(tǒng)關(guān)系合理,并便于邏輯電路級的設(shè)計和實現(xiàn)為止。采用該方法設(shè)計時,高層設(shè)計進行功能和接口描述,說明模塊的功能和接口,模塊功能的更詳細(xì)的描述在下一設(shè)計層次說明,最底層的設(shè)計才涉及具體的寄存器和邏輯門電路等實現(xiàn)方式的描述。 采用自頂向下的設(shè)計方法有如下優(yōu)點: (1) 自頂向下設(shè)計方法是一種

15、模塊化設(shè)計方法。對設(shè)計的描述從上到下逐步由粗略到詳細(xì),符合常規(guī)的邏輯思維習(xí)慣。由于高層設(shè)計同器件無關(guān),設(shè)計易于在各種集成電路工藝或可編程器件之間移植。 (2) 適合多個設(shè)計者同時進行設(shè)計。隨著技術(shù)的不斷進步,許多設(shè)計由一個設(shè)計者已無法完成,必須經(jīng)過多個設(shè)計者分工協(xié)作完成一項設(shè)計的情況越來越多。在這種情況下,應(yīng)用自頂向下的設(shè)計方法便于由多個設(shè)計者同時進行設(shè)計,對設(shè)計任務(wù)進行合理分配,用系統(tǒng)工程的方法對設(shè)計進行管理。 針對具體的設(shè)計,實施自頂向下的設(shè)計方法的形式會有所不同,但均需遵循以下兩條原則:逐層分解功能,分層次進行設(shè)計。同時,應(yīng)在各個設(shè)計層次上,考慮相應(yīng)的仿真驗證問題。自己閱讀第2章 Ver

16、ilog HDL語言 2.1 Verilog HDL設(shè)計模塊的基本結(jié)構(gòu)Verilog HDL程序設(shè)計由模塊(module)構(gòu)成的, 設(shè)計模塊的基本結(jié)構(gòu)如圖,一個完整的Verilog HDL設(shè)計模塊包括端口定義、I/O聲明、信號類型聲明和功能描述4個部分。 一、模塊端口的定義模塊端口定義用來聲明電路設(shè)計模塊 的輸入/輸出端口,端口定義格式如下: module 模塊名 (端口1,端口2,端口3,);在端口定義的括號中,是設(shè)計電路模塊與外界聯(lián)系的全部輸入/輸出端口信號或引腳,是設(shè)計實體對外的一個通信界面,是外界可以看到的部分(不包含電源和接地端),多個端口之間用“,”分隔。例如1位全加器adder模

17、塊的端口定義為module adder (sum, cout, ina, inb, cin); 模塊名adder 二、模塊內(nèi)容 模塊內(nèi)容包括I/O聲明、信號類型聲明和功能描述。 (1)模塊的I/O聲明 模塊的I/O聲明用來聲明模塊端口定義中各端口數(shù)據(jù)流動方向,包括輸入(input)、輸出(output)和雙向(inout)。I/O聲明格式如下: input 端口1,端口2,端口3,; /聲明輸入端口 output 端口1,端口2,端口3,;/聲明輸出端口例如,1位全加器的I/O聲明為 input ina, inb, cin; output sum, cout; (2)信號類型聲明信號類型聲明是

18、聲明設(shè)計電路的功能描述中所用的信號的數(shù)據(jù)類型和函數(shù)。信號的數(shù)據(jù)類型主要有連線(wire)、寄存器(reg)、整型(integer)、實型(real)、和時間(time)等。 (3)功能描述 功能描述是Verilog HDL程序設(shè)計中最主要的部分,用來描述設(shè)計模塊的內(nèi)部結(jié)構(gòu)和模塊端口間的邏輯關(guān)系,在電路上相當(dāng)于器件的內(nèi)部電路結(jié)構(gòu)。功能描述可以用assign語句、元件例化(instantiate)方式、always塊語句、initial塊語句等方法來實現(xiàn),通常將設(shè)計模塊描述的方法稱為建模。 用assign語句建模 用assign語句建模的方法很簡單,只需要在“assign”后面再加一個表達(dá)式。As

19、sign語句一般適合對組合邏輯進行賦值,稱為連續(xù)賦值方式。例1 一位全加器的設(shè)計1位全加器的邏輯符號:sum是全加器的和輸出端,cout是進位輸出端,ina和inb是兩個加數(shù)輸入端,cin是低位進位輸入端。全加器的Verilog HDL源程序如下: module adder1 (sum, cout, ina, inb, cin); input ina, inb, cin; output sum, cout; assign cout, sum = ina+inb+cin; endmodule “assign cout, sum = ina+inb+cin;”語句實現(xiàn)1位全加器的進位輸出cout與

20、和輸出sum的建模。在語句表達(dá)式中,用拼接運算符“”將cout、sum這兩個1位操作數(shù)拼接為一個2位操作數(shù)。 用元件例化(instantiate)方式建模元件例化方式建模是利用Verilog HDL提供的元件庫實現(xiàn)的。例如,用與門例化元件定義一個三輸入端與門可以寫為and myand3(y,a,b,c); and是Verilog HDL元件庫中與門元件名,myand3是例化出的三輸入端與門名,y是與門輸出端,a、b、c是輸入端。 用always塊語句建模 always塊語句可以產(chǎn)生各種邏輯,常用于時序邏輯的功能描述。一個程序設(shè)計模塊中,可以包含一個或多個always語句。程序運行中,在某種條件

21、滿足時,就重復(fù)執(zhí)行一遍always結(jié)構(gòu)中的語句。 例2 8位二進制加法計數(shù)器的設(shè)計8位二進制加法計數(shù)器的邏輯符號如圖。OUT是8位二進制計數(shù)器的輸出端(8位向量);COUT是進位輸出端(1位);DATA是并行數(shù)據(jù)輸入端(8位向量);LOAD是計數(shù)器的預(yù)置控制輸入端,當(dāng)LOAD=1時,OUT=DATA;CLK是時鐘控制輸入端,上升沿為有效邊沿;CLR是同步復(fù)位輸入端,當(dāng)CLK的上升沿到來時且CLR=1,則計數(shù)器被復(fù)位,OUT=00000000。(邏輯符號圖是由計算機對計數(shù)器電路的Verilog HDL源代碼編譯后產(chǎn)生的元件符號,圖中的輸入/輸出標(biāo)識符自動被改為大寫,而源程序中的標(biāo)識符都是小寫。)

22、 8位二進制加法計數(shù)器的Verilog HDL 源程序如下: module cnt8 (out, cout,data,load,cin,clk, clr); input 7:0 data; input load, cin, clk, clr output 7:0 out; output cout; reg 7:0 out; always (posedge clk) begin if (load) out=data; else if(clr) out=b00000000; else out=out+1; end assign cout = &out; endmodule用always塊語句實現(xiàn)8

23、位二進制加法計數(shù)器的建模。(posedge clk)是時間控制敏感函數(shù),表示clk上升沿到來的敏感時刻。每當(dāng)clk的上升沿到來時,always塊語句中的全部語句就執(zhí)行一遍?!癮ssign cout = &out;”語句產(chǎn)生進位輸出cout,在語句中“&out”是與的縮減運算式,只有out中數(shù)字全為1時,結(jié)果才為1。 用initial塊語句建模Initial塊語句與always語句類似,不過在程序中它只執(zhí)行1次就結(jié)束了。Initial塊語句的使用格式 : Initial Begin 語句1; 語句2; : end例3 用Initial過程語句對測試變量賦值 initial begin for(a

24、ddr=0; addr 大于= 大于等于 右移4 結(jié)果A=8b00001101而A4 結(jié)果A=8b00010000。條件操作符 ?: 操作數(shù)=條件?表達(dá)式1:表達(dá)式2;當(dāng)條件為真(值為1)時,操作數(shù)=表達(dá)式1;為假(值為0)時,操作數(shù)=表達(dá)式2。 三元操作符,即條件操作符有三個操作數(shù)。例如 a?b:c若條件操作數(shù)a是邏輯1,則算子返回表達(dá)式1操作數(shù)b;若a是邏輯0,則算子返回表達(dá)式2操作數(shù)c。 并接操作符 , 例如 a,2a,b 等價于a,a,b,a,b。 將1位全加器的進位cout和sum并接,表達(dá)式為將兩個或兩個以上用逗號分隔的表達(dá)式按位連接在一起。還可以用常數(shù)來指定重復(fù)的次數(shù)。cout,

25、sum=ina+inb+cin; 同其他高級語言類似,各類操作符號之間有優(yōu)先級之分,如下表:優(yōu)先級序號操作符操作符名稱! 、 邏輯非、按位取反*、/、%乘、除、求余+、-加、減左移、右移、 、=小于、小于等于、大于、大于等于=、!=、=、!=等于、不等于、全等、不全等&、& 縮減與、縮減與非 、縮減異或、縮減同或|、 |縮減或、縮減或非&邏輯與|邏輯或?: 條件操作符列表頂部是最高優(yōu)先級,底部是最低優(yōu)先級。列在同一行中的操作符具有相同的優(yōu)先級。所有操作符(?:除外)在表達(dá)式中都是從左向右結(jié)合的。圓括號()用于改變優(yōu)先級或使得表達(dá)式中運算順序更加清晰,提高源文件的可讀性。 (3)數(shù)值常量 Ver

26、ilog HDL中的數(shù)值常量有整型和實型兩大類,分為十進制、十六進制、八進制或二進制。若在前面加上一個正“+”或負(fù)“”號就表示有符號數(shù),否則所代表的就是無符號數(shù)。在數(shù)值常量的任意位置可以隨意插入下劃線“_”以提高可讀性。常量定義格式為:parameter 常量名1=表達(dá)式,常量名2=表達(dá)式,常量名n=表達(dá)式;parameter是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)識符,表達(dá)式為常量賦值。例如 parameter Vcc=5, fbus=8b11010001;Verilog HDL中的整型數(shù)值常量就是整數(shù),有兩種書寫格式:一種是無位寬的十進制表示法,如-132。第二種是定義位寬和進制的表示法,這

27、種表示方法通常是無符號數(shù)。常數(shù)書寫格式是:sizebase value其中size是位寬,定義了數(shù)值常量的位數(shù)(長度);base 代表這個數(shù)據(jù)的進制,取值范圍和相應(yīng)的進制如下表;value是一個數(shù)值常量的值,書寫格式與進制base相對應(yīng)。例如 4h6a8c,表示一個4位十六進制數(shù)。 2hf5 等于8b11110101; 8b1111xxxx 等價2hfx; 8b1101zzzz 等價2hdz。Verilog HDL中的進制base進制代碼取值對應(yīng)的進制b或B二進制o或O八進制d或D十進制h或H十六進制 Verilog HDL中的實型數(shù)值常量就是浮點數(shù),可以用十進制與科學(xué)計數(shù)法兩種形式書寫。如果

28、采用十進制格式,小數(shù)點兩邊必須都有數(shù)字。 Verilog HDL的編程最終是與硬件相對應(yīng)的。由于硬件電路中信號的邏輯狀態(tài)具有特殊性,即不僅有0(低電平)和1(高電平),還有可能是X(未知狀態(tài))和Z(高阻態(tài)),因此Verilog HDL數(shù)值集合有四個基本值:0:邏輯0或假狀態(tài);1:邏輯1或真狀態(tài);X:邏輯不確定;Z:高阻態(tài)。(4)字符串字符串是雙引號“”括起來的字符序列,必須包含在同 一行中,不能多行書寫。在表達(dá)式或賦值語句中作為操作數(shù)的字符串被看作ASCII值序列,即一個字符串中的每一個字符對應(yīng)一個8位ASCII值。(5)標(biāo)識符標(biāo)識符是模塊、寄存器、端口、連線、示例和begin-end塊等元素

29、的名稱,是賦給對象的唯一的名稱。標(biāo)識符可以是字母、數(shù)字、$符和下劃線“_”字符的任意組合序列。定義標(biāo)識符規(guī)則:首字符不能是數(shù)字,必須以字母或下劃線“_”開頭。字符數(shù)不能多于1024。標(biāo)識符區(qū)分大小寫。不要與關(guān)鍵字同名。例如 ina、inb、adder、adder8、name_adder是正確的,而1a ?b是錯誤的。(6)關(guān)鍵字關(guān)鍵字是Verilog HDL預(yù)先定義的專用詞。在IEEE標(biāo)準(zhǔn)Verilog HDL 1364-1995中規(guī)定了102個關(guān)鍵詞,都采用小寫形式。關(guān)鍵詞有其特定和專有的語法作用,用戶不能再對它們做新的定義。關(guān)鍵字AlwaysandAssignattributeBeginB

30、ufBufif0Bufif1CaseCasexCasezCmosDeassignDefaultdefparamDisableedgeelseendendattributeendcaseendfunctionendmoduleendprimitiveendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0 highzlifinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenmosnornotnotif0 notifloroutputparame

31、terpmosposedgeprimitivepull0pull1pulldownpulluprcmosrealrealtimeregreleaserepeat rtraniflscalaredsignedsmallspecifyspecpramstrengthstrong0strong1supply0supply1tabletasktimetrantranif0tranif1 tritri0tri1triandtriortritegunsignedvectoredwaitwandweak0weak1whilewireworxnorxor (7)變量變量是在程序運行時其值可以改變的量。在Ver

32、ilog HDL中,變量分為網(wǎng)絡(luò)型(nets type)和寄存器型(register type)兩種。 網(wǎng)絡(luò)型變量nets型變量是輸出值始終根據(jù)輸入變化而更新的變量,一般用來定義硬件電路中的各種物理連線。Verilog HDL提供了多種nets型變量。常見的nets型變量及說明類型功能說明wire、 tri連線類型(兩者功能完全相同)wor、 trior具有線或特性的連線(兩者功能一致)wand、 triand具有線與特性的連線(兩者功能一致)tri1、 tri0分別為上拉電阻和下拉電阻supply1、 supply0分別為電源(邏輯1)和地(邏輯0)s1s2s3 寄存器型變量register

33、型變量是用來描述硬件系統(tǒng)的基本數(shù)據(jù)對象。作為一種數(shù)值容器,可以容納當(dāng)前值,也可以保持歷史值。與寄存器的記憶功能相對應(yīng),可以作為模塊各器件間的信息傳遞通道。register型變量與wire型變量的區(qū)別在于register型變量需要被明確的賦值, 并且在重新賦值前一直保持原值。register型變量是在always、initial等過程語句種定義,并通過過程語句賦值。常見的register型變量及說明類型功能說明reg常用的寄存器型變量integer32位帶符號整數(shù)型變量real64位帶符號實數(shù)型變量time無符號時間型變量2.3 Verilog HDL的語句Verilog HDL的語句包括賦值語

34、句、條件語句、循環(huán)語句、結(jié)構(gòu)聲明語句和編譯預(yù)處理語句等類型,每一類語句又包括幾種不同的語句。在這些語句中,有些語句屬于順序執(zhí)行語句,有些語句屬于并行執(zhí)行語句。(1)賦值語句在Verilog HDL中,賦值語句常用于描述硬件設(shè)計電路輸出與輸入之間的信息傳送,改變輸出結(jié)果。Verilog HDL有4種賦值方法:門基元、連續(xù)賦值、過程賦值和非阻塞賦值。門基元賦值語句門基元賦值語句的格式為:基本邏輯門關(guān)鍵字 (門輸出,門輸入1,門輸入2,門輸入n);例如 4輸入與非門的門基元賦值語句為 nand (y,a,b,c,d); /與語句assign y=(a&b&c&d)等效 連續(xù)賦值語句連續(xù)賦值語句的關(guān)鍵

35、字assign,賦值符號是“=”,賦值語句的格式為 assign 賦值變量=表達(dá)式;例如 assign y=(a&b&c&d);連續(xù)賦值語句的“=”兩邊的變量都應(yīng)該是wire型變量。在執(zhí)行中,輸出y的變化跟隨輸入a、b、c、d的變化而變化,反映了信息傳送的連續(xù)性。連續(xù)賦值語句用于邏輯門和組合邏輯電路的描述。例1 四輸入端與非門的Verilog HDL源程序 module example1(y,a,b,c,d); output y; input a,b,c,d; assign #1 y=(a&b&c&d); /#1表示輸出與輸入信號之間具有1個單位的時間延遲 endmodule 過程賦值語句過程

36、賦值語句出現(xiàn)在initial和always塊語句中,賦值符號是“=”,語句格式為: 賦值變量=表達(dá)式;過程賦值語句“=”左邊的賦值變量必須是(寄存器)reg型變量,其值在該語句結(jié)束時即可得到。如果一個塊語句中包含若干條過程賦值語句,按順序一條一條執(zhí)行,前面的語句沒完成,后面的語句就不能執(zhí)行。因此,過程賦值語句也稱為阻塞賦值語句。 非阻塞賦值語句非阻塞賦值語句也是出現(xiàn)在initial和always塊語句中,賦值符號是“=”,語句格式為: 賦值變量=表達(dá)式;非阻塞賦值語句“=”左邊的賦值變量必須是(寄存器)reg型變量,其值在塊語句結(jié)束時才可得到,與過程賦值語句不同。例如 下面的塊語句包含4條賦值

37、語句 always (posedge clock) m=3; n=75; n=m; r=n;語句執(zhí)行結(jié)束后,r的值是75,而不是3,因為第3行是非阻塞賦值語句“n=m”,該語句要等到本塊語句結(jié)束時,n的值才能改變。塊語句的“(posedge clock)”是定時控制敏感函數(shù),表示時鐘信號clock的上升沿到來的敏感時刻。例2 上升沿觸發(fā)的D觸發(fā)器的Verilog HDL源程序 module D_FF(q,d,clock); input d,clock; /屬于wire型變量,由隱含規(guī)則定義。 output q; /屬于reg型變量 reg q; always (posedge clock) q

38、=d; endmodule (2)條件語句條件語句包含if語句和case語句,它們都是順序語句,應(yīng)放在always塊中。 if語句完整的Verilog HDL的if語句結(jié)構(gòu)如下: if(表達(dá)式) begin 語句; end else if(表達(dá)式) begin 語句; end else begin 語句; end在if語句中,“表達(dá)式”是邏輯表達(dá)式或關(guān)系表達(dá)式,也可以是位寬為1位的變量。系統(tǒng)對表達(dá)式的值進行判斷, 若為0,x,z按“假”處理;若為1,按“真”處理,執(zhí)行指定的語句。 例3 8線-3線優(yōu)先編碼器的設(shè)計8線-3線優(yōu)先編碼器的功能表 module code(y,a); input7:0

39、 a; output2:0 y; reg2:0 y; always (a) begin if(a7) y=3b111; else if(a6) y=3b110; else if(a5) y=3b101; else if(a4) y=3b100; else if(a3) y=3b011; else if(a2) y=3b010; else if(a1) y=3b001; else y=3b000; end endmodule輸入輸出in0 in1 in2 in3 in4 in5 in6 in7out2 out1 out0 x x x x x x x 0 x x x x x x 0 1 x x x

40、 x x 0 1 1 x x x x 0 1 1 1 x x x 0 1 1 1 1 x x 0 1 1 1 1 1 x 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 case語句case語句是一種多分支的條件語句,case語句的格式為: case(表達(dá)式) 選擇值1: 語句1; 選擇值2: 語句2; 選擇值n: 語句n; default: n+1 endcase執(zhí)行case語句時,首先計算表達(dá)式的值,然后執(zhí)行條件句中相應(yīng)的“選擇值”的語句。當(dāng)所有的條件句的“選擇值”與表達(dá)式的值不同時

41、,則執(zhí)行“default”后的語句。default可以省略。 case語句多用于數(shù)字系統(tǒng)中的譯碼器、數(shù)據(jù)選擇器、狀態(tài)機及微處理器的指令譯碼器等電路的描述。 例4:用case語句描述4選1數(shù)據(jù)選擇器控制信號s1,s2有4種組合,控制a,b,c,d中的一個數(shù)據(jù)送到輸出端。4選1數(shù)據(jù)選擇器Verilog HDL的描述如下: module mux41(z,a,b,c,d,s1,s2); input s1,s2; input a,b,c,d; output z; reg z; always (s1 or s2) begin case(s1,s2) 2b00: z=a; 2b01: z=b; 2b10:

42、z=c; 2b11: z=d; endcase end endmodulecase語句還有兩種變體形式,casez和casex語句。與case語句的區(qū)別是不考慮語句中的高阻z和未知x的那些位,只關(guān)注其他位的比較結(jié)果。s1 s2z0 00 11 01 1abcd4選1數(shù)據(jù)選擇器功能表 (3)循環(huán)語句循環(huán)語句包含for語句、repeat語句、while語句和forever語句4種。 for語句for語句的格式為: for(循環(huán)指針=初值;循環(huán)指針 終值;循環(huán)指針=循環(huán)指針+步長值) begin 語句; endfor語句可以是一組語句重復(fù)執(zhí)行,語句中的參數(shù)一般屬于整型變量或常量。語句重復(fù)執(zhí)行的次數(shù)由

43、語句中的參數(shù)確定。即 循環(huán)重復(fù)次數(shù)=(終值-初值)/步長值 例5:8位奇偶校驗器的描述用a表示輸入信號,長度為8位的向量。在程序中,用for語句對a的值,逐位進行模2加運算(即異或XOR),循環(huán)指針變量n控制模2加的次數(shù)。 11100110 奇數(shù)個1循環(huán)變量的初值為0,終值為8,因此,控制循環(huán)共執(zhí)行了8次。 例5 用Verilog HDL對8位奇偶校驗器的描述如下: module test8(a,out); input7:0 a; output out; reg out; integer n; always (a) begin out=0; for(n=0;n=b) max=a; else m

44、ax=b; end endfunction函數(shù)調(diào)用的格式如下 函數(shù)名 (關(guān)聯(lián)參數(shù)表);函數(shù)調(diào)用一般是出現(xiàn)在模塊、任務(wù)或函數(shù)語句中。通過函數(shù)的調(diào)用來完成摹寫數(shù)據(jù)的運算或轉(zhuǎn)換。例如,調(diào)用上例中求最大值函數(shù)的語句為 peak=max(data, peak);其中,data和peak是與函數(shù)定義的兩個參數(shù)a、b相關(guān)聯(lián)的關(guān)聯(lián)參數(shù)。通過函數(shù)的調(diào)用,求出data和peak中的最大值,并用函數(shù)名max返回。 函數(shù)和任務(wù)存在以下幾處區(qū)別:(1)任務(wù)可以有任意不同類型輸入/輸出參數(shù),函數(shù)不能將inout類型作為輸出。(2)任務(wù)只可以在過程語句中調(diào)用,不能在連續(xù)賦值語句assign中調(diào)用;函數(shù)可以作為表達(dá)式中的一個

45、操作數(shù),在過程賦值語句和連續(xù)賦值語句中調(diào)用。(3)任務(wù)可以調(diào)用其他任務(wù)或函數(shù);函數(shù)可以調(diào)用其他函數(shù),但不能調(diào)用任務(wù)。(4)任務(wù)不向表達(dá)式返回值,函數(shù)向調(diào)用它的表達(dá)式返回一個值。(5)語句的順序執(zhí)行與并行執(zhí)行Verilog HDL中有順序執(zhí)行語句和并行執(zhí)行語句之分。always塊語句中的語句順序語句,按照程序書寫的順序執(zhí)行。always塊本身確是并行語句,它與其他always語句及assign語句、例化元件語句都是同時(即并行)的。例9 同步清除十進制加法計數(shù)器的描述同步清0是在時鐘信號作用下,計數(shù)器的狀態(tài)被clr清0,清0信號clr高電平有效;時鐘信號clk上升沿觸發(fā)。計數(shù)器計數(shù)狀態(tài)從4b00

46、00到4b1001循環(huán)。module cnt10(clr,clk,cnt,out); input clr,clk; output3:0 out; output cnt; reg cnt; reg3:0 out; always (posedge clk) begin if(clr) begin cnt=0;out=4b0000;end else if (out=4b1001) begin out=4b0000;cnt=1;end else begin cnt=0;out=out+1;end end endmodule 2.4.不同抽象級別的Verilog HDL模型Verilog HDL具有行為

47、描述和結(jié)構(gòu)描述功能。行為描述是對設(shè)計電路的邏輯動能的描述,并不關(guān)心設(shè)計電路使用哪些元件及這些元件之間的連接關(guān)系。行為描述屬于高層次的描述方法,在Verilog HDL中,行為描述包括系統(tǒng)級(System Level)、算法級(Algorithm Level)和寄存器傳輸級(RTL:Register Thansfer Level)等3種抽象級別。結(jié)構(gòu)描述是對設(shè)計電路的結(jié)構(gòu)進行描述,既描述設(shè)計電路使用的元件及這些元件之間的連接關(guān)系。結(jié)構(gòu)描述屬于低層次的描述方法,在Verilog HDL,結(jié)構(gòu)描述包括門級(Gate Level)和開關(guān)級(Switch Level)兩種抽象級別。應(yīng)重點掌握高層次描述方

48、法,結(jié)構(gòu)描述也可以用來實現(xiàn)電路的系統(tǒng)設(shè)計。 (1)Verilog HDL門級描述方式Verilog HDL提供了豐富的門類型關(guān)鍵字,用于門級的描述。常用的: not非門、and與門、nand與非門、or或門、nor或非門、xor異或門、xnor同或門、buf緩沖器、及bufif1、bufif0、 notif1、notif0各種三態(tài)門。門級描述語句格式為 門類型關(guān)鍵字 (端口列表);其中,“例化門的名稱”是用戶定義的標(biāo)識符,屬可選項;端口列表按:(輸出、輸入,使能控制端)的順序列出。例如: nand nand2 (y,a,b); /二輸入端與非門 xor myxor(y,a,b) /異或門 bu

49、fif0 mybuf (y,a,en); /低電平使能的三態(tài)緩沖器例10 采用結(jié)構(gòu)描述方式描述硬件電路module example_4_11(y,a,b,c); input a,b,c; output y; wire s1,s2,s3; not (s1,a); nand (s2,c,s1); nand (s3,a,b); nand (y,s2,s3);endmodule (2)Verilog HDL行為級描述Verilog HDL行為描述方式是通過行為語句來描述電路要實現(xiàn)的功能,表示輸入輸出間轉(zhuǎn)換的行為,不涉及具體結(jié)構(gòu)。行為建模是一種“高級”的描述方式。行為描述既可以描述簡單的邏輯門,又可以描

50、述復(fù)雜的數(shù)字系統(tǒng),乃至微處理器。既可以描述組合邏輯電路,又可以描述時序邏輯電路。例11 2選1數(shù)據(jù)選擇器,用Verilog HDL對它做行為描述。 module mux_2_to_1 (a, b, out,outbar,sel); /這是一個2選1數(shù)據(jù)選擇器,名為mux_2_to_1 input a, b, sel; /定義模塊的輸入端口為a, b和sel output out, outbar; /定義模塊的輸出端口為out和outbar assign out=sel? a:b; /如果sel=1,將a賦值給out /如果sel=0,將b賦值給out assign outbar =out; /

51、將out取反后賦值給outbar endmodule /模塊描述結(jié)束作 業(yè)24小時計時表和計數(shù)譯碼顯示電路的編程,顯示秒、分、小時, MAX+plus II 仿真。 例12 3線-8線譯碼器的Verilog HDL設(shè)計module decode3_8 (a, b, c, y, en); /這是一個3線-8線譯碼器,名為decode3_8input a, b, c, en; /定義模塊的輸入端口output 7:0 y; /定義模塊的輸出端口為outreg7:0 y; always (en or a or b or c) begin if(en) y=8b11111111; else begin

52、 case(c, b, a) 3b000: y=8b11111110; 3b001: y=8b11111101; 3b010: y=8b11111011; 3b011: y=8b11110111; 3b100: y=8b11101111; 3b101: y=8b11011111; 3b110: y=8b10111111; 3b111: y=8b01111111; endcase end endendmodule /模塊描述結(jié)束例13 8D鎖存器的設(shè)計module D_8 (d,q,en); output7:0 q; input en; input7:0 d; reg7:0 q; always

53、(en or d) begin if(en) q=q; else q=d; endendmodule 例14 異步清除十進制加法計數(shù)器的描述異步清除是指復(fù)位信號有效時,計數(shù)器立即被清零,不考慮時鐘。復(fù)位信號clr,高電平有效;時鐘信號clk,上升沿觸發(fā);當(dāng)clr=1,計數(shù)器清0。clr=0時,計數(shù)器正常計數(shù)。module cnt10a (clr, clk, cnt, out); /模塊名稱和端口名 input clr, clk; output3:0 out; output cnt; reg3:0 out; reg cnt; always (posedge clk or posedge clr)

54、 begin if (clr) begin out=4b0000; cnt=0; end else if (out=4b1001) begin out=4b0000; cnt=1; end else begin cnt=0; out=out+1; end end endmodule (3)用結(jié)構(gòu)描述實現(xiàn)電路系統(tǒng)設(shè)計任何用Verilog HDL描述的電路設(shè)計模塊(module),均可用模塊例化語句,例化一個元件,來實現(xiàn)電路系統(tǒng)的設(shè)計。模塊例化語句格式與邏輯門例化語句格式相同,具體格式: 設(shè)計模塊名 (端口列表); 其中,“例化電路名”是用戶為系統(tǒng)設(shè)計定義的標(biāo)識符,相當(dāng)于系統(tǒng)電路板上為插入設(shè)計模塊

55、元件的插座,而端口列表相當(dāng)于插座上引腳名表,應(yīng)與設(shè)計模塊的輸入/輸出端口一一對應(yīng)。用模塊例化方式設(shè)計8位計數(shù)譯碼器電路系統(tǒng)。在8位計數(shù)譯碼系統(tǒng)電路設(shè)計中,需要事先設(shè)計一個4位二進制加法計數(shù)器cnt4e模塊和一個七段數(shù)碼顯示器的譯碼器Dec7s模塊,然后用例化方式將這兩種模塊組成計數(shù)譯碼系統(tǒng)電路。 例15 4位二進制加法計數(shù)器的設(shè)計4位二進制加法計數(shù)器的符號如圖,CLK是時鐘輸入端;CLR復(fù)位控制輸入端,當(dāng)CLR=1時計數(shù)器被復(fù)位,輸出Q3.0=0000;ENA 是使能控制輸入端,當(dāng)ENA=1時,計數(shù)器才能工作;COUT是進位輸出端,當(dāng)輸出Q3.0=1111時,COUT=1。module cnt

56、4e(clk,clr,ena,cout,q); input clk ,clr,ena; output 3:0 q; output cout; reg 3:0 q; always (posedge clr or posedge clk) begin if (clr) q= b0000; else if (ena) q=q+1; end assign cout=&q;endmodule例16 七段數(shù)碼顯示器的譯碼器 Dec7s的元件符號如圖A3.0是4數(shù)據(jù)輸入端,將接至cnt4e的輸出端Q3.0;Q7.0是譯碼器的輸出端,提供七段數(shù)碼顯示數(shù)據(jù)。module Dec7s(a,q); output7:

57、0 q; input3:0 a; reg7:0 q; always (a) begin case(a) 0: q=8b00111111; 1: q=8b00000110; 2: q=8b01011011; 3: q=8b01001111; 4: q=8b01100110; 5: q=8b01101101; 6: q=8b01111101; 7: q=8b00000111; 8: q=8b01111111; 9: q=8b01101111; 10: q=8b01110111; 11: q=8b01111100; 12: q=8b00111001; 13: q=8b01011110; 14: q=

58、8b01111001; 15: q=8b01110001; endcase endendmodule計數(shù)譯碼系統(tǒng)電路的設(shè)計計數(shù)譯碼系統(tǒng)電路是用MAX+plus II的圖形編輯方式設(shè)計出來的。xq1q2 例17 用模塊例化方式將cnt4e和dec7s兩種模塊組成計數(shù)譯碼系統(tǒng)電路cnt_dec7s的源程序: module cnt_Dec_v(clk,clr,ena,cout,q); input clk ,clr,ena; output 15:0 q; output cout; reg 15:0 q; wire 3:0 q1,q2; wire x; cnt4e u1(clk,clr,ena,x,q1

59、); cnt4e u2(clk,clr,x,cout,q2); dec7s u3(q1,q7:0); dec7s u4(q2,q15:8); endmodule 2.5 Verilog HDL設(shè)計電路流程 (1)MAX+plus II軟件的應(yīng)用入門 安裝MAX+plus II軟件: 安裝完成軟件,在運行軟件之前,選擇Optins 菜單的license set up命令,打開窗口如下,將license數(shù)據(jù)文件安裝完畢,即可運行軟件。 編輯文本輸入文件: 選擇菜單File-New,打開窗口如圖,選擇文本編輯器,打開文本編輯窗口。輸入英文程序,注釋可以有中文。保存文件的擴展名(abc.v)。一般來講

60、,最好是保存在英文路徑(Max2work)下,每一個項目建一個工程目錄(文件夾)。 編譯程序: 將文本文件通過“File-Projectset Project to Current File”設(shè)置成為當(dāng)前文件。 再運行“File-ProjectSave & Compile”,即可編譯程序。 建立波形文件: 在MAX+plus II菜單下, 選擇Waveform Editor, 打開波形編輯窗口。 保存與文本文件同名,擴展名為(abc.scf)。 選擇NodeEnter Nodes from SNF, 軟件會將輸入輸出端口列出,點擊list, 選擇需要的輸入輸出端,點擊=,ok, 輸入輸出端就會

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論