![虛的字體表示塊語句_第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),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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è)計(jì)者把else寫在與第一個(gè)if(外層if)同一列上,希望與第一個(gè)if對(duì)應(yīng),但實(shí)際上else是與第二個(gè)if對(duì)應(yīng),因?yàn)樗鼈兿嗑嘧罱U_的寫法應(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;/檢測(cè)寄存器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ù)邏輯單元的控制信號(hào) alu_control 執(zhí)行不同的算術(shù)運(yùn)算操作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語句實(shí)現(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;/任何輸入信號(hào)改變,都會(huì)引起輸出信號(hào)的重新計(jì)算/使輸出out 重新計(jì)算的所有輸入信號(hào)必須寫入 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; /在仿真時(shí)刻0 完成 #5 y = 1b1; /在仿真時(shí)刻5 完成 #10 z = x, y; / 在仿真時(shí)刻15 完成 #20 w = y, x; / 在仿真時(shí)刻35 完成 end例10 并行塊 /舉例 1: 帶延遲的并行塊 reg x, y;reg 1:0 z, w; initialfork x = 1b0; / 在仿真時(shí)刻0 完成 #5 y = 1b1; / 在仿真時(shí)刻5 完成 #10 z = x, y; / 在仿真時(shí)刻10 完成 #20 w = y, x; / 在仿真時(shí)刻20 完成join/故意引入競(jìng)爭(zhēng)條件的并行塊 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看成是將一個(gè)執(zhí)行流分成多個(gè)獨(dú)立的執(zhí)行流;而關(guān)鍵字join則是將多個(gè)獨(dú)立的執(zhí)行流合并為一個(gè)執(zhí)行流。每個(gè)獨(dú)立的執(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)志寄存器的各個(gè)位中從低有效位開始找尋第一個(gè)值為1的位 /從矢量標(biāo)志寄存器的低有效位開始查找第一個(gè)值為1的位reg 15:0 flag;integer i; /用于計(jì)數(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 對(duì)兩個(gè)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 ;/聲明一個(gè)臨時(shí)循環(huán)變量。/該變量只用于生成塊的循環(huán)計(jì)算。/Verilog仿真時(shí)該變量在設(shè)計(jì)中并不存在genvar j ;/用一個(gè)單循環(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)生成語句描述的脈動(dòng)加法器/本模塊生成一個(gè)門級(jí)脈動(dòng)加法器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 ;/聲明臨時(shí)循環(huán)變量。該變量只用于生成塊的計(jì)算。/由于在仿真前,循環(huán)生成已經(jīng)展平,所以用Verilog對(duì)/設(shè)計(jì)進(jìn)行仿真時(shí),該變量已經(jīng)不再存在。genvar i ;/用一個(gè)單循環(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編譯器會(huì)自動(dòng)生成以下相對(duì)層次實(shí)例名/ 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 / 上面生成的實(shí)例用下面這些生成的線網(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 使用條件生成語句實(shí)現(xiàn)參數(shù)化乘法器/ 本模塊實(shí)現(xiàn)一個(gè)參數(shù)化乘法器module multiplier ( product , a0 , a1 ) ;/參數(shù)聲明,該參數(shù)可以重新定義parameter a0_width = 8 ; parameter a1_width = 8 ; /本地參數(shù)聲明/本地參數(shù)不能用參數(shù)重新定義(defparam)修改 , /也不能在實(shí)例引用時(shí)通過傳遞參數(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)用(實(shí)例引用)不同類型的乘法器/根據(jù)參數(shù)a0_width 和 a1_width的值,在調(diào)用時(shí)/引用相對(duì)應(yīng)的乘法器實(shí)例。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)用(實(shí)例引用)相應(yīng)的加法器/ 參數(shù)N在調(diào)用(實(shí)例引用)時(shí)可以重新定義,調(diào)用(實(shí)例引用)/ 不同位寬的加法器是根據(jù)不同的N來決定的。generate case ( N )/ 當(dāng)N=1, 或2 時(shí)分別選用位寬為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í)描述的四選一多路選擇器/ 四選一多路器,其端口列表完全根據(jù)輸入/輸出圖編寫 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);/ 根據(jù)輸入/輸出圖的端口聲明output out
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《第二單元 指揮機(jī)器人行動(dòng) 第9課 光線傳感調(diào)亮度》說課稿-2024-2025學(xué)年泰山版信息技術(shù)五年級(jí)上冊(cè)
- 《加與減-回收廢電池》(說課稿)-2023-2024學(xué)年二年級(jí)下冊(cè)數(shù)學(xué)北師大版
- 8《比尾巴》說課稿-2024-2025學(xué)年統(tǒng)編版語文一年級(jí)上冊(cè)
- 2023八年級(jí)道德與法治上冊(cè) 第一單元 走進(jìn)社會(huì)生活第一課 豐富的社會(huì)生活第1課時(shí) 我與社會(huì)說課稿 新人教版
- 現(xiàn)代職場(chǎng)中的時(shí)間管理與自我管理
- 生物技術(shù)在推動(dòng)大健康發(fā)展中的作用分析
- 游戲公司如何運(yùn)用創(chuàng)新策略拓展盈利途徑
- 物聯(lián)網(wǎng)智能家居產(chǎn)品的安全防護(hù)技術(shù)研究
- 《第七章 實(shí)驗(yàn)活動(dòng)8 搭建球棍模型認(rèn)識(shí)有機(jī)化合物分子結(jié)構(gòu)的特點(diǎn)》說課稿教學(xué)反思-2023-2024學(xué)年高中化學(xué)人教版(2019)必修第二冊(cè)
- 2024年01月中國(guó)民生銀行北京中關(guān)村分行(籌)誠(chéng)聘英才筆試歷年參考題庫附帶答案詳解
- 人教八年級(jí)上冊(cè)英語第一單元《Section A (1a-2d)》教學(xué)課件
- 2023年版《安寧療護(hù)實(shí)踐指南(試行)》解讀課件
- 油氣勘探開發(fā)的勘探風(fēng)險(xiǎn)管理
- 10kV環(huán)網(wǎng)柜改造工程施工方案設(shè)計(jì)
- 電工班三級(jí)安全教育內(nèi)容范本
- 中國(guó)血管通路專家共識(shí)解讀
- 新生兒疾病篩查可疑陽性、陽性兒復(fù)查隨訪登記表
- 開學(xué)前幼兒園安全培訓(xùn)
- 2023年湛江市麻章區(qū)教育局招聘事業(yè)編制教師考試真題
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- 電梯維保方案完整版
評(píng)論
0/150
提交評(píng)論