邏輯電路及verilog HDL簡介_第1頁
邏輯電路及verilog HDL簡介_第2頁
邏輯電路及verilog HDL簡介_第3頁
邏輯電路及verilog HDL簡介_第4頁
邏輯電路及verilog HDL簡介_第5頁
已閱讀5頁,還剩211頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

天道酬勤第2章

邏輯電路及VerilogHDL簡介目錄2.1基本邏輯門和常用邏輯門

2.2用VerilogHDL實現(xiàn)基本的邏輯操作

2.3原理圖輸入法邏輯電路設計2.4三種風格的VerilogHDL描述

2.5常用的組合電路及其設計

2.6時序電路的設計方法

算術運算和邏輯運算算術運算:當二進制數(shù)表示不同大小的數(shù)值時,數(shù)值與數(shù)值之間可以進行加、減、乘、除等運算,稱算術運算。邏輯運算:當二進制數(shù)表示不同狀態(tài)的代碼時,代碼與代碼之間的運算是一種邏輯因果關系的運算,有與、或、非三種,稱邏輯運算。這兩種運算有本質的不同。算術運算—加法1001+011100010進位1進位1進位1進位12.1

基本邏輯門和常用邏輯門基本邏輯運算有邏輯與、邏輯或和邏輯非。實現(xiàn)這三種邏輯運算的電路,稱作基本邏輯門。

1.邏輯代數(shù)的三種基本運算模型

⑴邏輯與(乘)運算只有決定一件事情的全部條件具備之后,結果才能發(fā)生,這種因果關系為“邏輯與”或“邏輯乘”。邏輯與(乘)運算邏輯與的邏輯關系表達式寫成Y=A·B“·”表示“與運算”或“邏輯乘”,讀作“與”或“乘”,可省略不讀。與邏輯功能可記成:“有0出0,全1出1”與運算規(guī)則:

0·0=0;0·1=0;1·0=0;1·1=1A·0=0;A·1=A;0·A=0;1·A=A邏輯符號

AB00011011Y0001

真值表AB(a)YYAB(b)YAB&(c)(2)邏輯或(加)運算邏輯或的邏輯關系表達式Y=A+B“+”表示“或運算”或“邏輯加”,讀作“或”或“加”?;蜻壿嫻δ?“有1出1,全0出0”。或運算規(guī)則:

0+0=0;0+1=1;1+0=1;1+1=1

A+0=A;A+1=1;A+A=A。AB00011011Y0111真值表邏輯或(加)運算二進制運算和邏輯代數(shù)的區(qū)別:二進制運算中的加法、乘法有進位問題,1+1=10;但邏輯代數(shù)研究的是“0”、“1”兩種邏輯狀態(tài)的邏輯加、邏輯乘、邏輯非,是一種邏輯運算,所以

1+1=1,1+1+···+1=1。邏輯符號

ABY(c)≥1ABY(a)+ABY(b)邏輯運算—或1001+01111111(3)邏輯非運算邏輯非的邏輯表達式寫成

“ˉ”表示“非運算”或“邏輯非”,讀作“非”。非運算的運算規(guī)則:邏輯符號A01Y10真值表AY1(c)AY(a)AY(b)基本邏輯門2.1.2基本邏輯符號2.復合邏輯運算與、或、非為三種基本邏輯運算。實際邏輯問題要比與、或、非復雜得多,但都可以用簡單的與、或、非邏輯組合來實現(xiàn)。從而構成復合邏輯。復合邏輯常見的有與非、或非、異或、同(或)運算等。(1)

與非門

與非運算的邏輯結論:有0出1,全1出0。(2)

或非門

或非運算的邏輯結論:有1出0,全0出1。(3)

異或門

邏輯關系是:相異出1;相同出0

。邏輯結論:A<>B時,Y=1;A=B時,Y=0。(4)

同或門

異或運算和同或運算互為反函數(shù)即A⊙B=A⊕B邏輯關系:相同出1;相異出0

。邏輯結論:

A=B時Y=1;A<>B時Y=0。復合邏輯運算=A⊙B

邏輯符號如下圖,其中第一行為IEEE84國際標準符號;第二行為慣用符號;第三行為IEEE91國際標準符號。公理3:公理4:公理5:3.邏輯代數(shù)的運算規(guī)則 一.基本公理

公理1:

設A為邏輯變量,若A≠0,則A=1;若A≠l,則A=0。

公理2:

0

0=0;1+1=11

1=1;0+0=0。

0

1=0;1+0=1。1

0=0;0+1=1。二.基本定律分別令A=0及A=1代入這些公式,即可證明它們的正確性。(20)6、交換律7、結合律8、分配律A+B=B+AA?B=B?AA+(B+C)=(A+B)+C=(A+C)+BA?(B?C)=(A?B)?CA(B+C)=A?B+A?CA+B?C=(A+B)(A+C)普通代數(shù)不適用!三、德摩根定理(反演律)(21)(DeMorgan)證明:真值表法、窮舉法推廣到多變量:說明:兩個(或兩個以上)變量的與非(或非)運算等于兩個(或兩個以上)變量的非或(非與)運算。用真值表證明摩根定理成立(22)A·B=A+BA+B=A·BAB00011011Y1=A·BY2=A+B11101110相等√邏輯代數(shù)的基本公式=A⊙B=自等律說明公式求反律反演律分配律結合律還原律吸收律交換律重疊律互補律0—1律(24)四種表示方法邏輯函數(shù)式

(邏輯表示式,邏輯代數(shù)式)

