verilog课件--17_verilog任务与函数

verilog课件--17_verilog任务与函数

ID:40236756

大小:74.51 KB

页数:21页

时间:2019-07-27

verilog课件--17_verilog任务与函数_第1页
verilog课件--17_verilog任务与函数_第2页
verilog课件--17_verilog任务与函数_第3页
verilog课件--17_verilog任务与函数_第4页
verilog课件--17_verilog任务与函数_第5页
资源描述:

《verilog课件--17_verilog任务与函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第17章Verilog中的高级结构学习内容:任务和函数的定义和调用怎样使用命名块怎样禁止命名块和任务有限状态机(FSM)及建模Verilog的任务及函数结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代码进行封装。这通过将设计分成模块,或任务和函数实现。任务(task)通常用于调试,或对硬件进行行为描述可以包含时序控制(#延迟,@,wait)可以有input,output,和inout参数可以调用其他任务或函数函数(function)通常用于计算,或描述组合逻辑不能包含任何延迟;函数仿真时间为0

2、只含有input参数并由函数名返回一个结果可以调用其他函数,但不能调用任务Verilog的任务及函数任务和函数必须在module内调用在任务和函数中不能声明wire所有输入/输出都是局部寄存器任务/函数执行完成后才返回结果。例如,若任务/函数中有forever语句,则永远不会返回结果任务下面的任务中含有时序控制和一个输入,并引用了一个module变量,但没有输出、输入输出和内部变量,也不显示任何结果。时序控制中使用的信号(例如ck)一定不能作为任务的输入,因为输入值只向该任务传送一次。moduletop;

3、regclk,a,b;DUTu1(out,a,b,clk);always#5clk=!clk;taskneg_clocks;input[31:0]number_of_edges;repeat(number_of_edges)@(negedgeclk);endtaskinitialbeginclk=0;a=1;b=1;neg_clocks(3);//任务调用a=0;neg_clocks(5);b=0;endendmodule任务任务可以有input,output和inout参数。传送到任务的参数和与任务I/

4、O说明顺序相同。尽管传送到任务的参数名称与任务内部I/O说明的名字可以相同,但在实际中这通常不是一个好的方法。参数名的唯一性可以使任务具有好的模块性。可以在任务内使用时序控制。在Verilog中任务定义一个新范围(scope)要禁止任务,使用关键字disable。主要特点:从代码中多处调用任务时要小心。因为任务的局部变量的只有一个拷贝,并行调用任务可能导致错误的结果。在任务中使用时序控制时这种情况时常发生。在任务或函数中引用调用模块的变量时要小心。如果想使任务或函数能从另一个模块调用,则所有在任务或函数内

5、部用到的变量都必须列在端口列表中。任务下面的任务中有输入,输出,时序控制和一个内部变量,并且引用了一个module变量。但没有双向端口,也没有显示。任务调用时的参数按任务定义的顺序列出。modulemult(clk,a,b,out,en_mult);inputclk,en_mult;input[3:0]a,b;output[7:0]out;reg[7:0]out;always@(posedgeclk)multme(a,b,out);//任务调用taskmultme;//任务定义input[3:0]xme,

6、tome;output[7:0]result;wait(en_mult)result=xme*tome;endtaskendmodule函数(function)函数中不能有时序控制,但调用它的过程可以有时序控制。函数名f_or_and在函数中作为register使用moduleorand(a,b,c,d,e,out);input[7:0]a,b,c,d,e;output[7:0]out;reg[7:0]out;always@(aorborcordore)out=f_or_and(a,b,c,d,e);//

7、函数调用function[7:0]f_or_and;input[7:0]a,b,c,d,e;if(e==1)f_or_and=(a

8、b)&(c

9、d);elsef_or_and=0;endfunctionendmodule函数主要特性:函数定义中不能包含任何时序控制语句。函数至少有一个输入,不能包含任何输出或双向端口。函数只返回一个数据,其缺省为reg类型。传送到函数的参数顺序和函数输入参数的说明顺序相同。函数在模块(module)内部定义。函数不能调用任务,但任务可以调用函数。函数在Verilog中定义了

10、一个新的范围(scope)。虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。这在需要有多个输出时非常有效。{o1,o2,o3,o4}=f_or_and(a,b,c,d,e);函数要返回一个向量值(多于一位),在函数定义时在函数名前说明范围。函数中需要多条语句时用begin和end。不管在函数内对函数名进行多少次赋值,值只返回一次。下例中,函数还在内部声明了一个整数。modulefoo;input[7:0]loo;out

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。