三章組合邏輯電路設(shè)計ppt課件_第1頁
三章組合邏輯電路設(shè)計ppt課件_第2頁
三章組合邏輯電路設(shè)計ppt課件_第3頁
三章組合邏輯電路設(shè)計ppt課件_第4頁
三章組合邏輯電路設(shè)計ppt課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 組合邏輯電路設(shè)計討論主題:3.1組合邏輯基礎(chǔ)及并行語句三人表決器3.2加法器電路 一位加法器3.3 verilog過程譯碼器原理 3-8譯碼器3.4數(shù)碼管顯示電路 七段顯示譯碼器3.1 組合邏輯電路 表決器3.1 組合邏輯電路對比3.1 組合邏輯電路定義組合邏輯含義: 電路任一時刻的輸出狀態(tài)只決定于該時刻各輸入狀態(tài)的組合,而與電路的原狀態(tài)無關(guān)。組合電路就是由門電路組合而成,電路中沒有記憶單元,沒有反饋通路。3.1 組合邏輯建模方法建模思路: 用語言表述出來:針對輸入,總有確定的輸出,輸入一變化,輸出就隨之變化建模規(guī)范: 1.過程(進程)之外,本來就是并行,直接建模 2.過程(進程)之內(nèi)

2、:a.所有輸入變化立刻變化。b.針對輸入,輸出有確定值 (絕對真經(jīng)?。?.1 組合邏輯verilog描述module select(f,a,b,s); output f; input a,b,s; assign f=(a&(s)|(b&s);endmodule 3.1組合邏輯補充互補CMOS電路 3.1 二輸入CMOS與非門電路 3.1二輸入端CMOS或非門電路 3.1二輸入CMOS異或門電路 3.2理解Verilog的并行語句一般的程序設(shè)計語言是處理器按照順序去執(zhí)行的一些語句,硬件描述語言卻是描述一個物理上可以客觀存在的實際電路的語言。二者最本質(zhì)的區(qū)別是Verilog硬件描述語言有并行語句。

3、并行語句是硬件描述語言的基本特征,可以說正是因為并行語句的存在,才使其成為了真正的硬件描述語言。Verilog需要順序語句 第一是很多時序器件本身就是和時間相關(guān)的,比如D觸發(fā)器,其原理就是“每當(dāng)時鐘上升延來臨之后就把輸入端的數(shù)據(jù)存入,并且放在輸出端口,直到下一個時鐘來臨為止”。如果使用語言來描述一個器件符合上述原理,很明顯需要用到時間先后的語法,而且在很多場合,使用順序執(zhí)行的語句可以有效的簡化描述語言的數(shù)量,基于這個原因,描述有些電路結(jié)構(gòu)需要使用順序執(zhí)行的語句。但是即使用順序執(zhí)行的語句描述出來了這種器件,也是在底層和其他器件并行處理的。第二個原因就是為了仿真驗證, 3.2 加法器電路真值表a1

4、a2bc3.2 加法器電路初識Verilogmodule adder (a, b, c); input1:0 a, b; output2:0 c; assign c=a+b; endmodule3.2 半加器能對兩個一位二進制數(shù)相加,求得其和值及進位的邏輯電路稱為半加器。半加器的特點是:只考慮兩個一位二進制數(shù)的相加,而不考慮來自低位進位的運算電路,稱為半加器。任務(wù)7中設(shè)計的一位加法器級為半加器。3.2 全加器一位二進制數(shù)相加不僅要考慮本位的加數(shù)與被加數(shù),還要考慮低位的進位信號,而輸出包括本位和以及向高位的進位信號,這就是通常所說的全加器。 3.2全加器 3.2 多位加法器 3.2 比較 mod

5、ule adder (a, b, c);input1:0 a, b;output2:0 c;reg2:0 c; always(a,b)beginc=a+b;endendmodule3.2任務(wù):自己使用Verilog編寫一個4位數(shù)加4位數(shù)的加法器。3.3 Verilog 過程及譯碼電路Always 過程語句always定義的過程塊是一個電路,電路從上電開始就會一直執(zhí)行; (從代碼一開始就執(zhí)行,執(zhí)行完了再回到過程塊的最初來執(zhí)行,周而復(fù)始,不會停止,直到代碼執(zhí)行完畢) 3.3 常用過程語句 if else/ “begin” 和 “end”就好比C語言中的“”和“”.if (enable = = 1b

6、1) begin data = 10; / 十進制賦值 address = 16hDEAD; /十六進制 wr_enable = 1b1; /二進制 end else begin data = 32b0; wr_enable = 1b0; address = address + 1; end3.3過程語句casecase(address) 0 : $display (It is 11:40PM); 1 : $display (I am feeling sleepy); 2 : $display (Let me skip this tutorial); default : $display (N

7、eed to complete); endcase3.3過程語句while module counter (clock,rst,enable,count); input clock, rst, enable; output 3:0 count; reg 3:0 count; always (posedge clock or posedge rst) if (rst) begin count = 0; end else begin : COUNT while (enable) begin count = count + 1; disable COUNT; end end endmodule3.3

8、過程中的阻塞賦值與非阻塞賦值 阻塞式 (blocking) 的操作符為 “ = ” 非阻塞式 (non-blocking)的操作符為 “ = ” 阻塞賦值和非阻塞賦值的基本區(qū)別是:阻塞賦值是順序執(zhí)行語句,而非阻塞賦值是并行執(zhí)行語句。兩種語句的含義不同,建模的應(yīng)用也就不同。 3.3 對比module top(clk,a,c);input a,clk;output c;reg c,b;always ( posedge clk )beginb=a;=b;endendmodulemodule top(clk,a,c);input a,clk;output c;reg c,b;always ( pose

9、dge clk )beginb=a;c=b;endendmodule3.3譯碼器電路輸入輸出A BY0 Y1 Y2 Y30 01 0 0 00 10 1 0 01 00 0 1 01 10 0 0 12線4線譯碼器真值表邏輯函數(shù):2線4線譯碼器電路3-8譯碼器電路重溫設(shè)計過程1. 文本編輯2. 設(shè)定器件3. 輸入管腳4. 綜合、布局布線5. 設(shè)定下載端口6. 下載3.3實訓(xùn) 3-8譯碼器8-3譯碼器能不能自己實現(xiàn)8-3譯碼器電路?3.5 三態(tài)門電路輸入信號雙向信號輸出信號rwco_dataout_datain_data1co_dataxco_data0out_dataout_dataout_d

10、ata三態(tài)門電路結(jié)構(gòu)單元 如果使能端G為低電平,取值為0時,三態(tài)門電路與B點之間連接的兩個MOS管都關(guān)斷,B在芯片內(nèi)部的連接處于高阻態(tài),也就是為Z,此時外部信號可以通過B送到C,作為輸入狀態(tài)。當(dāng)G為低高平,取值為1時,三態(tài)門電路與B連接的兩個MOS管中可以有一個管子導(dǎo)通,B的取值和A一致,而此時外部對B不能進行信號驅(qū)動,否則就會出現(xiàn)短路。 CMOS傳輸門三態(tài)門電路 3.4 數(shù)碼管顯示3.4 練習(xí)一 數(shù)碼管上顯示2module seg7(data_out); output7:0 data_out; assign data_out=8b 1011011 3.4 七段譯碼器結(jié)構(gòu)七段LED數(shù)碼管顯示電

11、路in0dg3.4表格顯示七段數(shù)碼管顯示電路輸入七段數(shù)碼管顯示電路輸出LED顯示字形in3 in2 in1 in0gfedcba 0 0 0 001111110 0 0 0 100001101 0 0 1 010110112 0 0 1 110011113 0 1 0 011001104 0 1 0 111011015 0 1 1 011111006 0 1 1 100001117 1 0 0 011111118 1 0 0 1110011193.4 代碼module qiduan(data_in,/七段數(shù)碼管顯示電路的輸入,對應(yīng)圖2.1.4中的in3-in0,in3對應(yīng)輸入的高位data_o

12、ut);/七段數(shù)碼管顯示電路的輸出,對應(yīng)圖2.1.4中的g-a,g對應(yīng)輸出的高位input3:0 data_in;/輸入輸出端口定義output6:0 data_out;reg6:0 data_out;/使用always建模組合邏輯需要定義輸出為寄存器always(data_in) /輸入為data_inbegin case(data_in)/輸入的不同情況 4b0000: data_out = 7b0111111; / 0 4b0001: data_out = 7b0000110; / 1 4b0010: data_out = 7b1011011; / 2 4b0011: data_out

13、= 7b1001111; / 3 4b0100: data_out = 7b1100110; / 4 4b0101: data_out = 7b1101101; / 5 4b0110: data_out = 7b1111100; / 6 4b0111: data_out = 7b0000111; / 7 4b1000: data_out = 7b1111111; / 8 4b1001: data_out = 7b1100111; / 9 default: data_out = 7b0000000; /default,當(dāng)輸入為其他值時,輸出有效,為全0 endcaseendendmodule3.

14、4實訓(xùn)顯示小任務(wù):使用七段數(shù)碼管顯示一個3的數(shù)字。module SEG7 (abcdefg, scan );wire 3:0 bin;output3:0 scan;output6:0 abcdefg;reg 6:0 abcdefg;assign scan=4b1111;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase end endmodule3.4任務(wù):用數(shù)碼管顯示9527需要輪流打開4個數(shù)碼管,每個數(shù)碼管顯示1/4的時間,由于視覺暫留效應(yīng),就好像顯

15、示4個不同的數(shù)字設(shè)計思路:1.打開scan0的時候,在abcdefg線上賦值“9”2.打開scan1的時候,在abcdefg線上賦值“5”3.打開scan2的時候,在abcdefg線上賦值“2”4.打開scan3的時候,在abcdefg線上賦值“7”設(shè)計SCAN信號首先要降低掃描速度,生成一個大約為0.01s-0.1s的時鐘利用這個時鐘信號產(chǎn)生一個scan信號如下:reg1:0 state; reg3:0 scan;/注意要用always就必須是regalways(posedge clk_div)state=stats+1b1;always (state)case (state)2b00 :

16、scan=4b0001;2b01 : scan =4b0010;2b10 : scan =4b0100;2b11 : scan =4b1000;default: scan =4b0000;endcase分不同的時間把9、5、2、7放到bin上面去reg3:0 bin;/不在always里面賦值就用wire,否則用regalways(state)case (state)2b00 : bin=4d9;2b01 : bin=4d5;2b10 : bin=4d2;2b11 : bin=4d7;default: bin=4d0;endcase再對9527從二進制到abdcdefg譯碼reg6:0 abc

17、defg;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase2.項目任務(wù):計數(shù)牌子任務(wù)分析: 設(shè)計一個計數(shù)牌子,能從0000計數(shù)到9999,每隔1秒鐘跳動一下。通過復(fù)位可以把系統(tǒng)清零為0000涉及:動態(tài)數(shù)碼管顯示,復(fù)位,分頻電路等設(shè)計思路:1.內(nèi)部所有數(shù)據(jù)都是2進制的,所以需要設(shè)計4個4位2進制的reg,分別對應(yīng)顯示的4個數(shù)字,再通過動態(tài)掃描電路送到LED上面去顯示。2.利用1秒的時鐘,構(gòu)建“個、十、百、千”位的變換規(guī)律 設(shè)計模塊1:分頻電路代碼:略1.

18、產(chǎn)生一個1秒的時鐘:clk_1s2.產(chǎn)生一個0.01秒的時鐘(為了動態(tài)顯示使用):clk_div設(shè)計模塊2:計數(shù)器reg3:0 gewei/各位數(shù)always(posedge clk_1s)if(reset=1b1) gewei=4b0;else if(gewei=4d9) gewei=4b0; else gewei=gewei+1b1; reg3:0 shiwei/十位數(shù)always(posedge clk_1s)if(reset=1b1) shiwei=4b0;else if(gewei=4d9) begin if(shiwei=4d9); shiwei=4b0; else shiwei=

19、shiwei+1b1;endreg3:0 baiwei/十位數(shù)always(posedge clk_1s)if(reset=1b1) baiwei=4b0;else if(gewei=4d9)&(shiwei=4d9) begin if(baiwei=4d9); baiwei=4b0; else baiwei=baiwei+1b1;endreg3:0 qianwei/十位數(shù)always(posedge clk_1s)if(reset=1b1) qianwei=4b0;else if(gewei=4d9)&(shiwei=4d9)&(baiwei=4d9) begin if(qianwei=4d

20、9); qianwei=4b0; else qianwei=shiwei+1b1;end設(shè)計模塊3:動態(tài)譯碼顯示復(fù)習(xí)一下:我們是如何把9527顯示出來的設(shè)計SCAN信號首先要降低掃描速度,生成一個大約為0.01s-0.1s的時鐘利用這個時鐘信號產(chǎn)生一個scan信號如下:reg1:0 state; reg3:0 scan;/注意要用always就必須是regalways(posedge clk_div)state=stats+1b1;always (counter)case (counter)2b00 : scan=4b0001;2b01 : scan =4b0010;2b10 : scan =

21、4b0100;2b11 : scan =4b1000;default: scan =4b0000;endcase分不同的時間把9、5、2、7放到bin上面去reg3:0 bin;/不在always里面賦值就用wire,否則用regalways(counter)case (counter)2b00 : bin=4d9;2b01 : bin=4d5;2b10 : bin=4d2;2b11 : bin=4d7;default: bin=4d0;endcase再對9527從二進制到abdcdefg譯碼reg6:0 abcdefg;always(bin) begin case(bin) 4b0000:

22、abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase原來:在counter分別為00、01、10、11的時候在abcdefg上放置9、5、2、7現(xiàn)在:在counter分別為00、01、10、11的時候在abcdefg上放置qianwei、baiwei、shiwei、gewei3.簡易電子手表設(shè)計項目分析: 設(shè)計一個電子手表,其功能能包括復(fù)位后顯示 15:34 能夠正確顯示時間hh mm系統(tǒng)架構(gòu)圖分頻器345160進制,6位2進制數(shù)23進制5位2進制數(shù)1分鐘的時鐘二進制到BCD譯碼二進制到BCD譯碼BCD碼到7段數(shù)碼管譯碼電路,

23、動態(tài)顯示設(shè)計模塊1:分頻電路代碼:略1.產(chǎn)生一個1分鐘的時鐘:clk_1m2.產(chǎn)生一個0.01秒的時鐘(為了動態(tài)顯示使用):clk_div設(shè)計部件2:計時器reg5:0 minute/分鐘always(posedge clk_1m)if(reset=1b1) minute =6d34;/顯示34分else if(minute =6d59) minute =6b0; else minute = minute +1b1;reg4:0 hour/小時always(posedge clk_1m)if(reset=1b1) hour =5d15;/初始化為15點else if(minute =6d59)

24、/滿足1小時 begin if(hour =5d23);/滿23小時 hour=5b0; else hour = hour +1b1;end復(fù)習(xí):BCD碼轉(zhuǎn)換電路Binary-Coded Decimal,簡稱BCD,稱BCD碼或二-十進制代碼,亦稱二進碼十進數(shù)。是一種二進制的數(shù)字編碼形式,用二進制編碼的十進制代碼。 BCD-8421舉例子:二進制 十進制 BCD 0 0 0 110 6 110 1001 9 1001 1101 13 0001 0011 1011111 95 1001 0101小練習(xí)BCD碼轉(zhuǎn)換1.1100112.1001003.10101014.1011005.1010000

25、01010任務(wù):自己寫一個0到99(1100011)的二進制到BCD轉(zhuǎn)化電路提示:需要應(yīng)用“比較器來”確定十位上數(shù)字是多少?確定了十位數(shù)后,用減掉一個這個十位數(shù),得到個位數(shù),再做各位數(shù)的BCD碼轉(zhuǎn)換設(shè)計部件2:8位二進制到BCD碼譯碼器電路hour與minute都是小于99的binary 數(shù),所以分別可以轉(zhuǎn)化為8位BCD數(shù)。設(shè)定BCD數(shù)結(jié)果分別為hour_bcd , minute_bcd設(shè)計部件3:動態(tài)數(shù)碼顯示輸出現(xiàn)在,我們擁有2個8位的BCD碼數(shù)據(jù),hour_bcd , minute_bcd。把它們拆分成為4個4進制的BCD碼數(shù)據(jù): hour_bcd 7:4, hour_bcd 3:0, m

26、inute_bcd 7:4, minute_bcd 3:0。設(shè)計SCAN信號首先要降低掃描速度,生成一個大約為0.01s-0.1s的時鐘利用這個時鐘信號產(chǎn)生一個scan信號如下:reg1:0 state; reg3:0 scan;/注意要用always就必須是regalways(posedge clk_div)state=stats+1b1;always (counter)case (counter)2b00 : scan=4b0001;2b01 : scan =4b0010;2b10 : scan =4b0100;2b11 : scan =4b1000;default: scan =4b0000;endcase分不同的時間把9、5、2、7放到bin上面去reg3:0 bin;/不在always里面賦值就用wire,否則用regalways(counter)case (counter)2b00 : bin=4d9;2b01 : bin=4d5;2b10 : bin=4d2;2b11 : bin=4d7;default: bin=4d0;endcase再對9527從二進制到abdcdefg譯碼reg6:

溫馨提示

  • 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

提交評論