<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 零基礎(chǔ)學(xué)FPGA(四)Verilog語(yǔ)法基基礎(chǔ)基礎(chǔ)(中)

          零基礎(chǔ)學(xué)FPGA(四)Verilog語(yǔ)法基基礎(chǔ)基礎(chǔ)(中)

          作者: 時(shí)間:2014-12-31 來(lái)源:網(wǎng)絡(luò) 收藏

            7、結(jié)構(gòu)語(yǔ)句

          本文引用地址:http://www.ex-cimer.com/article/267552.htm

            (1)initial語(yǔ)句比較簡(jiǎn)單,這里就不多說(shuō)了。

            (2)always語(yǔ)句

            always語(yǔ)句在仿真過(guò)程中是不斷活動(dòng)的,always語(yǔ)句后面的語(yǔ)句是否執(zhí)行,這要看always語(yǔ)句是否滿足觸發(fā)條件。因此,always語(yǔ)句只有和時(shí)序控制語(yǔ)句結(jié)合才能使用,否則就會(huì)被死鎖。例如:always areg=~areg;

            這個(gè)always語(yǔ)句生成一個(gè)0延遲的無(wú)限跳變過(guò)程這時(shí)會(huì)發(fā)生死鎖。但是一旦加上時(shí)序控制,這條語(yǔ)句就不一樣了,例如:

            always #10 areg=~areg;

            這樣的語(yǔ)句就描述的一個(gè)周期為20毫秒的跳變信號(hào)。所以我們常用這種方法來(lái)描述時(shí)鐘信號(hào),并作為激勵(lì)信號(hào)來(lái)測(cè)試硬件電路。

            看下面這個(gè)例子

            reg [7:0] counter;

            reg tick;

            always @(posedge areg)

            begin

            tick=~tick;

            counter=counter+1;

            end

            這個(gè)例子就是說(shuō)每當(dāng)信號(hào)areg上升沿到來(lái)時(shí),信號(hào)tick取反,計(jì)數(shù)器counter加一,這種時(shí)間控制是always語(yǔ)句最常用的。

            always語(yǔ)句的時(shí)間控制模板

            

          360桌面截圖20140308153256.jpg

           

            如果組合邏輯塊語(yǔ)句的輸入變量過(guò)多容易漏掉,例如:

            always @(a or b or c or d or e)

            這樣的情況下可以用always@ (*)語(yǔ)句來(lái)代替,*號(hào)自動(dòng)將所有輸入變量默認(rèn)為敏感信號(hào)。

            上面所討論的都是等待信號(hào)的值發(fā)生變化或者觸發(fā)時(shí)才執(zhí)行相應(yīng)語(yǔ)句,我們也可以用wait語(yǔ)句來(lái)用電平敏感來(lái)控制。例如

            always

            wait (count_enable) #20 count=count+1;

            意思就是說(shuō),當(dāng)count-enable的值為1時(shí),程序延遲20毫秒后計(jì)數(shù)。

            8、任務(wù)與函數(shù)

            書上寫了關(guān)于任務(wù)與函數(shù)的區(qū)別,寫了好多,我覺(jué)得區(qū)別這兩個(gè)概念主要看一點(diǎn)就夠了,就是看有沒(méi)有返回值,函數(shù)有,任務(wù)沒(méi)有。舉個(gè)例子

            switch_bytes (old_bytes,new_bytes);這是個(gè)任務(wù),沒(méi)有返回值,功能是把新舊兩個(gè)字節(jié)互換位置。

            new_bytes=switch_bytes(old_bytes);這是個(gè)函數(shù),功能是把舊字節(jié)轉(zhuǎn)換后賦值給新字節(jié)。有返回值。

            下面寫一個(gè)交通信號(hào)燈的程序來(lái)學(xué)習(xí)一下任務(wù)這個(gè)概念

            moudle xiaomo_traffic;

            reg clock,red,green,amber;

            //定義時(shí)鐘,紅燈,黃燈,綠燈

            parameter on=1,off=0,red_tics=350.amber_tics=30,green_ics=200;

            //定義紅燈等待350個(gè)時(shí)鐘,黃燈等待30個(gè)時(shí)鐘,綠燈等待200個(gè)時(shí)鐘

            initial red=0;

            initial green=0;

            initial amber=0;

            //初始化,這里用initial語(yǔ)句保證三條語(yǔ)句同時(shí)執(zhí)行

            always

            begin

            red=on; //紅燈亮

            light (red,red_tics); //這里用到任務(wù),功能是等待350個(gè)時(shí)鐘的時(shí)間,聲明看下面程序

            amber=on; //黃燈亮

            light (amber,amber_tics); //等待30個(gè)時(shí)鐘

            green=on; //綠燈亮

            light (green,green_tics); //等待200個(gè)時(shí)鐘

            end

            task:light; //命名任務(wù)

            output color;

            input [31:0] tics;

            //注意這里的兩個(gè)變量要與上面的一一對(duì)應(yīng),也就是說(shuō)上面的light(red,red_tics);中的red對(duì)應(yīng)color,red_tics對(duì)應(yīng)tics

            begin

            repeat(tics); //重復(fù)執(zhí)行tics次下面的語(yǔ)句

            @(posedge clock); //等待上升沿,因?yàn)檫@里的tics對(duì)應(yīng)上面的red_tics幾個(gè),所以這里要等待相應(yīng)個(gè)上升沿

            color=off; //等到相應(yīng)個(gè)上升沿結(jié)束時(shí),相應(yīng)顏色的燈關(guān)閉

            end

            endtask

            //下面就是寫時(shí)鐘函數(shù)了,用always塊

            always

            begin

            #100 clock=0;

            #100 clock=1; //每100毫秒產(chǎn)生一次跳變

            end

            endmoudle

            注意:這個(gè)程序要找對(duì)一一對(duì)應(yīng)關(guān)系,例如脈沖模塊里的clock對(duì)應(yīng)posedge clock中的clock,程序行與行之間是有聯(lián)系的,不能隨便聲明

          fpga相關(guān)文章:fpga是什么


          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: FPGA Verilog

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();