[Verilog HDL] Verilog 中 task的使用方法

[复制链接]
2476|0
 楼主| gaochy1126 发表于 2022-8-30 21:46 | 显示全部楼层 |阅读模式
任务(task):相当于是一个函数,在主程序中不调用该任务,该任务是不会执行的。

任务的写法:

task task_name(

input   a;            //定义输入端口

output   b;         //定义输出端口

);

//这里写任务需要执行的操作,该段代码中不能包含always块和initial块。



endtask

任务的调用:虽然任务中不能出现always和initial块,但是调用任务却是在initial和always块中调用的。

调用:  task_name(端口1,端口2,。。。。);


  1. task tx_bit(     //定义tx_bit任务
  2.         input [7:0] data   //任务中定义输入端口为8位data数据输入
  3. );

  4.         integer i;
  5.         for(i=0; i<10; i=i+1) begin
  6.                 case(i)
  7.                         0: rx <= 1'b0;
  8.                         1: rx <= data[0];
  9.                         2: rx <= data[1];
  10.                         3: rx <= data[2];
  11.                         4: rx <= data[3];
  12.                         5: rx <= data[4];
  13.                         6: rx <= data[5];
  14.                         7: rx <= data[6];
  15.                         8: rx <= data[7];
  16.                         9: rx <= 1'b1;
  17.                         default: rx <= 1'b1;
  18.                 endcase
  19.                 #560;
  20.                
  21.         end
  22. endtask

  23. task tx_byte();   //定义tx_byte任务
  24.         integer i;
  25.         for(i=0; i<4; i=i+1) begin
  26.                 tx_bit(8'h55);  //在任务中调用之前的tx_bit任务,并传入数据8‘h55
  27.         end

  28. endtask

  29. //经过以上两个任务中的调用,但是实际中任务仍然不会执行,要使任务在程序中执行则必须在initial或always中调用它

  30. //调用任务
  31. always @(posedge clk or negedge rst_n)
  32.     tx_byte();      //这样任务被调用,任务所执行的逻辑才能正常执行




原文链接:https://blog.csdn.net/xiaoxiangwei111/article/details/106557778

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1205

主题

11937

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部