![虛的字體表示塊語句_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/27/685150ca-b268-4abb-a2d5-9ee7fcc9f9c0/685150ca-b268-4abb-a2d5-9ee7fcc9f9c01.gif)
![虛的字體表示塊語句_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/27/685150ca-b268-4abb-a2d5-9ee7fcc9f9c0/685150ca-b268-4abb-a2d5-9ee7fcc9f9c02.gif)
![虛的字體表示塊語句_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/27/685150ca-b268-4abb-a2d5-9ee7fcc9f9c0/685150ca-b268-4abb-a2d5-9ee7fcc9f9c03.gif)
![虛的字體表示塊語句_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/27/685150ca-b268-4abb-a2d5-9ee7fcc9f9c0/685150ca-b268-4abb-a2d5-9ee7fcc9f9c04.gif)
![虛的字體表示塊語句_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/27/685150ca-b268-4abb-a2d5-9ee7fcc9f9c0/685150ca-b268-4abb-a2d5-9ee7fcc9f9c05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章 例題 例如:if(ab) out1 = int1; else out1 = int2;例如: always ( some_event) /虛的字體表示塊語句 beginif(ab) out1 = int1; else if (a=b) out1 = int2; else out1 = int3; endif(ab)begin out1=int1; out2=int2;endelsebegin out1=int2; out20)for(scani=0;scani0)begin$display(.);memoryscani=0;endelse/*WRONG*/$display(error-
2、indexiszero);盡管程序設(shè)計者把else寫在與第一個if(外層if)同一列上,希望與第一個if對應(yīng),但實際上else是與第二個if對應(yīng),因為它們相距最近。正確的寫法應(yīng)當(dāng)是這樣的:if(index0)beginfor(scani=0;scani0)begin$display(.);memoryscani=0;endendelse /*WRONG*/$display(error-indexiszero);/定義寄存器和參數(shù)。reg 31:0 instruction, segment_area255:0;reg 7:0 index;reg 5:0 modify_seg1, modify_s
3、eg2, modify_seg3;parametersegment1=0, inc_seg1=1,segment2=20, inc_seg2=2,segment3=64, inc_seg3=4,data=128;/檢測寄存器index的值if(indexsegment2)begininstruction = segment_areaindex + modify_seg1;index = index + inc_seg1;endelse if(indexsegment3)begininstruction = segment_areaindex + modify_seg2;index = inde
4、x + inc_seg2;endelse if (indexdata)begininstruction = segment_areaindex + modify_seg3;index = index + inc_seg3;endelseinstruction = segment_areaindex;reg 15:0 rega;reg 9:0 result;case(rega)16 d0: result = 10 b0111111111;16 d1: result = 10 b1011111111;16 d2: result = 10 b1101111111;16 d3: result = 10
5、 b1110111111;16 d4: result = 10 b1111011111;16 d5: result = 10 b1111101111;16 d6: result = 10 b1111110111;16 d7: result = 10 b1111111011;16 d8: result = 10 b1111111101;16 d9: result = 10 b1111111110;default: result =10 bx;endcase例1: case ( select1:2 )2 b00: result = 0;2 b01: result = flaga;2 b0x,2 b
6、0z: result = flaga? bx : 0;2 b10: result = flagb;2 bx0,2 bz0: result = flagb? bx : 0;default: result = bx;endcase例2: case(sig)1 bz: $display(signal is floating);1 bx: $display(signal is unknown);default: $display(signal is %b, sig);endcase 例3: reg7:0 ir;casez(ir) 8 b1?: instruction1(ir); 8 b01?: ins
7、truction2(ir); 8 b00010?: instruction3(ir); 8 b000001?: instruction4(ir);endcase例4: reg7:0 r, mask;mask = 8bx0x0x0x0;casex(rmask) 8 b001100xx: stat1; 8 b1100xx00: stat2; 8 b00xx0011: stat3; 8 bxx001100: stat4;endcase例: always (al or d ) / 有鎖存器begin if ( al ) q = d;endalways (al or d ) / 無鎖存器begin if
8、 ( al ) q = d; else q = 0;end例5: 條件語句舉例/第一類條件語句if ( !lock ) buffer = data ;if ( enable ) out = in ;/第二類條件語句if (number_queued MAX_Q_DEPTH)begin data_queue = data ; number_queued = number_queued + 1 ;endelse $display ( Queue Full. Try again ) ;/第三類條件語句/根據(jù)不同的算術(shù)邏輯單元的控制信號 alu_control 執(zhí)行不同的算術(shù)運算操作if ( alu_
9、control = = 0 ) y = x + z ;else if ( alu_control = = 1 ) y = x - z ;else if ( alu_control = = 2 ) y = x * z ;else $ display ( Invalid ALU control signal );reg 1: 0 alu_control ;.case (alu_control) 2 d 0 : y = x + z ; 2 d 1 : y = x - z ; 2 d 2 : y = x * z ;default : $display ( Invalid ALU control sig
10、nal ) ;endcase 例6:使用case語句實現(xiàn)四選一多路選擇器module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);/ 根據(jù)輸入/輸出圖的端口聲明output out;input i0, i1, i2, i3;input s1, s0;/把輸出變量聲明為寄存器類型 reg out;/任何輸入信號改變,都會引起輸出信號的重新計算/使輸出out 重新計算的所有輸入信號必須寫入 always (.)的變量列表中 always (s1 or s0 or i0 or i1 or i2 or i3)begincase (s1, s0) 2b00: out
11、= i0; 2b01: out = i1; 2b10: out = i2; 2b11: out = i3; default: out = 1bx;endcaseendendmoduleparameter size=8,longsize=16;reg size:1 opa, opb;reg longsize:1 result;begin: multreg longsize:1 shift_opa, shift_opb;shift_opa = opa;shift_opb = opb;result = 0;repeat(size)beginif(shift_opb1)result = result
12、+ shift_opa;shift_opa = shift_opa 1;endend begin:count1sreg7:0 tempreg;count=0;tempreg = rega;while(tempreg)beginif(tempreg0) count = count + 1;tempreg = tempreg1;endend 例7:begin:init_memreg7:0 tempi;for(tempi=0;tempimemsize;tempi=tempi+1)memorytempi=0;end例8:parameter size = 8, longsize = 16;regsize
13、:1 opa, opb;reglongsize:1 result;begin:multinteger bindex;result=0;for( bindex=1; bindex=size; bindex=bindex+1 )if(opbbindex)result = result + (opa1 )if(tempreg0) count=count+1;end例9順序塊/說明1reg x, y;reg 1:0 z, w; initialbegin x = 1b0; y = 1b1; z = x, y; w = y, x; end/說明 2: 帶延遲的順序塊 reg x, y;reg 1:0 z,
14、 w;initialbegin x = 1b0; /在仿真時刻0 完成 #5 y = 1b1; /在仿真時刻5 完成 #10 z = x, y; / 在仿真時刻15 完成 #20 w = y, x; / 在仿真時刻35 完成 end例10 并行塊 /舉例 1: 帶延遲的并行塊 reg x, y;reg 1:0 z, w; initialfork x = 1b0; / 在仿真時刻0 完成 #5 y = 1b1; / 在仿真時刻5 完成 #10 z = x, y; / 在仿真時刻10 完成 #20 w = y, x; / 在仿真時刻20 完成join/故意引入競爭條件的并行塊 reg x, y;r
15、eg 1:0 z, w; initialfork x = 1b0; y = 1b1; z = x, y; w = y, x; join我們可以將并行塊的關(guān)鍵字fork看成是將一個執(zhí)行流分成多個獨立的執(zhí)行流;而關(guān)鍵字join則是將多個獨立的執(zhí)行流合并為一個執(zhí)行流。每個獨立的執(zhí)行流之間是并發(fā)執(zhí)行的。例11 嵌套塊/嵌套塊initialbegin x = 1b0; fork #5 y = 1b1; #10 z = x, y; join #20 w = y, x;endendmodule例12 命名塊/命名塊module top ;initialbegin : block1 /名字為block1的順序
16、命名塊integer i ; /整型變量 i 是block1命名塊的靜態(tài)本地變量.endinitialfork : block2 /名字為block2的并行命名塊reg i ; /寄存器變量 i 是block2命名塊的靜態(tài)本地變量.join例13 命名塊的禁用/在(矢量)標(biāo)志寄存器的各個位中從低有效位開始找尋第一個值為1的位 /從矢量標(biāo)志寄存器的低有效位開始查找第一個值為1的位reg 15:0 flag;integer i; /用于計數(shù)的整數(shù) initialbegin flag = 16b 0010_0000_0000_0000; i = 0; begin: block1 /while循環(huán)聲明
17、中的主模塊是命名塊block1 while(i 16) begin if (flagi) begin $display(Encountered a TRUE bit at element number %d, i); disable block1; / 在標(biāo)志寄存器中找到了值為真(1)的位,禁用block1 end i = i + 1;end endend 例14 對兩個N位總線變量進(jìn)行按位異或/本模塊生成兩條N位總線變量的按位異或module bitwise_xor ( out , i0 , i1 ) ;/參數(shù)聲明語句。參數(shù)可以重新定義parameter N = 32 ; / 缺省的總線位寬
18、為32位/端口聲明語句output N-1 : 0 out ;input N-1 : 0 i0 , i1 ;/聲明一個臨時循環(huán)變量。/該變量只用于生成塊的循環(huán)計算。/Verilog仿真時該變量在設(shè)計中并不存在genvar j ;/用一個單循環(huán)生成按位異或的異或門(xor)generate for ( j = 0 ; j N ; j = j + 1 ) begin : xor_loopxor g1 (out j , i0 j , i1 j ) ; end / 在生成塊內(nèi)部結(jié)束循環(huán)endgenerate /結(jié)束生成塊/另外一種編寫形式/異或門可以用always塊來替代/ reg N-1 : 0 o
19、ut ;/ generate / for ( j = 0 ; j N ; j = j + 1 ) / begin : bit/ always ( i0 j or i1 j ) out j = i0 j i0 j ; / end / endgenerate endmodule例15 用循環(huán)生成語句描述的脈動加法器/本模塊生成一個門級脈動加法器module ripple_adder ( co , sum , a0 , a1 , ci ) ;/參數(shù)聲明語句,參數(shù)可以重新定義。parameter N = 4 ; / 缺省的總線位寬為4/端口聲明語句output N-1 : 0 sum ;output
20、co ;input N-1 : 0 a0 , a1 ;input ci ;/本地線網(wǎng)聲明語句wire N-1 : 0 carry ;/指定進(jìn)位變量的第0位等于進(jìn)位的輸入assign carry 0 = ci ;/聲明臨時循環(huán)變量。該變量只用于生成塊的計算。/由于在仿真前,循環(huán)生成已經(jīng)展平,所以用Verilog對/設(shè)計進(jìn)行仿真時,該變量已經(jīng)不再存在。genvar i ;/用一個單循環(huán)生成按位異或門等邏輯generate for ( i = 0 ; i N ; i = i + 1 ) begin : r_loopwire t1 , t2 , t3 ;xor g1 ( t1 , a0 i , a1
21、i ) ;xor g2 ( sum i , t1 , carry i ) ;and g3 ( t2 , a0 i , a1 i ) ;and g4 ( t3 , t1 , carry i ) ;or g5 (carry i + 1 , t2 , t3 ) ;end / 生成塊內(nèi)部循環(huán)的結(jié)束 endgenerate /生成塊的結(jié)束/ 根據(jù)上面的循環(huán)生成,Verilog編譯器會自動生成以下相對層次實例名/ xor : r_loop0.g1 , r_loop1.g1 , r_loop2.g1 , r_loop3.g1 ,/ r_loop0.g2 , r_loop1.g2 , r_loop2.g2 ,
22、 r_loop3.g2 ,/ and : r_loop0.g3 , r_loop1.g3 , r_loop2.g3 , r_loop3.g3 ,/ r_loop0.g4 , r_loop1.g4 , r_loop2.g4 , r_loop3.g4 ,/ or : r_loop0.g5 , r_loop1.g5 , r_loop2.g5 , r_loop3.g5 / 上面生成的實例用下面這些生成的線網(wǎng)連接起來/ Nets : r_loop0.t1 , r_loop0.t2 , r_loop0.t3 / r_loop1.t1 , r_loop1.t2 , r_loop1.t3 / r_loop2.
23、t1 , r_loop2.t2 , r_loop2.t3 / r_loop3.t1 , r_loop3.t2 , r_loop3.t3 assign co = carry N ;endmodule 例16 使用條件生成語句實現(xiàn)參數(shù)化乘法器/ 本模塊實現(xiàn)一個參數(shù)化乘法器module multiplier ( product , a0 , a1 ) ;/參數(shù)聲明,該參數(shù)可以重新定義parameter a0_width = 8 ; parameter a1_width = 8 ; /本地參數(shù)聲明/本地參數(shù)不能用參數(shù)重新定義(defparam)修改 , /也不能在實例引用時通過傳遞參數(shù)語句,即 #(參
24、數(shù)1,參數(shù)2,.)的方法修改localparam product_width = a0_width + a1_width ;/端口聲明語句output product_width - 1 : 0 product ;input a0_width - 1 : 0 a0 ;input a1_width - 1 : 0 a1 ;/有條件地調(diào)用(實例引用)不同類型的乘法器/根據(jù)參數(shù)a0_width 和 a1_width的值,在調(diào)用時/引用相對應(yīng)的乘法器實例。generate if ( a0_width 8 ) | | ( a1_width 8 ) cal_multiplier # ( a0_width
25、, a1_width ) m0 ( product , a0 , a1 ) ;else tree_multiplier # ( a0_width , a1_width ) m0 ( product , a0 , a1 ) ;endgenerate /生成塊的結(jié)束endmodule例17 CASE生成語句舉例/本模塊生成N位的加法器module adder ( co , sum , a0 , a1 , ci );/參數(shù)聲明,本參數(shù)可以重新定義parameter N = 4 ; / 缺省的總線位寬為4/端口聲明output N-1 : 0 sum ;output co ;input N-1 : 0
26、 a0 , a1 ;input ci ;/ 根據(jù)總線的位寬,調(diào)用(實例引用)相應(yīng)的加法器/ 參數(shù)N在調(diào)用(實例引用)時可以重新定義,調(diào)用(實例引用)/ 不同位寬的加法器是根據(jù)不同的N來決定的。generate case ( N )/ 當(dāng)N=1, 或2 時分別選用位寬為1位或2位的加法器1 : adder_1bit adder1 ( co , sum , a0 , a1 , ci ) ; / 1位的加法器2 : adder_2bit adder2 ( co , sum , a0 , a1 , ci ) ; / 2位的加法器/ 缺省的情況下選用位寬為N位的超前進(jìn)位加法器default : adder_cla # ( N ) adder3 ( co , sum , a0 , a1 , ci ) ; endcaseendgenerate /生成塊的結(jié)束endmodule例18 行為級描述的四選一多路選擇器/ 四選一多路器,其端口列表完全根據(jù)輸入/輸出圖編寫 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);/ 根據(jù)輸入/輸出圖的端口聲明output out
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球離網(wǎng)房車行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球高脈沖能量皮秒激光器行業(yè)調(diào)研及趨勢分析報告
- 月齡嬰兒情緒情感與社會性親子活動設(shè)計創(chuàng)造性撫觸游戲講解
- 2025【合同范本】建筑工程設(shè)計協(xié)議書
- 蔬菜配送合作合同范本
- 分期付款合同模板集錦
- 會簽單合同模板
- 全新對講機(jī)服務(wù)合同下載
- 勞務(wù)出資合伙協(xié)議合同
- 個人租車租賃合同范本
- 區(qū)域經(jīng)理年終工作總結(jié)匯報
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標(biāo))
- 初中八年級音樂-勞動號子《軍民大生產(chǎn)》
- 中層領(lǐng)導(dǎo)的高績效管理
- 小小銀行家-兒童銀行知識、理財知識培訓(xùn)
- 機(jī)械基礎(chǔ)知識競賽題庫附答案(100題)
- 閱讀理解特訓(xùn)卷-英語四年級上冊譯林版三起含答案
- 國庫集中支付培訓(xùn)班資料-國庫集中支付制度及業(yè)務(wù)操作教學(xué)課件
- 屋面及防水工程施工(第二版)PPT完整全套教學(xué)課件
- 2023年上海青浦區(qū)區(qū)管企業(yè)統(tǒng)一招考聘用筆試題庫含答案解析
- 2023年高一物理期末考試卷(人教版)
評論
0/150
提交評論