邏輯電路圖:卡諾圖n個輸入變量種組合。真值表:將邏輯函數(shù)輸入變量取值的不同組合與所對應的輸出變量值用列表的方式一一對應列出的表格。4.邏輯函數(shù)的表示方法010100110100011110CAB卡諾圖表述方式找出那些使函數(shù)值為1的變量取值組合,變量值為1的寫成原變量,為0的寫成反變量,這樣對應于使函數(shù)值為1的每一個組合就可以寫出一個乘積項,把這些乘積項加起來,可以得到函數(shù)的原函數(shù)的標準與或式。把函數(shù)值為0的對應乘積項相加,則得反函數(shù)。5.邏輯函數(shù)表達式與真值表的相互轉換(1)由真值表求對應的邏輯函數(shù)表達式例:寫出表決邏輯的原函數(shù)和反函數(shù)的標準與或式。解:00010111000001010011100101110111FABC表決邏輯真值表(2)由函數(shù)式寫真值表將輸入變量的各種組合一一代入函數(shù)式中計算輸出變量值,全部完成后得到真值表。01010101C00110011B00001111Y=A+BC+ABCA011···01111例如:Y=A+BC+ABC,求它的真值表。6.邏輯代數(shù)化簡法

同一個邏輯函數(shù)可以有多種表達形式,一種形式的表達式,對應一種電路,盡管它們的形式不同,但實現(xiàn)的邏輯功能相同,所以在實現(xiàn)某種函數(shù)的電路時,重要的是如何處理函數(shù),以盡量少的單元電路、以及電路類型來達到目的?;喌囊饬x:電路簡單使用已有器件化簡的方法:代數(shù)化簡法(公式法)卡諾圖化簡法

一般說來,表達式越簡單,實現(xiàn)起來邏輯電路也越簡單。默認最簡形式為最簡與或式,即用最少的與門和或門來實現(xiàn)函數(shù)。

與或表達式最簡,由它轉換得來的表達式,一般來說也就最簡。最簡與或式:乘積項的項數(shù)最少。每個乘積項中變量個數(shù)最少。將n個輸入變量的全部最小項用小方塊陣列圖表示,并且將邏輯相鄰的最小項放在相鄰的幾何位置上,所得到的陣列圖就是n變量的卡諾圖。

卡諾圖的每一個方塊(最小項)代表一種輸入組合,并且把對應的輸入組合注明在陣列圖的上方和左方。

卡諾圖化簡法一、與或表達式的卡諾圖表示0001111000011110CDAB最小項卡諾圖的畫法①畫正方形或矩形,圖形中分割出2n個小方格,n為變量的個數(shù),每個最小項對應一個小方格。②變量取值按循環(huán)碼排列(GrayCode),其特點是相鄰兩個編碼只有一位狀態(tài)不同。變量卡諾圖形象地表達了變量各個最小項之間在邏輯上的相鄰性。0001111001BCA說明:⑴2個或以上變量,按循環(huán)碼規(guī)則排列;⑵每個小方格對應一個最小項;⑶相鄰方格的最小項,具有邏輯相鄰性,即有一個變量互為反變量;⑷具有邏輯相鄰性的方格有: 相接——幾何相鄰的方格; 相對——上下兩邊、左右兩邊的方格; 相重——多變量卡諾圖,以對稱軸相折疊,重在一齊的方格。邏輯相鄰的最小項可以消去互補變量mo

m1m2m3m6m7

m4

m50100011110CAB三變量卡諾圖邏輯相鄰舉例0001111001BCA相接相對0001111001BCA四變量卡諾圖邏輯相鄰舉例相接相對相對0001111000011110CDAB由真值表填卡諾圖ABC F000 0001 1010 0011 1100 1101 1110 0111 0mo

m1m2m3m6m7

m4

m50100011110CAB

0100011110CAB對應最小項填1其余補0

01

101

1

000001111001BCAmo

m1m3

m2m4

m5m7

m60001111001BCA11110000(37)二、卡諾圖法化簡步驟(一)布陣(畫法規(guī)則)(二)填項(用卡諾圖表示邏輯函數(shù))(三)勾圈化簡(用卡諾圖化簡)三步曲(一)布陣(畫法規(guī)則):1.N=2n

格(n5):最小項2.循環(huán)碼編排循環(huán)鄰接上下封閉布陣(38)ABCD0001111000011110ABDC

m0m1m3m2

m4m5m7m6

m8m9m11m10

m12m13m15m14高位低位(39)(二)填項:用卡諾圖表示邏輯函數(shù)填F=1的項1.最小項直接填入;2.刷項(填公因子所包含的項);3.按(m0,m15)

編號填入。按F=1的與或式填項方法(40)例1:ABCD0001111000011110ABDC1直接填入1公因子:有重復“1”者,只填一個“1”。(41)ABCD0001111000011110ABDC1111公因子:BD有重復“1”者,只填一個“1”。刷項:填公因子包含的項例1:(42)ABCD0001111000011110ABDC111111111111有重復“1”者,只填一個“1”。刷項:填公因子包含的項例1:(43)ABCD0001111000011110ABDC111111111111F=1的項全部填完以后,填項結束;不填者自動為“0”。例1:(44)(三)勾圈化簡:1.盡量勾大,2i個格消i個變量(in);3.每個圈至少有一個獨立格;4.圈必須覆蓋所有的“1”,即不能遺漏取值為“1”的小方塊。勾圈原則得到最簡與或式。2.“1”可以重復利用;(45)ABCD0001111000011110ABDC111111111111D保留公因子:消取值不同的變量:B保留公因子:合理重疊(“1”可以重復使用)。例1:(46)也可以取F=0的項化簡:ABCD00011110000111101111111111110000組合邏輯電路時序邏輯電路功能:輸出只取決于

