Verilog中的高级结构.ppt
《Verilog中的高级结构.ppt》由会员分享,可在线阅读,更多相关《Verilog中的高级结构.ppt(21页珍藏版)》请在三一文库上搜索。
1、Verilog中的高级结构,学习内容: 任务和函数的定义和调用 怎样使用命名块 怎样禁止命名块和任务 有限状态机(FSM)及建模,Verilog的任务及函数,结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代码进行封装。这通过将设计分成模块,或任务和函数实现。,任务(task) 通常用于调试,或对硬件进行行为描述 可以包含时序控制(#延迟,, wait) 可以有 input,output,和inout参数 可以调用其他任务或函数 函数(function) 通常用于计算,或描述组合逻辑 不能包含任何延迟;函数仿真时间为0 只含有input参数并由函数名返回一个结果 可以调用其他函数,但
2、不能调用任务,Verilog的任务及函数,任务和函数必须在module内调用 在任务和函数中不能声明wire 所有输入/输出都是局部寄存器 任务/函数执行完成后才返回结果。 例如,若任务/函数中有forever语句,则永远不会返回结果,任务,下面的任务中含有时序控制和一个输入,并引用了一个module变量,但没有输出、输入输出和内部变量,也不显示任何结果。 时序控制中使用的信号(例如ck)一定不能作为任务的输入,因为输入值只向该任务传送一次。,module top; reg clk, a, b; DUT u1 (out, a, b, clk); always #5 clk = !clk; ta
3、sk neg_clocks; input 31:0 number_of_edges; repeat( number_of_edges) ( negedge clk); endtask initial begin clk = 0; a = 1; b = 1; neg_clocks(3); / 任务调用 a = 0; neg_clocks (5); b = 0; end endmodule,任务,任务可以有input,output 和 inout参数。 传送到任务的参数和与任务I/O说明顺序相同。尽管传送到任务的参数名称与任务内部I/O说明的名字可以相同,但在实际中这通常不是一个好的方法。参数名的
4、唯一性可以使任务具有好的模块性。 可以在任务内使用时序控制。 在Verilog中任务定义一个新范围(scope) 要禁止任务,使用关键字disable 。,主要特点:,从代码中多处调用任务时要小心。因为任务的局部变量的只有一个拷贝,并行调用任务可能导致错误的结果。在任务中使用时序控制时这种情况时常发生。 在任务或函数中引用调用模块的变量时要小心。如果想使任务或函数能从另一个模块调用,则所有在任务或函数内部用到的变量都必须列在端口列表中。,任务,下面的任务中有输入,输出,时序控制和一个内部变量,并且引用了一个module变量。但没有双向端口,也没有显示。 任务调用时的参数按任务定义的顺序列出。,
5、module mult (clk, a, b, out, en_mult); input clk, en_mult; input 3: 0 a, b; output 7: 0 out; reg 7: 0 out; always ( posedge clk) multme (a, b, out); / 任务调用 task multme; / 任务定义 input 3: 0 xme, tome; output 7: 0 result; wait (en_mult) result = xme * tome; endtask endmodule,函数(function),函数中不能有时序控制,但调用它
6、的过程可以有时序控制。 函数名f_or_and在函数中作为register使用,module orand (a, b, c, d, e, out); input 7: 0 a, b, c, d, e; output 7: 0 out; reg 7: 0 out; always ( a or b or c or d or e) out = f_or_and (a, b, c, d, e); / 函数调用 function 7:0 f_or_and; input 7:0 a, b, c, d, e; if (e = = 1) f_or_and = (a | b) endfunction endmo
7、dule,函数,主要特性: 函数定义中不能包含任何时序控制语句。 函数至少有一个输入,不能包含任何输出或双向端口。 函数只返回一个数据,其缺省为reg类型。 传送到函数的参数顺序和函数输入参数的说明顺序相同。 函数在模块(module)内部定义。 函数不能调用任务,但任务可以调用函数。 函数在Verilog中定义了一个新的范围(scope)。 虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。这在需要有多个输出时非常有效。 o1, o2, o3, o4 = f_ or_ and (a, b, c, d, e);,函数,要返回一个向量值(多于一位),在函数定义时在函数名前说明范围。函数中需
8、要多条语句时用begin和end。 不管在函数内对函数名进行多少次赋值,值只返回一次。下例中,函数还在内部声明了一个整数。,module foo; input 7: 0 loo; output 7: 0 goo; / 可以持续赋值中调用函数 wire 7: 0 goo = zero_count ( loo ); function 3: 0 zero_count; input 7: 0 in_ bus; integer I; begin zero_count = 0; for (I = 0; I 8; I = I + 1) if (! in_bus I ) zero_count = zero_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 中的 高级 结构
链接地址:https://www.31doc.com/p-3486201.html