
利用 Verilog 进行数字系统设计与仿真是电子系统工程师必备的技能之一,这本书最突出的特色就是对数字电路系统的工程仿真和设计技术进行了深入的讨论。本书的内容涵盖了电路建模、基本语法与电路、典型数学运算、复杂的编码/解码/纠错电路、各类时序状态机和完整的流水线 RISC 处理器的设计等。 书中给出的所有工程设计实例均为可独立运行及验证的实用电路模块,并给出了所有例子的完整Verilog 源代码、testbench、仿真结果和仿真波形。 附录中还给出了部分课后习题的参考答案。 读者对象:本书可作为电子信息类和计算机科学等专业的高年级本科生与研究生的教材,对于初步接触过数字逻辑设计的相关领域的工程师也是一本很有价值的参考书。
前言 有两种占统治地位的硬件描述语言(Hardware Description Language, HDL), 它们分别是Verilog HDL和VHDL(Very High Speed Integrated Circuit HDL)。这两种语言都是美国电子与电气工程师协会(IEEE)所批准的标准。其中, 关于Verilog的标准是IEEE 13641995, 关于VHDL的标准是IEEE 10761993。和VHDL相比, Verilog使用得更加广泛。利用Verilog, 可以建立从逻辑门到主流的复杂数字系统等各个层次的数字模型。 本书在讲授Verilog语言本身的同时还给出了大量的设计实例, 目的是为读者使用Verilog进行数字系统设计打下坚实的基础。本书对各种数字模型的结构进行了详细的阐述,在每一章都给出了大量组合逻辑和时序逻辑的实例。 这些设计实例包括各类的计数器、半加器、全加器、超前进位(carry lookahead)加法器、阵列乘法器、布思乘法算法(Booth multiplication algorithm)、Moore和Mealy状态机,以及序列检测器、汉明码检错和纠错电路、BCD(Binary Coded Decimal)码的加减法、算术逻辑单元(ALU)、流水线精简指令集计算机(RISC)处理器。本书的内容还包括同步时序状态机和异步时序状态机, 以及脉冲模式异步时序状态机。 我们会把重点放在如何设计出满足各种需求的Verilog的工程上。这些工程包括:设计模块,testbench模块,怎样处理仿真工具的数据输出,怎样处理仿真工具输出中包含的所有执行细节的仿真波形。在设计某些工程的时候, 除了介绍相关的逻辑设计原则, 还会给出与这个设计相关的理论的全面介绍。这些内容包括状态图、卡诺图(Karnaugh map)、逻辑公式及逻辑图。 作者力求让这本书读起来更像是一个教程。因此, 这本书的内容会比较易懂且所需的相关知识在这本书中就可以找到。书中所有的设计都是非常完整的, 没有未完成的部分, 也没有只有一部分设计的情况。每章后都有大量的、不同层次的习题以供读者进行设计练习。 第1章讲述了HDL语言的发展史并简要介绍了Verilog这门硬件描述语言。第1章还通过不同的方式来说明信号的有效电平(或断言电平)。 第2章对Verilog进行了概述, 并介绍了在完成一个设计工程时会用到的不同设计方法。这一章向读者介绍了Verilog建模的基本概念, 包括了数据流建模、行为级建模和结构化建模。针对每一种建模方式, 列举了设计实例来说明建模的方法。这一章还有一节专门介绍了混合建模的方法。后面的章节会对这些建模结构及方法进行更详细的阐述。在这一章介绍模块和端口概念的同时, 也讨论了怎样利用testbench来验证设计的模块。 第3章讲述了Verilog语言中的语法元素, 包括注释(comment)、标识符(identifier)、关键字(keyword)、数据类型(data type)、参数(parameter)、线的逻辑状态及其值。注释在Verilog中的作用是说明一段代码的功能。标识符是一个对象或是变量名称, 使得在模块的其他地方可以实现对该对象的引用。Verilog提供了一系列预定义好的关键字用来定义代码的语言结构。线型和寄存器型是两种预定义好的数据类型。线型用来连接逻辑元素,而寄存器型的作用是保存数据。编译指令可以在编译的时候决定哪些代码需要编译。 第4章讲述了Verilog要用到的表达式。表达式由操作数和操作符组成, 它们是Verilog语句中的基本单元。操作数可以是以下任意一种数据类型:常数、参数、线型、寄存器型、比特位选择、总线部分选择或内存单元。Verilog语言包含大量的操作符用来执行各种各样对不同类型的数据的操作, 它们包括算术运算、逻辑运算、关系运算、相等、比特操作、缩位运算、移位、条件运算、位拼接(concatenation)和位复制(replication)等。 第5章介绍了利用内建的原语门(primitive gate)进行门级建模的方法。Verilog内建了极其丰富的原语门用来对线型进行建模, 包括and、nand、or、nor、xor、xnor和not。这一章介绍的内容是利用逻辑门电路对底层硬件进行抽象描述。这种设计方法和在画电路图时, 利用很多基本门器件来搭建一个大电路的设计方法很类似。门延迟在这一章也进行了介绍。所有的门器件都会有传输延迟。也就是说, 一个信号从器件的输入, 经过器件本身, 再到输出是需要时间的。在这一章里, 还会有利用内建的原语门实现迭代网络和优先级编码器的设计实例。 第6章介绍了用户自定义原语(User Defined Primitives, UDP)。用户可以根据实际需要设计自己的原语逻辑。通常, 这些原语的逻辑功能比内建原语门的抽象层次要更高一些。它们是独立的原语且不会去例化其他的原语和模块。在设计中, 可以将其用在组合逻辑或是时序逻辑中。时序逻辑的原语包含对电平敏感和对边沿敏感的两种电路。这一章的设计实例包括:二进制到格雷码的转换电路、由两个半加器组成的全加器、乘法器、电平敏感的锁存器、边沿敏感的触发器、模8计数器和一个同步时序逻辑的Moore有限状态机。 第7章介绍了数据流建模。这是我们要介绍的三种最重要的模型结构中的第一种。数据流模型比UDP和内建原语门的抽象层次都要高。数据流模型通过连续赋值语句实现了对组合逻辑的描述, 而不会使用到逻辑门或其他连线。这一章的设计实例包括:缩位操作符的应用、八进制-十进制译码器、利用条件操作符来实现乘法器、4比特加法器、高速超前进位加法器、异步时序逻辑设计、同步时序的脉冲模式Moore状态机。所有的设计都包含用于测试该设计模块功能的testbench。同时, 书中还有相应的仿真结果和波形。 第8章介绍了行为级建模。这种建模方式用语言来描述数字系统的行为。它关注的是系统的整体架构, 并不关心这样一个系统具体是由哪些逻辑门怎样构建的。行为级建模的抽象层次比前面介绍的建模方式的抽象层次都高。利用行为级建模描述的Verilog模块没有内部结构的细节描述;它仅仅是从抽象和算法的角度定义了硬件的行为。Verilog有两种过程化的行为描述方式:initial和always。这一章集中介绍了过程赋值和不同的延迟及其影响。过程化的赋值可分成阻塞赋值和非阻塞赋值两种赋值方式。这一章还介绍了条件赋值, 使得在满足某些条件下时流程可以发生改变。case语句可以实现和条件语句类似的功能, 只是从功能上来说, 它的条件有多条分支。循环语句也会在这一章进行介绍。本章包含的设计实例有:超前进位加法器、加法移位单元、奇校验产生器、并入串出的移位寄存器、按不同顺序计数的计数器、ALU、各类Moore和Mealy同步时序状态机与异步时序状态机。 第9章介绍了第3种建模方式:结构化建模。结构化建模把如下的实例对象包含在一个模块中, 包括内建原语门、UDP和其他的模块。这一章包含了一些用结构化建模完成的完整的设计实例。这些实例包括:格雷码到二进制的转换器、BCD到十进制的解码器、模10计数器、加减法器、带高速移位的加法器、阵列乘法器、Moore和Mealy同步、异步时序状态机和一个Moore脉冲模式异步时序状态机。和其他章节一样, 这些实例除了有设计的模块, 还有testbench、仿真结果和波形。 第10章介绍了任务和函数。它们的用法和其他编程语言的子过程或子函数比较类似。这些结构使得行为级的模块可以分成更小的部分。任务和函数使得模块可以在需要的时候执行某一部分的代码。本章也给出了任务和函数的例子。 第11章给出了一些利用前面章节讲到的建模方法来设计的实例。总的来说, 这些设计会比前面给出的设计实例更复杂。和其他章节一样, 除了完整的设计代码, testbench、仿真结果和波形也是一应俱全的。这些实例包括:约翰逊计数器、计数移位模块、通用移位寄存器组、汉明码检错和纠错电路及相关的理论、详细描述的布思乘法器及其原理、各类Moore和Mealy时序状态机、Mealy独热(onehot)状态机、BCD加减法器和一个完整的流水线RISC处理器的设计。 附录A对事件队列的处理机制进行了简要的讨论。Verilog模块中的各种操作通常按照时间队列的方式来处理。附录B列举了要完成一个Verilog工程需要的各个步骤。附录C包含了部分习题解答。 本书中的实例是作者根据其20多年的计算机设备设计经验精选出来的。虽然逻辑设计的方法贯穿于整本书之中, 但本书的意图并不是讨论逻辑设计。读者应该有足够的组合逻辑和时序逻辑的设计背景。书中大量的设计实例将帮助读者彻底理解Verilog这门流行的硬件描述语言。 本书的读者应该是电子设计工程师、计算机工程师、计算机科学家, 以及电子工程、计算机工程和计算机科学专业的在读研究生及这些专业的高年级本科生。 还要特别感谢Silvaco International的CEO:Ivan Pesic博士, 感谢他允许使用SILOS仿真软件作为本书的仿真工具。SILOS是进行逻辑验证的易用且功能强大的Verilog仿真器。 我还要感谢付出了额外的时间及专业技能为本书修订书稿及提出修改意见的人:Daniel W. Lewis教授, 他是Santa Clara大学计算机工程系的主任;Geri Lamble博士;Steve Midford审阅了整本书稿并提出了很多有用的建议;Ron Lewerenz。同时也感谢Nora Konopka和Taylor & Francis团队的支持。 Joseph Cavanagh
第1章简介 1.1HDL的历史 1.2Verilog HDL 1.2.1IEEE标准 1.2.2特性 1.3断言第2章概述 2.1设计方法 2.2模16同步计数器 2.34比特行波进位加法器 2.4模块和端口 2.4.1设计一个用于仿真的testbench 2.4.2结构定义 2.5数据流建模简介 2.5.1二输入异或门 2.5.2带延迟信息的四个二输入与门 2.6行为级建模简介 2.6.1三输入或门 2.6.24比特加法器 2.6.3模16同步计数器 2.7结构化建模简介 2.7.1实现积之和式 2.7.2全加器 2.7.34比特行波进位加法器 2.8混合建模简介 2.8.1全加器 2.9习题第3章语言元素 3.1注释 3.2标识符 3.3关键字 3.3.1双向门 3.3.2电荷储存强度 3.3.3CMOS门 3.3.4组合逻辑门 3.3.5连续赋值 3.3.6数据类型 3.3.7模块说明 3.3.8MOS开关 3.3.9多路分支 3.3.10命名的事件 3.3.11参数 3.3.12端口声明 3.3.13过程块结构 3.3.14过程连续赋值语句 3.3.15过程控制 3.3.16上拉和下拉门 3.3.17信号强度 3.3.18specify块 3.3.19任务和函数 3.3.20三态门 3.3.21时序控制 3.3.22用户自定义原语 3.4值集 3.5数据类型 3.5.1线型数据类型 3.5.2寄存器数据类型 3.6编译器指令 3.7习题第4章表达式 4.1操作数 4.1.1常数 4.1.2参数 4.1.3线 4.1.4寄存器 4.1.5比特选择 4.1.6部分选择 4.1.7存储元件 4.2操作符 4.2.1算术运算操作符 4.2.2逻辑运算操作符 4.2.3关系运算操作符 4.2.4相等运算操作符 4.2.5按位运算操作符 4.2.6缩位运算操作符 4.2.7移位运算操作符 4.2.8条件运算操作符 4.2.9拼接运算操作符 4.2.10复制运算操作符 4.3习题第5章门级建模 5.1多输入门 5.2门延迟 5.2.1惯性延迟 5.2.2传输延迟 5.2.3模块路径延迟 5.3更多的设计实例 5.3.1迭代网络 5.3.2优先编码器 5.4习题第6章用户自定义原语 6.1定义用户自定义原语 6.2组合逻辑UDP 6.2.1卡诺图输入变量 6.3时序的用户自定义原语 6.3.1电平敏感UDP 6.3.2边沿有效UDP 6.4习题第7章数据流建模 7.1连续赋值 7.1.1三输入与门 7.1.2积之和 7.1.3缩位操作符 7.1.4八进制到二进制的编码器 7.1.54选1选通器 7.1.6使用条件操作符实现4选1选通器 7.1.74比特加法器 7.1.8超前进位加法器 7.1.9异步时序状态机 7.1.10脉冲模式异步时序状态机 7.2隐含连续赋值 7.3延迟 7.4习题第8章行为级建模 8.1过程化结构 8.1.1initial语句 8.1.2always语句 8.2过程赋值 8.2.1等号右边的延迟 8.2.2等号左边的延迟 8.2.3阻塞赋值 8.2.4非阻塞赋值 8.3条件语句 8.4case语句 8.5循环语句 8.5.1for循环 8.5.2while循环 8.5.3repeat循环 8.5.4forever循环 8.6语句块 8.6.1顺序执行块 8.6.2并行执行块 8.7过程连续赋值语句 8.7.1assign...deassign 8.7.2force...release 8.8习题第9章结构化建模 9.1模块的例化 9.2端口 9.2.1未连接的端口 9.2.2端口连接规则 9.3设计实例 9.3.1格雷码到二进制的转换器 9.3.2BCD码到十进制的译码器 9.3.3模10计数器 9.3.4加法器/减法器 9.3.54功能算术和逻辑运算单元 9.3.6加法器和高速移位器 9.3.7阵列乘法器 9.3.8MooreMealy同步时序状态机 9.3.9Moore同步时序状态机 9.3.10Moore异步时序状态机 9.3.11Moore脉冲模式异步时序状态机 9.4习题第10章任务和函数 10.1任务 10.1.1任务声明 10.1.2任务调用 10.2函数 10.2.1函数声明 10.2.2函数调用 10.3习题第11章补充设计实例 11.1约翰逊计数器 11.2计数移位器 11.3通用移位寄存器组 11.4汉明码检错和纠错 11.5布思算法 11.6Moore同步时序状态机 11.7Mealy 脉冲模式异步时序状态机 11.8Mealy独热状态机 11.9BCD码加减法器 11.9.1BCD码加法 11.9.2BCD码减法 11.10流水线精简指令集计算机处理器 11.10.1指令cache 11.10.2指令单元 11.10.3译码单元 11.10.4执行单元 11.10.5寄存器阵列 11.10.6数据cache 11.10.7RISC CPU的顶层 11.10.8系统顶层 11.11习题 附录A事件队列 附录BVerilog工程的步骤 附录C部分习题解答
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0140930