<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  7、結構語(yǔ)句

本文引用地址:http://dyxdggzs.com/article/267552.htm

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

  (2)always語(yǔ)句

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

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

  always #10 areg=~areg;

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

  看下面這個(gè)例子

  reg [7:0] counter;

  reg tick;

  always @(posedge areg)

  begin

  tick=~tick;

  counter=counter+1;

  end

  這個(gè)例子就是說(shuō)每當信號areg上升沿到來(lái)時(shí),信號tick取反,計數器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)代替,*號自動(dòng)將所有輸入變量默認為敏感信號。

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

  always

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

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

  8、任務(wù)與函數

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

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

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

  下面寫(xiě)一個(gè)交通信號燈的程序來(lái)學(xué)習一下任務(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í)執行

  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è)變量要與上面的一一對應,也就是說(shuō)上面的light(red,red_tics);中的red對應color,red_tics對應tics

  begin

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

  @(posedge clock); //等待上升沿,因為這里的tics對應上面的red_tics幾個(gè),所以這里要等待相應個(gè)上升沿

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

  end

  endtask

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

  always

  begin

  #100 clock=0;

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

  end

  endmoudle

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

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


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



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

關(guān)鍵詞: FPGA Verilog

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>