版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/與門module zxhand2(c,a,b); input a,b; output c; assign c= a & b; endmodule/或門module zxhor2(c,a,b); input a,b; output c; assign c= a | b; endmodule/非門module zxhnot2(c,b); input b; output c; assign c= b; endmodule/異或門module zxhxro2(c,a,b); input b; output c; assign c=a b; endmodule兩選一電路module data_
2、scan(d0,d1,sel,q);output q;input d0,d1,sel;wire t1,t2,t3;n1 zxhand2(t1,d0,sel);n2 zxhnot2 (t4,sel);n3 zxhand2(t2,d1,t4);n4 zxhor2(t3,t1,t2);assign q=t1; endmodule verilog HDL實(shí)例(一) 練習(xí)一簡(jiǎn)單的組合邏輯設(shè)計(jì) 目的: 掌握基本組合邏輯電路的實(shí)現(xiàn)方法。 這是一個(gè)可綜合的數(shù)據(jù)比較器,很容易看出它的功能是比較數(shù)據(jù)a與數(shù)據(jù)b,如果兩個(gè)數(shù)據(jù)相同,則給出結(jié)果1,否則給出結(jié)果0。在Verilog H
3、DL中,描述組合邏輯時(shí)常使用assign結(jié)構(gòu)。注意equal=(a=b)?1:0,這是一種在組合邏輯實(shí)現(xiàn)分支判斷時(shí)常使用的格式。 模塊源代碼: /- compare.v - module compare(equal,a,b); input a,b; output equal; assign equal=(a=b)?1:0; /a等于b時(shí),equal輸出為1;a不等于b時(shí),
4、; /equal輸出為0。 endmodule 測(cè)試模塊用于檢測(cè)模塊設(shè)計(jì)得正確與否,
5、它給出模塊的輸入信號(hào),觀察模塊的內(nèi)部信號(hào)和輸出信號(hào),如果發(fā)現(xiàn)結(jié)果與預(yù)期的有所偏差,則要對(duì)設(shè)計(jì)模塊進(jìn)行修改。 測(cè)試模塊源代碼: timescale 1ns/1ns /定義時(shí)間單位。 module comparetest; reg a,b; wire equal; initial /initial常用于仿真時(shí)信號(hào)的給出。 begin a=
6、0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1;&
7、#160; b=0; #100 $stop; /系統(tǒng)任務(wù),暫停仿真以便觀察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b); /調(diào)用模塊。Endmodule 【例3.1】4 位全加器module adder4(cout,sum,ina,inb,cin);output3:0 sum;output cout;input
8、3:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;endmodule【例3.2】4 位計(jì)數(shù)器module count4(out,reset,clk);output3:0 out;input reset,clk;reg3:0 out;always (posedge clk)beginif (reset) out<=0; /同步復(fù)位else out<=out+1; /計(jì)數(shù)endendmodule【例5.11】模為60 的BCD 碼加法計(jì)數(shù)器module count60(qout,cout,data,load,cin,reset,clk)
9、;output7:0 qout;output cout;input7:0 data;input load,cin,clk,reset;reg7:0 qout;always (posedge clk) /clk 上升沿時(shí)刻計(jì)數(shù)beginif (reset) qout<=0; /同步復(fù)位else if(load) qout<=data; /同步置數(shù)else if(cin)beginif(qout3:0=9) /低位是否為9,是則beginqout3:0<=0; /回0,并判斷高位是否為5if (qout7:4=5) qout7:4<=0;elseqout7:4<=qo
10、ut7:4+1; /高位不為5,則加1endelse /低位不為9,則加1qout3:0<=qout3:0+1;endendassign cout=(qout=8'h59)&cin)?1:0; /產(chǎn)生進(jìn)位輸出信號(hào)endmodule【例9.10】奇偶校驗(yàn)位產(chǎn)生器module parity(even_bit,odd_bit,input_bus);output even_bit,odd_bit;input7:0 input_bus;assign odd_bit = input_bus; /產(chǎn)生奇校驗(yàn)位assign even_bit = odd_bit; /產(chǎn)生偶校驗(yàn)位endmo
11、dule· Verilog HDL實(shí)例(二) 練習(xí)二. 簡(jiǎn)單時(shí)序邏輯電路的設(shè)計(jì) 目的:掌握基本時(shí)序邏輯電路的實(shí)現(xiàn)。 在Verilog HDL中,相對(duì)于組合邏輯電路,時(shí)序邏輯電路也有規(guī)定的表述方式。在可綜合的Verilog HDL模型,我們通常使用always塊和 (posedge clk)(上升沿)或 (negedge clk)(下降沿)的結(jié)構(gòu)來(lái)表述時(shí)序邏輯。下面是一個(gè)1/2分頻器的可綜合模型。 / half_clk.v:module half_clk(reset,clk_in,clk_out);input clk_in,reset;ou
12、tput clk_out;reg clk_out;always (posedge clk_in) begin if(!reset) clk_out=0; else clk_out=clk_out; endendmodule在always塊中,被賦值的信號(hào)都必須定義為reg型,這是由時(shí)序邏輯電路的特點(diǎn)所決定的。對(duì)于reg型數(shù)據(jù),如果未對(duì)它進(jìn)行賦值,仿真工具會(huì)認(rèn)為它是不定態(tài)。為了能正確地觀察到仿真結(jié)果,在可綜合風(fēng)格的模塊中我們通常定
13、義一個(gè)復(fù)位信號(hào)reset,當(dāng)reset為低電平時(shí),對(duì)電路中的寄存器進(jìn)行復(fù)位。測(cè)試模塊的源代碼:/- clk_Top.v -timescale 1ns/100psdefine clk_cycle 50module clk_Top.v;reg clk,reset;wire clk_out;always #clk_cycle clk = clk;initial begin clk = 0; reset = 1; #100
14、reset = 0; #100 reset = 1; #10000 $stop; endhalf_clk half_clk(.reset(reset),.clk_in(clk),.clk_out(clk_out);endmodule · Verilog HDL實(shí)例(三) 練習(xí)三. 利用條件語(yǔ)句實(shí)現(xiàn)較復(fù)雜的時(shí)序邏輯電路 目的:掌握條件語(yǔ)句在Verilog HDL中的使用。與常用的高級(jí)程序語(yǔ)言一樣,為了描述較為復(fù)雜的時(shí)序關(guān)系,Verilog HDL提供了條件語(yǔ)句供分支判斷時(shí)使用。在可綜合風(fēng)格的Verilo
15、g HDL模型中常用的條件語(yǔ)句有ifelse和caseendcase兩種結(jié)構(gòu),用法和C程序語(yǔ)言中類似。兩者相較,ifelse用于不很復(fù)雜的分支關(guān)系,實(shí)際編寫可綜合風(fēng)格的模塊、特別是用狀態(tài)機(jī)構(gòu)成的模塊時(shí),更常用的是caseendcase風(fēng)格的代碼。這一節(jié)我們給的是有關(guān)ifelse的范例,有關(guān)caseendcase結(jié)構(gòu)的代碼已后會(huì)經(jīng)常用到。下面給出的范例也是一個(gè)可綜合風(fēng)格的分頻器,是將10M的時(shí)鐘分頻為500K的時(shí)鐘?;驹砼c1/2分頻器是一樣的,但是需要定義一個(gè)計(jì)數(shù)器,以便準(zhǔn)確獲得1/20分頻模塊源代碼:/ - fdivision.v -module fdivision(reset,f10m,
16、f500k);input f10m,reset;output f500k;reg f500k;reg 7:0j; always (posedge f10m) if(!RESET) /低電平復(fù)位。 begin f500k <= 0; j <= 0; end else begin if(j=19) /對(duì)計(jì)數(shù)器進(jìn)行判斷,以確定F500K信號(hào)是否反轉(zhuǎn)。 begin j <= 0; f500k <= f500k; end else j <= j+1; endendmodule測(cè)試模塊源代碼:/- fdivision_Top.v -timescale 1ns/10
17、0psdefine clk_cycle 50module division_Top;reg f10m=0,reset;wire f500k;always #clk_cycle f10m = f10m; initial begin reset=1;#100 reset=0;#100 reset=1;#10000 $stop; endfdivision fdivision (.reset(reset),.f10m(f10m),.f500k(f500k);endmodule · Verilog HDL實(shí)例(四)練習(xí)四. 設(shè)計(jì)時(shí)序邏輯時(shí)采用阻塞賦值與非阻塞賦值的區(qū)別 目的:1.明確
18、掌握阻塞賦值與非阻塞賦值的概念和區(qū)別; 2.了解阻塞賦值的使用情況。阻塞賦值與非阻塞賦值,在教材中我們已經(jīng)了解了它們之間在語(yǔ)法上的區(qū)別以及綜合后所得到的電路結(jié)構(gòu)上的區(qū)別。在always塊中,阻塞賦值可以理解為賦值語(yǔ)句是順序執(zhí)行的,而非阻塞賦值可以理解為賦值語(yǔ)句是并發(fā)執(zhí)行的。實(shí)際的時(shí)序邏輯設(shè)計(jì)中,一般的情況下非阻塞賦值語(yǔ)句被更多地使用,有時(shí)為了在同一周期實(shí)現(xiàn)相互關(guān)聯(lián)的操作,也使用了阻塞賦值語(yǔ)句。(注意:在實(shí)現(xiàn)組合邏輯的assign結(jié)構(gòu)中,無(wú)一例外地都必須采用阻塞賦值語(yǔ)句。下例通過(guò)分別采用阻塞賦值語(yǔ)句和非阻塞賦值語(yǔ)句的兩個(gè)看上去非常相似的
19、兩個(gè)模塊blocking.v和non_blocking.v來(lái)闡明兩者之間的區(qū)別。模塊源代碼:/ - blocking.v -module blocking(clk,a,b,c); output 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (posedge clk) begin
20、; b = a; c = b; end endmodule /- non_blocking.v -module non_blocking(clk,a,b,c); output 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (pos
21、edge clk) begin b <= a; c <= b; endendmodule測(cè)試模塊源代碼:/- compareTop.v - timescale 1ns/100psinclude "./blocking.v"include "./non_blocking.v"module compareTop; wire 3:0 b1,c1,b2,c2; reg
22、0; 3:0 a; reg clk; initial begin clk = 0; forever #50 clk = clk; end initial begin a = 4'h3; $display("_"); # 10
23、0 a = 4'h7; $display("_"); # 100 a = 4'hf; $display("_"); # 100 a = 4'ha; $display("_"); # 100 a = 4'h2; $display("_")
24、; # 100 $display("_"); $stop; end non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);endmodule Verilog HDL實(shí)例(五) 練習(xí)五. 用always塊實(shí)現(xiàn)較復(fù)雜的組合邏輯電路 目的: 1.掌握用always實(shí)現(xiàn)組合邏輯電路的方法;
25、60; 2.了解assign與always兩種組合邏輯電路實(shí)現(xiàn)方法之間的區(qū)別。 僅使用assign結(jié)構(gòu)來(lái)實(shí)現(xiàn)組合邏輯電路,在設(shè)計(jì)中會(huì)發(fā)現(xiàn)很多地方會(huì)顯得冗長(zhǎng)且效率低下。而適當(dāng)?shù)夭捎胊lways來(lái)設(shè)計(jì)組合邏輯,往往會(huì)更具實(shí)效。已進(jìn)行的范例和練習(xí)中,我們僅在實(shí)現(xiàn)時(shí)序邏輯電路時(shí)使用always塊。從現(xiàn)在開始,我們對(duì)它的看法要稍稍改變。下面是一個(gè)簡(jiǎn)單的指令譯碼電路的設(shè)計(jì)示例。該電路通過(guò)對(duì)指令的判斷,對(duì)輸入數(shù)據(jù)執(zhí)行相應(yīng)的操作,包括加、減、與、或和求反,并且無(wú)論是指令作用的數(shù)據(jù)還是指令本身發(fā)生變化,結(jié)果都要作出及時(shí)的反應(yīng)。顯然,這是一個(gè)
26、較為復(fù)雜的組合邏輯電路,如果采用assign語(yǔ)句,表達(dá)起來(lái)非常復(fù)雜。示例中使用了電平敏感的always塊,所謂電平敏感的觸發(fā)條件是指在后的括號(hào)內(nèi)電平列表中的任何一個(gè)電平發(fā)生變化,(與時(shí)序邏輯不同,它在后的括號(hào)內(nèi)沒(méi)有沿敏感關(guān)鍵詞,如posedge 或negedge)就能觸發(fā)always塊的動(dòng)作,并且運(yùn)用了case結(jié)構(gòu)來(lái)進(jìn)行分支判斷,不但設(shè)計(jì)思想得到直觀的體現(xiàn),而且代碼看起來(lái)非常整齊、便于理解。/- alu.v -define plus 3'd0define minus 3'd1define band
27、; 3'd2define bor 3'd3define unegate 3'd4module alu(out,opcode,a,b);output7:0 out;reg7:0 out;input2:0 opcode;input7:0 a,b; /操作數(shù)。always(opcode or a or b
28、) /電平敏感的always塊begin case(opcode) plus: out = a+b; /加操作。 minus: out = a-b; /減操作。
29、0; band: out = a&b; /求與。 bor: out = a|b; /求或。 unegate: out=a; /求反。 default
30、: out=8'hx;/未收到指令時(shí),輸出任意態(tài)。 endcaseend endmodule 同一組合邏輯電路分別用always塊和連續(xù)賦值語(yǔ)句assign描述時(shí),代碼的形式大相徑庭,但是在always中適當(dāng)運(yùn)用default(在case結(jié)構(gòu)中)和else(在ifelse結(jié)構(gòu)中),通常可以綜合為純組合邏輯,盡管被賦值的變量一定要定義為reg型。不過(guò),如果不使用default或else對(duì)缺省項(xiàng)進(jìn)行說(shuō)明,則易生成意想不到的鎖存器,這一點(diǎn)一定要加以注意。指令譯碼器的測(cè)試模塊
31、源代碼:/- alu_Top.v -timescale 1ns/1nsmodule alutest; wire7:0 out; reg7:0 a,b; reg2:0 opcode; parameter times=5; initial begin a
32、=$random%256; /Give a radom number blongs to 0,255 . b=$random%256; /Give a radom number blongs to 0,255. opcode=3'h0; repeat(times)
33、160; begin #100 a=$random%256; /Give a radom number. b=$random%256; /Give a ra
34、dom number. opcode=opcode+1; end #100 $stop; end
35、 alu alu1(out,opcode,a,b);endmodule Verilog HDL實(shí)例(六) 練習(xí)六. 在Verilog HDL中使用函數(shù) 目的:掌握函數(shù)在模塊設(shè)計(jì)中的使用。與一般的程序設(shè)計(jì)語(yǔ)言一樣,Veirlog HDL也可使用函數(shù)以適應(yīng)對(duì)不同變量采取同一運(yùn)算的操作。Veirlog HDL函數(shù)在綜合時(shí)被理解成具有獨(dú)立運(yùn)算功能的電路,每調(diào)用一次函數(shù)相當(dāng)于改變這部分電路的輸入以得到相應(yīng)的計(jì)算結(jié)果。下例是函數(shù)調(diào)用的一個(gè)簡(jiǎn)單示范,采用同步時(shí)鐘觸發(fā)運(yùn)算的執(zhí)行
36、,每個(gè)clk時(shí)鐘周期都會(huì)執(zhí)行一次運(yùn)算。并且在測(cè)試模塊中,通過(guò)調(diào)用系統(tǒng)任務(wù)$display在時(shí)鐘的下降沿顯示每次計(jì)算的結(jié)果。模塊源代碼:module tryfunct(clk,n,result,reset); output31:0 result; input3:0 n; input reset,clk; reg31:0 result; always (posedge clk) /clk的上沿觸發(fā)同步運(yùn)算。begin if(!reset) /reset為低時(shí)復(fù)位。 result<=0; else begin result <= factorial(n); end end functio
37、n 31:0 factorial; /函數(shù)定義。 input 3:0 operand; reg 3:0 index; begin factorial = 1; for(index = 1; index <= operand; index = index + 1) factorial = index * factorial; end endfunctionendmodule測(cè)試模塊源代碼:timescale 1ns/100psmodule tryfuctTop;reg3:0 n,i;reg reset,clk;wire31:0 result;initial begin n=0; reset
38、=1; clk=0; #10 reset=0; #10 reset=1; for(i=0;i<=15;i=i+1) begin #20 n=i; end #10 $stop; endalways #5 clk=clk; tryfunct tryfunct(.clk(clk),.n(n),.result(result),.reset(reset);endmodule 上例中函數(shù)factorial(n)實(shí)際上就是階乘運(yùn)算。必須提醒大家注意的是,在實(shí)際的設(shè)計(jì)中,我們不希望設(shè)計(jì)中的運(yùn)算過(guò)于復(fù)雜,以免在綜合后帶來(lái)不可預(yù)測(cè)的后果。經(jīng)常的情況是,我們把復(fù)雜的運(yùn)算分成
39、幾個(gè)步驟,分別在不同的時(shí)鐘周期完成。 Verilog HDL實(shí)例(七) 練習(xí)七. 在Verilog HDL中使用任務(wù)(task) 目的:掌握任務(wù)在結(jié)構(gòu)化Verilog HDL設(shè)計(jì)中的應(yīng)用。僅有函數(shù)并不能完全滿足Veirlog HDL中的運(yùn)算需求。當(dāng)我們希望能夠?qū)⒁恍┬盘?hào)進(jìn)行運(yùn)算并輸出多個(gè)結(jié)果時(shí),采用函數(shù)結(jié)構(gòu)就顯得非常不方便,而任務(wù)結(jié)構(gòu)在這方面的優(yōu)勢(shì)則十分突出。任務(wù)本身并不返回計(jì)算值,但是它通過(guò)類似C語(yǔ)言中形參與實(shí)參的數(shù)據(jù)交換,非??旖莸貙?shí)現(xiàn)運(yùn)算結(jié)果的調(diào)用。此外,我們還常常利用任務(wù)來(lái)幫助我們實(shí)現(xiàn)結(jié)構(gòu)化的模塊設(shè)計(jì),將批量的操作以任務(wù)的形式獨(dú)立出來(lái),這樣設(shè)計(jì)的目的通常一眼看過(guò)去就很明了。
40、下面是一個(gè)利用task和電平敏感的always塊設(shè)計(jì)比較后重組信號(hào)的組合邏輯的實(shí)例。可以看到,利用task非常方便地實(shí)現(xiàn)了數(shù)據(jù)之間的交換,如果要用函數(shù)實(shí)現(xiàn)相同的功能是非常復(fù)雜的;另外,task也避免了直接用一般語(yǔ)句來(lái)描述所引起的不易理解和綜合時(shí)產(chǎn)生冗余邏輯等問(wèn)題。模塊源代碼:/- sort4.v -module ss(ra,rb,rc,rd,a,b,c,d); output3:0 ra,rb,rc,rd; input3:0 a,b,c,d; reg3:0 ra,rb,rc,rd; reg3:0 va,vb,vc,vd; always (a or b or c or d) begin va,vb
41、,vc,vd=a,b,c,d; sort2(va,vc); /va 與vc互換。 sort2(vb,vd); /vb 與vd互換。 sort2(va,vb); /va 與vb互換。 sort2(vc,vd); /vc 與vd互換。 sort2(vb,vc); /vb 與vc互換。 ra,rb,rc,rd=va,vb,vc,vd; end task sort2; inout3:0 x,y; reg3:0 tmp; if(x>y) begin tmp=x; /x與y變量的內(nèi)容互換,要求順序執(zhí)行,所以采用阻塞賦值方式。 x=y; y=tmp; end endtaskendmodule值得注意的
42、是task中的變量定義與模塊中的變量定義不盡相同,它們并不受輸入輸出類型的限制。如此例,x與y對(duì)于task sort2來(lái)說(shuō)雖然是inout型,但實(shí)際上它們對(duì)應(yīng)的是always塊中變量,都是reg型變量。測(cè)試模塊源代碼:· timescale 1ns/100ps· module task_Top;· reg3:0 a,b,c,d;· wire3:0 ra,rb,rc,rd;· ss my (.a(a),.b(b),.c(c),.d(d), .ra(ra),.rb(rb),.rc(rc),.rd(rd);· initial· b
43、egin· a=0;b=0;c=0;d=0;· · #100 a =$random%15;· b =$random%15; · c =$random%15;· d =$random%15;· #100 $stop;· end·· endmodule 【例3.5】“與-或-非”門電路module AOI(A,B,C,D,F); /模塊名為AOI(端口列表A,B,C,D,F(xiàn))input A,B,C,D; /模塊的輸入端口為A,B,C,Doutput F; /模塊的輸出端口為Fwire A
44、,B,C,D,F; /定義信號(hào)的數(shù)據(jù)類型assign F= (A&B)|(C&D); /邏輯功能描述endmodule【例5.2】同步置數(shù)、同步清零的計(jì)數(shù)器module count(out,data,load,reset,clk);output7:0 out;input7:0 data;input load,clk,reset;reg7:0 out;always (posedge clk) /clk 上升沿觸發(fā)beginif (!reset) out = 8'h00; /同步清0,低電平有效else if (load) out = data; /同步預(yù)置else out
45、 = out + 1; /計(jì)數(shù)endendmodule【例5.14】隱含鎖存器舉例module buried_ff(c,b,a);output c;input b,a;reg c;always (a or b)beginif(b=1)&&(a=1) c=a&b;endendmodule【例5.16】用for 語(yǔ)句實(shí)現(xiàn)2 個(gè)8 位數(shù)相乘module mult_for(outcome,a,b);parameter size=8;inputsize:1 a,b; /兩個(gè)操作數(shù)output2*size:1 outcome; /結(jié)果reg2*size:1 outcome;inte
46、ger i;always (a or b)beginoutcome=0;for(i=1; i<=size; i=i+1) /for 語(yǔ)句if(bi) outcome=outcome +(a << (i-1);endendmodule【例9.1】基本門電路的幾種描述方法(1)門級(jí)結(jié)構(gòu)描述module gate1(F,A,B,C,D);input A,B,C,D;output F;nand(F1,A,B); /調(diào)用門元件and(F2,B,C,D);or(F,F1,F2);endmodule(2)數(shù)據(jù)流描述module gate2(F,A,B,C,D);input A,B,C,D;
47、output F;assign F=(A&B)|(B&C&D); /assign 持續(xù)賦值endmodule(3)行為描述module gate3(F,A,B,C,D);input A,B,C,D;output F;reg F;always (A or B or C or D) /過(guò)程賦值beginF=(A&B)|(B&C&D);endendmodule【例9.2】用bufif1 關(guān)鍵字描述的三態(tài)門module tri_1(in,en,out);input in,en;output out;tri out;bufif1 b1(out,in,en)
48、; /注意三態(tài)門端口的排列順序endmodule【例9.3】用assign 語(yǔ)句描述的三態(tài)門module tri_2(out,in,en);output out;input in,en;assign out = en ? in : 'bz;/若en=1,則out=in;若en=0,則out 為高阻態(tài)endmodule【例9.4】三態(tài)雙向驅(qū)動(dòng)器module bidir(tri_inout,out,in,en,b);inout tri_inout;output out;input in,en,b;assign tri_inout = en ? in : 'bz;assign out
49、 = tri_inout b;endmodule【例9.5】三態(tài)雙向驅(qū)動(dòng)器module bidir2(bidir,en,clk);inout7:0 bidir;input en,clk;reg7:0 temp;assign bidir= en ? temp : 8'bz;always (posedge clk)beginif(en) temp=bidir;else temp=temp+1;endendmodule 【例9.13】用組合電路實(shí)現(xiàn)的ROMmodule rom(addr,data);input3:0 addr;output7:0 data;function7:0 romout
50、;input3:0 addr;case(addr)0 : romout = 0;1 : romout = 1;2 : romout = 4;3 : romout = 9;4 : romout = 16;5 : romout = 25;6 : romout = 36;7 : romout = 49;8 : romout = 64;9 : romout = 81;10 : romout = 100;11 : romout = 121;12 : romout = 144;13 : romout = 169;14 : romout = 196;15 : romout = 225;default : r
51、omout = 8'hxx;endcaseendfunctionassign data = romout(addr);endmodule【例9.14】基本D 觸發(fā)器module DFF(Q,D,CLK);output Q;input D,CLK;reg Q;always (posedge CLK)beginQ <= D;endendmodule【例9.15】帶異步清0、異步置1 的D 觸發(fā)器module DFF1(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always (posedge clk
52、 or negedge set or negedge reset)beginif (!reset) beginq <= 0; /異步清0,低電平有效qn <= 1;endelse if (!set) beginq <= 1; /異步置1,低電平有效qn <= 0;endelse beginq <= d;qn <= d;endendendmodule【例9.16】帶同步清0、同步置1 的D 觸發(fā)器module DFF2(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always
53、 (posedge clk)beginif (reset) beginq <= 0; qn <= 1; /同步清0,高電平有效endelse if (set) beginq <=1; qn <=0; /同步置1,高電平有效endelse beginq <= d; qn <= d;endendendmodule【例9.17】帶異步清0、異步置1 的JK 觸發(fā)器module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always (posedge CLK or negedge RS o
54、r negedge SET)beginif(!RS) Q <= 1'b0;else if(!SET) Q <= 1'b1;else case(J,K)2'b00 : Q <= Q;2'b01 : Q <= 1'b0;2'b10 : Q <= 1'b1;2'b11 : Q <= Q;default: Q<= 1'bx;endcaseendendmodule【例9.18】電平敏感的1 位數(shù)據(jù)鎖存器module latch_1(q,d,clk);output q;input d,clk;
55、assign q = clk ? d : q; /時(shí)鐘信號(hào)為高電平時(shí),將輸入端數(shù)據(jù)鎖存endmodule【例9.19】帶置位和復(fù)位端的1 位數(shù)據(jù)鎖存器module latch_2(q,d,clk,set,reset);output q;input d,clk,set,reset;assign q = reset ? 0 : (set ? 1 : (clk ? d : q);endmodule【例9.20】8 位數(shù)據(jù)鎖存器module latch_8(qout,data,clk);output7:0 qout;input7:0 data;input clk;reg7:0 qout;always
56、(clk or data)beginif (clk) qout<=data;endendmodule【例9.21】8 位數(shù)據(jù)寄存器module reg8(out_data,in_data,clk,clr);output7:0 out_data;input7:0 in_data;input clk,clr;reg7:0 out_data;always (posedge clk or posedge clr)beginif(clr) out_data <=0;else out_data <=in_data;endendmodule【例9.22】8 位移位寄存器module shi
57、fter(din,clk,clr,dout);input din,clk,clr;output7:0 dout;reg7:0 dout;always (posedge clk)beginif (clr) dout<= 8'b0; /同步清0,高電平有效elsebegindout <= dout << 1; /輸出信號(hào)左移一位dout0 <= din; /輸入信號(hào)補(bǔ)充到輸出信號(hào)的最低位endendendmodule【例9.23】可變模加法/減法計(jì)數(shù)器module updown_count(d,clk,clear,load,up_down,qd);input7
58、:0 d;input clk,clear,load;input up_down;output7:0 qd;reg7:0 cnt;assign qd = cnt;always (posedge clk)beginif (!clear) cnt = 8'h00; /同步清0,低電平有效else if (load) cnt = d; /同步預(yù)置else if (up_down) cnt = cnt + 1; /加法計(jì)數(shù)else cnt = cnt - 1; /減法計(jì)數(shù)endendmodule【例9.24】4 位Johnson 計(jì)數(shù)器(異步復(fù)位)module johnson(clk,clr,o
59、ut);input clk,clr;output3:0 out;reg3:0 out;always (posedge clk or posedge clr)beginif (clr) out<= 4'h0;elsebegin out<= out<< 1;out0<= out3;endendendmodule【例9.25】256×8 RAM 模塊module ram256x8(data,address,we,inclock,outclock,q);input7:0 data;input7:0 address;input we,inclock,out
60、clock;output7:0 q;lpm_ram_dq myram(.q(q),.data(data),.address(address),.we(we),.inclock(inclock),.outclock(outclock);defparam myram.lpm_width=8; /定義數(shù)據(jù)寬度defparam myram.lpm_widthad=8; /定義地址寬度endmodule【例9.26】256×16 RAM 塊module map_lpm_ram(dataout,datain,addr,we,inclk,outclk);input15:0 datain; /端口定
61、義input7:0 addr;input we,inclk,outclk;output15:0 dataout;/lpm_ram_dq 元件例化lpm_ram_dq ram(.data(datain),.address(addr),.we(we),.inclock(inclk),.outclock(outclk),.q(dataout);defparam ram.lpm_width=16; /參數(shù)賦值defparam ram.lpm_widthad=8;defparam ram.lpm_indata="REGISTERED"defparam ram.lpm_outdata="REGISTERED"defparam ram.lpm_file="map_lpm_ram.mif" /RAM 塊
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《 創(chuàng)業(yè)者角色轉(zhuǎn)型對(duì)其健康的影響》范文
- 《 原發(fā)性開角型青光眼的遺傳學(xué)研究》范文
- 《 污泥基材料吸附脫除水中典型抗生素的行為及機(jī)理研究》范文
- 《 肌球蛋白V持續(xù)運(yùn)動(dòng)特性的動(dòng)力學(xué)研究》范文
- 《2024年 運(yùn)動(dòng)店鋪新款銷售方案策劃》范文
- 2024-2030年丁基化羥基茴香醚(BHA)和丁基化羥基甲苯(BHT)行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024-2030年N-芐基-N-甲基乙醇胺(CAS 101-98-4)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024-2030年CPU風(fēng)扇和散熱器行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024-2030年5G行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景與投資機(jī)會(huì)研究報(bào)告
- 小學(xué)心理健康教育教學(xué)設(shè)計(jì)《克服浮躁》
- 生豬屠宰企業(yè)檢驗(yàn)人員考試試卷
- 宗教臨時(shí)活動(dòng)地點(diǎn)申請(qǐng)表
- 登騰種植-dentiumchina-iifinal系統(tǒng)
- 鷹潭市余江區(qū)鄉(xiāng)鎮(zhèn)街道社區(qū)行政村統(tǒng)計(jì)表
- 地鐵是怎樣建成少兒科普版共21張課件
- 2022年屯昌縣工會(huì)系統(tǒng)招聘考試題庫(kù)及答案解析
- 中長(zhǎng)跑體育-完整版課件
- 高中心理健康 心流:一個(gè)讓你學(xué)習(xí)成癮的秘密 課程設(shè)計(jì)
- 醫(yī)院急診科群體性食物中毒應(yīng)急演練方案
- (三大構(gòu)成)平面構(gòu)成PPT
- 幼兒園中班數(shù)學(xué)排序排一排最新ppt
評(píng)論
0/150
提交評(píng)論