Verilog中task/function说明语句

       

目录

1、task和function的区别

2、task说明语句

3、function说明语句


参考《Verilog 数字系统设计》

1、task和function的区别

        task和function说明语句分别用来定义任务和函数,利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数,便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。学会使用task和function语句可以简化程序的结构,使程序明白易懂,是编写较大型模块的基本功。

        function和task的不同在于:

(1)function只能与主模块共有同一个仿真时间单位,而task可以定义自己的仿真时间单位。

(2)function不能启动task,而task可以启动其他task和function。

(3)function至少要有一个输入变量,而task可以没有或有多个任何类型的变量。

(4)function返回一个值,而task不返回值。

          function的目的是铜鼓返回一个值来响应输入信号的值。task能够支持多种目的,能够计算多个结果值,这些结果值只能通过被调用的任务的输出或总线端口送出。

举例:

          定义一个任务或函数,对一个16位的字进行操作,让高字节与低字节互换,把它变成另一个字(假定这个任务或函数的名为switch_bytes)。

         task返回的新字,是通过输出端口的变量,因此16位字节互换任务的调用源码是:

                                                switch_bytes(old_word,new_word);

        任务switch_bytes把输入old_word的高低字节互换,放入new_word端口输出。

        function返回的新字,是通过函数本身的返回值,因此,互换函数调用的源码是:

                                                new_word=switch_bytes(old_word) ;

2、task说明语句

(1)任务定义格式

(2)任务的调用以及变量的传递

任务的调用:<任务名>(端口1,端口2,...,端口n)

(3)任务(task)使用举例

module test ;
    reg          clk, rstn ;
 
//1、产生时钟---------------------------
    initial begin
        rstn      = 0 ;
        #8 rstn   = 1 ;
        forever begin
            clk = 0 ; # 5;
            clk = 1 ; # 5;
        end
    end
 //2、task调用-------------------------
    reg  [3:0]   a, b;
    
    initial begin
        a         = 0 ;
        b         = 0 ;
        sig_input(4'b1111, 4'b1001, a, b);
    end
 
//3、task定义---------------------------
    task sig_input ;
        input [3:0]       a ;
        input [3:0]       b ;
        output [3:0]      ao ;
        output [3:0]      bo ;
        @(posedge clk) ;
        ao = a ;
        bo = b ;
    endtask ; // sig_input
 

    initial begin
        forever begin
            #100;
            if ($time >= 1000)  $finish ;
        end
    end
 
endmodule // test

3、function说明语句

下图为函数定义的举例,定义的函数为getbyte,将 “ 说明语句 ” 的执行结果,最后再赋值给getbyte,作为返回字节。

实践举例:

>>点击这里返回导航页<<

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值