栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【学习笔记-FPGA】verilog语言的task语句用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习笔记-FPGA】verilog语言的task语句用法

个人笔记。

task-endtask在verilog中就是一个任务语句,个人认为相当于c语言中的任务函数。任务是通过调用来执行的,可以在initial语句和always语句中调用使用。

任务定义:

task tesk;
     input   [7:0]  A;
     output   reg  [7:0] outvalue;
     begin     
          case(A) 
            "a":begin  
                outvalue[7:0]<=8'h00;   
                end
          endcase
      end
endtask

形式如上,其中tesk是任务名,input [7:0]  A是输入端口说明, output   reg  [7:0] outvalue是输出端口说明,根据任务需要可以选择写不写输入输出端口说明,endtask是结束任务标志。

任务调用:其形式tesk(端口1,端口2,端口3,...),以上面为例其调用为tesk("a",out),且必须在initial语句和always语句中调用。

以案例为例:

task tesk1;
     input   [7:0]  A;                      //输入端口
     output   reg  [7:0] outvalue;         //输出端口
     begin     
          case(A) 
            "a":begin  
                outvalue[7:0]<=8'h00;   
                end
          endcase
      end
endtask

task tesk2; 
      output reg [7:0] outvalue;             //输出端口
      begin
           outvalue[7:0]<=8'h01;
      end
endtask  

task tesk3;
     output  reg [15:0]  tesk3_buf;            //输出端口
 begin
     tesk1("a",tesk3_buf[7:0]);               //调用tesk1
     tesk2(tesk3_buf[15:8])                   //调用tesk2
 end



reg  [15:0]  out;

always @(posedge i_clk or negedge nrst)
 begin
   tesk3(out[15:0]);                         //调用tesk3
 end

此案例任务tesk3调用了tesk1、tesk2,但tesk3并不是在always中所以调用无效,在always语句中调用了tesk3任务因此tesk1、tesk2任务有效。其中reg [15:0] out在外部定义。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号