Verilog中的函数和任务

本文深入探讨了Verilog语言中的任务与函数的概念、声明方式、调用规则及应用场景,详细介绍了如何利用任务和函数将大型程序模块化,提高代码的可读性和维护性。

在高级编程语言中,为了避免在程序中多次重复编写特定的例行程序,可以使用子程序和函数。Verilog语言也提供类似的功能,即Verilog的函数和任务。。它可以把大型程序模块化,从而使代码更加容易理解。。

 

 

1。Verilog任务

 任务用关键词task声明,以endtask结束。

 任务必须包含在调用该任务的模块中。它可以有输入输出端口,任务的端口仅用来在模块和任务之间传递数据。

 只能从always或initial块中调用任务。任务不返回任何值。

   下面是有mux4to1组成的16选一多路选择器。

    

module mux16to1(W,S,f);

       input [15:0] W;

       input [3:0]  S;

       output reg  f;

 

       always @(W,S)

          case(S[3:2])

              0:mux4to1(W[0:3],S[1:0],f);

              1:mux4to1(W[4:7],S[1:0],f);

              2:mux4to1(W[8:11],S[1:0],f);

              3:mux4to1(W[12:15],S[1:0],f);

         endcase

    //task that specifies a mux4to1

        task mux4to1 ;//注意了此处为分号

           input [0:3] X;

           input [1:0]  S4;

           output reg g;

  

           case(S4)

             0: g=X[0];

             1: g=X[1];

             2: g=X[2];

             3:g=X[3];

           endcase

       endtask

 

endmodule


 

 

 

verilog函数:

函数用关键词function声明以endfunction 结束函数必须有一个输入,而且只返回一个值到函数被调用的位置。

函数是在模块内部定义的,可以在模块内的连续赋值语句和过程性语句中被调用。

module mux16to1(W,S,f);

       input [15:0] W;

       input [3:0]  S;

       output reg  f;

 

 //function that specifies a mux4to1

        function  mux4to1 ;//注意了,此处为分号啊。

           input [0:3] X;

           input [1:0]  S4;

            

           case(S4)

             0: mux4to1=X[0];

             1: mux4to1=X[1];

             2: mux4to1=X[2];

             3: mux4to1=X[3];

           endcase

       endfunction

 

       always @(W,S)

          case(S[3:2])

              0:f=mux4to1(W[0:3],S[1:0]);

              1:f=mux4to1(W[4:7],S[1:0]);

              2:f=mux4to1(W[8:11],S[1:0]);

              3:f=mux4to1(W[12:15],S[1:0]);

         endcase

    

endmodule


 

 

注:

   函数可以调用另外一个函数,但不能调用另外一个任务。

   而任务可以调用另外一个任务,也可以调用函数。

   函数和任务的一个优点是可以在always块中调用多个函数和任务块,而这些块是不允许包含实例引用语句的。。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值