數字電路與邏輯設計 課件 3-邏輯電路結構與硬件描述_第1頁
數字電路與邏輯設計 課件 3-邏輯電路結構與硬件描述_第2頁
數字電路與邏輯設計 課件 3-邏輯電路結構與硬件描述_第3頁
數字電路與邏輯設計 課件 3-邏輯電路結構與硬件描述_第4頁
數字電路與邏輯設計 課件 3-邏輯電路結構與硬件描述_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

邏輯電路結構與硬件描述片上微控制系統(tǒng)原理與項目設計第三講上節(jié)復習課程講授思路布爾邏輯量布爾邏輯運算布爾邏輯函數數字邏輯電路邏輯門邏輯電路邏輯符號真值表波形圖電路功能信號代數式數學HDL硬件結構邏輯電路結構因果系統(tǒng)只有輸入發(fā)生變化輸出才可能變化兩種類型組合邏輯電路(組合電路)一個電路的輸入相同時輸出也相同任何一時刻的穩(wěn)態(tài)輸出僅僅取決于該時刻的輸入,而與電路原來的狀態(tài)無關時序邏輯電路(時序電路)相同輸入在不同時刻的輸出不同表明邏輯運算與時間有關任一時刻的輸出不僅與該時刻輸入變量有關,而且還與過去時刻電路內部電平有關具有記憶功能輸入沒變化,輸出不可發(fā)生變化組合電路任何一時刻的穩(wěn)態(tài)輸出僅僅取決于該時刻的輸入與電路原來的狀態(tài)無關無記憶功能數學描述X=(x1,…,xn)表示輸入邏輯量Z=(z1,…,zm)表示輸出邏輯量Z=F(X)表示邏輯函數F=(f1,...,fm)fi是zi與X之間的邏輯函數

組合電路示例輸入為A、B、C,輸出是F1、F2,試判定它們是否為組合電路輸出組合電路示例通過比較相同的A、B、C組合其輸出是否相同來判定是否為組合邏輯輸出波形真值表A00001111000011110B00110011001100110C01010101010101010F111101100111011001F211100000110000111組合電路示例

輸入輸出ABCF1F2000110011101011/001100100101011011000/111100/1時序電路任一時刻的輸出不僅與該時刻輸入變量有關,而且還與過去時刻電路內部電平有關具有記憶功能觸發(fā)器具有記憶功能的基本電路狀態(tài)輸出就是所要記憶的數狀態(tài)轉移當某輸入信號發(fā)生某種特定變化時,觸發(fā)器可以從一個穩(wěn)定狀態(tài)轉換到另一個穩(wěn)定態(tài)觸發(fā)條件觸發(fā)狀態(tài)改變的條件產生狀態(tài)轉移的輸入信號的特征高電平(值為1)、低電平(值為0)、上升沿(從低電平變?yōu)楦唠娖降乃查g,值用

表示)、下降沿(從高電平變?yōu)榈碗娖降乃查g,值用