當前的輸入邏輯電路組成:門電路(不存在記憶元件)功能:輸出取決于當前的輸入原來的狀態(tài)組成:組合電路記憶元件

7.組合邏輯電路的設計

組合邏輯電路的特點2023/2/148

組合邏輯電路的一般設計步驟

1、由邏輯問題抽象出邏輯功能,列出真值表;2、由卡洛圖進行化簡,得到邏輯函數(shù)式;4、對邏輯電路圖進行仿真。

組合邏輯電路手工設計方法

設計要求:按要求得到最簡單的邏輯電路。3、選定器件,畫出邏輯電路圖;2023/2/149例:

數(shù)據(jù)選擇器的設計在數(shù)字信號的傳輸過程中,有時需要從多路輸入數(shù)據(jù)中選出某一路數(shù)據(jù),完成此功能的邏輯器件稱為數(shù)據(jù)選擇器,即所謂多路開關,簡稱MUX(Multiplexer)

。D3D2D1D0F選擇端輸入數(shù)據(jù)輸出數(shù)據(jù)A1A0功能示意圖:數(shù)據(jù)選擇器S2023/2/150一位二選一數(shù)據(jù)選擇器

真值表:選擇端數(shù)據(jù)端輸出端a1a0Y10

0010

1011

0111

110

a0a0選擇a0選擇a1(51)sa1a00100011110001101勾圈化簡:0054本課程要學習的PLD設計EDA工具軟件

QuartusⅡ美國Altera公司自行設計的第四代PLD開發(fā)軟件可以完成PLD的設計輸入、邏輯綜合、布局與布線、仿真、時序分析、器件編程的全過程同時還支持SOPC(可編程片上系統(tǒng))設計開發(fā)2.3原理圖輸入法邏輯電路設計2.3.1QuartusII軟件簡介

QuartusⅡ簡介

QuartusⅡ提供了方便的設計輸入方式、快速的編譯和直接易懂的器件編程。能夠支持邏輯門數(shù)在百萬門以上的邏輯器件的開發(fā),并且為第三方工具提供了無縫接口。QuartusⅡ支持的器件有:StratixⅡ、StratixGX、Stratix、Mercury、MAX3000A、MAX7000B、MAX7000S、MAX7000AE、MAXⅡ、FLEX6000、FLEX10K、FLEX10KA、FLEX10KE、Cyclone、CycloneⅡ、APEXⅡ、APEX20KC、APEX20KE和ACEX1K系列。QuartusⅡ軟件包的編程器是系統(tǒng)的核心,提供功能強大的設計處理,設計者可以添加特定的約束條件來提高芯片的利用率。QuartusⅡ主界面QuartusⅡ主界面的一個實例原理圖輸入法邏輯電路設計設計流程1、建立一個新工程,并指定對象器件。2、設計輸入:

編輯HDL文件

原理圖3、功能模擬:

編譯(分析和綜合)生成網(wǎng)表文件建立波形文件4、物理設計引腳分配

完整編譯后時序模擬5、器件編程:下載

進入原理圖編輯器從元件庫中調(diào)入元件符號繪制原理圖將設計項目設置成可調(diào)用的元件設計頂層文件將設計設置成工程2.3.2電路原理圖編輯輸入進入原理圖編輯器進入原理圖編輯器File->NewBlockDiagram/SchematicFile原理圖編輯器窗口原理圖設計方法

元件輸入對話框

從元件庫中調(diào)入元件符號

電路原理圖編輯輸入電路原理圖編輯輸入(1)新建一個文件夾。

(2)打開原理圖編輯窗。(3)文件存盤。

2.3.3創(chuàng)建工程

(1)打開建立新工程管理窗。新建工程工作目錄的路徑新建的工程名稱工程的頂層設計實體名稱創(chuàng)建工程

(2)將設計文件加入工程中。創(chuàng)建工程

(3)選擇目標芯片。

(4)工具設置。

選擇對象器件EP1C12Q240C8創(chuàng)建工程

(5)結束設置。創(chuàng)建工程

(6)編輯構建電路圖。

2.3.5編譯前設置

選擇FPGA目標芯片。選擇對象器件EP1C12Q240C82.3.6全程編譯processing->startcompilationprocessing->start菜單編譯器窗口編譯結果的報告2.3.7時序仿真測試電路功能

選擇編輯矢量波形文件,打開波形編輯器(1)打開波形編輯器建立波形文件File->New->VectorWaveformFile使用波形編輯器繪制測試向量波形波形編輯器窗口時序仿真測試電路功能

(1)打開波形編輯器。(2)設置仿真時間區(qū)域。

(3)波形文件存盤。Edit->EndTime指定模擬終止時間(4)將工程top的端口信號名選入波形編輯器中(1)選擇Pins:all(2)點擊List(5)編輯輸入波形(輸入激勵信號)(1)按住鼠標左鍵并拖動鼠標,選擇一個時間段(2)在工具條中選擇一個值,給信號賦值(6)仿真器參數(shù)設置(7)啟動仿真器。模擬器窗口Processing->Simulatortool或Processing->StartSimulator(8)觀察分析仿真結果。時延2.4三種風格的VerilogHDL描述

?cVerilogHDLStyles1.Structuralstyle(結構風格)2.Data?owstyle(數(shù)據(jù)流風格)3.Behavioralstyle(功能描述風格)cVerilogHDLSynthesisandSimulationTools

Therearemanytools(freeornot) Iamusing2freetools OnWindows:QuartusIIWebEdition

