打印
[Verilog HDL]

Verilog 中 task的使用方法

[复制链接]
2254|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,。。。。);


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

        integer i;
        for(i=0; i<10; i=i+1) begin
                case(i)
                        0: rx <= 1'b0;
                        1: rx <= data[0];
                        2: rx <= data[1];
                        3: rx <= data[2];
                        4: rx <= data[3];
                        5: rx <= data[4];
                        6: rx <= data[5];
                        7: rx <= data[6];
                        8: rx <= data[7];
                        9: rx <= 1'b1;
                        default: rx <= 1'b1;
                endcase
                #560;
               
        end
endtask

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

endtask

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

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




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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1061

主题

11320

帖子

26

粉丝