表示)只有觸發(fā)條件滿足,狀態(tài)才可能發(fā)生變化,否則狀態(tài)不變,即保持操作。時序電路狀態(tài)當前狀態(tài)(現態(tài))Q觸發(fā)時的狀態(tài)觸發(fā)后的狀態(tài)(次態(tài))Qn+1電路框圖存儲電路采用觸發(fā)器構成存儲電路來保存當前內部信號供將來使用組合電路將當前輸入和當前保存的過去產生的內部信號組合產生當前輸出和當前內部信號時序電路信號輸入X=(x1,x2,…,xn)狀態(tài)Q=(q1,q2,…,qj)存儲電路的狀態(tài)輸出組合電路的內部輸入輸出Z=(z1,z2,…,zm)激勵Y=(y1,y2,…,yk)存儲電路的激勵信號組合電路的內部輸出電路狀態(tài)轉移函數Qn+1=H(X,Q)輸出函數Z=F(X,Q)激勵函數Y=G(X,Q)時序電路確定輸入輸出及觸發(fā)條件B變化時A不一定變化A變化時B一定變化A在B下降沿變化A輸出,B輸入B下降沿觸發(fā)時序電路確定輸入輸出及觸發(fā)條件B、C不變時A變化A、C不變時B變化A不是輸出C在A或B上升沿變化A、B輸入,C輸出A和B上升沿觸發(fā)B不是輸出C變化時A或B必變化課程講授思路布爾邏輯量布爾邏輯運算布爾邏輯函數數字邏輯電路邏輯門邏輯電路邏輯符號真值表波形圖電路功能信號代數式數學HDL硬件結構硬件描述語言邏輯符號基本器件邏輯運算觸發(fā)器專用集成電路功能電路通過連接線將所用的邏輯符號連接在一起構成電路硬件描述語言采用專用語句以文本描述的方式構建功能電路減少對邏輯化簡的過度依賴直觀地利用規(guī)定的運算符來實現功能有利于大規(guī)模電路的實現邏輯符號方式直觀看出邏輯關系、容易定義連接信號復雜的邏輯電路需要太多的符號及連接線描述麻煩硬件描述語言減少復雜邏輯的符號描述,便于維護設計者不易形成整體框架,不直觀邏輯符號與硬件描述語言同時使用兩者本質是一致的邏輯符號描述應用在模塊級,用來描述整個電路的構架硬件描述語言側重于功能級描述及系統(tǒng)的實現做到“電路在心中,程序在手中”避免設計過度軟件化而導致電路連接關系較亂。硬件描述語言邏輯符號硬件描述語言電路描述基本單元:邏輯運算、觸發(fā)器、專用集成電路功能電路:通過連接線將所用的邏輯符號連接在一起構成電路采用專用語句以文本描述優(yōu)點可以直觀看出邏輯關系,并非常容易定義連接信號可以減少對邏輯化簡的過度依賴;可以直觀地利用規(guī)定的運算符來實現功能,有利于大規(guī)模電路的實現;可以減少復雜邏輯的符號描述,并且便于維護缺點復雜的邏輯電路需要太多的符號及連接線,比較麻煩不直觀,設計者不易形成整體框架應用模塊級,用來描述整個電路的構架功能級描述及系統(tǒng)的實現電路在心中,代碼在手中避免設計過度軟件化而導致電路連接關系較亂VerilogHDL模塊最基本設計單元模塊聲明由模塊名稱和模塊輸入輸出端口列表組成module模塊名(端口名1,端口名2,...,端口名n);endmodule端口定義輸入input端口名1,端口名2,...,端口名n;輸出output端口名1,端口名2,...,端口名n;雙向inout端口名1,端口名2,...,端口名n;相同類型端口列表x[m],…,x[n]<類型>[m:n]xmoduletest(A,B,C,CP,F1,F2);inputA,B,C,CP;outputF1,F2;wireF1;regF2;always@(posedgeCP)F2<=F1;

assignF1=A&B|C;endmoduleVerilogHDL模塊信號聲明模塊中所用到的所有信號都進行類型聲明連續(xù)型wire只要輸入有變化,輸出馬上無條件地反映不能作為存儲電路的狀態(tài)例:x是3位連線型信號wire[2:0]x;寄存器型reg一定要有觸發(fā)輸出才會反映輸入可以作為存儲電路的狀態(tài),也可以作為組合電路的輸出例:y和z為一寄存器型信號,cnt為4位寄存器型信號regy,z;reg[3:0]cnt;moduletest(A,B,C,CP,F1,F2);inputA,B,C,CP;outputF1,F2;wireF1;regF2;always@(posedgeCP)F2<=F1;

assignF1=A&B|C;endmoduleVerilogHDL模塊邏輯功能定義持續(xù)賦值語句assign過程賦值塊always調用元件(元件例化)always語句是上升沿觸發(fā)的存儲電路assign語句是變量A、B、C的組合電路兩條語句是同時工作的F2鎖存當前A、B、C產生的F1moduletest(A,B,C,CP,F1,F2);inputA,B,C,CP;outputF1,F2;wireF1;regF2;always@(posedgeCP)F2<=F1;

assignF1=A&B|C;endmodule所有語句都是并行同時執(zhí)行,與書寫先后無關VerilogHDL模塊模板module<頂層模塊名>(<輸入輸出端口列表>);

/*端口聲明*/output輸出端口列表;//輸出端口聲明input輸入端口列表;//輸入端口聲明

/*定義數據、信號類型,函數聲明*/wire信號名;reg信號名;/*邏輯功能定義*/

assign<結果信號名>=<表達式>;always@(<敏感信號表達式>)begin//過程賦值end/*例化模塊*/<調用模塊名><例化模塊名>(<端口列表>);

