久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告(優(yōu)秀范文五篇)

時間:2019-05-14 20:08:23下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告》。

第一篇:北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告

報(bào)告名稱:電子電路設(shè)計(jì)訓(xùn)練數(shù)字部

學(xué)院:儀器科學(xué)與光電工程學(xué)院

目錄

實(shí)驗(yàn)報(bào)告概述:...............................................................................................................3

一、選做實(shí)驗(yàn)總結(jié):.................................................................................................3(1)補(bǔ)充練習(xí)2:樓梯燈設(shè)計(jì).............................................................................3(2)練習(xí)題6:用兩種不同的設(shè)計(jì)方法設(shè)計(jì)一個功能相同的模塊,完成4個數(shù)據(jù)的冒泡排序...................................................................................................................5(3)(4)(5)

二、(1)(2)(3)(4)(5)練習(xí)題3:利用10MB的時鐘,設(shè)計(jì)一個單周期形狀的周期波形..................6 練習(xí)題4:運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器......................................6 練習(xí)題5:設(shè)計(jì)一個帶控制端的邏輯運(yùn)算電路.............................................7 練習(xí)一:簡單組合邏輯設(shè)計(jì).........................................................................7 練習(xí)三:利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻失序電路.............................................7 練習(xí)四:阻塞賦值與非阻塞賦值得區(qū)別.......................................................8 練習(xí)五:用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路........................................8 練習(xí)六:在verilog HDL中使用函數(shù)..............................................................9 必做實(shí)驗(yàn)總結(jié):.................................................................................................7(6)練習(xí)七:在verilog HDL中使用任務(wù)..............................................................9(7)練習(xí)八:利用有限狀態(tài)機(jī)進(jìn)行時許邏輯設(shè)計(jì)..............................................10

三、實(shí)驗(yàn)總結(jié)及體會:............................................................................................10

四、選作程序源代碼...............................................................................................11(1)練習(xí)題3:利用10MB的時鐘,設(shè)計(jì)一個單周期形狀的周期波形................11(2)練習(xí)題4:運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器....................................12(3)練習(xí)題5:設(shè)計(jì)一個帶控制端的邏輯運(yùn)算電路...........................................13(4)練習(xí)題6:用兩種不同的設(shè)計(jì)方法設(shè)計(jì)一個功能相同的模塊,完成4個數(shù)據(jù)的冒泡排序.................................................................................................................14(5)補(bǔ)充練習(xí)2:樓梯燈設(shè)計(jì)...........................................................................16

圖表目錄

Figure 1 樓梯燈任務(wù)4..............................................................................................5 Figure 2 組合邏輯.....................................................................................................5 Figure 3 時序邏輯.....................................................................................................6 Figure 4 周期波形....................................................................................................6 Figure 5 8路數(shù)據(jù)選擇器..........................................................................................6 Figure 6 邏輯運(yùn)算電路.............................................................................................7 Figure 7 組合邏輯設(shè)計(jì).............................................................................................7 Figure 8 計(jì)數(shù)分頻時序電路......................................................................................8 Figure 9 阻塞賦值與非阻塞賦值得區(qū)別....................................................................8 Figure 10 always塊組合邏輯電路.............................................................................9 Figure 11 使用函數(shù)..................................................................................................9 Figure 12 使用任務(wù)................................................................................................10 Figure 13 有限狀態(tài)機(jī)............................................................................................10

電子電路設(shè)計(jì)訓(xùn)練(數(shù)字部分)實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)報(bào)告概述:

本實(shí)驗(yàn)報(bào)告為對四次電子電路設(shè)計(jì)訓(xùn)練(數(shù)字部分)實(shí)驗(yàn)的總結(jié),主要包括以下四部分:

第一部分為選做實(shí)驗(yàn)總結(jié),主要包括每個選擇實(shí)驗(yàn)的設(shè)計(jì)思路、運(yùn)行結(jié)果、注意事項(xiàng)、心得體會;

第二部分為必做實(shí)驗(yàn)總結(jié),包括運(yùn)行結(jié)果、總結(jié)、心得體會; 第三部分為課程總結(jié)和體會,是對全部實(shí)驗(yàn)及課程的總結(jié); 第四部分為選做實(shí)驗(yàn)部分源代碼;

一、選做實(shí)驗(yàn)總結(jié):

(1)補(bǔ)充練習(xí)2:樓梯燈設(shè)計(jì)

設(shè)計(jì)思路:

本題給出樓梯的運(yùn)行規(guī)則,并分別給與四個相應(yīng)任務(wù)進(jìn)行編程設(shè)計(jì),考慮到程序的通用性及FPGA高速并行處理的優(yōu)點(diǎn),主要思路如下:

根據(jù)運(yùn)行規(guī)則(8s內(nèi)和大于8s等),對每個燈的相應(yīng)狀態(tài)進(jìn)行編程,設(shè)計(jì)時序邏輯及有限狀態(tài)機(jī);由于在總體上看,每個燈的狀態(tài)變化相對獨(dú)立(只有一個人上樓除外),故對每個燈編程所得到的程序代碼可通用于其它燈(只需要改變相應(yīng)寄存器定義即可),此即為燈控制模塊,對4個不同的任務(wù),只需設(shè)計(jì)其它部分判斷邏輯,即可完成任務(wù)要求;如此設(shè)計(jì),可大大提高程序設(shè)計(jì)效率、易用性,同時如果面對更多的燈控制需要,也可快速進(jìn)行修改部署。

下面針對不同任務(wù)給出不同處理方法:

任務(wù)1/任務(wù)3:由于任務(wù)1和任務(wù)3在定義上有很大相同點(diǎn),比如同樣是一個人走樓梯,若不考慮一個人同時在兩層使兩個燈亮,則事實(shí)上就是一個人始終只能使一盞燈亮,亮起后盞時熄滅前一盞;在保持每個燈控制模塊不改變的情況下,利用非阻塞賦值,判斷該人目前所處狀態(tài)及位置(上樓/下樓,樓層),同時規(guī)定輸出,同時只能亮一盞燈;

任務(wù)2:由于輸入信號已被賦值給寄存器變量,此時只需在系統(tǒng)時鐘作用下對寄存器中輸入變量進(jìn)行判斷,滿足要求即為正確信號,再輸入燈控制模塊;

任務(wù)4:由于已有燈控制模塊,此時只需結(jié)合任務(wù)2防抖電路,直接輸出狀態(tài)信號所對應(yīng)的結(jié)果即可;

(單個)燈控制模塊代碼:

always @(posedgeclk)begin signal_test[0]<=signal[0];if(signal_test[0]==signal[0])

begin

i0=i0+1;

end else

i0=0;if(i0>=5)

begin signal_reg[0]=signal[0];

end

if(state0==light_off)

begin

k0=0;

k0a=0;

k0b=0;

end else

k0=k0+1;

case(signal_reg[0])

1: if(!reset)

begin

state0=light_off;

end

else

begin

k0a=k0a+1;*分欄顯示,詳細(xì)代碼見報(bào)告第四部分;

運(yùn)行結(jié)果:

if((k0a >= 79)&&(k0<=119))

state0=light_on12;

else

state0=light_on8;

end

0:if(!reset)

begin

state0=light_off;

end

else if(k0a==0)

state0=light_off;endcase

case(state0)

light_off:light_reg[0]=0;

light_on8:

begin light_reg[0]=1;

if(k0b==79)

state0=light_off;

else

k0b=k0b+1;

end

light_on12:

begin

light_reg[0]=1;

if(k0b==119)

state0=light_off;

else

k0b=k0b+1;

end endcase end

Figure 1樓梯燈任務(wù)4

Figure 2樓梯燈信號防抖部分放大結(jié)果

(2)練習(xí)題6:用兩種不同的設(shè)計(jì)方法設(shè)計(jì)一個功能相同的模塊,完成4個數(shù)據(jù)的冒泡排序

設(shè)計(jì)思路:

純組合排序中,設(shè)計(jì)sort排序任務(wù)對數(shù)列中的元素進(jìn)行排序,通過調(diào)用任務(wù)實(shí)現(xiàn)對不同元素的排序功能,并將排序完成的結(jié)果直接輸出;

冒泡排序即為每次將兩個相鄰數(shù)進(jìn)行比較,大的數(shù)后“浮”,每一趟比較獲得較大值并置于數(shù)列末位;

根據(jù)題目要求,每比較一次,即將調(diào)換位置的數(shù)字進(jìn)行輸出;同樣設(shè)計(jì)sort任務(wù),對兩數(shù)字進(jìn)行比較并排序;

通過排序控制和邏輯判斷代碼,控制sort任務(wù)的有效調(diào)用,進(jìn)而實(shí)現(xiàn)冒泡排序功能;

根據(jù)設(shè)計(jì)要求,程序中只設(shè)計(jì)有一個輸入端口,通過對輸入信號不斷移位,模擬串并行信號轉(zhuǎn)換,從而完成穿行輸入,并行比較的功能;

運(yùn)行結(jié)果:

Figure 3組合邏輯

Figure 4時序邏輯

(3)練習(xí)題3:利用10MB的時鐘,設(shè)計(jì)一個單周期形狀的周期波形

設(shè)計(jì)思路:

對輸入時鐘進(jìn)行計(jì)數(shù),通過if語句進(jìn)行判斷,若滿足判斷條件,則按要求改變輸出信號;如此循環(huán)往復(fù),即可產(chǎn)生所需單周期形狀的周期波形;

運(yùn)行結(jié)果:

Figure 5周期波形

(4)練習(xí)題4:運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器

設(shè)計(jì)思路:

利用define宏定義預(yù)先定義,利于后期程序功能的擴(kuò)充和調(diào)整;同時利用case語句判斷信號,并將相對應(yīng)信號輸出,進(jìn)而完成系統(tǒng)目標(biāo)功能;

運(yùn)行結(jié)果:

Figure 68路數(shù)據(jù)選擇器

(5)練習(xí)題5:設(shè)計(jì)一個帶控制端的邏輯運(yùn)算電路

設(shè)計(jì)思路:

設(shè)計(jì)三個函數(shù)分別完成三個要求的計(jì)算,通過函數(shù)調(diào)用實(shí)現(xiàn)相應(yīng)功能;設(shè)計(jì)的控制端為同步控制端,需要通過時鐘信號從而進(jìn)行檢測復(fù)位;

運(yùn)行結(jié)果:

Figure 7邏輯運(yùn)算電路

二、必做實(shí)驗(yàn)總結(jié):

(1)練習(xí)一:簡單組合邏輯設(shè)計(jì)

語法要點(diǎn):

Assign語句構(gòu)成的組合邏輯電路,若輸入a,b改變,則輸出equal;

利用assign equal=(a==b)?1:0語句,可同時完成判斷賦值功能,大大減少代碼量; 運(yùn)行結(jié)果:

Figure 8組合邏輯設(shè)計(jì)

(2)練習(xí)三:利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻時序電路

語法要點(diǎn):

此程序主要練習(xí)了對輸入時鐘進(jìn)行計(jì)數(shù),判斷,從而實(shí)現(xiàn)分頻輸出;

在實(shí)際應(yīng)用中,可以通過該方式獲得不同占空比或頻率的信號供系統(tǒng)使用;

課本程序問題修改:

課本測試程序中未定義F10M_clk變量,故應(yīng)將測試程序fdivision_TOP中出現(xiàn)的該變量改為已定義的F10M;

運(yùn)行結(jié)果:

Figure 9計(jì)數(shù)分頻時序電路

(3)練習(xí)四:阻塞賦值與非阻塞賦值的區(qū)別

語法要點(diǎn):

阻塞賦值呈現(xiàn)的是一種立即賦值的狀態(tài),即同一個變量在前后語句中用到,語句間的順序會影響到輸出的結(jié)果;

非阻塞賦值對每一個塊中語句間的相對位置沒有要求,只在該塊語句全部運(yùn)行完成后同一進(jìn)行賦值;

