加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

硬件描述語言Verilog HDL設(shè)計(jì)進(jìn)階之: Verilog HDL高級(jí)語法結(jié)構(gòu)—任務(wù)

2013/08/23
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

4.2  Verilog HDL高級(jí)語法結(jié)構(gòu)——任務(wù)(TASK)


如果傳給任務(wù)的變量值和任務(wù)完成后接收結(jié)果的變量已定義,就可以用一條語句啟動(dòng)任務(wù)。任務(wù)完成以后控制就傳回啟動(dòng)過程。如任務(wù)內(nèi)部有定時(shí)控制,則啟動(dòng)的時(shí)間可以與控制返回的時(shí)間不同。
任務(wù)可以啟動(dòng)其他的任務(wù),其他任務(wù)又可以啟動(dòng)別的任務(wù),可以啟動(dòng)的任務(wù)數(shù)是沒有限制的。不管有多少任務(wù)啟動(dòng),只有當(dāng)所有的啟動(dòng)任務(wù)完成以后,控制才能返回。


1.任務(wù)定義
定義任務(wù)的語法如下:

任務(wù):
task <任務(wù)名>;
      <端口及數(shù)據(jù)類型聲明語句>
      <語句1>
      <語句2>
      ...
      <語句n>
endtask

這些聲明語句的語法與模塊定義中的對(duì)應(yīng)聲明語句的語法是一致的。


2.任務(wù)調(diào)用及變量傳遞
調(diào)用任務(wù)并傳遞輸入/輸出變量的聲明語句的語法如下:

<任務(wù)名>(端口1,端口2,...,端口n);

下面的例子說明怎樣定義任務(wù)和調(diào)用任務(wù)。
任務(wù)定義如下所示:

task  my_task;
     input a, b;
     inout  c;
     output d, e;
     …
     <語句>                 //執(zhí)行任務(wù)工作相應(yīng)的語句
     …
     c = foo1;            //賦初始值
     d = foo2;            //對(duì)任務(wù)的輸出變量賦值
     e = foo3;
endtask

任務(wù)調(diào)用如下所示:

my_task(v,w,x,y,z);

任務(wù)調(diào)用變量(v、w、x、y、z)和任務(wù)定義的I/O變量(a、b、c、d、e)之間是一一對(duì)應(yīng)的。當(dāng)任務(wù)啟動(dòng)時(shí),由v、w和x傳入的變量賦給了a、b和c。當(dāng)任務(wù)完成后的輸出又通過c、d和e賦給了x、y和z。下面用一個(gè)具體的例子用來說明怎樣在模塊的設(shè)計(jì)中使用任務(wù),使程序容易讀懂。

module traffic_lights;
      reg  clock, red, amber, green;
      parameter  on=1, off=0, red_tics=350,
      amber_tics=30,green_tics=200;
      initial    red=off;                          //交通燈初始化
      initial    amber=off;
      initial    green=off;

      always begin                                 //交通燈控制時(shí)序
           red=on;                                  //開紅燈
           light(red,red_tics);                  //調(diào)用等待任務(wù)
           green=on;                                //開綠燈
           light(green,green_tics);              //等待
           amber=on;                                //開黃燈
           light(amber,amber_tics);              //等待
      end

      task  light(color,tics);                  //定義交通燈開啟時(shí)間的任務(wù)
           output  color;
           input[31:0] tics;
           begin
                repeat(tics) @(posedge clock);  //等待tics個(gè)時(shí)鐘的上升沿
                color=off;                           //關(guān)燈
           end
      endtask

      always begin                                //產(chǎn)生時(shí)鐘脈沖的always塊
            #100 clock=0;
            #100 clock=1;
      end
endmodule

這個(gè)例子描述了一個(gè)簡單的交通燈的時(shí)序控制,并且該交通燈有它自己的時(shí)鐘產(chǎn)生器。
 

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

華清遠(yuǎn)見(www.farsight.com.cn)是國內(nèi)領(lǐng)先嵌入師培訓(xùn)機(jī)構(gòu),2004年注冊(cè)于中國北京海淀高科技園區(qū),除北京總部外,上海、深圳、成都、南京、武漢、西安、廣州均有直營分公司。華清遠(yuǎn)見除提供嵌入式相關(guān)的長期就業(yè)培訓(xùn)、短期高端培訓(xùn)、師資培訓(xùn)及企業(yè)員工內(nèi)訓(xùn)等業(yè)務(wù)外,其下屬研發(fā)中心還負(fù)責(zé)嵌入式、Android及物聯(lián)網(wǎng)方向的教學(xué)實(shí)驗(yàn)平臺(tái)的研發(fā)及培訓(xùn)教材的出版,截止目前為止已公開出版70余本嵌入式/移動(dòng)開發(fā)/物聯(lián)網(wǎng)相關(guān)圖書。企業(yè)理念:專業(yè)始于專注 卓識(shí)源于遠(yuǎn)見。企業(yè)價(jià)值觀:做良心教育、做專業(yè)教育,更要做受人尊敬的職業(yè)教育。