Verilog可综合语句实战指南
需积分: 50 51 浏览量
更新于2024-09-13
4
收藏 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 上传
2020-08-15 上传
2023-05-15 上传
2023-03-11 上传
2023-06-10 上传
2024-12-01 上传
2023-03-11 上传
2023-05-19 上传
lmldc611
- 粉丝: 2
- 资源: 3
最新资源
- testlnk-易语言
- 0556、计数器电路应用于自行车.rar
- Sachithanantham-P
- Fizzbuzz-extreme
- react-gifexpertapp:Buscador de Gifs con api Giphy
- 辰曦机器人官网源码含辰曦机器人.zip
- osiris-output:用于可视化Osiris仿真代码结果的脚本
- 易语言3D号码走势分析-易语言
- dos_good_payoff:对以下三个领域的绩效与薪酬之间关系的调查:商业,体育和高等教育
- 用PHP编写HTML到Markdown转换器 Markdownify-开源
- Site_Pessoal
- 0529、人体接近监测.rar
- will-exo2
- Age-Calculator
- GGJ15:2015 年全球游戏果酱
- libOpenSRTP-开源