運(yùn)行結(jié)果:

Figure 10阻塞賦值與非阻塞賦值得區(qū)別

(4)練習(xí)五:用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路

語法要點(diǎn):

Always@實(shí)現(xiàn)了對若干輸入信號的敏感,即只要有一個信號改變,輸出即改變; 通過case語句,實(shí)現(xiàn)了選擇性輸出,對不同功能進(jìn)行綜合;

運(yùn)行結(jié)果:

Figure 11 always塊組合邏輯電路

(5)練習(xí)六:在verilog HDL中使用函數(shù)

語法要點(diǎn):

函數(shù)最基本功能即實(shí)現(xiàn)計(jì)算,通過對不同函數(shù)定義,實(shí)現(xiàn)不同的計(jì)算功能;同時定義函數(shù),可以利于在該模塊外對某函數(shù)功能的調(diào)用,增強(qiáng)了程序的通用性和功能性,同時可以使程序結(jié)構(gòu)更加清晰,易讀易懂;

運(yùn)行結(jié)果:

Figure 12使用函數(shù)

(6)練習(xí)七:在verilog HDL中使用任務(wù)

語法要點(diǎn):

相比函數(shù),任務(wù)的調(diào)用功能更強(qiáng)大,可以實(shí)現(xiàn)運(yùn)算并輸出多個結(jié)果的功能,同時任務(wù)并不返回計(jì)算值,只通過類似C語言中的形參和實(shí)參的數(shù)據(jù)交換,實(shí)現(xiàn)功能;任務(wù)的定義和調(diào)用可

以只程序結(jié)構(gòu)更明晰,功能更豐富;

程序中通過對比較順序的設(shè)計(jì),實(shí)現(xiàn)了對4個數(shù)字,進(jìn)行5次比較即可成功完成排序功能的目的;

運(yùn)行結(jié)果:

Figure 13使用任務(wù)

(7)練習(xí)八:利用有限狀態(tài)機(jī)進(jìn)行時許邏輯設(shè)計(jì)

語法要點(diǎn):

設(shè)計(jì)有限狀態(tài)機(jī)主要需要進(jìn)行狀態(tài)分配,狀態(tài)編碼,然后利用case語句進(jìn)行判斷,從而改變相應(yīng)狀態(tài),實(shí)現(xiàn)狀態(tài)轉(zhuǎn)移和輸出變換;

對涉及時鐘的一般時序邏輯,主要運(yùn)用非阻塞(〈=)賦值完成功能;

課本程序問題修改:

在modelsim 10中,測試文件時鐘無法仿真,故只能保持與課本測試文件相同的思路,重新編寫測試文件,仿真結(jié)果如下,與課本完全一致;

運(yùn)行結(jié)果:

Figure 14有限狀態(tài)機(jī)

三、實(shí)驗(yàn)總結(jié)及體會:

通過半個學(xué)期的學(xué)習(xí)和實(shí)驗(yàn),我初步掌握了verilogHDL語言和modelsim軟件,可以通過編程實(shí)現(xiàn)數(shù)字電路基礎(chǔ)中幾乎全部簡單邏輯芯片的功能,同時可以用編程實(shí)現(xiàn)相對復(fù)雜一點(diǎn)的邏輯電路和功能.總體而言,四次實(shí)驗(yàn)內(nèi)容相對簡單,幾乎是在課后實(shí)驗(yàn)的基礎(chǔ)上稍稍做了提高,以利于我們掌握并鞏固課上學(xué)習(xí)的知識。有幾個課后實(shí)驗(yàn)內(nèi)容,按照程序輸入后無法進(jìn)行波形仿真,在改正一些錯誤定義,或者重寫測試程序后,都能順利完成實(shí)驗(yàn)任務(wù)。通過實(shí)驗(yàn)上機(jī),鞏固了我們的理論知識,加強(qiáng)了實(shí)際運(yùn)用的能力,對整個課程的學(xué)習(xí)起到了很好的作用。

最后一個補(bǔ)充實(shí)驗(yàn)相對復(fù)雜,但實(shí)現(xiàn)的方法卻可以有很多,在實(shí)際寫代碼前進(jìn)行構(gòu)思分析,在這個實(shí)驗(yàn)中顯得尤為重要,例如,如何發(fā)揮FPGA并行處理的能力,如何提高程序的通用性,能夠?qū)⑺O(shè)計(jì)的模塊結(jié)構(gòu)同時完成四個任務(wù),如何設(shè)計(jì)代碼提高效率的同時節(jié)省硬件資源??都是在設(shè)計(jì)構(gòu)思中不得不考慮的環(huán)節(jié),因此,通過最后一個實(shí)驗(yàn)的設(shè)計(jì),能夠很好的鍛煉我們解決實(shí)際生活中問題的能力,使我們對所學(xué)的知識能夠真正有所使用。

運(yùn)用verilog HDL語言進(jìn)行硬件電路設(shè)計(jì),已成為未來電路設(shè)計(jì)的主要趨勢,學(xué)習(xí)這門語言及相應(yīng)軟件,能夠幫助我們在以后的學(xué)習(xí)及科研中,大大提高我們的效率,使我們能夠快速搭建實(shí)驗(yàn)平臺,完成目標(biāo)功能。

雖然8周的課,時間相對較短,但通過這8周的學(xué)習(xí),我對verilog HDL語言有了全面的認(rèn)識,對基本的語法都有了很好的掌握,雖然時間有限,不能對verilog HDL語言有更深入的認(rèn)識,但通過這8周的學(xué)習(xí),我為我將來進(jìn)一步深化使用這個工具打下了堅(jiān)實(shí)的基礎(chǔ)。

四、選作程序源代碼(1)練習(xí)題3:利用10MB的時鐘,設(shè)計(jì)一個單周期形狀的周期波形 主程序:

module fdivison_2(RESET,F10M,clk_out,j);input F10M,RESET;output clk_out;output[12:0] j;

regclk_out;

reg[12:0] j;always @(posedge F10M)begin if(!RESET)begin clk_out<=0;j<=0;end

else begin if(j==199)

begin

j<=j+1;clk_out<=1;

end

else if(j==299)

begin

j<=j+1;clk_out<=0;

end

else if(j==499)

j<=0;

else j<=j+1;end end

endmodule

output[3:0] out;

reg[3:0] out;

always @(a or b or c or d or e or f or g or h or selet)

begin

case(selet)

`s1:out=a;

`s2:out=b;

`s3:out=c;

`s4:out=d;

`s5:out=e;

`s6:out=f;

`s7:out=g;

`s8:out=h;default:out=4'hz;endcase

end

endmodule

測試程序: `timescale 1 ns/1 ns

module muxtest;

wire[3:0] out;reg[3:0] a,b,c,d,e,f,g,h;reg[2:0] selet;

parameter times1=8;

initial

begin

a=0;

b=1;

c=2;d=3;

e=4;

f=5;

g=6;

h=7;selet=3'h0;

repeat(5)測試程序:

`timescale 1ns/100ps `define clk_cycle 50 module TOP_2;reg F10M,RESET;wire clk;wire[12:0] j;always #`clk_cycle

F10M = ~F10M;

initial

begin

RESET=1;

F10M=0;

#100 RESET=0;

#100 RESET=1;

#10000 $stop;

end

fdivison_2 fdivison_2(.RESET(RESET),.F10M(F10M),.clk_out(clk),.j(j));

endmodule

(2)練習(xí)題4:運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器

主程序: `define s1 3'd0 `define s2 3'd1 `define s3 3'd2 `define s4 3'd3 `define s5 3'd4 `define s6 3'd5 `define s7 3'd6 `define s8 3'd7

module mux_8(a,b,c,d,e,f,g,h,selet,out);

input[3:0] a,b,c,d,e,f,g,h;

input[2:0] selet;

begin

#100 selet=selet+1;

end

selet=0;repeat(times1)

begin

#100 selet=selet+1;

a={$random}%16;

b={$random}%16;

c={$random}%16;

d={$random}%16;

e={$random}%16;

f={$random}%16;

g={$random}%16;

h={$random}%16;

end

#100 $stop;

end

mux_8 m0(a,b,c,d,e,f,g,h,selet,out);endmodule

(3)練習(xí)題5:設(shè)計(jì)一個帶控制端的邏輯運(yùn)算電路

主程序:

`define sqrR 4'd0 `define triR 4'd0 `define factR 4'd0

module sqr(a,reset,clk,sqr_out,tri_out,fact_out);

input[3:0] a;input reset,clk;output[7:0] sqr_out,tri_out,fact_out;reg[7:0] sqr_out,tri_out,fact_out;

always @(posedgeclk)begin

if(!reset)

