- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
verilog任务和函数课件例程
归纳 函数定义不能包含任何定时控制语句。即任何用#、@、或wait来标识的语句 函数必须至少有一个输入,但绝不能含有任何输出和总线口; 一个函数只能返回一个值,该值的变量名与函数同名,数据类型默认为reg类型。 传递给函数的变量顺序与函数输入口声明的顺序相同。 函数定义必须包含在模块定义之内。 函数不能调用任务,但任务可以调用函数。 函数使Verilog有更广阔的适用范围。 任务和函数的共同点 1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。 2.任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量。 3.任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。 函数和任务不同点 (1)函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位 (2) 任务可以没有输入变量或有任意类型的I/O变量,而函数允许有输入变量且至少有一个,输出则由函数名自身担当 (3) 函数还可以出现在连续赋值语句assign的右端表达式中 (4) 函数调用通过函数名返回一个返回值,而任务调用必须通过I/O端口传递返回值。 (5) 在函数中不能调用其它任务,而在任务中则可以调用其它的任务或函数。 (6) 函数调用不能单独作为一条语句出现,它只能以语句的一部分的形式出现,而任务的调用则是通过一条单独的任务调用语句实现的。 (7) 函数调用可以出现在过程块或连续赋值语句中,而任务调用只能出现在过程块中。 (8) 函数定义内不允许存在时间控制语句,函数的执行总是在零仿真时间内完成,而任务定义内可以出现时间控制语句,任务的执行可以占用非零时间单位。 (9) 函数的执行不允许由disable语句进行中断,而任务的执行可以由disable语句进行中断。 (10)函数没有时序控制,因此综合结果为组合逻辑。没有时序控制的任务如同函数,带有时序控制的任务不可综合。 其中:关键词function 和endfunction表示这部分语句是一个函数定义结构,function语句标识着这个函数定义结构的开头;endfunction语句标识着函数定义结构的结尾。 “函数名”是为被定义函数所取的一个名称,对被定义函数的调用是通过这个函数名来进行的。这个函数名在函数定义结构内部还代表着一个内部变量,函数调用后的返回值是通过这个函数名变量传递给调用语句(调用语句就是对函数进行了调用的语句)的。 “返回值类型或返回值宽度”是可选的,它用来对函数调用返回数据的类型或宽度进行说明(这个数据是通过函数名返回的),它可以有如下三种形式: (1) “[msb:lsb]”:这种形式说明函数名所代表的返回数据变量是一个多位的寄存器变量,它的位数由[msb:lsb]指定,比如如下函数定义语句: function [7:0] adder; 就定义了一个函数“adder”,它的函数名“adder”还代表着一个8位宽的寄存器变量,其最高位为第7位,最低位为第0位。 (2) “integer”:这种形式说明函数名代表的返回变量是一个整数型变量。 (3) “real”:这种形式说明函数名代表的返回变量是一个实数型变量。 如果在函数的声明语句中 返回值类型或返回值宽度这一项缺省,则认为函数名代表的变量是一个一位的寄存器。 “输入端口说明”用来对函数各个输入端口的宽度和类型进行说明,在函数定义中必须至少有一个输入端口;该输入端口说明语句的语法与模块定义时的输入端口说明语句的语法是一致的。要注意在函数定义结构中不允许出现任何输出端口(output)和输入/输出端口(inout)。 “局部变量说明”是对函数内部局部变量进行的宽度和类型说明。 “行为语句”部分由关键词“begin”和“end”界定,这部分语句指明了函数被调用时要执行的操作,它们决定着函数实现的运算功能。在函数被调用时,这些行为语句将按串行方式得到执行。 函数的主要特性 函数定义中不能包含任何时序控制语句。 函数至少有一个输入,不能包含任何输出或双向端口。 函数只返回一个数据,其缺省为reg类型。 传送到函数的参数顺序和函数输入参数的说明顺序相同。 函数在模块(module)内部定义。 函数不能调用任务,但任务可以调用函数。 虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。这在需要有多个输出时非常有效。 {o1, o2, o3, o4} = f_ or_ and (a, b, c, d, e); 【例7-5】函数的
文档评论(0)