Verilog可综合语句实战指南
需积分: 50 145 浏览量
更新于2024-09-13
3
收藏 294KB PDF 举报
"这篇资料汇总了Verilog语言中可综合与不可综合的语句,并给出了建立可综合模型的原则,对于理解和编写能被硬件综合的Verilog代码非常有帮助。"
在Verilog HDL中,可综合语句是那些能够被硬件综合工具转化为实际电路结构的语句。例如,`always`块用于描述时序逻辑,`assign`用于创建静态赋值,`reg`和`wire`定义存储和连接元素,`and`、`nand`等逻辑运算符表示基本逻辑门,以及`module`表示电路模块。这些语句在设计数字逻辑电路时非常常见,且能够被大多数综合工具接受。
然而,有一些语句在综合过程中不被支持,比如`initial`块通常用于仿真初始化,`time`用于时间量的声明,`defparam`用于参数的默认值设定, `$finish`结束仿真,`fork`和`join`处理并发执行,以及`wait`语句。这些语句在硬件实现中没有对应的实体,因此在设计需要综合的Verilog代码时应当避免使用。
还有一些语句,如`casex`、`casez`(考虑X和Z值的case语句)、`wand`、`triand`、`wor`、`trior`(带三态的逻辑操作),以及`real`数据类型,它们在某些综合工具中可能被支持,但不是所有工具都支持。同样,`disable`、`forever`循环、数组、内存(`memories`)、`repeat`循环、`task`任务和`while`循环可能因工具而异。在编写可综合代码时,应谨慎使用这些特性。
建立可综合模型的关键原则包括:
1. 避免使用`initial`块来描述时序行为,因为它们在综合时通常不被处理。
2. 不使用延迟操作,如`#10`,这在综合时可能导致不确定性。
3. 避免使用循环次数不确定的循环,如`forever`和`while`,因为它们可能导致无限循环或难以预测的行为。
4. 不推荐使用用户定义的原语(UDP),因为它们可能不被所有工具支持。
5. 优先采用同步设计方法,以减少 metastability 和时序问题。
6. 尽量使用行为描述而非门级元件描述,以提高抽象级别和可读性。
7. 在`always`块中,列出所有输入信号作为敏感列表,以清晰描述组合逻辑的响应。
8. 内部寄存器应有复位功能,使用全局复位信号可以简化系统设计。
9. 对于时序逻辑,推荐使用非阻塞赋值(`<=`);组合逻辑可以使用阻塞赋值(`=`)或非阻塞赋值,但不要混用。
10. 同一变量不应在多个`always`块中被赋值,且一个赋值对象不应同时用阻塞和非阻塞方式赋值。
11. 如果不希望产生锁存器,确保所有条件分支都对变量进行赋值。
12. 避免在设计中混合使用上升沿和下降沿触发的触发器,以简化时序分析。
13. 在同一`always`块内,避免对同一变量的阻塞和非阻塞赋值,以防止不确定的行为。
遵循这些原则,可以编写出更健壮、更易于综合的Verilog代码,从而确保设计能够成功转化为硬件实现。
2011-11-12 上传
2022-08-04 上传
2013-07-23 上传
2021-10-13 上传
点击了解资源详情
点击了解资源详情
2021-03-05 上传
lmldc611
- 粉丝: 2
- 资源: 3
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程