{sqr_out,tri_out,fact_out}={`sqrR,`triR,`factR};

else

begin

sqr_out=sqr_cal(a);tri_out=tri_cal(a);fact_out=fact_cal(a);

end end

function[7:0] sqr_cal;

input[3:0] a;

begin sqr_cal=a*a;

end endfunction

function[7:0] tri_cal;

input[3:0] a;

begin tri_cal=a*a*a;

end endfunction

function[7:0] fact_cal;

input[3:0] a;

begin

if(a>5)fact_cal=0;

else

begin

case(a)

0:fact_cal=1;

1:fact_cal=1;

2:fact_cal=2;

3:fact_cal=6;

4:fact_cal=24;

5:fact_cal=120;endcase

end

end endfunction

endmodule

測試程序:

`timescale 1 ns/100 ps `define clk_cycle 50

module sqrTEST;

reg[3:0] a,i;regreset,clk;

wire[7:0] sqr_out,tri_out,fact_out;

initial

begin clk=0;

a=0;

reset=1;

#100 reset=0;

#100 reset=1;

for(i=0;i<=6;i=i+1)

begin

#200 a=i;

end

#100 $stop;

end

always #`clk_cycleclk=~clk;

sqr m(a,reset,clk,sqr_out,tri_out,fact_out);

endmodule

(4)練習(xí)題6:用兩種不同的設(shè)計(jì)方法設(shè)計(jì)一個功能相同的模塊,完成4個數(shù)據(jù)的冒泡排序

組合邏輯實(shí)現(xiàn)程序:

module bub(ai,bi,ci,di,ao,bo,co,do);

input[7:0] ai,bi,ci,di;output[7:0] ao,bo,co,do;reg[7:0] ao,bo,co,do;reg[7:0] ar,br,cr,dr;reg[3:0] n;

parameter so=4;

//

always @(ai or bi or ci or di)begin

{ar,br,cr,dr}={ai,bi,ci,di};

for(n=so;n>1;n=n-1)

//

bb(ar,br,cr,dr,n);

{ao,bo,co,do}={ar,br,cr,dr};end

task bb;

// inout[7:0] x1,x2,x3,x4;

input[3:0] n;

// reg[7:0] temp;reg[3:0] s;

if(n>0)

for(s=1;s

begin

case(s)

1:sort2(x1,x2);2:sort2(x2,x3);

3:sort2(x3,x4);endcase

end endtask

task sort2;inout[7:0] x,y;reg[7:0] temp;

if(x>y)

begin

temp=x;

x=y;

y=temp;

end endtask

endmodule

組合邏輯測試程序: `timescale 1 ns/100 ps

module bubTEST;reg[7:0] ai,bi,ci,di;wire[7:0] ao,bo,co,do;

initial

begin ai=0;bi=0;ci=0;di=0;

repeat(4)

begin

#100 ai={$random}%256;

bi={$random}%256;

ci={$random}%256;

di={$random}%256;

end

#100 $stop;

end

bub m0(ai,bi,ci,di,ao,bo,co,do);

endmodule

時序邏輯實(shí)現(xiàn)程序:

module bub_1(in,clk,ar,br,cr,dr,ao,bo,co,do);

input[7:0] in;input clk;output[7:0] ao,bo,co,do;output[7:0] ar,br,cr,dr;reg[7:0] ao,bo,co,do;reg[7:0] ar,br,cr,dr;reg[3:0] n,s,q;

parameter so=4;

initial

begin

n=0;

s=0;

q=0;

end

always @(posedgeclk)begin

if(n<=so)

begin

n=n+1;ar<=in;br<=ar;cr<=br;dr<=cr;

end

if(n==so+1)

begin

n<=so+2;

s<=so;

q<=1;

end

if(s>1)

begin

{ao,bo,co,do}<={ar,br,cr,dr};

if(q

begin

case(q)

1:sort2(ar,br);

2:sort2(br,cr);

3:sort2(cr,dr);endcase

q<=q+1;

end

else

begin

s<=s-1;

q<=1;

end

end

end

task sort2;inout[7:0] x,y;reg[7:0] temp;

if(x>y)

begin

temp=x;

x=y;

y=temp;

end endtask

endmodule

時序邏輯測試程序: `timescale 1 ns/100 ps

module bubTEST_1;reg[7:0] in;regclk;

wire[7:0] ao,bo,co,do,ar,br,cr,dr;

initial

begin clk=0;

in=0;

begin

repeat(4)

#100 in={$random}%256;

end

#100 $stop;

end

always #50 clk=~clk;

bub_1 m0(in,clk,ar,br,cr,dr,ao,bo,co,do);

endmodule

(5)補(bǔ)充練習(xí)2:樓梯燈設(shè)計(jì) 主程序:

module final2(signal,reset,clk,light);

input[2:0] signal;

input reset,clk;

output[2:0] light;

reg[2:0]

signal_reg,light_reg,light_test,signal_test;

reg[11:0] k0,k1,k2,k0a,k1a,k2a,k0b,k1b,k2b;

reg[1:0] state0,state1,state2;

reg[3:0] i0,i1,i2;

parameter light_off=2'b00,light_on8=2'b01,light_on12=2'b10;initial begin

k0=0;k1=0;k2=0;

k0a=0;k1a=0;k2a=0;

k0b=0;k1b=0;k2b=0;

i0=0;i1=0;i2=0;light_reg=3'b000;

state0=light_off;

state1=light_off;

state2=light_off;signal_reg=0;signal_test=signal;end

//

//

always @(posedgeclk)begin

signal_test[0]<=signal[0];if(signal_test[0]==signal[0])

begin

i0=i0+1;

end else

i0=0;if(i0>=5)

begin

signal_reg[0]=signal[0];

end

if(state0==light_off)

begin

k0=0;

k0a=0;

k0b=0;

end else

k0=k0+1;

case(signal_reg[0])

1: if(!reset)

begin

state0=light_off;

end

else

begin

k0a=k0a+1;

if((k0a >= 79)&&(k0<=119))

state0=light_on12;

else

state0=light_on8;

end

0:if(!reset)

begin

state0=light_off;

end

else if(k0a==0)

state0=light_off;endcase

case(state0)

light_off:light_reg[0]=0;

light_on8:

begin light_reg[0]=1;

if(k0b==79)

state0=light_off;

else

k0b=k0b+1;

end

light_on12:

begin light_reg[0]=1;

if(k0b==119)

state0=light_off;

else

k0b=k0b+1;

end endcase end

always @(posedgeclk)begin

signal_test[1]<=signal[1];if(signal_test[1]==signal[1])

begin

i1=i1+1;

end else

i1=0;

if(i1>=5)

begin

signal_reg[1]=signal[1];

end

if(state1==light_off)

begin

k1=0;

k1a=0;

k1b=0;

end else

k1=k1+1;

case(signal_reg[1])

1: if(!reset)

begin

state1=light_off;

end

else

begin

k1a=k1a+1;

if((k1a >= 79)&&(k1<=119))

state1=light_on12;

else

state1=light_on8;

end

0:if(!reset)

begin

state1=light_off;

end

else if(k1a==0)

state1=light_off;endcase

case(state1)

light_off:light_reg[1]=0;

light_on8:

begin light_reg[1]=1;

if(k1b==79)

state1=light_off;

else

k1b=k1b+1;

end

light_on12:

begin light_reg[1]=1;

if(k1b==119)

state1=light_off;

else

k1b=k1b+1;

end endcase end

//

// always @(posedgeclk)begin signal_test[2]<=signal[2];if(signal_test[2]==signal[2])

begin

i2=i2+1;

end else

i2=0;if(i2>=5)

begin signal_reg[2]=signal[2];

end

if(state2==light_off)

begin

k2=0;

k2a=0;

k2b=0;

end else

k2=k2+1;

case(signal_reg[2])

1: if(!reset)

begin

state2=light_off;

end

else

begin

k2a=k2a+1;

if((k2a >= 79)&&(k2<=119))

state2=light_on12;

else

state2=light_on8;

end

0:if(!reset)

begin

state2=light_off;

end

else if(k2a==0)

state2=light_off;endcase

case(state2)

light_off:light_reg[2]=0;

light_on8:

begin light_reg[2]=1;

if(k2b==79)

state2=light_off;

else

k2b=k2b+1;

end

light_on12:

begin light_reg[2]=1;

if(k2b==119)

state2=light_off;

else

k2b=k2b+1;

end endcase

casex(light_reg)

3'b000:light_test=000;

3'b001:light_test=001;

3'b01x:light_test=010;

3'b1xx:light_test=100;endcase end

assign light=light_test;endmodule

測試程序:

`timescale 10ms/10ms

module final_TOP2;reg[2:0] signal;regclk,reset;

wire[2:0] light;

initial begin clk=0;

reset=1;

#2 reset=0;

#10 reset=1;

#10 signal=3'b111;

#10 signal=3'b000;

#900 signal=3'b111;

#100 signal=3'b000;

#900 signal=3'b011;

#100 signal=3'b000;

#900 signal=3'b001;

#900 signal=3'b000;

#100 $stop;end

always #5 clk=~clk;

final2 m(signal,reset,clk,light);endmodule

第二篇:北航eda實(shí)驗(yàn)報(bào)告數(shù)字部分

Verilog數(shù)字電路設(shè)計(jì)

實(shí)驗(yàn)報(bào)告

院系: 組員:

年月日

Verilog實(shí)驗(yàn)報(bào)告

目錄

分組概況....................................................................................................................................3 分組概況................................................................................................................................3 實(shí)驗(yàn)概況................................................................................................................................4 實(shí)驗(yàn)感想................................................................................................................................5

實(shí)驗(yàn)內(nèi)容....................................................................................................................................9 實(shí)驗(yàn)一....................................................................................................................................9 實(shí)驗(yàn)二..................................................................................................................................15 實(shí)驗(yàn)三..................................................................................................................................25 實(shí)驗(yàn)四..................................................................................................................................33

Verilog實(shí)驗(yàn)報(bào)告

一、分組概況

組長:

主要負(fù)責(zé)各次實(shí)驗(yàn)的總體進(jìn)程,以及選做實(shí)驗(yàn)的代碼編譯。在實(shí)驗(yàn)報(bào)告中負(fù)責(zé)統(tǒng)籌規(guī)劃及后期編排。

組員:

負(fù)責(zé)各次實(shí)驗(yàn)必做實(shí)驗(yàn)源代碼的錄入及仿真。在實(shí)驗(yàn)報(bào)告中負(fù)責(zé)報(bào)告前期錄入,包括各次實(shí)驗(yàn)的簡要內(nèi)容、步驟等。

Verilog實(shí)驗(yàn)報(bào)告

二、實(shí)驗(yàn)概況

本課程共安排四次實(shí)驗(yàn),其內(nèi)容是:

1、練習(xí)

一、簡單的組合邏輯設(shè)計(jì)

練習(xí)

二、簡單分頻時序邏輯電路的設(shè)計(jì) 選做

一、設(shè)計(jì)一個字節(jié)(8位)的比較器

2、練習(xí)

三、利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻時序電路

練習(xí)

五、用always塊實(shí)現(xiàn)較復(fù)雜組合邏輯電路 選做

一、利用10MB時鐘設(shè)計(jì)一個單周期波形 選做

二、運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器

3、練習(xí)

四、阻塞賦值與非阻塞賦值的區(qū)別

練習(xí)

六、在Verilog中使用函數(shù) 練習(xí)

七、在Verilog中使用任務(wù)

練習(xí)題

5、綜合一個可以計(jì)算正整數(shù)平方、立方、階乘的函數(shù) 思考題

3、在blocking模塊中實(shí)現(xiàn)對兩種寫法的仿真

4、必做

一、設(shè)計(jì)一個串行數(shù)據(jù)檢測器

必做

二、樓梯燈——基本任務(wù) 選做

一、樓梯燈——擴(kuò)展任務(wù)

Verilog實(shí)驗(yàn)報(bào)告

三、感想

通過這4次的實(shí)驗(yàn),我們基本熟悉Modelsim 軟件,掌握了Modelsim 軟件的編譯、仿真方法。同時在編寫程序的過程中,加深了我們對課上所講的語法的認(rèn)識以及學(xué)會了測試模塊的編寫。經(jīng)過實(shí)驗(yàn)一,我們掌握了基本組合邏輯電路,基本時序電路;經(jīng)過實(shí)驗(yàn)二,我們掌握條件語句在簡單時序模塊設(shè)計(jì)中的使用、在Verilog模塊中應(yīng)用計(jì)數(shù)器以及用always實(shí)現(xiàn)較大組合邏輯電路;經(jīng)過實(shí)驗(yàn)三,我們掌握阻塞賦值與非阻塞賦值的概念與區(qū)別,了解函數(shù)的定義和在模塊設(shè)計(jì)中的使用,掌握任務(wù)在verilog模塊設(shè)計(jì)中的應(yīng)用;經(jīng)過實(shí)驗(yàn)四,我們掌握利用有限狀態(tài)機(jī)實(shí)現(xiàn)一般時序邏輯分析的方法。在實(shí)驗(yàn)過程中,我們也遇到過程序編寫以及軟件仿真上的問題。程序編寫時,要注意一些細(xì)節(jié),比如符號,全角與半角等。軟件仿真過程中,我們出現(xiàn)過程序無錯,但添加波形運(yùn)行后,卻沒有波形的情況,最后上網(wǎng)百度,找到了解決方法。實(shí)驗(yàn)總體來說,都比較順利。對于難度較大的實(shí)驗(yàn)四,只要思路清晰,考慮到所有的情況,就能做出來。

Verilog實(shí)驗(yàn)報(bào)告

四、實(shí)驗(yàn)內(nèi)容 第一次實(shí)驗(yàn)課:

練習(xí)一 簡單的組合邏輯設(shè)計(jì)

實(shí)驗(yàn)?zāi)康模海?)掌握基本組合邏輯電路的實(shí)現(xiàn)方法(2)初步了解兩種基本組合邏輯電路的生成方法(3)學(xué)習(xí)測試模塊的編寫(4)通過綜合和布局布線了解不同層次仿真的物理意義 實(shí)驗(yàn)原理:

實(shí)驗(yàn)代碼提供的是一個可綜合的數(shù)據(jù)比較器。從語句中可以看出是比較數(shù)據(jù)a,b的結(jié)果,結(jié)果相同輸出1,否則輸出0.測試模塊用于檢測模塊設(shè)計(jì)是否正確,給出輸入信號,觀察模塊的內(nèi)部信號和輸出信號以確定設(shè)計(jì)是否正確。綜合就是把compare.v文件送到synplify或其他綜合器進(jìn)行處理,啟動綜合器編譯。布局布線就是把綜合后的另一種文件(EDIF),在布線工具控制下進(jìn)行處理,啟動布局布線的編譯。實(shí)驗(yàn)內(nèi)容:

模塊源代碼的組合邏輯仿真與測試

實(shí)驗(yàn)代碼:

module compare(equal,a,b);inputa,b;output equal;

assign equal =(a==b)?1:0;

endmodule

實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/1ns `include “./compare.v”

module t;rega,b;wire equal;initial begin a=0;b=0;#100 a=0;b=1;#100 a=1;b=1;#100 a=1;b=0;

Verilog實(shí)驗(yàn)報(bào)告

#100 a=0;b=0;#100 $stop;end

compare m(.equal(equal),.a(a),.b(b));

endmodule 仿真結(jié)果:

練習(xí)二 簡單分頻時序邏輯電路的設(shè)計(jì)

實(shí)驗(yàn)?zāi)康模海?)掌握最基本時序電路的實(shí)現(xiàn)方法(2)學(xué)習(xí)時序電路測試模塊的編寫(3)學(xué)習(xí)綜合和不同層次的仿真 實(shí)驗(yàn)原理:

