Verilog高级结构:任务、函数与通报符在DFF设计中的应用
需积分: 31 65 浏览量
更新于2024-07-12
收藏 642KB PPT 举报
在Verilog课程中,"使用通报符(notifier)的寄存器"这一主题探讨了如何在设计中应用高级结构,特别是任务(task)和函数(function)来实现模块化的编程。通报符(NT)在这个上下文中扮演着关键角色,它被用于异步复位的上升沿D触发器设计中,通过一个名为U_FFD_RB的UDP(用户定义的primitive)来实现时序检查和路径延迟的管理。
首先,我们了解到任务(task)在Verilog设计中的用途,它们通常用于调试和行为描述,可以包含时序控制元素如`#`延迟和`@`或`wait`关键字,同时支持输入(input),输出(output)以及inout参数。任务可以调用其他任务或函数,但要注意的是,输入信号如`ck`不能作为任务的输入,因为这些信号的值只传递给任务一次。
函数(function)则更多地用于组合逻辑的描述和计算,它们不包含延迟,执行时间被视为零。函数仅接受输入参数,通过函数名返回结果,可以调用其他函数但不能调用任务。在模块内定义任务和函数,它们都必须在module内部使用,且不能声明wire,所有的输入/输出都是局部寄存器,函数的结果只有在执行完毕后才会返回。
举例中,"neg_clocks"任务展示了如何利用时序控制`repeat`和`@`操作符,配合输入参数`number_of_edges`来控制事件的发生次数。在实际应用中,任务可以有输入、输出和inout参数,并且这些参数的顺序应与任务声明时的输入输出列表一致,以确保良好的模块性。
值得注意的是,任务的参数名和模块内部的I/O说明可以相同,但为了代码的清晰度和可维护性,通常建议使用不同的名字。此外,可以通过关键字`disable`来禁用任务。
课程还涉及到了高级结构的其他特性,如命名块的使用和禁止,以及有限状态机(FSM)的建模。命名块用于组织和重复代码,而禁止命名块则是为了控制其在特定情况下的执行。任务和函数的调用提供了代码的重用性和灵活性,对于大型设计的管理和优化至关重要。
使用通报符的寄存器示例演示了如何在Verilog设计中运用高级结构,通过任务和函数实现模块化设计,并确保时序正确性和代码的可读性。这对于理解和实践Verilog设计语言的高级功能非常有价值。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-03-08 上传
2021-03-14 上传
2021-03-20 上传
2021-03-19 上传
2021-04-02 上传
156 浏览量
清风杏田家居
- 粉丝: 22
- 资源: 2万+
最新资源
- Apache Kafka的Python客户端-Python开发
- matlab_code:与论文相关的一些代码
- lean-intl:Lean-Intl是针对尚不支持此API的浏览器的Intl-API的精益polyfill。 这是Intl.js的现代分支,具有最新数据,已根据现代开发工作流程和工具要求进行了调整
- 一组dashboard仪表盘图标 .svg .png素材下载
- 易语言多彩文本
- 浅析屏蔽电缆的接地方式.rar
- LengthConverter:该长度转换器应用程序将给定的长度(以米为单位)转换为毫米,厘米,英寸,英尺,码,公里等。此应用程序是使用HTML,CSS,BOOTSTRAP,JAVASCRIPT开发的
- laravel引入自定义composer包文件.zip
- jdbc-jar,数据库连接驱动,三个jar包。包括druid连接池,ojdbc1.6,lombok。
- PokemonApp:应用程序列出宠物小精灵
- QT5网络通讯TCP服务器端代码,linux和win兼容,亲测可用
- 单目标动态发电调度粒子群算法,c语言档案管理界面的源码,c语言
- 使用Arduino和环氧树脂制作的夜灯-电路方案
- Playwright是一个Python库,可通过单个API自动化Chromium,Firefox和WebKit浏览器-Python开发
- 气旋物理学:《游戏物理引擎设计》一书随附的物理引擎
- homebrew-pythons::beer_mug::snake:一个Hombrew Tap,字面上充满了Python解释器