ACPLD/FPGAdesigntoolbyAltera OnLinux:IcarusVerilog

Supporttransistorleveldesign AlsoforWindowsc2.4.1VerilogHDL基礎知識一.Verilog模塊的結構VerilogHDL以模塊集合的形式來描述數(shù)字系統(tǒng)?!澳K”(module)是Verilog程序的基本設計單元,用于描述某個設計的功能、結構、與其他模塊通信的外部端口。

先通過三個簡單的Verilog程序,直觀地認識Verilog模塊的結構。例1:根據(jù)電路結構建模&&modulemux2x1_gate(a0,a1,s,y);outputy;inputa0,a1,s;noti0(sn,s);andi1(a0_sn,a0,sn);andi2(a1_s,a1,s);ori3(y,a0_sn,a1_s);endmodule//模塊名、端口列表//聲明y為輸出端口//聲明a0,a1,s為輸入端口//調(diào)用內(nèi)置“非”門元件//調(diào)用內(nèi)置“與”門元件//調(diào)用內(nèi)置“與”門元件//調(diào)用內(nèi)置“或”門元件例2:根據(jù)邏輯表達式建模modulemux2x1_dataflow(a0,a1,s,y);outputy;inputa0,a1,s;endmodule

assigny=(~s&a0)|(s&a1);定義同上采用邏輯表達式進行邏輯功能的描述&&例3:根據(jù)電路行為建模modulemux2x1_behavioral_if_else(a0,a1,s,y);

inputa0,a1,s;

outputy;

regy;endmodulealways@(sora0ora1)

if(s)y=a1;

elsey=a0;定義always中的賦值變量

只要信號a0,a1,s中有一個發(fā)生變化,就執(zhí)行下面的語句。在這里已看不出電路的結構,而是一種電路行為的描述。&&Verilog模塊基本結構module模塊名(端口列表);端口定義input輸入端口output輸出端口……數(shù)據(jù)類型說明wireregparameter……邏輯功能定義assignalways語言內(nèi)置門元件調(diào)用…endmodule1.模塊聲明Verilog模塊結構完全包含在module和endmodule關鍵字之間。模塊聲明的格式:module模塊名(端口1,端口2、….);……endmodule2.端口(Port)定義

端口是模塊與外界或其他模塊進行連接和通信的信號線,對模塊的輸入、輸出端口要進行明確的定義,格式如下:input〈[向量位寬]〉

端口名1,端口名2,……端口名n;output〈[向量位寬]〉

端口名1,端口名2,……端口名n;定義輸入定義輸出3.數(shù)據(jù)類型和信號類型的聲明

每個端口除聲明為輸入、輸出,還要聲明其數(shù)據(jù)類型是連線型(wire)還是寄存器型(reg),若沒有聲明,綜合器默認為是wire型。

模塊中用到的節(jié)點信號(連線)也必須進行數(shù)據(jù)類型的定義。用wire將信號定義為連線型;用reg將信號定義為寄存器型;用parameter定義符號常量。特別提示:輸入不能聲明為reg型!4.邏輯功能定義

模塊中最核心的部分是邏輯功能定義。下面介紹幾種基本方法。(1)用“assign”持續(xù)賦值語句進行邏輯功能的定義例如:assignF=~((A&B)|(C&D));“assign”語句一般用于組合邏輯的賦值,稱為持續(xù)賦值方式。是一種基于邏輯表達式的邏輯功能描述方式。在前面的例2中,就是采用這種方式建立電路模型。(2)

調(diào)用內(nèi)置元件(元件例化)描述電路結構調(diào)用VerilogHDL中提供的動態(tài)元件“畫”電路圖。例如:andmyand3(out,a,b,c);調(diào)用門元件,構造一個名為myand3的三輸入與門。andc1(F,in1,in2);調(diào)用門元件,構造一個名為c1的二輸入與門。

前面例1中,通過調(diào)用門元件,進行信號的相互連接,構造電路的模型。(3)

用“always”過程塊描述電路的邏輯功能moduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputa,b,sel;wireout,a,b,sel;wiresel_,a1,b1;

regout;

always@(seloraorb)if(!sel)out=a;elseout=b;endmodule注釋行定義always中的賦值變量a,b,sel是輸入端口,out是輸出端口。所有信號通過這些端口從模塊輸入/輸出。另一個模塊可以通過模塊名及端口說明使用多路器。實例化多路器時不需要知道其實現(xiàn)細節(jié)。這正是自上而下設計方法的一個重要特點。模塊的實現(xiàn)可以是行為級也可以是門級,但并不影響高層次模塊對它的使用。多路器由關鍵詞module和endmodule開始及結束。小結●VerilogHDL程序是由模塊構成的●模塊是可以進行層次嵌套的●上層模塊可以通過模塊調(diào)用構成更大的邏輯系統(tǒng)●Verilog模塊分為邏輯綜合模塊和邏輯模擬模塊●每個模塊由模塊聲明、端口定義、數(shù)據(jù)類型說明、邏輯功能定義四部分構成●VerilogHDL程序的書寫格式自由,一行可寫多個語句,一個語句也可分寫多行?!癯齟ndmodule外,每個語句和數(shù)據(jù)定義的最后必須有分號●可用/*…*/和//…進行多行、單行注釋(綠色),增強程序的可讀性二.VerilogHDL中的數(shù)字(數(shù)值)常量VerilogHDL有下列四種基本的邏輯狀態(tài):0:低電平、邏輯0或“假”1:高電平、邏輯1或“真”x或X:不確定或未知的邏輯狀態(tài)z或Z:高阻狀態(tài)VerilogHDL中的常量是有這四類基本值組成的。