對于組合邏輯電路,可綜合成具體電路結(jié)構(gòu)的時序邏輯電路也有準(zhǔn)確的表達(dá)方式。在可綜合的模型中,通常用always塊或者@(posedgeclk)或(negedgeclk)結(jié)構(gòu)表達(dá)時序邏輯。實(shí)驗(yàn)為二分之一分頻器模型。

在always塊中,被賦值信號都必須定義為reg型,對于reg型數(shù)據(jù),如果未對它進(jìn)行賦值,仿真工具會認(rèn)為它是不定態(tài)的。為了正確觀察結(jié)果,在可綜合模塊中,常定義一個復(fù)位信號reset,其為低電平時對寄存器進(jìn)行復(fù)位。實(shí)驗(yàn)內(nèi)容:

分頻時序電路的仿真測試

實(shí)驗(yàn)代碼:

modulehalf_clk(reset,clk_in,clk_out);inputclk_in,reset;outputclk_out;regclk_out;always @(posedgeclk_in)begin if(!reset)clk_out=0;elseclk_out=~clk_out;end endmodule 實(shí)驗(yàn)仿真:

測試程序:

Verilog實(shí)驗(yàn)報(bào)告

`timescale 1ns/100ps `define clk_cycle 50 module top;reg clk,reset;wire clk_out;always #`clk_cycle clk=~clk;initial begin clk=0;reset=1;#10 reset=0;#110 reset=1;#100000 $stop;end half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));endmodule 仿真結(jié)果:

選做一 設(shè)計(jì)一個字節(jié)(8位)比較器

實(shí)驗(yàn)內(nèi)容:

比較兩個字節(jié)的大小,若a[7:0]大于b[7:0],則輸出高電平,否則輸出低電平。

實(shí)驗(yàn)代碼:

module compare8(equal,a,b);input [7:0]a,b;output equal;reg equal;always@(a or b)if(a>b)equal=1;else equal=0;endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/1ns

Verilog實(shí)驗(yàn)報(bào)告

`include “./compare8.v” module test8;reg [7:0]a;reg [7:0]b;wire equal;initial begin a=8'b10000000;b=8'b00000000;#100 a=8'b00001000;b=8'b00001111;#100 a=8'b00001111;b=8'b00011111;#100 a=8'b11111111;b=8'b11111111;#100 a=8'b10101010;b=8'b00001111;#100 $stop;end compare8 m(.equal(equal),.a(a),.b(b));endmodule 仿真結(jié)果:

第二次實(shí)驗(yàn)課

練習(xí)三 利用條件語句實(shí)現(xiàn)計(jì)數(shù)分頻時序電路

實(shí)驗(yàn)?zāi)康模海?)掌握條件語句在簡單時序模塊設(shè)計(jì)中的使用(2)學(xué)習(xí)在Verilog模塊中應(yīng)用計(jì)數(shù)器(3)學(xué)習(xí)測試模塊的編寫、綜合和不同層次的仿真 實(shí)驗(yàn)原理:

在可綜合的Verilog HDL模型中,常用的條件語句有if ?else和case?endcase兩種結(jié)構(gòu),用法和C語言相似。1.if語句(1)if(表達(dá)式)語句

(2)if(表達(dá)式)語句1 else語句2(3)if(表達(dá)式1)語句1;

else if(表達(dá)式2)語句2; else if(表達(dá)式3)語句3;

Verilog實(shí)驗(yàn)報(bào)告

?? 2.case語句

(1)case(表達(dá)式)endcase(2)casez(表達(dá)式)endcase(3)casex(表達(dá)式)endcase 前者用于不太復(fù)雜的分支關(guān)系,實(shí)際編寫模塊時常用的是后者。實(shí)驗(yàn)代碼是一個可綜合風(fēng)格的分頻器,可將10M時鐘分頻為500K,基本原理和二分之一分頻器類似,但需要定義一個計(jì)數(shù)器以準(zhǔn)確獲得1/20分頻。實(shí)驗(yàn)內(nèi)容:

進(jìn)行所給代碼計(jì)數(shù)分頻器的仿真測試并觀察輸出波形

實(shí)驗(yàn)代碼:

modulefdivsion(RESET,F10M,F500K);input F10M,RESET;output F500K;reg F500K;reg [7:0]j;always @(posedge F10M)if(!RESET)begin F500K<=0;j<=0;end else begin if(j==9)begin j<=0;F500K<=~F500K;end else j<=j+1;end endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/100ps `defineclk_cycle 50 moduledivision_top;reg F10M,RESET;wire F500K_clk;always #`clk_cycle F10M=~F10M;initial

Verilog實(shí)驗(yàn)報(bào)告

begin RESET=1;F10M=0;#100 RESET=0;#100 RESET=1;#10000 $stop;end fdivsion m0(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk));endmodule

仿真結(jié)果:

練習(xí)五 用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路

實(shí)驗(yàn)?zāi)康模?/p>

(1)掌握用always實(shí)現(xiàn)較大組合邏輯電路的方法;

(2)進(jìn)一步了解assign與always兩種組合電路實(shí)現(xiàn)方法的區(qū)別和注意點(diǎn);(3)學(xué)習(xí)測試模塊中隨機(jī)數(shù)的產(chǎn)生和應(yīng)用;(4)學(xué)習(xí)綜合不同層次的仿真,并比較結(jié)果。實(shí)驗(yàn)原理:

(1)自觸發(fā)always塊:

例:采用非阻塞賦值的自觸發(fā)振蕩器

module osc2(clk);outputclk;regclk;initial #10 clk=0;always @(clk)#10 clk<=~clk;endmodule @(clk)的第一次觸發(fā)之后,非阻塞賦值的RHS表達(dá)式便計(jì)算出來,并把值賦給LHS的時間并安排在更新事件隊(duì)列中。在非阻塞賦值更新事件隊(duì)列被激活之前,又遇到了@(clk)觸發(fā)語句,并且always塊再次對clk的值變化產(chǎn)生反應(yīng)。當(dāng)非阻塞LHS的值在同一時刻被更新時,@(clk)再一次觸發(fā)。

本實(shí)驗(yàn)示例中使用了電平敏感的always塊,所謂電平敏感的觸發(fā)條件:@后的括號內(nèi)電平里表中的任何一個電平發(fā)生變化(與時序邏輯不同,它在@后的括號內(nèi)沒有沿敏感關(guān)鍵詞,如posedge或negedge),就能觸發(fā)always塊的動作。(2)assign與always

Verilog實(shí)驗(yàn)報(bào)告

使用assign結(jié)構(gòu)來實(shí)現(xiàn)組合邏輯電路,如果邏輯關(guān)系比較復(fù)雜,不容易理解語句的功能,而適當(dāng)采用always來設(shè)計(jì)組合邏輯,使源代碼語句的功能容易理解。

同一組合邏輯電路分別用always塊和連續(xù)賦值語句assign描述時,代碼的形式大相徑庭,但在always中,若適當(dāng)運(yùn)用default(在case結(jié)構(gòu)中)和else(在if?else結(jié)構(gòu)中)語句時,通常可以綜合為純組合邏輯,盡管被賦值的變量一定要定義為reg型;若不使用default或else對默認(rèn)項(xiàng)進(jìn)行說明,則易生成意想不到的鎖存器,這一點(diǎn)一定注意!

實(shí)驗(yàn)代碼:

`define plus 3'd0 `define minus 3'd1 `define band 3'd2 `definebor 3'd3 `defineunegate 3'd4 modulealu(out,opcode,a,b);output[7:0] out;reg[7:0] out;input[2:0] opcode;input[7:0] a,b;always@(opcode or a or b)begin case(opcode)`plus: out=a+b;`minus: out=a-b;`band: out=a&b;`bor: out=a|b;`unegate: out=~a;default: out=8'hx;endcase end endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/1ns `include “./alu.v” moduleaultest;wire[7:0] out;reg[7:0] a,b;reg[2:0] opcode;parameter times=5;initial begin a={$random}%256;

Verilog實(shí)驗(yàn)報(bào)告

b={$random}%256;opcode=3'h0;repeat(times)begin #100 a={$random}%256;b={$random}%256;opcode=opcode+1;end #100 $stop;end alu alu1(out,opcode,a,b);endmodule 仿真結(jié)果:

選做

一、利用10MB時鐘設(shè)計(jì)一個單周期波形

實(shí)驗(yàn)內(nèi)容:

利用原有代碼,自己編寫模塊源代碼和測試模塊代碼,利用10M時鐘,設(shè)計(jì)一個單周期形狀的周期波形

實(shí)驗(yàn)代碼:

module fdivision2(RESET,clk,out);inputclk,RESET;output out;reg out;reg [15:0]j;always @(posedgeclk)if(!RESET)begin out<=0;j<=0;end else begin if(j==199)begin j<=j+1;out<=~out;end

Verilog實(shí)驗(yàn)報(bào)告

else begin if(j==299)begin j<=j+1;out<=~out;end else if(j==499)j<=0;else j<=j+1;end end endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/100ps `defineclk_cycle 50 modulefdivision_top;regclk,RESET;wireout_clk;always #`clk_cycleclk=~clk;initial begin RESET=1;clk=0;#1000 RESET=0;#1000 RESET=1;#100000 $stop;end fdivision2fdivision(.RESET(RESET),.clk(clk),.out(out_clk));endmodule 仿真結(jié)果:

Verilog實(shí)驗(yàn)報(bào)告

選做

二、用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路

實(shí)驗(yàn)內(nèi)容:

運(yùn)用always塊設(shè)計(jì)一個8路數(shù)據(jù)選擇器。要求:每路輸入數(shù)據(jù)與輸出數(shù)據(jù)均為4位2進(jìn)制數(shù),當(dāng)選擇開關(guān)(至少3位)或輸入數(shù)據(jù)變化時,輸出數(shù)據(jù)也相應(yīng)的變化。

實(shí)驗(yàn)代碼:

module lianxi4(out,opcode,a,b,c,d,e,f,g,h);output[3:0] out;reg[3:0] out;input[2:0] opcode;input[3:0] a,b,c,d,e,f,g,h;