門元件關鍵字<例化門元件名>(<端口列表>);endmoduleVerilogHDL-運算量常量三種類型整數、實數和字符串4種方式來表示邏輯狀態(tài)0表示邏輯0(低電平)、1表示邏輯1(高電平)、x表示不確定、z表示高阻態(tài)表示格式<位寬>'[b/d/o/h]<值>b、d、o、h分別代表為二、十、八、十六進制parameter定義一個標志符,代表一個常量parameter參數名1=表達式1,參數名2=表達式2,……;變量采用非負整數作為下標來定義,變量的位數也稱為位寬reg[3:0]X;位寬為4的寄存器變量X,每位按先后順序分別標識為X[3]、X[2]、X[1]和X[0]wire[1:4]Y;定義了位寬為4的連線型變量Y,每位按先后順序分別標識為Y[1]、Y[2]、Y[3]和Y[4]8'hab、4'b0110、5'o17、6'd35parameterN=8,M=2;VerilogHDL-運算符運算符算術運算符+(加)、-(減)、*(乘)、/(除)、%(求模)位運算符&(按位與)、|(按位或)、~(按位非)、^(按位異或)、~^(按位同或)邏輯運算符&&(邏輯與)、||(邏輯或)、!(邏輯非)關系運算符<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、===(全等于)、!=(不等于)、!==(不全等于)縮位運算符&(與)、~&(與非)、|(或)、~|(或非)、^(異或)、~^(同或)單目運算,將運算量的各位作為邏輯量進行運算符規(guī)定的操作移位運算符<<(左移)、>>(右移)采用0進行補充。條件運算符運算符為“?:”,它是三目運算符<條件>?<表達式1>:<表達式2>若條件成立,則取表達式1的值,否則取表達式2的值。位拼接運算符運算符為“{}”將{}中的變量拼接為一個多位的變量重復拼接符為“{n{}}”重復n次后面的內容后拼接在一起優(yōu)先級從高到低依次為(!、~)、(*、/、%)、(+、-)、(<<、>>)、(<、<=、>、>=)、(==、!=、===、!==)、(&、~&)、(^、~^)、(|、~|)、&&、||、?:VerilogHDL–行為語句過程語句always@(<觸發(fā)條件列表>)觸發(fā)條件列表也稱為敏感信號表達式,觸發(fā)條件寫在敏感信號表達式之中,當觸發(fā)條件滿足時,其后的語句才能被執(zhí)行觸發(fā)條件列表中的多個條件之間采用“or”來連接觸發(fā)條件分為兩類電平敏感型邊沿敏感型上升沿(由低電平變到高電平)下降沿(由高電平變到低電平)由一種類型的敏感信號來觸發(fā)不要將邊沿敏感型信號和電平敏感型信號列在一起always@(AorB)always@(A)//A發(fā)生改變時always@(posedgeA)//A上升沿時always@(negedgeA)//A下降沿時always@(*)//任一輸入變化時VerilogHDL–賦值語句塊語句begin-end賦值語句assign持續(xù)賦值用于組合邏輯的賦值always過程賦值非阻塞賦值在整個過程塊結束時才完成賦值操作并行賦值操作阻塞賦值語句結束后賦值操作完成串行執(zhí)行assignF=(A&B)|(~A&~C);always@(posedgecp)beginb<=c;a<=b;endalways@(posedgecp)beginb=c;a=b;end//非阻塞賦值示例modulenon_blocking_example;rega,b,c;initialbegina=0;b=0;c=0;a<=1;b<=a;c<=b;endendmodule//阻塞賦值示例moduleblocking_example;rega,b,c;initialbegina=0;b=0;c=0;a=1;b=a;c=bendendmodule//結果是:a=1,b=1,c=1//在下一個時鐘邊緣,結果是:a=1,b=0,c=0VerilogHDL-條件語句if–else語句①if(表達式)

語句/語句塊;②if(表達式)

語句1/語句塊1;else

語句2/語句塊2;③if(表達式1)

語句1/語句塊1;elseif(表達式2)

語句2/語句塊2;?elseif(表達式n)

語句n/語句塊n;else