±<size>′<base_format><number>位寬:對應二進制數(shù)的寬度,省缺為32位。當指定進制格式時,不能省略數(shù)值采用的進制格式b或B:二進制d或D或缺?。菏M制h或H:十六進制o或O:八進制基于進制的數(shù)字序列VerilogHDL可綜合模塊中常用的整數(shù)型常量的書寫格式:正、負號例:

659//簡單的十進制表示′h837FF/*省缺位寬的十六進制數(shù),位寬大于實際位數(shù),數(shù)值高位是

0或1,高位補0;數(shù)值高位是x或z,高位補x或z。*/′o7460//省缺位寬的八進制數(shù)4AF//非法的整數(shù)表示,十六進制需要′hb001//非法的整數(shù)表示,不能省略′4′b0010//四位的二進制數(shù)5′D3//五位的十進制數(shù)8′b0100_1010//使用下劃線增加可讀性

±<size>′<base_format><number>三.VerilogHDL中的標識符由字母、數(shù)字以及符號“$”、“_”(下劃線)組成?!駱俗R符必須以字母或下劃線開頭●標識符是區(qū)分大小寫的合法標識符舉例:countCOUNT_A1_d2不正確的標識符:30countOut*$123標識符常用于“模塊名”或“變量名”四.VerilogHDL中的關鍵字

關鍵字也稱為保留字,是VerilogHDL語言內(nèi)部的專用詞,用于組織語言結構,全部采用小寫形式(藍色)。例如:module、endmodule、begin、end、always、and、or、if、else、wire、reg、input、output、……

請同學們在后續(xù)課程學習時,關注、總結VerilogHDL中的關鍵字,從現(xiàn)在開始熟悉掌握。請注意:ALWAYS是標識符(黑色),與關鍵字always是不同的。五.VerilogHDL中的數(shù)據(jù)(變量)類型

在硬件描述語言中,數(shù)據(jù)類型用來表示邏輯電路中的物理連線、數(shù)據(jù)存儲和傳送單元。VerilogHDL中共有19種數(shù)據(jù)類型,分為連線型(NetType)和寄存器型(RegisterType)。在可綜合模塊中,最常用的是這兩類中的wire型、reg型、integer型和parameter型。1.連線型(NetType)變量

連線型變量一般用來描述硬件電路中的各種物理連線。其特點是輸出始終跟隨輸入的變化而變化。對連線型變量有兩種驅動方式,一種是在結構描述中將其連接到一個邏輯門或模塊的輸出端;另一種是用assign語句進行賦值。類型功能說明wire,tri常用連線類型wor,trior具有線或特性的連線wand,triand具有線與特性的連線tri1,tri0上拉電阻,下拉電阻supply1,supply0電源(邏輯1),地(邏輯0)VerilogHDL提供了多種連線型變量重點介紹在可綜合模塊中最常用的是wire型變量wire型變量常用來表示通過assign語句賦值的組合邏輯信號。Verilog模塊中的輸入、輸出端口的信號類型說明省缺時,自動定義為wire型。wire型變量可用于任何表達式的輸入assign語句的輸出實例元件的輸出對綜合器而言,其取值0,1,x,z其他模塊的輸出wire型變量的定義格式

wire〈[向量位寬]〉數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名n;關鍵字n-1:0或n:1時,定義多位wire型向量;省略時,定義一位的wire型變量。例如,wire型變量或向量的定義:

wirea,b;//定義兩個1位wire型變量a,bwire[7:0]databus;//定義一個8位寬的向量(數(shù)據(jù)總線)

wire[20:1]addrbus;//定義20位寬的地址總線例如,wire型向量的全域使用……wire[7:0]in,out;//定義兩個8位wire型向量in,outassignout=in;//按位對應賦值……例如,對wire型向量可選域使用……wire[7:0]out;wire[3:0]in;assignout[5:2]=in;//in的0-3位賦值給out的2-5位……等效于:assignout[5]=in[3];assignout[4]=in[2];assignout[3]=in[1];assignout[2]=in[0];2.寄存器型(RegisterType)變量

寄存器型變量對應的是具有狀態(tài)保持作用的電路元件。例如:觸發(fā)器,寄存器。

寄存器型變量的特點是必須進行明確的賦值,并且在被重新賦值前一直保持原值。register型變量與net型變量的根本區(qū)別在于:register型變量能夠保持最后一次的賦值;net型變量需要有持續(xù)的驅動。

在設計中必須將寄存器型變量放在過程塊語句(initial,always)中,通過過程賦值語句賦值。即:initial,always過程塊內(nèi)被賦值的每一個信號,都必須定義為register型變量。VerilogHDL中也提供了多種寄存器型變量,在可綜合模塊中常用的是integer型和reg型。

integer寄存器型變量是一種純數(shù)學的抽象描述,它雖然能定義帶符號的32位整型寄存器變量,但不對應任何具體的硬件電路。

reg<[向量位寬]>數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名n;reg型變量的定義格式:關鍵字n-1:0或n:1時,定義多位reg型向量;省略時,定義一位的reg型變量。例如,reg型變量、向量的定義

rega,b;//定義兩個寄存器型變量a,b。位寬為1。

reg[7:0]data;//定義位寬為8的寄存器型變量data。

reg[8:1]data;//等效。例如:……reg[7:0]a,b;reg[3:0]c;regd;……d=a[7]&b[7];//位選擇c=a[7:4]+b[3:0];//域選擇……