always@(opcode or a or b or c or d or e or f or g or h)begin case(opcode)3'd0:out=a;3'd1:out=b;3'd2:out=c;3'd3:out=d;3'd4:out=e;3'd5:out=f;3'd6:out=g;3'd7:out=h;endcase end endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/1ns `include “./lianxi4.v” module lianxi4_t;wire[3:0] out;reg[3:0] a,b,c,d,e,f,g,h;reg[2:0] opcode;parameter times=8;initial begin a={$random}%16;b={$random}%16;c={$random}%16;d={$random}%16;e={$random}%16;

Verilog實(shí)驗(yàn)報(bào)告

f={$random}%16;g={$random}%16;h={$random}%16;opcode=3'b0;repeat(times)begin #100 a={$random}%16;b={$random}%16;c={$random}%16;d={$random}%16;e={$random}%16;f={$random}%16;g={$random}%16;h={$random}%16;opcode=opcode+1;仿真結(jié)果:

Verilog實(shí)驗(yàn)報(bào)告

第三次實(shí)驗(yàn)課

練習(xí)四 阻塞賦值與非阻塞賦值的區(qū)別

實(shí)驗(yàn)?zāi)康模?/p>

(1)通過實(shí)驗(yàn),掌握阻塞賦值與非阻塞賦值的概念與區(qū)別;(2)了解非阻塞與阻塞賦值的不同使用場合;

(3)學(xué)習(xí)測試模塊的編寫、綜合和不同層次的仿真。實(shí)驗(yàn)原理:

非阻塞賦值方式:在語句塊中,上面語句所賦的變量值不能立即就為下面的語句所用;塊結(jié)束后才能完成這次賦值操作,而所賦的變量值是上一次賦值所得;在編寫可綜合的時序邏輯模塊時,這是最常用的賦值方法。

阻塞賦值方式:賦值語句執(zhí)行完后,塊才結(jié)束;被賦的值才賦值語句執(zhí)行完后立刻就改變;在時序邏輯中使用時,可能會產(chǎn)生意想不到的結(jié)果。

在always塊中,阻塞賦值可以理解為賦值語句是順序執(zhí)行的,而非阻塞賦值可以理解為賦值語句是并發(fā)執(zhí)行的。在時序邏輯設(shè)計(jì)中,通常使用非阻塞賦值語句,而在實(shí)現(xiàn)組合邏輯的assign結(jié)構(gòu)中,或者always塊結(jié)構(gòu)中都必須采用阻塞賦值語句。

實(shí)驗(yàn)代碼:

module blocking(clk,a,b,c);output[3:0] b,c;input [3:0] a;inputclk;reg [3:0] b,c;always@(posedgeclk)begin b=a;c=b;$display(“blocking:a=%d,b=%d,c=%d.”,a,b,c);end endmodule

modulenonblocking(clk,a,b,c);output[3:0] b,c;input [3:0] a;inputclk;reg [3:0] b,c;always@(posedgeclk)begin b<=a;c<=b;$display(“nonblocking:a=%d,b=%d,c=%d.”,a,b,c);end endmodule 實(shí)驗(yàn)仿真:

Verilog實(shí)驗(yàn)報(bào)告

測試程序:

`timescale 1ns/100ps `include“./blocking.v” `include“./nonblocking.v” modulecomparetop;wire [3:0] b1,c1,b2,c2;reg[3:0] a;regclk;initial begin clk=0;forever #50 clk=~clk;end initial begin a=4'h3;$display(“_”);#100 a=4'h7;$display(“_”);#100 a=4'hf;$display(“_”);#100 a=4'ha;$display(“_”);#100 a=4'h2;$display(“_”);$stop;end nonblockingnonblocking(clk,a,b2,c2);blocking blocking(clk,a,b1,c1);endmodule 測試結(jié)果:

思考題3在blocking模塊中實(shí)現(xiàn)對兩種寫法的仿真

實(shí)驗(yàn)內(nèi)容:

在blocking模塊中按如下兩種寫法,仿真與綜合的結(jié)果會有什么樣的變化?做出仿真波形。

實(shí)驗(yàn)代碼:

Verilog實(shí)驗(yàn)報(bào)告

module blocking1(clk,a,b,c);output[3:0] b,c;input [3:0] a;inputclk;reg [3:0] b,c;always@(posedgeclk)begin c=b;b=a;end endmodule

module blocking2(clk,a,b,c);output[3:0] b,c;input [3:0] a;inputclk;reg [3:0] b,c;always@(posedgeclk)b=a;always@(posedgeclk)c=b;endmodule 實(shí)驗(yàn)仿真:

測試程序:

`include“./blocking1.v” `include“./blocking2.v” module top;wire [3:0] b1,c1,b2,c2;reg[3:0] a;regclk;initial begin clk=0;forever #50 clk=~clk;end initial begin a=4'h3;$display(“_”);#100 a=4'h7;$display(“_”);#100 a=4'hf;$display(“_”);#100 a=4'ha;$display(“_”);

Verilog實(shí)驗(yàn)報(bào)告

#100 a=4'h2;$display(“_”);$stop;end blocking2 blocking2(clk,a,b2,c2);blocking1 blocking1(clk,a,b1,c1);endmodule 測試結(jié)果:

練習(xí)六 在Verilog HDL中使用函數(shù)

實(shí)驗(yàn)?zāi)康模?/p>

(1)了解函數(shù)的定義和在模塊設(shè)計(jì)中的使用;(2)了解函數(shù)的綜合性問題;

(3)了解許多綜合器不能綜合復(fù)雜的算術(shù)運(yùn)算。實(shí)驗(yàn)原理:

與一般的程序設(shè)計(jì)語言一樣,Verilog HDL中也可使用函數(shù)以適應(yīng)對不同變量采取同一種運(yùn)算的操作。Verilog HDL函數(shù)在綜合時被理解成具有獨(dú)立運(yùn)算功能的電路,每調(diào)用一次函數(shù)相當(dāng)于改變這部分電路的輸入以得到相應(yīng)的計(jì)算結(jié)果。函數(shù)的目的是返回一個用于表達(dá)式的值。(1)函數(shù)定義

Function<返回值的類型或范圍>(函數(shù)名); <端口說明語句> <變量類型說明語句> Begin <語句>

?? End Endfuction(2)函數(shù)調(diào)用

<函數(shù)名>(<表達(dá)式>,?<表達(dá)式>)實(shí)驗(yàn)內(nèi)容:

采用同步時鐘觸發(fā)運(yùn)算的執(zhí)行,每個clk時鐘周期都會執(zhí)行一次運(yùn)算,并且在測試模塊中,通過調(diào)用系統(tǒng)任務(wù)$display及在時鐘的下降沿顯示每次計(jì)算的結(jié)果。

實(shí)驗(yàn)代碼:

moduletryfunct(clk,n,result,reset);output [31:0] result;input [3:0] n;

Verilog實(shí)驗(yàn)報(bào)告

inputreset,clk;reg [31:0] result;

always @(posedgeclk)begin if(!reset)result<=0;else begin result<=n*factorial(n)/((n*2)+1);end end

function [31:0] factorial;input [3:0] operand;reg [3:0] index;begin factorial=operand?1:0;for(index=2;index<=operand;index=index+1)factorial=index*factorial;end endfunction

endmodule 實(shí)驗(yàn)仿真:

測試程序:

`include “./tryfunct.v” `timescale 1ns/1ns `define clk_cycle 50

module tryfunct_test;reg[3:0] n,i;reg reset,clk;wire [31:0] result;

initial begin clk=0;n=0;reset=1;#100 reset=0;#100 reset=1;for(i=0;i<=15;i=i+1)

Verilog實(shí)驗(yàn)報(bào)告

begin #200 n=i;end #100 $stop;end

always #`clk_cycle clk=~clk;

tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset));

endmodule 測試結(jié)果:

練習(xí)七 在Verilog HDL中使用任務(wù)(task)

實(shí)驗(yàn)?zāi)康模?/p>

(1)掌握任務(wù)在verilog模塊設(shè)計(jì)中的應(yīng)用;

(2)學(xué)會在電平敏感列表的always中使用拼接操作、任務(wù)和阻塞賦值等語句,并生成復(fù)雜組合邏輯的高級方法。實(shí)驗(yàn)原理:

當(dāng)我們希望能夠?qū)⒁恍┬盘栠M(jìn)行運(yùn)算并輸出多個結(jié)果時,采用函數(shù)結(jié)構(gòu)就顯得非常不方便,而任務(wù)結(jié)構(gòu)在這方面的優(yōu)勢則十分突出。任務(wù)本身并不返回計(jì)算值,但它通過類似C語言中的形參與實(shí)參的數(shù)據(jù)變換,非常容易實(shí)現(xiàn)運(yùn)算結(jié)果的調(diào)用。此外,還常常利用任務(wù)來包裝模塊設(shè)計(jì)中的許多復(fù)雜的過程,將許多復(fù)雜的操作步驟用一個命名清晰易懂的任務(wù)隱藏起來,大大提高程序可讀性。(1)任務(wù)和函數(shù)的不同

函數(shù)只能與主模塊共用同一個仿真時間單位,而任務(wù)可以定義自己的仿真時間單位;函數(shù)不能啟動任務(wù)但任務(wù)能啟動其他任務(wù)和函數(shù);函數(shù)至少要有一個輸入變量,而任務(wù)可以沒有或有多個任何類型的變量;函數(shù)返回一個值,任務(wù)則不返回值。(2)任務(wù)定義

Task<任務(wù)名> <端口及數(shù)據(jù)類型聲明語句> <語句1> ?? Endtask(3)任務(wù)調(diào)用

<任務(wù)名>(端口1,端口2,?端口n); 實(shí)驗(yàn)內(nèi)容:

Verilog實(shí)驗(yàn)報(bào)告

利用電平敏感的always快和一個比較兩變量大小排序的任務(wù),設(shè)計(jì)出四個(4位)并行輸入數(shù)的高速排序組合邏輯。

實(shí)驗(yàn)代碼:

module sort4(ra,rb,rc,rd,a,b,c,d);output[3:0] ra,rb,rc,rd;input[3:0] a,b,c,d;reg[3:0] ra,rb,rc,rd;reg[3:0] va,vb,vc,vd;

always @(a or b or c or d)begin {va,vb,vc,vd}={a,b,c,d};sort2(va,vc);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);{ra,rb,rc,rd}={va,vb,vc,vd};end

task sort2;inout[3:0] x,y;reg[3:0] tmp;if(x>y)begin tmp=x;x=y;y=tmp;end endtask

endmodule 實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/100ps `include “sort4.v”

moduletask_test;reg[3:0] a,b,c,d;wire[3:0] ra,rb,rc,rd;

initial

Verilog實(shí)驗(yàn)報(bào)告

begin a=0;b=0;c=0;d=0;repeat(50)begin #100 a={$random}%15;b={$random}%15;c={$random}%15;d={$random}%15;end

#100 $stop;end

sort4 sort4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd));

endmodule 測試結(jié)果:

選做一 綜合一個可以計(jì)算整數(shù)平方、立方、階乘的函數(shù)

實(shí)驗(yàn)內(nèi)容:

設(shè)計(jì)一個函數(shù),可以計(jì)算整數(shù)平方、立方、以及不大于5的階乘

實(shí)驗(yàn)代碼:

modulelianxi(clk,n,opcode,result,reset);output [7:0] result;input [3:0] n,opcode;inputreset,clk;reg [7:0] result;

always @(posedgeclk)begin if(!reset)result<=0;else begin case(opcode)3'd0: result<=pingfang(n);

Verilog實(shí)驗(yàn)報(bào)告

3'd1: result<=lifang(n);3'd2: result<=jiecheng(n);default: result=8'hx;endcase end end

function [7:0] jiecheng;input [3:0] operand;reg [3:0] index;begin jiecheng=operand?1:0;for(index=2;index<=operand;index=index+1)jiecheng=index*jiecheng;end endfunction

function [7:0] pingfang;input [3:0] operand;pingfang=operand*operand;endfunction

function [7:0] lifang;input [3:0] operand;lifang=operand*operand*operand;endfunction

endmodule 實(shí)驗(yàn)仿真:

測試程序:

`include “./lianxi.v” `timescale 1ns/1ns `define clk_cycle 50

module lianxi_test;reg[3:0] n,opcode;regreset,clk;wire [7:0] result;parameter times=20;

initial begin clk=0;

Verilog實(shí)驗(yàn)報(bào)告

n=0;reset=1;opcode=0;#100 reset=0;#100 reset=1;begin n={$random}%6;opcode={$random}%3;repeat(times)begin #100 n={$random}%6;opcode={$random}%3;end end

#1000 $stop;end

always #`clk_cycleclk=~clk;

lianxi lian(.clk(clk),.n(n),.opcode(opcode),.result(result),.reset(reset));

endmodule 仿真結(jié)果:

第四次實(shí)驗(yàn)課

必做一[練習(xí)題七]設(shè)計(jì)一個串行數(shù)據(jù)檢測器

實(shí)驗(yàn)?zāi)康模?/p>