語句n+1/語句塊n+1;case語句case、casez和casexcase(條件表達式)值1:語句1;值2:語句2;┇值n:語句n;default:語句n+1;endcase若干個值的執(zhí)行語句相同,可以將這幾個值采用“,”相連若為0、x和z則按“假”處理;若為1則按“真”處理case是全等比較,而對x和z值不敏感判定結果casecasexcasez01xz01xz01xz01000101110011010001110101x001011110011z000111111111VerilogHDL-組合電路采用assign采用過程賦值使用條件語句設計一定要列出所有條件分支if語句一定要加else語句case語句中值沒有全列出時一定加default語句moduletest(X,Z);input[n:1]X;output[m:1]Y;reg[m:1]Y;always@(*)//輸入變化時case(X) n’d0:Z<=; n’d1:Z<=;

? n’dN:Z<=; default:Z<=;endcaseendmoduleVerilogHDL-組合電路輸入輸出ABF1F200CC01BC?10BC?11CC輸入輸出輸入輸出ABCF1F2ABCF1F20000010001001111010001011110000111011111moduletest(A,B,C,F1,F2);inputA,B,C;outputF1,F2;regF1,F2;always@(*)case({A,B,C})0,5,6:{F1,F2}<=2'b00;1,2,7:{F1,F2}<=2'b11;3:{F1,F2}<=2'b10;4:{F1,F2}<=2'b01;endcaseendmodulemoduletest(A,B,C,F1,F2);inputA,B,C;outputF1,F2;regF1,F2;always@(*)case({A,B})0,3:{F1,F2}<={C,C};1,2:{F1,F2}<={B,~C};endcaseendmodulemoduletest(A,B,C,D,F1,F2,F3);inputA,B,C,D;outputF1,F2,F3;assign{F1,F2,F3}=A?3'b000:B?3'b010:C?3'b100:{2'b11,~D};endmoduleVerilogHDL-組合電路moduletest(A,B,C,D,F1,F2,F3);inputA,B,C,D;outputF1,F2,F3;regF1,F2,F3;always@(*)casex({A,B,C})3'b1xx:{F1,F2,F3}<=3'b000;3'b01x:{F1,F2,F3}<=3'b010;3'b001:{F1,F2,F3}<=3'b100;3'b000:{F1,F2,F3}<={2'b11,~D};endcaseendmodule輸入輸出ABCDF1F2F31

00001

010001

10000011100000111moduletest(A,B,C,D,F1,F2,F3);inputA,B,C,D;outputF1,F2,F3;regF1,F2,F3;always@(*)if(A){F1,F2,F3}<=3'b000;elseif(B){F1,F2,F3}<=3'b010;elseif(C){F1,F2,F3}<=3'b100;else{F1,F2,F3}<={2'b11,~D};endmoduleVerilogHDL–仿真新建模塊文件xxx.v定義模塊既可以一個模塊一個文件,也可以多個模塊多個文件但不能出現多個相同名稱的模塊新建測試文件xxx_tb.v定義一個測試模塊,將所用到的模塊進行例化,初始化輸入信號例化模塊名實例名(.端口1(信號1),端口2(信號2),…,端口M(信號M));module模塊名(端口1,端口2,…,端口M);┆endmoduletest(A,B,F)testu_0(.A(x),.B(y),.F(z));VerilogHDL–仿真新建測試文件xxx_tb.v例化初始化采用initial語句對輸入信號的描述reg型變量賦初值不帶觸發(fā)條件,過程中的塊語句沿時間軸只執(zhí)行一次,且所賦值的信號必須是reg型延時變化采用延時語句#n來實現延時n個時間基準在always語句中采用延時來產生時鐘信號時間基準及其分辨率采用timescale來聲明編譯源文件生成波形文件,并采用波形顯示工具察看仿真波形initialbegin

語句1;

語句2;?endrega,b;initialbegina=0;b=1;end`timescale1ns/1psrega;initialbegina=0;#100a=1;#300a=0;#500$finish;endregclk;always#500clk=~clk;initialclk=1;信號a置0,保持100ns后變?yōu)?,再保持300ns后變?yōu)?,保持500ns后仿真結束。VerilogHDL–仿真示例新建And2.v文件moduleAnd2(A,B,F);inputA,B;outputF;assignF=A&B;endmodulemoduleAnd2(A,B,F);inputA,B;outputF;r

溫馨提示

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

評論

0/150

提交評論