




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計示范和上機習(xí)題 練習(xí)一簡單的組合邏輯設(shè)計/(方法一):/-文件名 compare.v -module compare(equal,a,b);input a,b;output equal; assign equal = (a=b)? 1 : 0; /a等于b時,equal輸出為1;a不等于b時,equal輸出為0。endmodule/(方法二):module compare(equal,a,b);input a,b;output equal;reg equal; always (a or b) if(a=b) /a等于b時,equal輸出為1; equal =1; else /a不等于b時,
2、equal輸出為0。 equal = 0; /思考:如果不寫else 部分會產(chǎn)生什么邏輯? endmodule/- /-測試模塊源代碼(方法之一):timescale 1ns/1ns / 定義時間單位。include "./compare.v" / 包含模塊文件。在有的仿真調(diào)試環(huán)境中并不需要此語句。 /而需要從調(diào)試環(huán)境的菜單中鍵入有關(guān)模塊文件的路徑和名稱module t; reg a,b; wire equal; initial / initial常用于仿真時信號的給出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100
3、a=1; b=0; #100 a=0; b=0; #100 $stop; /系統(tǒng)任務(wù),暫停仿真以便觀察仿真波形。 end compare m(.equal(equal),.a(a),.b(b); /調(diào)用被測試模塊t.m endmodule /- 測試模塊源代碼(方法之二):-timescale 1ns/1ns / 定義時間單位。include "./compare.v" / 包含模塊文件。在有的仿真調(diào)試環(huán)境中并不需要此語句。 /而需要從調(diào)試環(huán)境的菜單中鍵入有關(guān)模塊文件的路徑和名稱module t; reg a,b; reg clock; wire equal; initia
4、l / initial常用于仿真時信號的給出。 begin a=0; b=0; clock = 0; /定義一個時鐘變量 end always #50 clock = clock; /產(chǎn)生周期性的時鐘 always (posedge clock) /在每次時鐘正跳變沿時刻產(chǎn)生不同的a 和 b begin a = $random%2; / 每次a是 0還是1是隨機的。 b = $random%2; / 每次b是 0還是1是隨機的。 end initial begin #100000 $stop; end /系統(tǒng)任務(wù),暫停仿真以便觀察仿真波形。 compare m(.equal(equal),.a
5、(a),.b(b); /調(diào)用被測試模塊t.mendmodule 練習(xí)二. 簡單分頻時序邏輯電路的設(shè)計/- 文件名:half_clk.v - module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always (posedge clk_in) begin if(!reset) clk_out=0; else clk_out=clk_out; endendmodule/- 測試模塊的源代碼:-/- 文件名top.v -timescale 1ns/100psdefine clk_cycl
6、e 50module top;reg clk,reset;wire clk_out;always #clk_cycle clk = clk; /產(chǎn)生測試時鐘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練習(xí)三. 利用條件語句實現(xiàn)計數(shù)分頻時序電路 /- 模塊源代碼:-/ - fdivision.v -module fdivision(RESET,
7、F10M,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) /對計數(shù)器進行判斷,以確定F500K信號是否反轉(zhuǎn)。 begin j <= 0; F500K <= F500K; end else j <= j+1; endendmodule/- 測試模塊源代碼:-/- fdivision_Top.v -timescale 1ns
8、/100psdefine clk_cycle 50module division_Top; reg F10M,RESET;wire F500K_clk;always #clk_cycle F10M = F10M; initial begin RESET=1;F10M=0;#100 RESET=0;#100 RESET=1;#10000 $stop; endfdivision fdivision (.RESET(RESET),.F10M(F10M),.F500K(F500K_clk);endmodule 練習(xí)四. 阻塞賦值與非阻塞賦值的區(qū)別/ - 模塊源代碼:-/ - blocking.v -m
9、odule 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 b = a; c = b; $display("Blocking: a = %d, b = %d, c = %d ",a,b,c); 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;
10、 always (posedge clk) begin b <= a; c <= b; $display("Non_Blocking: a = %d, b = %d, c = %d ",a,b,c); end endmodule/ - 測試模塊源代碼:-/- compareTop.v -timescale 1ns/100psinclude "./blocking.v"include "./non_blocking.v"module compareTop; wire 3:0 b1,c1,b2,c2; reg 3:0 a; r
11、eg clk; initial begin clk = 0; forever #50 clk = clk; /思考:如果在本句后還有語句,能否執(zhí)行?為什么? 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(
12、"_"); # 100 $display("_"); $stop; end non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);endmodule 練習(xí)五. 用always塊實現(xiàn)較復(fù)雜的組合邏輯電路/-文件名 alu.v -define plus 3'd0define minus 3'd1define band 3'd2define bor 3'd3define unegate 3'd4module alu(out,opcod
13、e,a,b);output7:0 out;reg7:0 out;input2:0 opcode;input7:0 a,b; /操作數(shù)。always(opcode or a or b) /電平敏感的always塊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; /未收到指令時,輸出任意態(tài)。 endcaseendendmodule /-
14、指令譯碼器的測試模塊源代碼:-/- alutest.v -timescale 1ns/1nsinclude "./alu.v"module alutest; wire7:0 out; reg7:0 a,b; reg2:0 opcode; parameter times=5; initial begin a=$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)
15、begin #100 a=$random%256; /Give a radom number. b=$random%256; /Give a radom number. opcode=opcode+1; end #100 $stop; end alu alu1(out,opcode,a,b);endmodule練習(xí)六. 在Verilog HDL中使用函數(shù)/- 模塊源代碼:-/- 文件名 tryfunct.v -module tryfunct(clk,n,result,reset); output31:0 result; input3:0 n; input reset,clk; reg31:0
16、result; always (posedge clk) /clk的上沿觸發(fā)同步運算。begin if(!reset) /reset為低時復(fù)位。 result<=0; else begin result <= n * factorial(n)/(n*2)+1); end /verilog在整數(shù)除法運算結(jié)果中不考慮余數(shù) end function 31:0 factorial; /函數(shù)定義,返回的是一個32位的數(shù) input 3:0 operand; /輸入只有一個四位的操作數(shù) reg 3:0 index; /函數(shù)內(nèi)部計數(shù)用中間變量 begin factorial = operand
17、? 1 : 0; /先定義操作數(shù)為零時函數(shù)的輸出為零,不為零時為1 for(index = 2; index <= operand; index = index + 1) factorial = index * factorial; /表示階乘的算術(shù)迭代運算 end endfunction endmodule/- 測試模塊源代碼:-include "./tryfunct.v"timescale 1ns/100psdefine clk_cycle 50module tryfuctTop;reg3:0 n,i;reg reset,clk;wire31:0 result;i
18、nitial begin clk=0; n=0; reset=1; #100 reset=0; /產(chǎn)生復(fù)位信號的負(fù)跳沿 #100 reset=1; /復(fù)位信號恢復(fù)高電平后才開始輸入n for(i=0;i<=15;i=i+1) begin #200 n=i; end #100 $stop; endalways #clk_cycle clk=clk; tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset);endmodule練習(xí)七. 在Verilog HDL中使用任務(wù)(task)/- 模塊源代碼:-/-文件名 sort4.v -mod
19、ule sort4(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,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,
20、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/ - 測試模塊源代碼:-timescale 1ns/100psinclude "sort4.v"module task_Top; reg3:0 a,b,c,d; wire3:0 ra,rb,rc,rd; initial begin a=0;b=0;c=0;d=0;repeat(50)be
21、gin #100 a =$random%15; b =$random%15; c =$random%15; d =$random%15;end #100 $stop; endsort4 sort4 (.a(a),.b(b),.c(c),.d(d), .ra(ra),.rb(rb),.rc(rc),.rd(rd); endmodule 練習(xí)八. 利用有限狀態(tài)機進行時序邏輯的設(shè)計/ - 模塊源代碼:-/- 文件名 seqdet.v -module seqdet(x,z,clk,rst,state);input x,clk,rst;output z;output2:0 state;reg2:0 st
22、ate;wire z;parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z = ( state=E && x=0 )? 1 : 0; /當(dāng)x 序列10010最后一個0剛到時刻,時鐘沿立刻將狀態(tài)變?yōu)镋,此時z 應(yīng)該變?yōu)楦遖lways (posedge clk) if(!rst) begin state <= IDLE; end else casex(state) IDLE : if(x=1) /第一個碼位對,記
23、狀態(tài)A begin state <= A; end A: if(x=0) /第二個碼位對,記狀態(tài)B begin state <= B; end B: if(x=0) /第三個碼位對,記狀態(tài)C begin state <= C; end else /第三個碼位不對,前功盡棄,記狀態(tài)為F begin state <= F; end C: if(x=1) /第四個碼位對 begin state <= D; end else /第四個碼位不對,前功盡棄,記狀態(tài)為G begin state <= G; end D: if(x=0) /第五個碼位對,記狀態(tài)E begin
24、 state <= E; /此時開始應(yīng)有z 的輸出 end else /第五個碼位不對,前功盡棄,只有剛進入的1有用,回到第一個碼位對狀態(tài),記狀態(tài)A begin state <= A; end E: if(x=0) /連著前面已經(jīng)輸入的x 序列10010考慮,又輸入了0碼位可以認(rèn)為第三個碼位已對,記狀態(tài)C begin state <= C; end else /前功盡棄,只有剛輸入的1碼位對,記狀態(tài)為A begin state <= A; end F: if(x=1) /只有剛輸入的1碼位對,記狀態(tài)為A begin state <= A; end else /又有
25、1碼位對,記狀態(tài)為B begin state <= B; end G: if(x=1) /只有剛輸入的1碼位對,記狀態(tài)為A begin state <= F; end default:state=IDLE; /缺省狀態(tài)為初始狀態(tài)。 endcaseendmodule/- 測試模塊源代碼:-/-文件名 seqdet.v -timescale 1ns/1nsinclude "./seqdet.v"module seqdet_Top; reg clk,rst; reg23:0 data; wire2:0 state; wire z,x; assign x=data23;
26、 always #10 clk = clk; always (posedge clk) data=data22:0,data23; /形成數(shù)據(jù)向左移環(huán)行流,最高位與x 連接 initial begin clk=0; rst=1; #2 rst=0; #30 rst=1; data ='b1100_1001_0000_1001_0100; #500 $stop; end seqdet m(x,z,clk,rst,state); endmodule 練習(xí)九.利用狀態(tài)機實現(xiàn)比較復(fù)雜的接口設(shè)計/- 模塊源代碼:-module writing(reset,clk,address,data,sda
27、,ack); input reset,clk; input7:0 data,address; output sda,ack;/sda負(fù)責(zé)串行數(shù)據(jù)輸出; /ack是一個對象操作完畢后,模塊給出的應(yīng)答信號。 reg link_write;/link_write 決定何時輸出。 reg3:0 state;/主狀態(tài)機的狀態(tài)字。 reg4:0 sh8out_state;/從狀態(tài)機的狀態(tài)字。 reg7:0 sh8out_buf; /輸入數(shù)據(jù)緩沖。 reg finish_F; /用以判斷是否處理完一個操作對象。 reg ack; parameter idle=0,addr_write=1,data
28、_write=2,stop_ack=3; parameter bit0=1,bit1=2,bit2=3,bit3=4,bit4=5,bit5=6,bit6=7,bit7=8; assign sda = link_write? sh8out_buf7 : 1'bz; always (posedge clk) begin if(!reset) /復(fù)位。 begin link_write<= 0; /掛起串行單總線 state <= idle; finish_F <= 0; /結(jié)束標(biāo)志清零 sh8out_state<=idle; ack<= 0; sh8out_
29、buf<=0; end else case(state) idle: begin link_write <= 0; /斷開串行單總線 finish_F <= 0; sh8out_state<=idle; ack<= 0; sh8out_buf<=address; /并行地址存入寄存器 state <= addr_write; /進入下一個狀態(tài) end addr_write: /地址的輸入。 begin if(finish_F=0) begin shift8_out; end /地址的串行輸出 else begin sh8out_state <=
30、idle; sh8out_buf <= data; /并行數(shù)據(jù)存入寄存器 state <= data_write; finish_F <= 0; end end data_write: /數(shù)據(jù)的寫入。 begin if(finish_F=0) begin shift8_out; end /數(shù)據(jù)的串行輸出 else begin link_write <= 0; state <= stop_ack; finish_F <= 0; ack <= 1; /向信號源發(fā)出應(yīng)答。 end end stop_ack: /向信號源發(fā)出應(yīng)答結(jié)束。 begin ack &l
31、t;= 0; state <= idle; end endcase end task shift8_out; / 地址和數(shù)據(jù)的串行輸出。 begin case(sh8out_state) idle: begin link_write <= 1; /連接串行單總線,立即輸出地址或數(shù)據(jù)的最高位(MSB) sh8out_state <= bit7; end bit7: begin link_write <= 1; /連接串行單總線 sh8out_state <= bit6; sh8out_buf <= sh8out_buf<<1; /輸出地址或數(shù)據(jù)的次高位(bi
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能電網(wǎng)工程設(shè)計考核試卷
- 涂料行業(yè)新技術(shù)展望考核試卷
- 辦公室財務(wù)報表編制與分析考核試卷
- 筆的筆身材料創(chuàng)新考核試卷
- 珠海市高一上學(xué)期期末考試數(shù)學(xué)試題
- 四川華新現(xiàn)代職業(yè)學(xué)院《建筑構(gòu)造與制圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安汽車職業(yè)大學(xué)《臨床技能綜合訓(xùn)練(Ⅲ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 潞安職業(yè)技術(shù)學(xué)院《劍橋商務(wù)英語(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省贛州市南康區(qū)唐西片區(qū)達標(biāo)名校2025年初三模擬物理試題含解析
- 石家莊理工職業(yè)學(xué)院《健美操主項實踐教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 理論力學(xué)摩擦實驗報告
- 【公開課】第6課+凝神造像-中國傳統(tǒng)雕塑+課件高中美術(shù)人教版(2019)美術(shù)鑒賞
- 滬教版四年級數(shù)學(xué)下冊全冊課件
- (2.22)-一、壓花原理壓花藝術(shù)
- 小型手推式除雪機及論文
- LED燈高低溫試驗及老化測試標(biāo)準(zhǔn)
- 2023年浙江省公務(wù)員考試申論真題A卷
- 藥事管理醫(yī)療機構(gòu)藥事管理
- KTV工程部崗位職責(zé)
- 【超星爾雅學(xué)習(xí)通】機器的征途:空天科技網(wǎng)課章節(jié)答案
- 社會科學(xué)處橫向課題合同書
評論
0/150
提交評論