在表達式中,可任意使用reg型變量中的一位或相鄰幾位,分別稱為位選擇和域選擇。例:parametersel=8,code=8′ha3;//定義sel為常數(shù)8(十進制),code為常數(shù)a3(十六進制)parameterdata=8,addr=data*2;//data為8,addr為16,用常數(shù)表達式賦值。3.parameter型數(shù)據(jù)

在VerilogHDL中,用parameter定義符號常量,即定義一個標識符代表一個常量。定義格式如下:

parameter參數(shù)名1=表達式1,參數(shù)名2=表達式2,……;六.VerilogHDL中的運算符按功能分成九大類:關系運算符算術運算符邏輯運算符等式運算符縮減運算符條件運算符拼接運算符移位運算符位運算符按運算符所帶的操作數(shù)區(qū)分:單目運算符(unaryoperator),帶一個操作數(shù)。雙目運算符(binaryoperator),帶兩個操作數(shù)。三目運算符(ternaryoperator),帶三個操作數(shù)。算術運算符+加-減*乘/除%模運算符(對兩個整型數(shù)據(jù)進行求余運算)均為雙目運算符。在進行整數(shù)除法運算時,結果略去小數(shù)。取模運算時,結果符號與第一操作數(shù)相同。當兩操作數(shù)中有一個為x,則結果就為x。10%3,結果為1;12%4,結果為0;-10%3,結果為-1;11%-3,結果為2邏輯運算符&&邏輯與,雙目運算‖邏輯或,雙目運算!邏輯非,單目運算當進行邏輯運算時:●若操作數(shù)是一位的,則邏輯運算真值表如下:aba&&ba||b!a!b00001010100010111100●當操作數(shù)由多位組成,則將操作數(shù)作為一個整體處理,即如操作數(shù)所有位都是“0”,則整體作為邏輯“0”;只要其中有一位是“1”,則整體作為邏輯“1”?!袢舨僮鲾?shù)中有x,則結果也可能是x。例如:設a=2b=0c=4′hxa&&b邏輯與,1&&0,結果為0a‖b邏輯或,1‖0,結果為1!a邏輯非,!1,結果為0a&&c邏輯與,1&&x,結果為xa‖c邏輯或,1‖x,結果為1!c邏輯非,!X,結果為x位運算符~按位非(按位取反),單目運算。&按位與︱按位或^按位異或^~,~^按位異或非(按位同或)●將操作數(shù)按位對應,進行邏輯運算?!駜蓚€不同長度的數(shù)據(jù)進行位運算時,按右對齊,位數(shù)少的在高位補“0”?!褡⒁鈞對運算結果的影響位運算符應用舉例:若A=5′B11001,B=5′b101x1,則

~A=5′b00110A&B=5′b10001A︱B=5′b111x1A^B=5′b011x0關系運算符<小于<=小于或等于>大于>=大于或等于

比較兩個操作數(shù)的大小關系,如果比較關系成立,則返回邏輯“1”;否則,返回邏輯“0”。如果兩個操作數(shù)中有一個為x,則返回值是x。例:A=2,B=5,D=4′hx則:A<B返回邏輯“1”A>B返回邏輯“0”B<=D返回值是x等式運算符==等于!=不等于===全等!==不全等

雙目運算,運算的結果是1位的邏輯值。兩個操作數(shù)逐位相等,返回邏輯1;否則,返回邏輯0。若任何一個操作數(shù)中某位是x或z,則返回x。對操作數(shù)中的x和z也進行比較,逐位一致,返回邏輯1;否則,返回邏輯0。例:a=5′b11x01,c=5′b11x01,則

a==c得到的結果是xa===c得到的結果是1歸約運算符又稱為“縮減運算符”,是單目運算符。&歸約與~&歸約與非︱歸約或~︱歸約或非^歸約異或~^,^~歸約異或非(歸約同或)對單個操作數(shù)進行歸約的遞推運算,運算結果是1位二進制數(shù)。過程:先將操作數(shù)的第1位與第2位進行歸約運算,運算結果再與第3位進行歸約運算,依此類推,直到最后一位?!璻eg[3:0]a;b=&a;//等效于b=((a[0]&a[1])&a[2])&a[3])…歸約運算符舉例若A=5′b11001則

&A歸約運算結果是0,只有各位均為1,結果才為1。

︱A歸約運算結果是1,只有各位均為0,結果才為0^A歸約運算結果是1,奇數(shù)個1,結果為1。移位運算符>>邏輯右移<<邏輯左移

雙目運算,將運算符左邊的操作數(shù)左移或右移運算符右邊的操作數(shù)指定的位數(shù),空位補0。即:A>>n或A<<n。例如:A=6′b110010則A>>2的結果是6′b001100A<<2的結果是6′b001000條件運算符

?:三目運算符應用方式

signal=condition

?

true-expression:false-expression;信號=條件?表達式1:

表達式2;當條件成立時,信號取表達式1的值,反之取表達式2的值。條件運算符舉例

moduleadd_subtract(a,b,op,result);parameterADD=1′b0;//定義字符常量

input [3:0]a,b;//定義a,b為4位輸入向量

input op;//定義op為1位輸入變量

output[3:0]result;//定義result為4位輸出向量

assignresult=(op==ADD)?a+b:a-b;endmodule當op為0,做a+b當op為1,做a-b拼接運算符{}

將兩個或多個信號的某些位拼接起來。用法如下:{信號1的某幾位,信號2的某幾位,……信號n的某幾位}示例:a=1′b1b=2′b00c=6′b101001則:{a,b}產(chǎn)生一個3位數(shù)3′b100{c[5:3],a}產(chǎn)生一個4位數(shù)4′b1011嵌套使用,進行常量或變量的復制以及簡化書寫。例如:{3{a,b}}等同于{{a,b},{a,b},{a,b}}

