网站支持
EDA 先锋工作室是与人民邮电出版社紧密合作的一支电子设计领域专业书籍创作队伍。
该工作室的成员都是电子、通信、半导体行业的资深研发人员。
为了配合本书的学习, EDA 先锋工作室在 "EDA 专业论坛" (问 ://www础cn.net)上
开办了《设计与验证一-Verilog HDL))的讨论园地。利用该园地,作者联合业界专业人士长
期在论坛上为读者答疑解惑,讨论 EDA 工程经验与设计技巧,并对书中所述问题加以引申,
借此与读者共同切磋,互相提高。网站提供了本书光盘中所附资料的下载服务,并介绍了 EDA
先锋工作室所编图书的出版动态。
EDA 先锋工作室非常重视您的批评和建议,您可以通过电子函件以及网站反馈您的信
息。
电子信箱 altera_ book@edacn.net 。
EDA 先锋工作皇
主编:王诚
副主编:薛小刚 钟信潮
编委:李楠吴继华庞健由武军袁园
周海涛侯小辉寿开宇范丽珍薛宁
路远梁晓明伊贵业吴义涛张世卓
张伟平王书松吴蕾胡安琪吴卫旋
董振东于春华
失于本书
内容和特点
Verilog HDL 作为两大硬件描述语言之一,拥有很大的用户群。据调查,目前美国有 90%
左右的 IC 设计人员使用 Verilog. 在中国,大概再 50% 左右的人在使用 Verilog。当前数字芯
片设计行业正处于强劲上升时期,风头盖过了几年前的软件设计业,己经成为电子和 IT 类
的高薪行业。大量高校毕业生和部分软件设计人员正在不断涌入这个领域。要想尽快在 IC
设计领域站稳脚跟,就必须要尽快掌握 HDL 语言的设计方法。
现在市场上关于 Verilog 的书籍大多数是介绍语法和建模的,没有真正体现出理论性与
实用性的结合。针对这种情况,本工作室创作了本书。
全书共分 9 章,各章内容简要介绍如下。
• 第 1 章:介绍 HDL 的设计方法, Verilog 与 VHDL、 C 等语言的区别,以及
HDL 语言的设计与验证流程。
• 第 2 章:介绍 Verilog 的语言基础.
• 第 3 章:重点介绍 Verilog 的 3 种描述方法和不同的设计层次.
• 第 4 章:介绍 RTL 建模的概念和一些常用电路的 Verilog 设计方法,最后引申
出 Verilog 语言的可综合子集。
第 5 章:总结了常用的 RTL 同步设计原则,逐一介绍了设计模块的划分、设
计组合逻辑和时序逻辑时应该注意的问题,以及优化 RTL 代码的方法等内
容.
• 第 6 章:介绍状态机的设计方法和技巧。
• 第 7 章:介绍如何搭建测试平台,对设计进行验证。
• 第 8 章:详细描述了 Verilog 语言的语义和仿真原理,是 Verilog 语言的精髓所
在.
• 第 9 章:总结并展望 HDL 和 HVL 的发展趋势。
读者对象
本书可作为高等院校通信工程、电子工程、计算机、微电子和半导体等相关专业的教
材,也可作为硬件工程师和 IC 工程师的参考书。
光盘使用说明
本书配套光盘中提供了书中示例的工程文件、设计源文件和说明文件,示例按照章节编
号和出现的先后顺序排列,例如 "Example-2-1 "表示第 2 章中的第 1 个示例。
工程示例文件夹中包含该工程的项目文件、源文件、报告文件和生成结果等文件。
对于一些相对复杂的示例,说明文件中给出了示例的详细信息和操作指南,而对于一些
简单的实例,则只给出了源代码。
另外,为了配合读者进一步学习,光盘中还提供了 Verilog 1995 和 Verilog 2001 这两
个版本的 IEEE 标准文献,读者可以从中查阅 Verilog 的语法细节。
本书约定
为了方便读者阅读,本书还设计了 4 个小图标,这些图标的含义如下。
苦苦行家指点 z 用于介绍使用经验和咐,或罗列一些重要的概念。
.注意事项:用于提醒读者应该注意的问题.
鲁多学一招:用于介绍实现同一功能嗣同方法。
1-曹操作实例:用于引出一个操作题目和相应的一组操作步骤。
本书第 1 、 4、 5 、 6 章由王诚编写,第 2、 3 、 7 、 8 、 9 章由吴继华编写。由于作者水平
有限,书中难免会有疏漏,敬请读者批评指正。
感谢您选择了本书,也请您把对本书的意见和建议告诉我们。
EDA 先锋工作室网站 h句 ://www.EDACN.net 。
EDA 先锋工作室
2006 年 7 月
目录
1 章 HDL 设计方法简介..............
…………….........……………… 1
1.1
设计方法的变迁.......….........................….......…................…… ................................................1
1.2 Verilog 语言的特点..........…………………………………………………………………………… ................2
1.2.1
Verilog 的由来 ..................................................................................................................2
1.2.2 HDL 与原理图.............… .................................................................................................2
1.2.3
Verilog 和 VHDL.................................................…..........................… ............................3
1.2.4 Verilog 和 C 语言.........................….......….......….......….......…......................… ................4
1.3 HDL 的设计与验证流程.......….......… ....................................................................................5
1.4
问题与思考.................................................… ..........................................................................7
第 2 章 Verilog 语言基础................……………·……………… ...9
2.1 Top-Down 和 Bottom-Up........................................……...............…........… .............................9
2.2 驰rilog 的 3 种描述方法...............….....................................................................................四
2.2.1 实例 .................................................................................................................................10
3 种描述方法………………………………………………………………………….......…........…........13
2.2.2
2.3 基本词法..........… ...................................................................................................................14
2.4模块和端口............................................................................................................................臼
2.5
编译指令...........................….......… ........................................................................................16
逻辑值与常量........................................................................................................................口
2.6
逻辑值.......…...................................................................................................................口
2.6.1
2.6.2 常量....………………………………………………………………………………………………..............… 18
变量类型.......…......................................................................................................................四
2.7.1 线网类型.........… ............................................................................................................19
2.7.2 寄存器类型..........…........… ...........................................................................................19
2.7.3 变量的物理含义..........….......….......… ...........................................................................20
2.7.4
驱动和赋值..........….......................................................................................................却
参数..........….................….......…....................................…........….......…..............…................22
2.8
2.9 Verilog 中的并发与顺序 .......................................................................................................22
2.10 操作数、操作符和表达式...............................…............................................................
2.7
2.11 系统任务和系统函数.......….........… .....................................................................................28
2.1 1.1显示任务......................….........….........……......................…........…..............… ...............28
2.1 1.2 文件输入/输出任务..........................................................…........….........…........… ........28
2 .11.3其他系统任务和系统函数 ............................................................................................29
2.1 2 小结.....................................… ................................................................................................29
2.13 问题与思考.................................…...............…….......….....................……........… ...................29
第 3 章 描述方式和设计层次...........……………
...................................31
3.1
3.2
3.4.1
3.4.2
3.5
3.3
描述方式..............................….......….....................................................................................3 1
数据流描述...............….......….......….......….................….......................................................且
3.2.1 数据流.............................................................................................................................31
3.2.2 连续献值语句 ................................................................................................................31
3.2.3
延时............…….......….....................................................................................................妇
3.2.4
多驱动源线网.........…..................….............……............................................................34
行为描述................................................................................................................................36
3.3.1 行为描述的语句格式 ....................................................................................................36
3.3.2
过程赋值语句................................................................................................................40
3.3.3 语句组~..•. .••••.......• ....………..........................................…..........…….............................43
3.3.4 高级编程语句.......… ......................................................................................................44
3.4 结构化描述........… .................................................................................................................50
实例化模块的方法..........…...........................................................................................但
参数化模块.......................................…….......................................................................妇
设计层次................................................................................................................................们
3.5.1
系统级和行为级...............…......................….................….................…… ......................57
3.5 .2 RTL 级....................................................…·….................................................… .............59
3.5.3
门级................................…….......…........…·…….......…........……...
第 4 章 RTL 概念与 RTL 级建模.....................................................….......………·
4.1 RTL 与综合的概念.............................................…….......… ..................................................65
4.2 RTL 级设计的基本要素和步骤...........................…............……..................……..…..…......… 65
4.3 常用的 RTL 级建模............……........…................................................……........…................67
2
4.3.1
阻塞赋值、非阻塞赋值和连续赋值.......................................................…..….........… .67
4.3.2
寄存器电路建模..........................……................….........…… ..........................................68
4.3.3 组合逻辑建模 ................................................................................................................70
4.3 .4 双向端口与三态信号建模 ............................................................................................72
4.3.5 Mux 建模.......……..........................................…......…......…..………….........……..…..… .....73
4.3.6
存储器建模.........…........…"…..............….....‘ .................................................................74
4.3.7
简单的时钟分频电路.....................……...............……...............… ..................................75
4.3.8
串并转换建模.........................................….................................….........… ....................77
4.3.9 同步复位和异步复位.......‘ ............................................................................................77
4.3.1 0 使用 case 和 if...else 语句建模......................….....................................….........… .........81
4.3.1 1 可综合的 Verilog 语法子集....................…………………………..‘ ......................................87
4.4 设计实例 CPU 读写 PLD 寄存器接口 .............................................................................87
4.5 小结.................……………………………………………………………………………..............…...............92
4.6
问题与思考.........…….......….......….................................….......................….......… .................92
第 5 章 RTL 设计与编码指导....... …………………...........................93
5.1
一般性指导原则................................……........….................….........…….......… ......................93
5. 1.1
面积和速度的平衡与互换原则.........………...........................…….........…....................94
5. 1.2 硬件原则‘….......................‘ ..........................................................................................103
5. 1.3
系统原则...........................‘.........................................................................................
5.2 同步设计原则和多时钟处理 .. …….川…...……..…...川……..…...…….. …...............‘...............................................................107
同步设计原则.................................….........….................................................… ..........107
亚稳态............…...............…...........….......…........….......….......….........… .......................109
异步时钟域数据同步.......‘....................….........................… .......................................111
5.2.1
5.2.2
5.2.3
5.3
代码风格............…...............…........................................................‘...................................
5.3川.1 代码风格的分类.……….. …….川…...………
.. ……
.. …....………
5.3.2
.. …… .. …...……….川…….川….川..……….川……..…..……………………………………………………………….........113
代码风格的重要性.............................................….......…… .........................................113
5.4 结构层次设计和模块划分..........… ....................................................................................114
5.4.1 结构层次化编码 (Hierarchical Coding) ......... ......….......….......…….........….............114
5.4.2 模块划分的技巧 (Design Partitioning) .............. ...... ..........….... ~..….......… ..............115
5.5
组合逻辑的注意事项.................…….......…·…......................................….......………....……..…...……..…….川…...1
always 组合逻辑信号敏感表.川………"……..…..,……….川……..…'"……….. …… .. …...……….,…… .. …...………..……..…...川……….川…….川….川...………
.. …….川….川....................................................116
5.5.引.1
5.5.2 组合逻辑反馈环路.......… ............................................................................................117
5.5.3
脉冲产生器.........................…..….......….......….......….......….........….............................118
5.5.4 慎用锁存器 (Latch) .........................……………………………………..….......................119
5.6
时钟设计的注意事项........................……......................
3
时钟选择.........….......….......… ......................................................................................121
5.6.3
5.6.4 门控时钟…………………………………………………………………………………………................121
5.6.5 时钟同步使能端..........….......‘ .....................................................................................122
5.7 RTL 代码优化技巧..........…………………………………………………………………………....……… ..123
5.7.1 使用 Pipelining 技术优化时序.......…….....................…........…......................….......… .123
5.7.2 模块复用与资源共享.......................‘ ..........................................................................123
5.7.3
逻辑复制.........................…...........….......…........… .......................................................125
5.7.4
香农扩展运算.......……..............…..............…...............…..............….......................… ..127
小结.................….............….............................….............................…....................…… ........129
问题与思考.........…........……….......…........….......................… ..............................................130
5.8
5.9
第 6 章 如何写好状态机 ...............................................................................................131
6.1
6.2
状态机的基本概念....................................................................................‘ ........................131
6.1.1 状态机是一种思想方法 ..............................................................................................131
6. 1.2 状态机的基本要素及分类............…….......…..….......… ...............................................133
6.1.3
状态机的基本描述方式............…….......….......….....................................… ................133
如何写好状态机........................…........................….........…….....................… .....................134
6.2.1 评判U FSM 的标准………………………………………………..….................................… .........134
6.2.2 RTL 级状态机描述常用的语法............…….......….......…................................… .........135
6.2.3 推荐的状态机描述方法...........................…….......… ...................................................138
6.2.4
状态机设计的其他技巧....……................................................................… .................151
6.3 使用 Synplify Pro 分析 FSM.....…......................….......….......……..............…… ..................154
6.4
小结…......................…….......................…........................…….......…................….......… ........157
6.5
问题与思考.........…................................………………………………………………………….......…..157
第 7 章 逻辑验证与 Testbench 编写............………………………·四
7.1
概述...................… ................................................................................................................159
7. 1.1
仿真和验证..........….............................…….......…................….................."....…..… ......159
7.1.2 什么是 Testbench …….......…………........… ....................................................................160
7.2 建立 Testbench ,仿真设计..........................…................…… .............................................161
编写仿真激励..............................… .............................................................................162
7.2.1
搭建仿真环境......................................................................................................‘ .......172
7.2.2
7.2.3 确认仿真结果 ..............................................................................................................173
7.2.4 编写 Testbench 时需要注意的问题.....................….................… ................................175
7.3 实例 CPU 接口仿真 .........................................................................................................177
7.3.1 设计简介.......……………………………………‘ ....................................................................177
7.3 .2 一种 Testbench .........................…….........…….......….........….........….............................178
7.3 .3 另外一种 Testbench ...............................................……................................….............182
4
7.4 结构化 Testbench ............…·……………………………………………………………………...............… 183
7.4.1
任务和函数............................................................….................… ...............................184
7.4.2 总线功能模型 (BFM) ........................….......................….......................…...............184
7.4.3 测试套具 (H缸ness) .................….......................................................,.….................185
7.4.4 测试用例( Testcase) .................. .............. ...... ........ ...... .......... ......... ........ ..................185
7.4.5 结构化 Testbench ......... .............................................. ...... .............. ..... ...... ..... .......... ....186
7.5 实例:结构化 Testbench 的编写....…....................................…… ......................................188
7.5.1 单顶层 Testbench .........................….......…......................….......…................................188
7.5.2 多顶层 Testbench .........….........….................................................................................191
7.6 扩展 Verilog 的高层建模能力...................… ......................................................................192
7.7
小结.........................……...............….........……........................… ...........................................193
7.8 问题与思考....………………………………………………………………………………… .........................193
第 8 章 Verilog 语义和仿真原理 ...........................................................................195
8.2.1
8.2.2
8.2.3
8.1 从一个问题说起 ..................................................................................................................195
8.2
电路与仿真.........…….................… .......................................................................................196
电路是并行的........…….........................…................................…........… ......................196
Verilog 是并行语言.........….......…… .............................................................................197
Verilog 仿真语义..........…………………………………………………………………….......…........197
8.3 仿真原理..............…… ..........................................................................................................198
8.3.1
Verilog 的仿真过程.........….......................….......… ......................................................198
8.3.2 仿真时间...............…………………………………………………………………………………........202
8.3.3
事件驱动...................……..............… ............................................................................203
8.3.4进程....................................................................................................................… ........203
8.3.5
调度….....................….......….......….........… ....................................................................204
8.3.6 时序控制 (Timing Control) ..............................…..…....................................…........205
8.3.7 进程、事件和仿真时间的关系 ..................................................................................205
Verilog 语言的不确定性.....…………………………………………………………………·…........205
8.3.8
分层事件队列与仿真参考模型...............….......…..............…...............…................….......206
分层事件队列.................…...............…......................….................… ...........................206
仿真参考模型.…·……..........…...........................................…...........................… ..........206
时序模型与延时............…..........................…........…...........................................................207
8.5.1 仿真模型( Simulation ModeI) .....…………………………………………………...................207
8.5.2 时序模型 CTiming ModeI) .... ......…..........................................................................208
案例分析...........................….......…….....................….......….......…...............................208
8.5.3
8.5.4在
8.4.1
8.4.2
8.4
8.5
5