(1)掌握利用有限狀態(tài)機(jī)實(shí)現(xiàn)一般時序邏輯分析的方法;(2)掌握用Verilog編寫可綜合的有限狀態(tài)機(jī)的標(biāo)準(zhǔn)模板;(3)掌握用Verilog編寫狀態(tài)機(jī)模塊的測試文件的一般方法。實(shí)驗(yàn)原理:

(1)有限狀態(tài)機(jī)

有限狀態(tài)機(jī)是指輸出取決于過去輸入部分和當(dāng)前輸入部分的時序邏輯電路。一般來說,除了輸入部分和輸出部分外,有限狀態(tài)機(jī)還含有一組具有“記憶”功能的寄存器,這些寄存器的功能是記憶有限狀態(tài)機(jī)的內(nèi)部狀態(tài),它們常被稱為狀態(tài)寄存

Verilog實(shí)驗(yàn)報(bào)告

器。在有限狀態(tài)機(jī)中,狀態(tài)寄存器的的下一個狀態(tài)不僅與輸入信號有關(guān),而且還與該寄存器的當(dāng)前狀態(tài)有關(guān),因此有限狀態(tài)機(jī)又可以認(rèn)為是組合邏輯和寄存器邏輯的一種組合。其中,寄存器邏輯的功能是存儲有限狀態(tài)機(jī)的內(nèi)部狀態(tài);而組合邏輯又可以分為次態(tài)邏輯和輸出邏輯兩部分,次態(tài)邏輯的功能是確定有限狀態(tài)機(jī)的下一個狀態(tài),輸出邏輯的功能是確定有限狀態(tài)機(jī)的輸出。(2)有限狀態(tài)機(jī)設(shè)計(jì)

邏輯抽象,得出狀態(tài)裝換圖;狀態(tài)化簡;狀態(tài)分配;選定觸發(fā)器的類型并求出狀態(tài)方程、驅(qū)動方程和輸出方程;按照方程得出邏輯圖。

在數(shù)字電路中我們已經(jīng)學(xué)習(xí)過通過建立有限狀態(tài)機(jī)來進(jìn)行數(shù)字邏輯的設(shè)計(jì),而在Verilog HDL硬件描述語言中,這種設(shè)計(jì)方法得到進(jìn)一步的發(fā)展。通過Verilog HDL提供的語句,我們可以直觀地設(shè)計(jì)出適合更為復(fù)雜的時序邏輯的電路。實(shí)驗(yàn)內(nèi)容:

設(shè)計(jì)一個串行數(shù)據(jù)檢測器。要求是:連續(xù)4個或4個以上為1時輸出為1,其他輸入情況下為0。編寫測試模塊對設(shè)計(jì)的模塊進(jìn)行各種層次的仿真,并觀察波形,編寫實(shí)驗(yàn)報(bào)告。

實(shí)驗(yàn)代碼:

module lianxiti7(x,z,clk,rst,state);inputx,clk,rst;output z;output[2:0]state;reg[2:0]state;wire z;

parameter IDLE='d0,A='d1,B='d2,C='d3,D='d4;

always@(posedgeclk)if(!rst)begin state<=IDLE;end else case(state)IDLE: state<=x ?A : IDLE;A: state<=x ?B : IDLE;B: state<=x ?C : IDLE;C: state<=x ?D :IDLE;D: state<=x ?state : IDLE;

default:state=IDLE;endcase assign z=(state==D);endmodule

Verilog實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)仿真:

測試程序:

`timescale 1ns/1ns `include “./lianxiti7.v” modulelianxititop;regclk,rst;reg[23:0] data;wire[2:0] state;wirez,x;assign x=data[23];always #10 clk=~clk;always @(posedgeclk)data={data[22:0],data[23]};

initial begin clk=0;rst=1;#2 rst=0;#30 rst=1;data='b1001_1110_0111_1101_0101;#500 $stop;end lianxiti7 m(x,z,clk,rst,state);endmodule 仿真結(jié)果:

必做二 樓梯燈——基本任務(wù)

實(shí)驗(yàn)內(nèi)容:

樓下到樓上依次有3個感應(yīng)燈:燈

1、燈

2、燈3。當(dāng)行人上下樓梯時,各個燈感應(yīng)到后自動點(diǎn)亮,若在8s內(nèi)感應(yīng)信號消失,則點(diǎn)亮8s,若感應(yīng)信號存在時間超過8s,則感應(yīng)信號消失4s后燈自動關(guān)閉。

任務(wù)1:做出如上邏輯電路設(shè)計(jì)并仿真; 任務(wù)2:考慮去抖,對于感應(yīng)信號到達(dá)存在毛刺(小于0.5s),設(shè)計(jì)邏輯并剔出。

實(shí)驗(yàn)代碼:

module loutid1(clk10,rst,switch,light);

input clk10,rst;input[2:0]switch;output[2:0]light;

reg[2:0]state1,state2,state3;reg[7:0]count1,count2,count3;reg[2:0]count_1,count_2,count_3;reg[2:0]light;

parameter

state1_start=3'b000,state2_start=3'b000,state3_start=3'b000,state1_work=3'b001,state2_work=3'b001,state3_work=3'b001,state1_up=3'b010,state2_up=3'b010,state3_up=3'b010,state1_down=3'b011,state2_down=3'b011,state3_down=3'b011,state1_other=3'b100,state2_other=3'b100,state3_other=3'b100;