也等同于{a,b,a,b,a,b}七.運算符的優(yōu)先級運算符優(yōu)先級!~高低*/%+–<<>><<=>>===!====!==&~&^^~|~|&&||?:

不同的綜合開發(fā)工具在執(zhí)行這些優(yōu)先級時會有微小的差異,建議養(yǎng)成用括號控制優(yōu)先級的習慣。2.4.2

VerilogHDL的功能描述模塊一.功能描述

邏輯電路的結構描述側重于表示一個電路由哪些基本元件組成,以及這些基本元件的相互連接關系。

邏輯電路的數(shù)據(jù)流描述側重于邏輯表達式以及VerilogHDL中運算符的靈活運用。

功能描述關注邏輯電路輸入、輸出的因果關系(行為特性),即在何種輸入條件下,產(chǎn)生何種輸出(操作),并不關心電路的內(nèi)部結構。EDA的綜合工具能自動將功能描述轉換成電路結構,形成網(wǎng)表文件。

顯然,當電路的規(guī)模較大或時序關系較復雜時,通常采用功能描述方式進行設計。二.VerilogHDL功能描述風格模塊的設計模型Verilog功能描述風格基本結構module模塊名(端口列表);端口定義input輸入端口output輸出端口數(shù)據(jù)類型說明

regparameter邏輯功能定義always@(敏感事件列表)begin阻塞、非阻塞、if-else、case、for等行為語句endendmodule三.功能描述中的always進程應用模板always@(<敏感信號表達式>)begin//過程賦值語句

//if-else,case,casex,casez選擇語句

//for循環(huán)語句

end

一般情況下,always進程帶有觸發(fā)條件,這些觸發(fā)條件列在敏感信號表達式中,只有當觸發(fā)條件滿足時,begin-end塊語句才被執(zhí)行。

在一個VerilogHDL模塊中可以有多個always進程,它們是并發(fā)執(zhí)行的。

敏感信號表達式

又稱敏感事件列表。當該表達式中任意一個信號(變量)的值改變時,就會引發(fā)塊內(nèi)語句的執(zhí)行。因此,應將所有影響塊內(nèi)取值的信號(變量)列入。多個敏感信號用“or”或“,”連接。2001年以后的版本只要寫一個“*”就行了。例如:@(a)//當信號a的值發(fā)生改變時@(a,b)//當信號a或信號b的值發(fā)生改變時@(*)//當所有輸入信號中至少有一個的值發(fā)生改變時

這里a和b稱為電平敏感型信號,代表的觸發(fā)事件是:信號除了保持穩(wěn)定狀態(tài)以外的任意一種變化過程。

這種電平敏感型信號列表常用在組合邏輯的描述中,以體現(xiàn)輸入隨時影響輸出的組合邏輯特性。

再例如:@(posedgeclock)//當clock的上升沿到來時@(negedgeclock)//當clock的下降沿到來時@(posedgeclockornegedgereset)//當clock的上升沿到來或當reset的下降沿到來時

這里的clock和reset信號稱為邊沿敏感型信號,posedge描述對信號的上升沿敏感;negedge描述對信號的下降沿敏感。顯然,這種邊沿敏感型信號列表適合描述同步時序電路,以體現(xiàn)同步時序電路的特點——在統(tǒng)一時鐘作用下改變電路的狀態(tài)。

posedge——代表的觸發(fā)事件是,信號發(fā)生了正跳變。

0→x,0→z,0→1,x→1,z→1negedge——代表的觸發(fā)事件是,信號發(fā)生了負跳變。

1→x,1→z,1→0,x→0,z→0

在每一個always過程語句中,最好只使用一種類型的敏感信號列表,不要混合使用。以避免使用不同的綜合工具時發(fā)生錯誤。四.串行塊

由關鍵字begin-end界定的一組語句。串行塊的特點:●一般情況下,塊內(nèi)語句順序執(zhí)行,前面一條語句執(zhí)行畢后,才開始執(zhí)行下一條語句?!衲K運行時,遇到串行塊,塊內(nèi)第一條語句即開始執(zhí)行,最后一條執(zhí)行完畢,串行塊結束。●整個串行塊執(zhí)行時間等于塊內(nèi)各條語句執(zhí)行時間的總和。begin

語句1

語句2……endmoduleff_1(A,B,C,D,F);inputA,B,C,D;outputF;wirew1,w2;

assignw1=A&B;assignw2=~(C&D);assignF=w1|w2;endmodulemoduleff_1(A,B,C,D,F);inputA,B,C,D;outputF;regF,w1,w2;always@(AorBorCorD)

begin

w1=A&B;w2=~(C&D);F=w1|w2;endendmodule功能描述串行塊只應用在always進程中:多條語句;順序執(zhí)行。

過程賦值語句必須放在always進程中,分為阻塞型和非阻塞型,其基本格式為:

〈被賦值變量〉〈賦值操作符〉〈賦值表達式〉●reg或integer類型變量;●寄存器向量的某一位或某幾位;●用拼接符{}拼接起來的寄存器。=阻塞賦值操作符<=非阻塞賦值操作符任意合法表達式五.過程賦值語句//過程賦值語句的目標變量形式……rega;reg[7:0]b;integeri;always@(敏感事件列表)begin

