RTL基本知识:task和function

在使用Verilog进行设计的过程中,使用task和function在同一个module中多次调用,充分提高了代码的复用性,有效增强设计的可维护性和复用性,可以避免不同模块间代码复制导致的不必要的错误。本文主要探讨task和function的使用以及两者之间的异同点。

1    task

定义不能出现在过程性语句快中,但是必须在“module-end”结构中。

格式一:

格式二:

task可以没有或者有一个或多个参数,值通过参数传入和传出task。输入输出在任务开始处声明,且输入与输出信号的排列顺序决定了task被调用时传递参数的顺序。在使用task时需要注意以下几点:

  • task一般在过程性语句中被调用,且调用语句中的输入必须与task定义中的一致,输出亦然,参数传递的顺序保持一致;
  • task参数是按照值传递方式进行传递(不是引用),所以在被调用的task执行的过程中,如果该task外部输入参数发生变化是不会影响正在执行的task;
  • 因为task在过程性语句中定义,所以task在调用时传递的参数都是变量类型(reg、integer、real等);
  • 定义task的module中的变量对于task是可见的,即task可引用其所在module中定义的变量,但是这种引用全局变量的做法极度不推荐;
  • task在默认情况下是static,即当多个并行进程调用同一个task时将会有可能导致程序异常(后续进行示例

更多资讯,请关注个人公众号:芯光灿烂

原文地址:https://www.cnblogs.com/xgcl-wei/p/9102755.html

时间: 2024-10-07 14:01:13

RTL基本知识:task和function的相关文章

Verilog HDL中task与function的区别

任务.函数的定义和调用都包括在一个module的内部,他们一般用于行为级建模,在编写Testbench时用的较多,而在写可综合的代码时要少用. function的定义: function<返回值类型和位宽> <函数名> <入口参量和类型声明> <局部变量声明> 行为语句: endfunction 定义function时,要注意以下几点: (1):  function定义结构不能出现在任意一个过程块(always块或者initial块)的内部: (2):  f

SV中的task和function

SV中的Task和Function不需要,必须加一个begin..end来指明body. task    muliple_line; ......body... endtask :multiple_line 子程序在执行到子程序的最后一行就返回,将返回值赋给与函数同名的变量,也可以显式的调用return来返回. SV中module和program的子程序默认是静态存储的,当需要动态存储时,仍然需要显式的用automatic显式指出.(class中默认是automatic的) 子程序中的参数缺省值

vivado对task和function的可综合支持

手册UG901,对vivado可综合的语句支持进行了描述,HDL包括:verilog-2001,system-verilog,VHDL: verilog-2001扩展了对task和function的支持. ug901手册中,章节7对支持的语法进行详细描述. 1 Filename: functions_1.v 2 // 3 // An example of a function in Verilog 4 // 5 // File: functions_1.v 6 // 7 module funct

RTL基本知识:如何正确在敏感信号列表中包含function中的信号

在使用Verilog建模组合逻辑时,经常会使用"@*"的方式实现将进程中素有输入信号隐含加入到敏感信号列表中.但是如果该进程中包含对函数的引用时,尽管使用"@*",综合前后的仿真结果还是有出现不一致的情况.本文将对此进行示例说明. 1  问题示例 Verilog中可以在always后使用"@*"来代替冗长的敏感信号列表,这样做虽然在一定程度上可以保证仿真和综合的一致性,但是在一些情况下并不完全正确.例如下例,其中的函数引用了全局变量start,期

(原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

1. Abstract   function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充裕,我想通过写几个简单的电路将它们二者的功能进行验证一下,看看究竟是怎么生成电路的. 2. Contents     主要为测试function和task各自生成的电路,所以电路设计功能比较简单--4位BCD码转换成4位余3码.     文件开头的注释说明. /* ---------------

RTL基本知识:VCD内部解剖

VCD(ValueChange Dump)是用ASCII记录了被选择信号在仿真过程中的变化情况,同时还记录了一些测试向量生成时的仿真信息,例如仿真时间精度等.目前常用的VCD主要有两种格式: 四值格式:记录了信号的数值变化情况,这里的数值仅包含0,1,x,z,不包含相关信号强度的信息; 扩展格式:记录了信号数值变化的所有情况; 本文仅以四值格式VCD为例进行详述. 1 VCD生成常用的系统任务 在Verilog中尝试用以下的系统任务保存测试向量VCD. 1.1 $dumpfile 该任务主要用来

RTL基本知识:缺失分号的后果

在使用Verilog进行设计过程中,经常会遇到某些条件判断语句中的分支没有执行,有些for循环仅执行一次的情况,特别是在过程性赋值语句中.其中很大一部分是因为错误使用了":"导致的.因为Verilog源自C语言,根据其语言特性,":"在Verilog中本身是一条单独的空语句,只是岂不进行任何具体操作而已,但是这样的特点造成了":"可以出现在设计的很多地方,顺利的通过编译甚至仿真,引起不容易察觉的错误.本文将针对这种情况探讨其中原因,并以示例说明.

RTL基本知识:全加器设计(VHDL)

[设计要求] 使用层次化设计方法,用VHDL语言设计四位二进制全加器,并进行仿真. [设计目的] 考查对于VHDL元件例化语法的熟悉程度: 考查对于数字电路中全加器工作原理的理解: [设计思路] 用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器.一位全加器可以处理低位进位,并输出本位加法进位.多个一位全加器进行级联可以得到多位全加器. 第一步:一位全加器: 第二步:多位全加器,在其中例化一位全加器实现: 1 一位全加器 a和b为两位二进制数据,cin为前级进位位,cout为当前计算

RTL基本知识:关于coverage

 Coverage Overview 随着芯片规模越来越大,集成的功能越来越多,一次性流片费用的增加,市场竞争的日益激烈,如何在验证和测试中解决判断验证充分性和完备性的问题逐步成为业界验证工作的热门话题. 并且伴随验证技术的进一步发展,验证技术也发生了巨大的变化,覆盖率作为其中一种判断验证充分性的手段已经被广泛的应用在集成电路的设计验证工作中. 本文将主要介绍设计验证工作中经常遇到的覆盖率的基本概念,希望对需要的朋友有所帮助. Test Coverage Fault Coverage consi