always@(posedge clk10)if(!rst)begin state1<=state1_start;count1<=8'b0;count_1<=3'b0;end else if(switch[0]=='b1&&count_1<4)count_1<=count_1+1;else case(state1)

state1_start: if(switch[0]=='b1)begin state1<=state1_up;count1<=78;end

Verilog實(shí)驗(yàn)報(bào)告

else begin

state1<=state1_start;light[0]<='b0;end

state1_up: begin

light[0]<='b1;

state1<=state1_work;end

state1_work: if(count1>0)begin

count1<=count1-1;end else

if(switch[0]=='b0)begin

state1<=state1_down;end else begin

state1<=state1_other;

count1<=39;end

state1_other: if(switch[0]=='b1)

state1<=state1_other;else

if(count1>0)begin

count1<=count1-1;end else

state1<=state1_down;

state1_down: begin light[0]<='b0;count_1<=3'b0;state1<=state1_start;end

default: state1<=state1_start;

endcase

always@(posedge clk10)if(!rst)begin state2<=state2_start;count2<=8'b0;count_2<=3'b0;end else if(switch[1]=='b1&&count_2<4)count_2<=count_2+1;else case(state2)

state2_start: if(switch[1]=='b1)begin state2<=state2_up;count2<=78;end else begin state2<=state2_start;light[1]<='b0;end

state2_work: if(count2>0)begin count2<=count2-1;end else if(switch[1]=='b0)begin

Verilog實(shí)驗(yàn)報(bào)告

state2<=state2_down;end else begin

state2<=state2_other;

count2<=39;end

state2_other: if(switch[1]=='b1)

state2<=state2_other;else

if(count2>0)begin

count2<=count2-1;end else

state2<=state2_down;

state2_down: begin

light[1]<='b0;

count_2<=3'b0;

state2<=state2_start;end

state2_up: begin

light[1]<='b1;

state2<=state2_work;end

default:

state2<=state2_start;

endcase

always@(posedge clk10)if(!rst)begin

state3<=state3_start;count3<=8'b0;count_3<=3'b0;end else if(switch[2]=='b1&&count_3<4)count_3<=count_3+1;else case(state3)

state3_start: if(switch[2]=='b1)begin state3<=state3_up;count3<=78;end else begin state3<=state3_start;light[2]<='b0;end

state3_work: if(count3>0)begin count3<=count3-1;end else if(switch[2]=='b0)begin

state3<=state3_down;end else begin state3<=state3_other;

實(shí)驗(yàn)仿真:

測試程序:

`timescale 10ms/1ms module loutid1_t;reg clk10,rst;reg[2:0] swh;wire[2:0] light;

Verilog實(shí)驗(yàn)報(bào)告

count3<=39;end

state3_other: if(switch[2]=='b1)

state3<=state3_other;else

if(count3>0)begin

count3<=count3-1;end else

state3<=state3_down;

state3_down: begin

light[2]<='b0;

count_3<=3'b0;

state3<=state3_start;end

state3_up: begin

light[2]<='b1;

state3<=state3_work;end

default:

state3<=state3_start;

endcase

endmodule

Verilog實(shí)驗(yàn)報(bào)告

parameter HALF_PERIOD = 5;

always #HALF_PERIOD clk10=~clk10;

initial begin

clk10 = 0;

rst = 1;

swh=3'b000;

#1 rst = 0;

#10 rst = 1;

#100 swh=3'b000;

#100 swh=3'b001;#400 swh=3'b000;#40 swh=3'b001;#500 swh=3'b010;#900 swh=3'b000;#400 swh=3'b100;#400 swh=3'b000;#600 swh=3'b001;#40 swh=3'b000;

#1000 $stop;end 仿真結(jié)果:

選做一:樓梯燈——拓展任務(wù)

實(shí)驗(yàn)內(nèi)容:

任務(wù)3:若為節(jié)約能源,下一個燈點(diǎn)亮的同時將自動關(guān)閉上一個燈,作出如上邏輯設(shè)計(jì)并仿真(僅考慮一個人的情況);

任務(wù)4:考慮存在多個人上下樓梯的情況,比如:

行人1已經(jīng)從燈1到達(dá)燈2,燈2受感應(yīng)自動點(diǎn)亮,但此時行人2剛上樓梯到達(dá)燈1的位置,則燈1和燈2都須點(diǎn)亮,更加復(fù)雜一點(diǎn),如果行人2是下樓梯剛到達(dá)燈3位置,作出如上邏輯設(shè)計(jì)并仿真;

實(shí)驗(yàn)代碼:

modulelight_All(clk10,rst,switch,light);

input clk10,rst;input[2:0]switch;output[2:0]light;

reg[2:0]state1,state2,state3;reg[7:0]count1,count2,count3;reg[2:0]count_1,count_2,count_3;reg[2:0]light;

parameter

state1_start=3'b000,state2_start=3'b000,state3_start=3'b000,state1_work=3'b001,state2_work=3'b001,state3_work=3'b001,state1_up=3'b010,state2_up=3'b010,state3_up=3'b010,state1_down=3'b011,state2_down=3'b011,state3_down=3'b011,state1_other=3'b100,state2_other=3'b100,state3_other=3'b100;

always@(posedge clk10)if(!rst)begin state1<=state1_start;count1<=8'b0;count_1<=3'b0;end else if(switch[0]=='b1&&count_1<4)count_1<=count_1+1;else case(state1)

state1_start: if(switch[0]=='b1)

Verilog實(shí)驗(yàn)報(bào)告

begin

state1<=state1_up;count1<=78;end else begin

state1<=state1_start;light[0]<='b0;end

state1_work: if(count1>0)begin

count1<=count1-1;

if(switch[0]=='b0&&(state2==3'b010||state3==3'b010))begin

light[0]<='b0;state1<=state1_down;end end else

if(switch[0]=='b0)begin

state1<=state1_down;end else begin

state1<=state1_other;count1<=39;end

state1_other: if(switch[0]=='b1)

state1<=state1_other;else

if(count1>0)begin

count1<=count1-1;if(switch[0]=='b0&&(state2==3'b010||state3==3'b010))begin

light[0]<='b0;state1<=state1_down;end end else state1<=state1_down;

state1_down: begin light[0]<='b0;count_1<=3'b0;state1<=state1_start;end

state1_up: begin light[0]<='b1;state1<=state1_work;end

default: state1<=state1_start;

endcase

always@(posedge clk10)if(!rst)begin state2<=state2_start;count2<=8'b0;count_2<=3'b0;end else if(switch[1]=='b1&&count_2<4)count_2<=count_2+1;else case(state2)

state2_start: if(switch[1]=='b1)begin state2<=state2_up;count2<=78;

Verilog實(shí)驗(yàn)報(bào)告

end else begin

state2<=state2_start;light[1]<='b0;end

state2_work: if(count2>0)begin

count2<=count2-1;

if(switch[1]=='b0&&(state1==3'b010||state3==3'b010))begin

light[1]<='b0;state2<=state2_down;end end else

if(switch[1]=='b0)begin

state2<=state2_down;end else begin

state2<=state2_other;count2<=39;end

state2_other: if(switch[1]=='b1)

state2<=state2_other;else

if(count2>0)begin

count2<=count2-1;if(switch[1]=='b0&&(state1==3'b010||state3==3'b010))begin

light[1]<='b0;

state2<=state2_down;end end else state2<=state2_down;

state2_down: begin light[1]<='b0;count_2<=3'b0;state2<=state2_start;end

state2_up: begin light[1]<='b1;state2<=state2_work;end

default: state2<=state2_start;

endcase

always@(posedge clk10)if(!rst)begin state3<=state3_start;count3<=8'b0;count_3<=3'b0;end else if(switch[2]=='b1&&count_3<4)count_3<=count_3+1;else case(state3)

state3_start: if(switch[2]=='b1)begin state3<=state3_up;count3<=78;end else begin state3<=state3_start;

Verilog實(shí)驗(yàn)報(bào)告

light[2]<='b0;end

state3_work: if(count3>0)begin

count3<=count3-1;

if(switch[2]=='b0&&(state1==3'b010||state2==3'b010))begin

light[2]<='b0;state3<=state3_down;end end else

if(switch[2]=='b0)begin

state3<=state3_down;end else begin

state3<=state3_other;count3<=39;end

state3_other: if(switch[2]=='b1)

state3<=state3_other;else

if(count3>0)begin

count3<=count3-1;if(switch[2]=='b0&&(state1==3'b010||state2==3'b010))begin

light[2]<='b0;

state3<=state3_down;end end else

state3<=state3_down;

Verilog實(shí)驗(yàn)報(bào)告

state3_down: begin light[2]<='b0;count_3<=3'b0;state3<=state3_start;end

state3_up: begin light[2]<='b1;

state3<=state3_work;end

default:

state3<=state3_start;

endcase

endmodule實(shí)驗(yàn)仿真:

測試程序:

`timescale 10ms/1ms moduletest_light_All;reg clk10,rst;reg[2:0] up,down;wire[2:0] swh;wire[2:0] light;

parameter HALF_PERIOD = 5;

always #HALF_PERIOD clk10=~clk10;

initial

begin

clk10 = 0;

rst = 1;

up = 3'b000;down = 3'b000;

#1 rst = 0;

#10 rst = 1;

#100 up = 3'b001;down = 3'b000;

#300 up =3'b010;down = 3'b000;

#600 up = 3'b010;down = 3'b010;

#30 up = 3'b010;

#900 up = 3'b100;down = 3'b001;

#1000 $stop;

end

assignswh = up | down;

light_Allm5(clk10,rst,swh,light);endmodul仿真結(jié)果:

第三篇:數(shù)字電子時鐘實(shí)驗(yàn)報(bào)告

華大計(jì)科學(xué)院

數(shù)字邏輯課程設(shè)計(jì)說明書

題目:

多功能數(shù)字鐘

專業(yè):

計(jì)算機(jī)科學(xué)與技術(shù)

班級:

網(wǎng)絡(luò)工程1班

姓名:

劉群 學(xué)號:

1125111023

完成日期:

2013-9

一、設(shè)計(jì)題目與要求

設(shè)計(jì)題目:多功能數(shù)字鐘 設(shè)計(jì)要求:

1.準(zhǔn)確計(jì)時,以數(shù)字形式顯示時、分、秒的時間。2.小時的計(jì)時可以為“12翻1”或“23翻0”的形式。

3.可以進(jìn)行時、分、秒時間的校正。

二、設(shè)計(jì)原理及其框圖 1.數(shù)字鐘的構(gòu)成

數(shù)字鐘實(shí)際上是一個對標(biāo)準(zhǔn)頻率1HZ)進(jìn)行計(jì)數(shù)的計(jì)數(shù)電路。由于計(jì)數(shù)的起始時間不可能與標(biāo)準(zhǔn)時間(如北京時間)一致,故需要在電路上加一個校時電路。圖 1 所示為數(shù)字鐘的一般構(gòu)成框圖。

圖1 數(shù)字電子時鐘方案框圖 ⑴多諧振蕩器電路

多諧振蕩器電路給數(shù)字鐘提供一個頻率1Hz 的信號,可保證數(shù)字鐘的走時準(zhǔn)確及穩(wěn)定。⑵時間計(jì)數(shù)器電路

時間計(jì)數(shù)電路由秒個位和秒十位計(jì)數(shù)器、分個位和分十位計(jì)數(shù)器及時個位和時十位計(jì)數(shù)器電路構(gòu)成。其中秒個位和秒十位計(jì)數(shù)器、分個位和分十位計(jì)數(shù)器為60 進(jìn)制計(jì)數(shù)器。而根據(jù)設(shè)計(jì)要求,時個位和時十位計(jì)數(shù)器為24 進(jìn)制計(jì)數(shù)器。⑶譯碼驅(qū)動電路

譯碼驅(qū)動電路將計(jì)數(shù)器輸出的8421BCD 碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且為保證數(shù)碼管正常工作提供足夠的工作電流。⑷數(shù)碼管

數(shù)碼管通常有發(fā)光二極管(LED)數(shù)碼管和液晶(LCD)數(shù)碼管。本設(shè)計(jì)提供的為LED數(shù)碼管。2.數(shù)字鐘的工作原理 ⑴多諧振蕩器電路

555 定時器與電阻R1、R2,電容C1、C2 構(gòu)成一個多諧振蕩器,利用電容的充放電來調(diào)節(jié)輸出V0,產(chǎn)生矩形脈沖波作為時鐘信號,因?yàn)槭菙?shù)字鐘,所以應(yīng)選擇的電阻電容值使頻率為1HZ。⑵時間計(jì)數(shù)單元

六片74LS90 芯片構(gòu)成計(jì)數(shù)電路,按時間進(jìn)制從右到左構(gòu)成從低位向高位的進(jìn)位電路,并通過譯碼顯示。在六位LED 七段顯示起上顯示對應(yīng)的數(shù)值。⑶校時電源電路

當(dāng)重新接通電源或走時出現(xiàn)誤差時都需要對時間進(jìn)行校正。通常,校正時間的方法是:首先截?cái)嗾5挠?jì)數(shù)通路,然后再進(jìn)行人工出觸發(fā)計(jì)數(shù)或?qū)㈩l率較高的方波信號加到需要校正的計(jì)數(shù)單元的輸入端,校正好后,再轉(zhuǎn)入正常計(jì)時狀態(tài)即可。

根據(jù)要求,數(shù)字鐘應(yīng)具有分校正和時校正功能。因此,應(yīng)截?cái)喾謧€位和時個位的直接計(jì)數(shù)通路,并采用正常計(jì)時信號與校正信號可以隨時切換的電路接入其中。圖8所示即為帶有基本RS 觸發(fā)器的校時電路。

三、元器件

1.實(shí)驗(yàn)中所需的器材 單刀雙擲開關(guān)4 個.5V 電源.共陰七段數(shù)碼管 6 個.74LS90D 集成塊 6 塊.74HC00D 6個 LM555CM 1個 電阻 6個 10uF 電容 2個

2.芯片內(nèi)部結(jié)構(gòu)及引腳圖

圖2 LM555CM集成塊

圖3 74LS90D集成塊

五、各功能塊電路圖

1秒脈沖發(fā)生器主要由555 定時器和一些電阻電容構(gòu)成,原理是利用555 定時器的特性,通過電容的充放電使VC 在高、低電平之間轉(zhuǎn)換。其中555 定時器的高、低電平的門閥電壓分別是2/3VCC 和1/3VCC電容器充電使VC 的電壓大于2/3VCC 則VC 就為高電平,然

而由于反饋?zhàn)饔糜謺闺娙莘烹姟.?dāng)VC 小于1/3VCC 時,VC 就為低電平。同樣由于反饋?zhàn)饔糜謺闺娙莩潆姟Mㄟ^555 定時器的這一性質(zhì)我們就可以通過計(jì)算使他充放電的周期剛好為1S這樣我們就會得到1HZ 的信號。其中555 定時器的一些功能對照后面目錄。其中 555 定時器組成的脈沖發(fā)生器電路見附圖4.圖4 555 定時器組成的脈沖發(fā)生器

由于我們要得到1HZ 的信號,所以我們就可以通過555 定時器充放電一次所需的時間的公式。將那時間設(shè)為1S然后設(shè)定兩個電阻計(jì)算出另外那個電容值.在設(shè)定電阻值時我們要記住將電阻值設(shè)為比較常用的那種電阻值,得到的電容值也盡可能讓它是比較普遍使用 的。這樣就避免了在實(shí)際組裝過程中很難買到當(dāng)初設(shè)定的那電阻和計(jì)算出 的電容值。

在這次設(shè)定中我們設(shè)定的電阻值RA=10KΩ,RB=62kΩ,C=10uF 經(jīng)公式

f = 1.43 ÷【(RA + 2RB)×C 】 可得近似為1HZ。

2、利用一個LED 數(shù)碼管一塊74LS90D 連接成一個十進(jìn)制計(jì)數(shù)器,電路在晶振的作用下數(shù)碼管從0—9 顯示見圖5。

圖5、利用2 片74LS90D 芯片連接成一個六十進(jìn)制電路,電路可從0—59 顯示。第一片74LS90D芯片構(gòu)成10 進(jìn)制計(jì)數(shù)器,第二片74LS90D 芯片構(gòu)成6 進(jìn)制計(jì)數(shù)器。74LS90D 具有異步清零功能。

在第一片74ls90 構(gòu)成的十進(jìn)制計(jì)數(shù)器中,當(dāng)?shù)谑畟€脈沖來到時。此時他的四級觸發(fā)器的狀態(tài)為“1001”。這時他就會自動清零。同時給第二片74ls90 構(gòu)成的6 進(jìn)制計(jì)數(shù)器進(jìn)一,第六個脈沖進(jìn)位到來時,此時第二片74ls90 芯片的觸發(fā)器的狀態(tài)為“0110”,這時QB,QC 均為高電平。將QB 與RO1 相連,將Ro2 與Qc 相連,就會進(jìn)行異步清零。如此循環(huán)就會構(gòu)成60 進(jìn)制計(jì)數(shù)器.見附圖6.圖6 十六進(jìn)制電路

4、利用2 片74LS90D 芯片構(gòu)成24 進(jìn)制計(jì)數(shù)器。一片構(gòu)成二進(jìn)制計(jì)數(shù)器,一片構(gòu)成四進(jìn)制計(jì)數(shù)器。由于74LS90D 芯片清零是由兩個清零端控制的,所以當(dāng)?shù)?4 個脈沖到來時,第一片74lLS90D芯片的Qc 為高電平。第二片74LS90D 芯片的Qb 為高電平,讓第一片74LS90D 芯片的Qc 與兩片芯片的Ro1 相連.讓第二片74ls90 芯片的QB 與兩片芯片的Ro2 相連。當(dāng)?shù)?4 個脈沖到來時就會進(jìn)行異步清零。如此循環(huán)就會構(gòu)成24 進(jìn)制計(jì)數(shù)器。見附圖7.圖7 24進(jìn)制電路

5、數(shù)字鐘電路由于秒信號的精確性和穩(wěn)定性不可能坐到完全準(zhǔn)確無誤,又因?yàn)殡娐分衅渌脑驍?shù)字鐘總會產(chǎn)生走時誤差的現(xiàn)象。所以,電路中就應(yīng)該有校準(zhǔn)時間功能的電路。在這次設(shè)計(jì)中教時電路用的是一個RS 基本觸發(fā)器的單刀雙置開關(guān),每搬動開關(guān)一次產(chǎn)生一個計(jì)數(shù)脈沖.實(shí)現(xiàn)校時功能。見附圖8。