a=0;i=356;b[2]=1′b1;b[3:0]=4′b1111;{a,b}=9′b101110110;end……過程賦值語句阻塞型過程賦值非阻塞型過程賦值操作符“=”在前面討論中,用到的賦值語句都是阻塞型過程賦值語句●串行塊(begin-end)內(nèi)各條阻塞型過程賦值語句按順序依次執(zhí)行。下一條語句的執(zhí)行被阻塞,等本條語句的賦值操作完成后,才開始執(zhí)行?!褡枞瓦^程賦值語句的執(zhí)行過程:先計算“賦值表達式”的值,然后立即賦值給“=”左邊的“被賦值變量”。過程賦值語句非阻塞型過程賦值阻塞型過程賦值操作符“<=”特點:●在begin-eng串行塊語句中,各條非阻塞過程賦值語句對應的“賦值表達式”同時開始計算。●在過程塊結束時,才將結果賦值給各個“被賦值變量”?!窨衫斫鉃橄韧瑫r采樣,最后一起賦值?!璪eginA<=B;//S1B<=A;//S2end……這里,S1、S2語句均為非阻塞賦值,立即開始計算B和A值(上次的值)。在過程塊結束時,進行賦值操作,將計算得到的B,A的值賦給變量A,B。(實現(xiàn)A,B交換)

如果不能很好地理解阻塞賦值與非阻塞賦值的區(qū)別,往往給設計帶來麻煩,特別是在可綜合邏輯模塊中,不易把握reg型變量的賦值過程。建議同學在編寫模塊時,只采用一種過程賦值方式,并且最好不要將輸出再次作為輸入使用。

為了更好地理解阻塞賦值與非阻塞賦值的區(qū)別,我們觀察下面的示例。//例1:非阻塞賦值modulen_block(c,b,a,clk);outputc,b;inputclk,a;regb,c;always@(posedgeclk)beginb<=a;c<=b;endendmodule//例2:阻塞賦值moduleblock(c,b,a,clk);outputc,b;inputclk,a;regb,c;always@(posedgeclk)beginb=a;c=b;endendmodule結果:b更新為a的值,c為上個時鐘周期b的值。結果:b、c都更新為a的值。這兩個程序進行邏輯綜合后的結果如下:>DQ>DQclkabc>DQclkacb例1非阻塞賦值綜合結果例2阻塞賦值綜合結果高級程序語句if-else條件分支語句case分支控制語句(1)if-else條件分支語句格式1if(<條件表達式>)語句或語句塊;格式2if(<條件表達式>)語句或語句塊1;

else語句或語句塊2;格式3if(<條件表達式1>)語句或語句塊1;

elseif(<條件表達式2>)語句或語句塊2;

……elseif(<條件表達式n>)語句或語句塊n;

else語句或語句塊n+1;兩路分支選擇控制多路分支選擇控制六.條件語句

三種格式中的<條件表達式>,一般為邏輯表達式或關系表達式,也可以是一位的變量。系統(tǒng)對<條件表達式>的值進行判斷,若為0、x、z,按“假”處理;若為1,按“真”處理,執(zhí)行指定語句。語句可以是單句,也可以是多句,多句時用begin-end括起來。

為了清晰表達if和else的匹配關系,建議最好用begin-end將“指定語句”括起來。//if-else條件分支語句應用舉例

modulesel-from-three(q,sela,selb,a,b,c);inputsela,selb,a,b,c;outputq;regq;always@(selaorselboraorborc)beginif(sela)q=a;elseif(selb)q=b;elseq=c;endendmoduleselaselb語句

00q=c01q=b10q=a11q=a注意隱含的優(yōu)先級關系。排在前面的分支項指定的操作具有較高優(yōu)先級。例:11時,執(zhí)行q=a,不是q=b。(2)case分支控制語句

相對if-else語句只有兩個分支而言,case語句是一種多分支語句。所以,常用來描述譯碼器、多路數(shù)據(jù)選擇器、微處理器的指令譯碼和有限狀態(tài)機。case分支控制語句有三種形式:casecasexcasez全等比較分支控制局部比較分支控制“全等比較分支控制”case語句的格式:

case(<控制表達式>)<分支項表達式1>:語句塊1;

<分支項表達式2>:語句塊2;

……<分支項表達式n>:語句塊n;

default:語句塊n+1;endcase對程序流向進行控制的信號(變量)控制信號(變量)的具體狀態(tài)組合取值受控的分支操作,可單句,也可多句。未列入分支控制的狀態(tài)組合下應進行的操作未列入分支控制的狀態(tài)組合的統(tǒng)稱。

(其余狀態(tài)時)與真值表存在某種對應關系

按位全等比較case語句示例……case(op_code)2′b00:out=a︱b;2′b01:out=a&b;2′b10:out=~(a&b);2′b11:out=a^b;default:out=0;endcase……case語句在執(zhí)行時,控制表達式和分支項表達式之間進行的是按位全等比較,只有對應每一位都相等,才認為控制表達式和分支項表達式是相等的。顯然,這種比較包含了信號的0、1、x、z四種狀態(tài)。

根據(jù)按位全等比較的特點,要求case語句中的控制表達式和分支項表達式必須具有相同的位寬。當各個分支項表達式以常數(shù)形式給出時,必須明確標明位寬,否則編譯器默認為與機器字長相同的位寬(例如32位)。能不能忽略信號的x和z邏輯狀態(tài)的比較?這就引出了“局部比較”分支控制的casex和casez語句。利用控制表達式和分支項表達式中某些位的比較結果控制程序流向。

casez語句——忽略處于“z”邏輯狀態(tài)位的比較。casex語句——忽略處于“x”或“z”邏輯狀態(tài)位的比較。

casex語句示例

……reg[7:0]out;always@(aorboropcode)begincasex(opcode)

溫馨提示

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

評論

0/150

提交評論