Verilog HDL 硬件描述语言
程序设计与实践教程
云创工作室
人民邮电出版社
1
前言
目前,EDA 技术已经成为现代电子设计领域的基本手段,涵盖印制电路板(PCB)设计、
可编程逻辑芯片开发、专用集成芯片设计以及系统验证等诸多领域。硬件描述语言(HDL)
是 EDA 技术中的一个重要组成部分,可应用于除 PCB 设计外的各个领域。
Verilog HDL 语言为两个主流 HDL 语言之一(另一个是 VHDL 语言),在全球范围具有
广泛的用户群,具有超过 80%的行业覆盖率。在美国,使用 Verilog HDL 进行设计的工程师
大约有 l0 多万人,占 HDL 设计行业工程师的 90%左右,并有超过 200 多所大学开设有 Verilog
HDL 语言的相关课程,包括斯坦福大学、卡梅隆大学这样的著名高校。在中国,业界大约有
一半的工程师在使用 Verilog HDL 语言,并且这一比例还在快速上升;在教育界有以夏宇闻
老师为代表的各位前辈进行了初期推广,目前已具备较大的应用规模。其实就学习难度而言,
Verilog HDL 语言要比 VHDL 简单的多,且和 C 语言语法风格类似,更容易被在校大学生和
初学者接受。
Verilog HDL 语言的学习是一个实践性很强的过程,直接上手就去完成芯片设计,需要
大量的资金和昂贵的成本,并面临极大的风险,对于大多数在校学生、工程师和企业而言都
是无法承受的,因此可编程逻辑器件(CPLD、FPGA)就成为最好的学习和创新平台。为了
让更多的在校学生和初学者更好地切近行业需求,同时为了改善高校教学内容,Xilinx 大学
计划(Xilinx 公司是全球最大的可编程逻辑器件提供商)和上海智翔信息服务技术有限公司
推出了一系列教材和相关课程,本书也是其中的一本,通过 Xilinx 公司的 FPGA 平台来介绍
基于 Verilog HDL 语言开发的相关知识。
本书按照开门见山、自顶向下的方式来组织内容,在介绍相关知识点之前,先告诉读者
其出现的背景、本质特征以及如何语法,让读者不仅掌握基本语法,并能够获得深层次理解。
全书内容分为 13 章,第 1 章为 EDA 设计与 Verilog HDL 语言概述;第 2 章 Verilog HDL 基
础与开发平台操作指南;第 3 章为 Verilog HDL 程序结构;第 4 章为 Verilog HDL 语言基本要
素;第 5 章为面向综合的描述语句;第 6 章为面向验证和仿真的描述语句;第 7 章为系统任
务和编译预处理语句;第 8 章为 Verilog HDL 难点解析;第 9 章为高级逻辑设计思想与代码
风格;第 10 章为可综合状态机开发实例;第 11 章为常用逻辑的 Verilog HDL 实现;第 12 章
为 Xilinx 硬核模块的 Verilog HDL 调用;第 13 章为 RS232 串口总线接口模块的设计。本章
均附有一定的思考题,供读者练习和自我检查。
本书语言简洁,层次清晰,以 Verilog HDL 语言的各方面开发为主线,遵照硬件应用系
统开发的基本步骤和思路进行详细讲解,并穿插 ISE 开发工具的操作技巧与注意事项,具备
很强的可读性、指导性和实用性。本书在成书过程中,参考了多篇文献,包括书籍和论文,
这里向其作者表示感谢。本书是云创工作室的团队合作的成果,在这里感谢给予我们支持、
帮助的师长和朋友们。
本书主要面向通信、电子、计算机等相关专业大学生,也适合从事电子设计和开发人员
阅读,特别是希望系统学习 Verilog HDL 语言的工程师。
2
目录
前言...................................................................................................................................................2
目录...................................................................................................................................................3
第 1 章 EDA 设计与 Verilog HDL 语言概述 .............................................................................11
1.1 EDA 设计概述..................................................................................................................11
1.1.1 EDA 技术简介....................................................................................................11
1.1.2 EDA 与传统电子系统设计方法.........................................................................12
1.1.3 可编程逻辑器件对 EDA 技术的要求................................................................14
1.2 Verilog HDL 语言简介 .....................................................................................................15
1.2.1 硬件描述语言说明 .............................................................................................15
1.2.2 Verilog HDL 语言的历史....................................................................................16
1.2.3 Verilog HDL 语言的能力....................................................................................16
1.2.4 Verilog HDL 和 VHDL 语言的比较...................................................................17
1.2.5 Verilog HDL 和 C 语言的比较...........................................................................18
1.3 Verilog HDL 语言的描述层次说明..................................................................................18
1.3.1 Verilog HDL 语言描述能力综述........................................................................18
1.3.2 系统级和算法级建模..........................................................................................19
1.3.3 RTL 级建模.........................................................................................................19
1.3.4 门级和开关级建模 .............................................................................................19
1.4 基于 Verilog HDL 语言的 CPLD/FPGA 开发流程 ........................................................20
1.5 Verilog HDL 语言的可综合与仿真特性..........................................................................22
1.5.1 Verilog HDL 语句的可综合性说明....................................................................22
1.5.2 Verilog HDL 语句的仿真特性说明....................................................................23
1.6 本章小结..........................................................................................................................24
1.7 思考题..............................................................................................................................24
第 2 章 Verilog HDL 基础与开发平台操作指南........................................................................25
2.1 Verilog HDL 程序开发的必备知识..................................................................................25
2.1.1 数字的表示形式 .................................................................................................25
2.1.2 常用术语解释 .....................................................................................................27
2.1.2 Verilog HDL 程序的优劣判断指标....................................................................28
2.2 Verilog HDL 程序设计模式..............................................................................................29
2.2.1 自顶向下的设计模式..........................................................................................29
2.2.2 层次、模块化模式 .............................................................................................30
2.2.3 IP 核的重用.........................................................................................................30
2.3 Xilinx Spartan 3E 系列 FPGA 简介..................................................................................31
2.3.1 Spartan-3E 系列 FPGA 简介 ..............................................................................32
3
2.3.2 Spartan-3E 系列 FPGA 结构说明.......................................................................32
2.4 ISE 快速入门....................................................................................................................36
2.4.1 ISE 操作基础 ......................................................................................................36
2.4.2 新建工程 .............................................................................................................40
2.4.3 Verilog HDL 代码的输入与功能仿真................................................................41
2.4.4 Xilinx IP 核的使用..............................................................................................46
2.4.5 用户约束输入 .....................................................................................................53
2.4.6 综合与实现 .........................................................................................................56
2.4.7 器件配置 .............................................................................................................58
2.5 ModelSim 快速入门 .........................................................................................................67
2.5.1 ModelSim 仿真软件的安装................................................................................67
2.5.2 在 ModelSim 中指定 Xilinx 的仿真库...............................................................70
2.5.3 ModelSim 的基本操作........................................................................................71
2.6 本章小结..........................................................................................................................73
2.7 思考题..............................................................................................................................74
第 3 章 Verilog HDL 程序结构 ...................................................................................................75
3.1 程序模块说明 ..................................................................................................................75
3.1.1 Verilog HDL 模块的概念....................................................................................75
3.1.2 模块的基本结构 .................................................................................................75
3.1.3 端口说明 .............................................................................................................77
3.2 Verilog HDL 的层次化设计..............................................................................................77
3.2.1 Verilog HDL 层次化设计的表现形式................................................................77
3.2.2 模块例化 .............................................................................................................77
3.2.3 参数映射 .............................................................................................................82
3.2.4 在 ISE 中通过图形化方式实现层次化设计......................................................84
3.3 Verilog HDL 语言的描述形式..........................................................................................86
3.3.1 结构描述形式 .....................................................................................................87
3.3.2 行为描述形式 .....................................................................................................94
3.3.4 混合设计模式 .....................................................................................................98
3.4 本章小结..........................................................................................................................98
3.5 思考题..............................................................................................................................98
第 4 章 Verilog HDL 语言基本要素 .........................................................................................100
4.1 标志符与注释 ................................................................................................................100
4.1.1 标志符 ...............................................................................................................100
4.1.2 注释...................................................................................................................100
4.2 数字与逻辑数值 ............................................................................................................101
4.2.1 逻辑数值 ...........................................................................................................101
4.2.2 常量...................................................................................................................101
4.2.3 参数...................................................................................................................102
4.3 数据类型........................................................................................................................102
4
4.3.1 数据类型综述 ...................................................................................................102
4.3.2 线网类型 ...........................................................................................................103
4.3.3 寄存器类型 .......................................................................................................107
4.4 运算符和表达式 ............................................................................................................110
4.4.1 赋值运算符 .......................................................................................................110
4.4.2 算术运算符 .......................................................................................................112
4.4.3 逻辑运算符 .......................................................................................................116
4.4.4 关系运算符 .......................................................................................................117
4.4.5 条件运算符 .......................................................................................................119
4.4.6 位运算符 ...........................................................................................................120
4.4.7 拼接运算符 .......................................................................................................121
4.4.8 移位运算符 .......................................................................................................122
4.4.9 一元约简运算符 ...............................................................................................123
4.5 本章小结........................................................................................................................124
4.6 思考题............................................................................................................................124
第 5 章 面向综合的行为描述语句 ...........................................................................................125
5.1 触发事件控制 ................................................................................................................125
5.1.1 信号电平事件语句 ...........................................................................................125
5.1.2 信号跳变沿事件语句........................................................................................126
5.2 条件语句........................................................................................................................127
5.2.1 IF 语句...............................................................................................................127
5.2.2 CASE 语句........................................................................................................129
5.2.3 条件语句的深入理解........................................................................................132
5.3 循环语句........................................................................................................................135
5.3.1 REPEAT 语句....................................................................................................135
5.3.2 WHILE 语句 .....................................................................................................136
5.3.3 FOR 语句 ..........................................................................................................137
5.3.4 循环语句的深入理解........................................................................................140
5.4 任务与函数....................................................................................................................145
5.4.1 任务(TASK)语句 .........................................................................................145
5.4.2 函数(FUNCTION)语句 ...............................................................................147
5.4.3 任务和函数的深入理解....................................................................................149
5.5 本章小结........................................................................................................................150
5.6 思考题............................................................................................................................150
第 6 章 面向验证和仿真的行为描述语句................................................................................152
6.1 验证与仿真概述 ............................................................................................................152
6.1.1 代码验证与仿真概述........................................................................................152
6.1.2 测试平台说明 ...................................................................................................153
6.1.3 验证测试方法论 ...............................................................................................155
6.1.4 Testbench 结构说明 ..........................................................................................159
5
6.2 仿真程序执行原理 ........................................................................................................160
6.2.1 Verilog HDL 语义简介......................................................................................160
6.2.2 Verilog HDL 仿真原理......................................................................................160
6.3 延时控制语句 ................................................................................................................162
6.3.1 延时控制的语法说明........................................................................................162
6.3.2 延时控制应用实例 ...........................................................................................163
6.4 常用的行为仿真描述语句 ............................................................................................166
6.4.1 循环语句 ...........................................................................................................166
6.4.2 FORCE 和 RELEASE 语句 ..............................................................................168
6.4.3 WAIT 语句 ........................................................................................................169
6.4.4 事件控制语句 ...................................................................................................170
6.4.5 TASK 和 FUNCTION 语句 ..............................................................................171
6.4.6 串行激励与并行激励语句................................................................................172
6.5 用户自定义元件 ............................................................................................................173
6.5.1 UDP 的定义与调用 ..........................................................................................173
6.5.2 UDP 应用实例 ..................................................................................................173
6.6 仿真激励的产生 ............................................................................................................176
6.6.1 变量初始化 .......................................................................................................176
6.6.2 时钟信号的产生 ...............................................................................................180
6.6.3 复位信号的产生 ...............................................................................................182
6.6.4 数据信号的产生 ...............................................................................................183
6.6.5 典型测试平台实例 ...........................................................................................184
6.6.6 关于仿真效率的说明........................................................................................185
6.8 Xilinx 仿真工具 ISE Simulator.......................................................................................186
6.8.1 基于波形测试法的仿真....................................................................................186
6.8.2 基于 Verilog HDL 测试平台的仿真.................................................................188
6.9 Xilinx 系统验证工具 ChipScope Pro .............................................................................193
6.9.1 ChipScope Pro 工具简介...................................................................................193
6.9.2 ChipScope Pro 开发实例...................................................................................195
6.10 本章小结......................................................................................................................202
6.11 思考题..........................................................................................................................203
第 7 章 系统任务和编译预处理语句 .......................................................................................204
7.1 系统任务语句 ................................................................................................................204
7.1.1 输出显示任务 ...................................................................................................204
7.1.2 文件输入输出任务 ...........................................................................................210
7.1.3 时间标度任务 ...................................................................................................215
7.1.4 仿真控制任务 ...................................................................................................216
7.1.5 仿真时间函数 ...................................................................................................217
7.1.6 数字类型变换函数 ...........................................................................................219
7.1.7 概率分布函数 ...................................................................................................220
6
7.2 编译预处理语句 ............................................................................................................221
7.2.1 宏定义`define 语句 ...........................................................................................222
7.2.2 条件编译命令`if 语句.......................................................................................223
7.2.3 文件包含`include 语句 .....................................................................................224
7.2.4 时间尺度`timescale 语句 ..................................................................................227
7.2.5 其他语句 ...........................................................................................................228
7.3 本章小结........................................................................................................................229
7.4 思考题............................................................................................................................229
第 8 章 Verilog HDL 可综合设计的难点解析..........................................................................230
8.1 组合逻辑和时序逻辑 ....................................................................................................230
8.1.1 组合逻辑设计 ...................................................................................................230
8.1.2 时序逻辑设计 ...................................................................................................234
8.1.3 组合逻辑电路中的竞争与冒险........................................................................238
8.1.4 时序逻辑的时钟选择策略................................................................................243
8.2 同步时序电路和异步时序电路.....................................................................................246
8.2.1 同步时序电路设计 ...........................................................................................246
8.2.2 异步时序电路设计 ...........................................................................................250
8.2.3 异步电路和同步电路的比较............................................................................254
8.3 阻塞赋值与非阻塞赋值 ................................................................................................255
8.3.1 阻塞赋值与非阻塞过程的深入理解................................................................255
8.3.2 组合逻辑中的阻塞与非阻塞............................................................................256
8.3.3 时序逻辑中的阻塞与非阻塞............................................................................257
8.3.4 编码建议 ...........................................................................................................261
8.4 双向端口........................................................................................................................262
8.4.1 双向端口简介 ...................................................................................................262
8.4.2 双向端口应用实例 ...........................................................................................262
8.6 锁存器............................................................................................................................266
8.6.1 锁存器本质说明 ...............................................................................................266
8.6.2 锁存器的产生原因和处理策略........................................................................266
8.6.3 锁存器的应用规则 ...........................................................................................268
8.7 消除不确定输入的电路设计 ........................................................................................271
8.7.1 初始值不确定态的消除....................................................................................271
8.7.2 逻辑运算不确定态的消除................................................................................271
8.8 面向硬件的设计思维 ....................................................................................................272
8.8.1 基本的硬件设计模式........................................................................................272
8.8.2 程序执行顺序 ...................................................................................................273
8.8.3 时钟是时序电路的控制者................................................................................274
8.9 本章小结........................................................................................................................276
8.10 思考题..........................................................................................................................276
第 9 章 高级逻辑设计思想与代码风格....................................................................................278
7
9.1 通用指导原则 ................................................................................................................278
9.1.1 面积和速度的互换原则....................................................................................278
9.1.2 模块划分原则 ...................................................................................................279
9.2 代码风格........................................................................................................................279
9.2.1 代码风格的含义 ...............................................................................................279
9.2.2 通用的代码设计风格........................................................................................280
9.2.3 通用的代码书写风格........................................................................................281
9.2.3 Xilinx 专用代码设计风格 ................................................................................284
9.3 常用的设计思想与代码设计风格.................................................................................286
9.3.1 流水线技术原理和 Verilog HDL 实现.............................................................286
9.3.2 逻辑复用与逻辑复制原理和 Verilog HDL 实现 .............................................292
9.3.3 关键路径提取原理和 Verilog HDL 实现.........................................................296
9.3.4 逻辑合并与拆分原理和 Verilog HDL 实现.....................................................297
9.3.5 多时钟域接口设计技巧....................................................................................298
9.4 本章小结........................................................................................................................311
9.5 思考题............................................................................................................................312
第 10 章 可综合状态机开发实例 .............................................................................................313
10.1 状态机基本概念 ..........................................................................................................313
10.1.1 状态机工作原理以及分类..............................................................................313
10.1.2 状态机描述方式 .............................................................................................314
10.1.3 状态机设计思想 .............................................................................................316
10.2 可综合状态机设计原则 ..............................................................................................316
10.2.1 状态机开发流程 .............................................................................................316
10.2.2 状态编码原则 .................................................................................................317
10.2.3 状态机的容错处理 .........................................................................................318
10.2.4 常用的设计准则 .............................................................................................318
10.3 状态机的 Verilog HDL 实现 .......................................................................................319
10.3.1 状态机实现综述 .............................................................................................319
10.3.2 Moore 状态机开发实例..................................................................................322
10.3.3 Mealy 状态机开发实例 ..................................................................................326
10.4 Xilinx 状态机设计工具 StateCAD...............................................................................328
10.4.1 StateCAD 基础介绍 ........................................................................................328
10.4.2 编辑状态机 .....................................................................................................329
10.4.3 状态机优化以及 HDL 代码生成....................................................................332
10.4.4 测试状态机 .....................................................................................................335
10.5 本章小结......................................................................................................................336
10.6 思考题..........................................................................................................................337
第 11 章 常用逻辑的 Verilog HDL 实现...................................................................................338
11.1 时钟处理电路的 Verilog HDL 实现..........................................................................338
11.1.1 整数分频模块 .................................................................................................338
8