7、利用兩個六十進(jìn)制和一個二十四進(jìn)制連接成一個時、分、秒都會進(jìn)位的電路總圖。見附圖8

圖8 總電路圖

六、心得體會

在這次設(shè)計(jì)中我們深深地體會到了理論跟實(shí)踐的不同,理論學(xué)的再好不會動手那也只能是紙上談兵。我們了解了集成電路芯片的型號命名規(guī)律,懂得了沒有某種芯片時的替代方法,以及在網(wǎng)上查找電子電路資料的方法,掌握了各芯片的邏輯功能及使用方法,進(jìn)一步熟悉了集成電路的引腳安排,掌握了數(shù)字鐘的設(shè)計(jì)方法,明白了數(shù)字鐘的組成原理以及工作原理。掌握了計(jì)數(shù)器的工作原理,以及計(jì)數(shù)器進(jìn)制的組成方法和級聯(lián)方法,實(shí)現(xiàn)了一次理論指導(dǎo)實(shí)踐、理論向?qū)嵺`過渡的跨越,雖然期間遇到一些困難,但這些困難卻增強(qiáng)了我們分析問題、解決問題的能力,使我們以后不僅只學(xué)習(xí)書本中的理論知識,而且知道學(xué)以致用,動過動手實(shí)踐是我們對書本中的理論知識掌握地跟牢固、理解地跟深刻,這對我們今后的工作及學(xué)習(xí)有積極的影響。這次課程設(shè)計(jì)不僅再次復(fù)習(xí)了數(shù)字電子和模擬電子,而且讓我對于芯片的使用更加了解。增加了我的動手操作能力,加深了對該軟件的了解。這就是這次課程設(shè)計(jì)的成果,相信這些實(shí)際的操作經(jīng)驗(yàn)會是我們以后的寶貴財(cái)富。

第四篇:數(shù)字電子技術(shù)設(shè)計(jì)性實(shí)驗(yàn)報(bào)告

數(shù)字電子技術(shù)設(shè)計(jì)性實(shí)驗(yàn)報(bào)告

設(shè)計(jì)題目:

專業(yè)

班級

學(xué)號

學(xué)生姓名

指導(dǎo)教師

教師評分

年月日

第五篇:數(shù)字電子實(shí)習(xí)報(bào)告

數(shù)字電子實(shí)習(xí)報(bào)告

班級:

姓名:

學(xué)號:

課程設(shè)計(jì)任務(wù)書

一、設(shè)計(jì)題目

本次課程設(shè)計(jì)的題目為:汽車尾燈模擬控制電路設(shè)計(jì)

二、功能要求:

利用開關(guān)來控制汽車的運(yùn)行和轉(zhuǎn)向。

三、設(shè)計(jì)要求

1.設(shè)計(jì)過程:先寫總體設(shè)計(jì)方案(包括框圖和總電路圖),然后是各個模塊

的設(shè)計(jì)(要求有相應(yīng)的電路圖),結(jié)果分析。2.完成電路硬件制做。3.最后是設(shè)計(jì)總結(jié)。

四、所需器件

74LS76; 雙JK觸發(fā)器 LED:6個;

74LS04:2個; 六非門

74LS138; 3線8線譯碼器 74LS00:2個; 2輸入四個 與非門 74LS10; 3輸入三個 與非門 74LS86; 2輸入四 異或門 開關(guān):2個; 電阻:200Ω,8個; 電源:+5v;

要求查閱相關(guān)芯片資料,用所給芯片設(shè)計(jì)電路

設(shè)計(jì)過程

主電路圖 2.電路結(jié)構(gòu)與原理圖

(1)開關(guān)控制電路(如圖2)

圖2 開關(guān)控制電路

開關(guān)兩端一端接高電平,一端接地(低電平)。74LS86D與74LS138的輸入控制端連接,當(dāng)開關(guān)同時閉合或斷開的時候,輸入相同,74LS86輸出為“0”,則74LS138不譯碼。若兩開關(guān)同時斷開,則74LS04D的輸出為“1”;而74LS10D接有CP脈沖,所以此時74LS00D的輸出完全決定于CP脈沖;當(dāng)兩開關(guān)同時閉合,74LS00D輸出為“1”; B開關(guān)打開;B開關(guān)閉合,A開關(guān)打開時的分析也按照上面的方法來分析實(shí)現(xiàn)。

(2)三進(jìn)制計(jì)數(shù)器電路(如圖3)

圖3 三進(jìn)制計(jì)數(shù)器電路

三進(jìn)制計(jì)數(shù)電路由2個主從JK觸發(fā)器構(gòu)成。第一個主從JK觸發(fā)器的輸出Q1端直接接入74LS138譯碼器的輸入端,第二個主從JK觸發(fā)器的輸出Q2端輸入也直接接入74LS138的輸入端,同時,第二個主從JK觸發(fā)器的另一端輸出直接作為第一個主從JK觸發(fā)器的J端輸入,注意,Q2應(yīng)比Q1的權(quán)高。并且,兩個主從JK觸發(fā)器的K端輸入都是接的高電平,這樣就能使變化后的脈沖的周期為3,從而實(shí)現(xiàn)了三進(jìn)制計(jì)數(shù)。

(3)譯碼電路(如圖4)

圖4 譯碼電路

74LS138譯碼器是一種經(jīng)常使用的3線8線譯碼器,如圖所示,4、5端接地,6端接控制電路提供的控制信號,1、2、3分別第一個和第二個主從JK觸發(fā)器的輸出信號Q1、Q2、和控制電路的控制信號。由于只要求有6個指示燈,所以在74LS138的輸出端只接了6個端口(左轉(zhuǎn)彎:Y0 Y1 Y2;右轉(zhuǎn)彎 :Y4 Y5 Y6)用以控制信號燈。并且,按照以下真值表來實(shí)現(xiàn)。

(4)驅(qū)動電路:如圖5

圖5 驅(qū)動電路

使用發(fā)光二極管來顯示運(yùn)行結(jié)果。發(fā)光二極管正端接5V電源,當(dāng)非門的右邊輸入的是高電平,則經(jīng)過非門以后變成低電平,則發(fā)光二極管亮;當(dāng)非門的右邊輸入的為低電平,則經(jīng)過非門以后變成高電平,則發(fā)光二極管熄滅。

下載北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告(優(yōu)秀范文五篇)word格式文檔
下載北航_電子實(shí)習(xí)_數(shù)字部分實(shí)驗(yàn)報(bào)告(優(yōu)秀范文五篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    電子工藝實(shí)習(xí)實(shí)驗(yàn)報(bào)告

    電子工藝實(shí)習(xí)實(shí)驗(yàn)報(bào)告1 一、實(shí)習(xí)目的了解日光燈的工作原理。學(xué)習(xí)安裝簡單的照明線路。練習(xí)如何認(rèn)識和使用試電筆。二、實(shí)習(xí)內(nèi)容日光燈結(jié)構(gòu)日光燈燈管的內(nèi)壁上涂有一層熒光......

    電子工藝實(shí)習(xí)實(shí)驗(yàn)報(bào)告

    電子工藝實(shí)驗(yàn)報(bào)告 一、常用電子元件概述 電子元件:如電阻器、電容器、電感器、喇叭、開關(guān)等。因?yàn)樗旧聿划a(chǎn)生電子,它對電壓、電流無控制和變換作用,所以又稱無源器件。其中,電......

    北航matlab上機(jī)實(shí)驗(yàn)報(bào)告

    MATLAB基礎(chǔ)上機(jī)指導(dǎo)書 實(shí)驗(yàn)?zāi)康?MATLAB基礎(chǔ)上機(jī)實(shí)驗(yàn)的目的主要是在深入理解和掌握課程中的基本概念和原理的基礎(chǔ)上培養(yǎng)學(xué)習(xí)者用計(jì)算機(jī)解決實(shí)際問題的意識,訓(xùn)練和提高學(xué)生分析......

    電工電子實(shí)習(xí)實(shí)驗(yàn)報(bào)告總結(jié)

    電工電子實(shí)習(xí)實(shí)驗(yàn)報(bào)告總結(jié) 兩個星期的電子電工實(shí)習(xí)時間并不算太長.但是在這并不長的兩個星期里面卻依然學(xué)到了不少的東西.在電工方面,了解并掌握了鋼絲鉗、尖嘴鉗、螺絲刀等......

    電子工藝實(shí)習(xí)實(shí)驗(yàn)報(bào)告心得

    電子工藝實(shí)習(xí)實(shí)驗(yàn)報(bào)告心得 編輯點(diǎn)評:實(shí)踐是檢驗(yàn)真理正確與否的唯一標(biāo)準(zhǔn),課堂上學(xué)到的知識如何有效運(yùn)用到實(shí)際生活中,需要我們課后多去實(shí)習(xí)和動手操作。電子工藝實(shí)習(xí)是電子專業(yè)......

    數(shù)字電子鐘實(shí)驗(yàn)報(bào)告

    本科實(shí)驗(yàn)報(bào)告 學(xué)號: 指導(dǎo)教師: 2016年7月19日 課程名稱: 姓名: 院系: 專業(yè): 電子電路安裝與調(diào)試 陳肖葦、李曉杰、張晨靖 信息與電子工程學(xué)院 電子科學(xué)與技術(shù) 3140104544 王子......

    電子裝配實(shí)習(xí)報(bào)告 數(shù)字電子鐘(合集)

    電子裝配實(shí)習(xí)報(bào)告 數(shù) 字 電 子 鐘 姓名: 班級: 學(xué)號: 成績: 一、 實(shí)習(xí)實(shí)習(xí)地點(diǎn):電子裝配實(shí)訓(xùn)室(二) 二、 時間:2-5周 三、 指導(dǎo)教師: 四、 實(shí)習(xí)總結(jié)(1500字左右) 電子元器件的基本知識......

    電子測量實(shí)驗(yàn)報(bào)告

    電子測量調(diào)研報(bào)告 題目: 電子測量技術(shù)發(fā)展與儀器姓 名:學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 專 業(yè): 班 級: 學(xué) 號: 2013年 6月16日 電子測量技術(shù)發(fā)展與儀器 摘要::科學(xué)技術(shù)的不斷發(fā)展促進(jìn)了......

主站蜘蛛池模板: 国产suv精品一区二区883| 国产亚洲精品美女久久久| 久久99精品国产99久久| 亚洲a∨无码一区二区三区| 国产欧美日韩综合精品一区二区| 一本一本久久a久久精品综合不卡| 国偷精品无码久久久久蜜桃软件| 国产人澡人澡澡澡人碰视频| 国产成人免费ā片在线观看| 中文字幕爆乳julia女教师| 亚洲色偷偷偷综合网| 牛牛视频一区二区三区| 亚洲精品国偷自产在线99正片| 亚洲精品一区二区三区无码a片| 欧美激情黑人极品hd| 欧美成人看片一区二区三区尤物| 亚洲日韩欧美内射姐弟| 午夜亚洲www湿好大| 一边添奶一边添p好爽视频| 无线日本视频精品| 国精品无码一区二区三区在线蜜臀| 国产一区二区三区小说| 亚洲中文字幕无码乱线| 日本乱偷人妻中文字幕| 国产精品成人va在线观看| 久久66热人妻偷产国产| 天堂中文8资源在线8| 苍井空亚洲精品aa片在线播放| 国产成人综合日韩精品无码| 亚洲av麻豆aⅴ无码电影| 国产真实夫妇4p交换视频| 伊人久久大香线蕉综合色狠狠| 久草热久草热线频97精品| 人人澡人人透人人爽| 国产精品特级毛片一区二区三区| 蜜臀视频在线一区二区三区| 日韩欧美偷拍高跟鞋精品一区| 漂亮人妻去按摩被按中出| 又粗又硬又大又爽免费视频播放| 免费无码久久成人影片| 九九99热久久精品在线6|