ImageVerifierCode 换一换
格式:PPT , 页数:121 ,大小:641.50KB ,
资源ID:971045      下载积分:40 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-971045.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第17章Verilog中的高级结构.PPT)为本站会员(天***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

第17章Verilog中的高级结构.PPT

1、第 17章 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 c

3、lk = !clk;task neg_clocks;input 31:0 number_of_edges;repeat( number_of_edges) ( negedge clk);endtaskinitial beginclk = 0; a = 1; b = 1;neg_clocks(3); / 任务调用a = 0; neg_clocks (5);b = 0;endendmodule任务 任务可以有 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;endtaskendmodule函数( 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) elsef_or_and = 0;endfunctionendmodu

7、le函数主要特性: 函数定义中不能包含任何时序控制语句。 函数至少有一个输入,不能包含任何输出或双向端口。 函数只返回一个数据,其缺省为 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;beginzero_count = 0;for (I = 0; I 8; I = I + 1)if (! in_bus I )zero_count = zero_count + 1;endendfunctionendmodule函数函数返回值可以声明为其它 register类型: integer, real, 或 time。在任何表达式中都可调用函数module checksub (neg, a, b);output neg;reg neg;input a, b;function integer subtr;input 7: 0 in_a, in_b;subtr = in_a - in_b; / 结果可能为负endfunctionalways (a or b)if (subtr( a, b) 0)neg = 1;elseneg = 0;endmodule

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。