【学习笔记-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在外部定义。

另一种任务调用形式如下示例:

task process;                      (任务名)
     begin    
       process_a[31:0]<=a_tdata[31:0];
       process_b[31:0]<=b_tdata[31:0];
       process_result[31:0]<=result_tdata[31:0];       
     end 
endtask

这里可以直接在initial语句或always语句中调用该任务名,即可执行里面的程序。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值