硬件描述語言范例_第1頁
硬件描述語言范例_第2頁
硬件描述語言范例_第3頁
硬件描述語言范例_第4頁
硬件描述語言范例_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、硬件描述語言語言設(shè)計(jì)實(shí)例1、8-3編碼器module encode_verilog ( a ,b ;input 7:0 a ; /編碼器輸入wire 7:0 a ;output 2:0 b ; /編碼器輸出reg 2:0 b;always ( a begincase ( a /編碼器某一輸入端口為高電平輸出相應(yīng)的3位二進(jìn)制數(shù)8'b0000_0001 : b<=3'b000; /08'b0000_0010 : b<=3'b001; /18'b0000_0100 : b<=3'b010; /28'b0000_1000 : b

2、<=3'b011; /38'b0001_0000 : b<=3'b100; /48'b0010_0000 : b<=3'b101; /58'b0100_0000 : b<=3'b110; /68'b1000_0000 : b<=3'b111; /7default : b<= 3'b000; /其他情況編碼器輸出3b000endcaseendendmodule2、8-3優(yōu)先編碼器module p_encode_verilog ( A ,I ,GS ,EO ,EI ; /編碼器以低為

3、有效input 7:0 I ; /編碼器輸入wire 7:0 I ;input EI ; /輸入使能,EI=0時(shí),編碼器正常工作wire EI ;output 2:0 A ; /編碼器輸出reg 2:0 A ;output GS ; /優(yōu)先編碼器工作狀態(tài)標(biāo)志,編碼器的八個(gè)輸入端有信號(hào)輸入時(shí),GS=0 reg GS ;output EO ; /輸出使能,reg EO ;always ( I or EI if ( EI /使用if、else if表明條件的優(yōu)先級(jí)順序beginA <= 3'b111;GS <= 1;EO <= 1;endelse if ( I7 = 0 b

4、eginA <= 3'b000;GS <= 0;EO <= 1;endelse if ( I6 = 0 beginA <= 3'b001;GS <= 0;EO <= 1;endelse if ( I5 = 0 beginA <= 3'b010;GS <= 0;EO <= 1;endelse if ( I4 = 0 beginA <= 3'b011;GS <= 0;EO <= 1;endelse if ( I3 = 0 beginA <= 3'b100;GS <= 0;EO

5、 <= 1;endelse if ( I2 = 0 beginA <= 3'b101;GS <= 0;EO <= 1;endelse if ( I1 = 0 beginA <= 3'b110;GS <= 0;EO <= 1;endelse if ( I0 = 0 beginA <= 3'b111;GS <= 0;EO <= 1;endelse if ( I = 8'b11111111beginA <= 3'b111;GS <= 1;EO <= 0;endendmodule3、3

6、-8譯碼器module decoder_verilog ( G1 ,Y ,G2 ,A ,G3 ; input G1 ; /使能輸入,高有效wire G1 ;input G2 ; /使能輸入,低有效wire G2 ;input 2:0 A ; /3位譯碼器輸入,為高有效wire 2:0 A ;input G3 ; /使能輸入wire G3 ; /使能輸入,低有效output 7:0 Y ; /8位譯碼器輸出,為低有效reg 7:0 Y ;reg s;always ( A ,G1, G2, G3begins <= G2 | G3 ;if ( G1 = 0 /G1為低有效Y <= 8&#

7、39;b1111_1111;else if ( sY <= 8'b1111_1111;elsecase ( A 3'b000 : Y<= 8'b1111_1110;3'b001 : Y<= 8'b1111_1101;3'b010 : Y<= 8'b1111_1011;3'b011 : Y<= 8'b1111_0111;3'b100 : Y<= 8'b1110_1111;3'b101 : Y<= 8'b1101_1111;3'b110 : Y&

8、lt;= 8'b1011_1111;3'b111 : Y<= 8'b0111_1111;endcaseendendmodule4、數(shù)據(jù)選擇器module mux8_1_verilog ( Y ,A ,D0, D1,D2, D3, D4, D5, D6, D7 ,G ;input 2:0 A ; /地址輸入端wire 2:0 A ;input D0 ; /數(shù)據(jù)輸入端input D1 ; /數(shù)據(jù)輸入端input D2 ; /數(shù)據(jù)輸入端input D3 ; /數(shù)據(jù)輸入端input D4 ; /數(shù)據(jù)輸入端input D5 ; /數(shù)據(jù)輸入端input D6 ; /數(shù)據(jù)輸入端

9、input D7 ; /數(shù)據(jù)輸入端input G ; /使能端,當(dāng)G=1時(shí)Y=0,當(dāng)G=0時(shí)數(shù)據(jù)選擇器正常工作wire G ;output Y ; /數(shù)據(jù)輸出端reg Y ;always (G or A or D0 or D1 or D2 or D3or D4 or D5 or D6 or D7 beginif (G = 1 /使能端的優(yōu)先級(jí)高Y <= 0;elsecase (A /根據(jù)輸入的地址A確定數(shù)據(jù)選擇器輸出哪路輸入數(shù)據(jù)3'b000 : Y = D0 ;3'b001 : Y = D1 ;3'b010 : Y = D2 ;3'b011 : Y = D

10、3 ;3'b100 : Y = D4 ;3'b101 : Y = D5;3'b110 : Y = D6 ;3'b111 : Y = D7 ;default : Y = 0;endcaseendendmodule5、多位數(shù)值比較器module compare_verilog ( Y ,A ,B ;input 3:0 A ; /4位二進(jìn)制數(shù)Awire 3:0 A ;input 3:0 B ; /4位二進(jìn)制數(shù)Bwire 3:0 B ;output 2:0 Y ; /A與B大小的比較結(jié)果reg 2:0 Y ;always ( A or B beginif ( A >

11、; B Y <= 3'b001; /A > B時(shí)Y輸出3'b001 else if ( A = BY <= 3'b010; /A = B時(shí)Y輸出3'b010 elseY <= 3'b100; /A < B時(shí)Y輸出3'b100 endendmodule6、全加器module sum_verilog ( A ,Co ,B ,S ,Ci ;input A ; /輸入加數(shù)Awire A ;input B ; /輸入加數(shù)Bwire B ;input Ci ; /相鄰低位的進(jìn)位輸入信號(hào)wire Ci ;output Co ; /

12、向相鄰高位的進(jìn)位輸出信號(hào)reg Co ;output S ; /相加和數(shù)輸出reg S ;always ( A or B or Cibeginif ( A= 0 && B = 0 && Ci = 0 beginS <= 0;Co <= 0;endelse if ( A= 1 && B = 0 && Ci = 0 beginS <= 1;Co <= 0;endelse if ( A= 0 && B = 1 && Ci = 0 beginS <= 1;Co <= 0;

13、endelse if ( A=1 && B = 1 && Ci = 0 beginS <= 0;Co <= 1;endelse if ( A= 0 && B = 0 && Ci = 1 beginS <= 1;Co <= 0;endelse if ( A= 1 && B = 0 && Ci = 1 beginS <= 0;Co <= 1;endelse if ( A= 0 && B = 1 && Ci = 1 beginS <

14、= 0;Co <= 1;endelsebeginS <= 1;Co <= 1;endendendmodule7、D觸發(fā)器module Dflipflop ( Q ,CLK ,RESET ,SET ,D ,Qn ;input CLK ; /D觸發(fā)器輸入時(shí)鐘wire CLK ;input RESET ; /D觸發(fā)器清零輸入wire RESET ;input SET ; /D觸發(fā)器預(yù)置數(shù)輸入wire SET ;input D ; /D觸發(fā)器輸入wire D ;output Q ; /D觸發(fā)器輸出reg Q ;output Qn ;wire Qn ;assign Qn = Q ; /

15、將D觸發(fā)器輸出取反always ( posedge CLK or negedge SET or negedge RESET beginif ( !RESET /RESET下降沿將D觸發(fā)器輸出清零Q <= 0 ;else if ( ! SET /SER下降沿將D觸發(fā)器輸出置1 Q <= 1;else Q <= D; /CLK上升沿D觸發(fā)器輸出等于輸入endendmodule8、寄存器module reg8 ( clr ,clk ,DOUT ,D ;input clr ; /異步清零信號(hào),高有效wire clr ;input clk ; /時(shí)鐘輸入wire clk ;input

16、7:0 D ; /寄存器數(shù)據(jù)輸入wire 7:0 D ;output 7:0 DOUT ; /寄存器數(shù)據(jù)輸出reg 7:0 DOUT ;always ( posedge clk or posedge clrbeginif ( clr = 1'b1DOUT <= 0;else DOUT <= D ;endendmodule9、雙向移位寄存器module shiftdata ( left_right ,load ,clr ,clk ,DIN ,DOUT ;input left_right ; / 左移右移控制信號(hào)wire left_right ;input load ; /異步

17、置數(shù)信號(hào),有效時(shí)將DIN輸入wire load ;input clr ; /異步清零信號(hào),高有效wire clr ;input clk ; /時(shí)鐘輸入wire clk ;input 3:0 DIN ; /并行輸入wire 3:0 DIN ;output 3:0 DOUT ; /并行輸出wire 3:0 DOUT ; / DOUT是一個(gè)wire型變量,不能在always塊中被賦值reg 3:0 data_r; /所以定義一個(gè)寄存器型變量data_r作為中間變量assign DOUT = data_r ;always ( posedge clk or posedge clror posedge l

18、oad beginif ( clr = 1 /異步清零data_r <= 0;else if (load /異步置數(shù)data_r <= DIN;else beginif ( left_right /left_right=1,信號(hào)左移begindata_r <= (data_r<<1;data_r0 <= 0; /移出位補(bǔ)0endelse begin /left_right=0,信號(hào)右移data_r <= (data_r>>1;data_r3 <= 0; /移出位補(bǔ)0endendendendmodule10、4位二進(jìn)制加減法計(jì)數(shù)器mod

19、ule counter4 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN;input load ; /異步預(yù)置數(shù)input clk; /輸入時(shí)鐘wire load ;input clr ; /異步清零wire clr ;input up_down ; /加減計(jì)數(shù),up_dpwn=1加計(jì)數(shù),up_down=0減計(jì)數(shù)wire up_down ;input 3:0 DIN ; /預(yù)置數(shù)輸入wire 3:0 DIN ;output c ; /進(jìn)位/借位輸出,可以用于計(jì)數(shù)器的級(jí)聯(lián)reg c ;output 3:0 DOUT ; /計(jì)數(shù)輸出wire 3:0 DOUT ;re

20、g 3:0 data_r;assign DOUT = data_r;always ( posedge clk or posedge clror posedge loadbeginif ( clr = 1 /異步清零data_r <= 0;else if ( load = 1 /異步預(yù)置data_r <= DIN;else begin if ( up_down =1 /加計(jì)數(shù)beginif ( data_r = 4'b1111 begindata_r <= 4'b0000;c = 1;endelse begindata_r <= data_r +1;c =

21、 0 ;endendelse /減計(jì)數(shù)beginif ( data_r = 4'b0000 begindata_r <= 4'b1111;c = 1;endelse begindata_r <= data_r -1;c = 0 ;endendendendendmodule11、十進(jìn)制加減法計(jì)數(shù)器module counter10 ( load ,clr ,c ,DOUT ,clk,up_down ,DIN ,seven_seg;input load ; /異步預(yù)置數(shù)input clk; /輸入時(shí)鐘wire load ;input clr ; /異步清零wire clr

22、 ;input up_down ; /加減計(jì)數(shù),up_dpwn=1加計(jì)數(shù),up_down=0減計(jì)數(shù)wire up_down ;input 3:0 DIN ; /預(yù)置數(shù)輸入wire 3:0 DIN ;output c ; /進(jìn)位/借位輸出,可以用于計(jì)數(shù)器的級(jí)聯(lián)reg c ;output 3:0 DOUT ; /計(jì)數(shù)輸出output 7:0 seven_seg; /7段數(shù)碼管wire 3:0 DOUT ;reg 3:0 data_r;assign DOUT = data_r;always ( posedge clk or posedge clror posedge loadbeginif ( cl

23、r = 1 /異步清零data_r <= 0;else if ( load = 1 /異步預(yù)置data_r <= DIN;else if ( up_down =1 & data_r = 9 /加進(jìn)位beginc = 1;data_r <= 4'b0000;endelse if ( up_down =0 & data_r = 0 /減借位beginc = 1;data_r <= 9;endelsebeginif (up_down =1 begin /加計(jì)數(shù)data_r <= data_r +1;c = 0 ;endelse begin /減計(jì)

24、數(shù)data_r <= data_r -1 ;c = 0 ;endendend/*數(shù)碼管*/assign seven_seg =Y_r;reg 7:0 Y_r;always (data_r /用7段數(shù)碼管顯示計(jì)數(shù)輸出beginY_r =8'b11111111;case (data_r 4'b0000: Y_r = 8'b00000011; /顯示04'b0001: Y_r = 8'b10011111; /顯示14'b0010: Y_r = 8'b00100101; /顯示24'b0011: Y_r = 8'b00001

25、101; /顯示34'b0100: Y_r = 8'b10011001; /顯示44'b0101: Y_r = 8'b01001001; /顯示54'b0110: Y_r = 8'b01000001; /顯示64'b0111: Y_r = 8'b00011111; /顯示74'b1000: Y_r = 8'b00000001; /顯示84'b1001: Y_r = 8'b00001001; /顯示9default: Y_r = 8'b11111111; /默認(rèn)數(shù)碼管不發(fā)光endcaseend

26、endmodule12、順序脈沖發(fā)生器module pulsegen ( Q ,clr ,clk;input clr ; /異步預(yù)置數(shù)wire clr ; input clk ; /時(shí)鐘輸入 wire clk ; output 7:0 Q ;/順序脈沖輸出 wire 7:0 Q ; reg 7:0 temp ; reg x; assign Q =temp; always ( posedge clk or posedge clr begin if ( clr=1 begin temp <= 8'b00000001; /temp 寄存預(yù)定的序列 x= 0 ; end else beg

27、in x<= temp7 ; /序列最高位輸出 temp <= temp<<1 ; /temp 左移一位 temp0 <=x; /將輸出的結(jié)果賦給序列最低位,實(shí)現(xiàn)序列的循環(huán)輸出 end end endmodule 13、序列信號(hào)發(fā)生器 module xlgen ( Q ,clk ,res; input clk ; /時(shí)鐘輸入 wire clk ; input res ; /異步預(yù)置數(shù) wire res ; output Q ; /序列信號(hào)輸出 reg Q ; reg 7:0 Q_r ; always ( posedge clk or posedge res begin if (res =1 begin Q <= 1'b0; Q_r <= 8'b11100100 ;/Q_r 寄存預(yù)定的序列 end else begin Q <= Q_r7; /序列最高位輸出 Q_r <= Q_r<<1; /Q_r 左移一位 Q_r0 <=Q; /將輸出的結(jié)果賦給序列最低位,實(shí)現(xiàn)序列的循環(huán)輸出 11 end end endmodule 12 14、分

溫馨提示

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

評(píng)論

0/150

提交評(píng)論