内容简介

  《VerilogHDL高级数字设计(第二版)》依据数字集成电路系统工程开发的要求与特点,利用VerilogHDL对数字系统进行建模、设计与验证,对ASIC/FPGA系统芯片工程设计开发的关键技术与流程进行了深入讲解,内容包括:集成电路芯片系统的建模、电路结构权衡、流水线技术、多核微处理器、功能验证、时序分析、测试平台、故障模拟、可测性设计、逻辑综合、后综合验证等集成电路系统的前后端工程设计与实现中的关键技术及设计案例。书中以大量设计实例叙述了集成电路系统工程开发须遵循的原则、基本方法、实用技术、设计经验与技巧。
  《VerilogHDL高级数字设计(第二版)》既可作为电子与通信、电子科学与技术、自动控制、计算机等专业领域的高年级本科生和研究生的教材或参考资料,也可用于电子系统设计及数字集成电路设计工程师的专业技术培训。

作者简介

科罗拉多大学电气与计算机工程系教授。研究方向包括通过硬件描述语言进行数字系统的建模、综合与验证、系统级设计语言和fpga嵌入式系统。其著作还有digitaldesign,fourthedition(其翻译版和影印版均由电子工业出版社出版)。作者曾在惠普、福特微电子和prisma等公司进行vlsi电路设计的研发工作,在数字系统和嵌入式系统研究、设计等领域有丰富的研发和教学经历。

目录

目录
第1章数字设计方法概论
1.1设计方法简介
1.1.1设计规格
1.1.2设计划分
1.1.3设计输入
1.1.4仿真与功能验证
1.1.5设计整合与验证
1.1.6预综合完成
1.1.7门级综合与工艺映射
1.1.8后综合设计确认
1.1.9后综合时序验证
1.1.10测试生成与故障模拟
1.1.11布局与布线
1.1.12物理和电气设计规则检查
1.1.13提取寄生参量
1.1.14设计完成
1.2IC工艺选择
1.3后续内容概览
参考文献
第2章组合逻辑设计回顾
2.1组合逻辑与布尔代数
2.1.1ASIC库单元
2.1.2布尔代数
2.1.3狄摩根定律
2.2布尔代数化简定理
2.3组合逻辑的表示
2.3.1积之和表示法
2.3.2和之积表示法
2.4布尔表达式的化简
2.4.1异或表达式的化简
2.4.2卡诺图(积之和形式)
2.4.3卡诺图(和之积形式)
2.4.4卡诺图与任意项
2.4.5扩展的卡诺图
2.5毛刺与冒险
2.5.1静态冒险的消除(积之和形式)
2.5.2消除两级电路静态冒险的小结
2.5.3多级电路中的静态冒险
2.5.4消除多级电路静态冒险的小结
2.5.5动态冒险
2.6逻辑设计模块
2.6.1与非或非结构
2.6.2多路复用器
2.6.3多路解复用器
2.6.4编码器
2.6.5优先编码器
2.6.6译码器
2.6.7优先译码器
参考文献
习题
第3章时序逻辑设计基础
3.1存储元件
3.1.1锁存器
3.1.2透明锁存器
3.2触发器
3.2.1D触发器
3.2.2主从触发器
3.2.3J-K触发器
3.2.4T触发器
3.3总线与三态器件
3.4时序机设计
3.5状态转移图
3.6设计举例:BCD码到余3码的转换器
3.7数据传输的串行线码转换器
3.7.1设计举例:用Mealy型FSM实现串行线性码转换
3.7.2设计举例:用Moore型FSM实现串行线码转换
3.8状态化简与等价状态
参考文献
习题
第4章Verilog逻辑设计介绍
4.1组合逻辑的结构化模型
4.1.1Verilog原语和设计封装
4.1.2Verilog结构化模型
4.1.3模块端口
4.1.4语言规则
4.1.5自顶向下的设计和模块嵌套
4.1.6设计层次和源代码结构
4.1.7Verilog矢量
4.1.8结构化连接
4.2逻辑系统设计验证及测试方法
4.2.1Verilog中的四值逻辑和信号解析
4.2.2测试方法
4.2.3测试平台的信号发生器
4.2.4事件驱动仿真
4.2.5测试模板
4.2.6定长数
4.3传播延时
4.3.1惯性延时
4.3.2传输延时
4.4组合与时序逻辑的Verilog真值表模型
参考文献
习题
第5章用组合与时序逻辑的行为级模型进行逻辑设计
5.1行为建模
5.2行为级建模的数据类型的简要介绍
5.3基于布尔方程的组合逻辑行为级模型
5.4传播延时与连续赋值
5.5Verilog中的锁存器和电平敏感电路
5.6触发器和锁存器的周期性行为模型
5.7周期性行为和边沿检测
5.8行为建模方式的比较
5.8.1连续赋值模型
5.8.2数据流/寄存器传输级模型
5.8.3基于算法的模型
5.8.4端口名称:风格问题
5.8.5用行为级模型仿真
5.9多路复用器、编码器和译码器的行为模型
5.10线性反馈移位寄存器的数据流模型
5.11用循环算法的数字机模型
5.11.1IP(知识产权)的复用和参数化模型
5.11.2时钟发生器
5.12多循环操作状态机
5.13设计文件中的函数和任务:是精明还是愚蠢?
5.13.1任务
5.13.2函数
5.14行为建模的算法状态机图
5.15ASMD图
5.16计数器、移位寄存器和寄存器组的行为级模型
5.16.1计数器
5.16.2移位寄存器
5.16.3寄存器组和寄存器(存储器)阵列
5.17用于异步信号的去抖动开关、亚稳定性和同步装置
5.18设计实例:键盘扫描器和编码器
参考文献
习题
第6章组合逻辑与时序逻辑的综合
6.1综合简介
6.1.1逻辑综合
6.1.2RTL综合
6.1.3高级综合
6.2组合逻辑的综合
6.2.1优先级结构的综合
6.2.2利用逻辑无关紧要条件
6.2.3ASIC单元与资源共享
6.3带锁存器的时序逻辑综合
6.3.1锁存器的无意综合
6.3.2锁存器的有意综合
6.4三态器件和总线接口的综合
6.5带有触发器的时序逻辑综合
6.6显式状态机的综合
6.6.1BCD码/余3码转换器的综合
6.6.2设计举例:Mealy型NRZ码/Manchester线性码转换器的综合
6.6.3设计举例:Moore型NRZ码/Manchester线性码转换器的综合
6.6.4设计举例:序列检测器的综合
6.7寄存器逻辑
6.8状态编码
6.9隐式状态机、寄存器和计数器的综合
6.9.1隐式状态机
6.9.2计数器综合
6.9.3寄存器综合
6.10复位
6.11门控时钟与时钟使能的综合
6.12预测综合结果
6.12.1数据类型综合
6.12.2运算符分组
6.12.3表达式替代
6.13循环的综合
6.13.1不带内嵌定时控制的静态循环
6.13.2带内嵌定时控制的静态循环
6.13.3不带内嵌定时控制的非静态循环
6.13.4带内嵌定时控制的非静态循环
6.13.5用状态机替代不可综合的循环
6.14要避免的设计陷阱
6.15分割与合并:设计划分
参考文献
习题
第7章数据通路控制器的设计与综合
7.1时序状态机的划分
7.2设计实例:二进制计数器
7.3RISC存储程序机的设计与综合
7.3.1RISCSPM:处理器
7.3.2RISCSPM:ALU
7.3.3RISCSPM:控制器
7.3.4RISCSPM:指令集
7.3.5RISCSPM:控制器设计
7.3.6RISCSPM:程序执行
7.4设计实例:UART
7.4.1UART的操作
7.4.2UART发送器
7.4.3UART接收器
参考文献
习题
第8章可编程逻辑及存储器件
8.1可编程逻辑器件
8.2存储器件
8.2.1只读存储器
8.2.2可编程ROM(PROM)
8.2.3可擦除ROM
8.2.4基于ROM的组合逻辑实现
8.2.5用于ROM的Verilog系统任务
8.2.6ROM的比较
8.2.7基于ROM的状态机
8.2.8闪存
8.2.9静态随机存储器(SRAM)
8.2.10铁电非易失性存储器
8.3可编程逻辑阵列(PLA)
8.3.1PLA最小化
8.3.2PLA建模
8.4可编程阵列逻辑(PAL)
8.5PLD的可编程性
8.6复杂可编程逻辑器件
8.7现场可编程门阵列
8.7.1FPGA在ASIC市场中的角色
8.7.2FPGA技术
8.7.3Xilinx公司Virtex系列FPGA
8.8片上系统(SoC)的嵌入式可编程IP核
8.9基于Verilog的FPGA设计流程
8.10FPGA综合
参考文献
相关网站
习题及基于FPGA的设计训练
第9章数字处理器的算法和架构
9.1算法、循环嵌套程序和数据流图
9.2设计实例:半色调像素图像转换器
9.2.1半色调像素图像转换器的原型设计
9.2.2基于NLP的半色调像素图像转换器结构
9.2.3半色调像素图像转换器的最小并行处理器结构
9.2.4半色调像素图像转换器:设计权衡
9.2.5带反馈数据流图的结构
9.3数字滤波器和信号处理器
9.3.1FIR滤波器
9.3.2数字滤波器设计过程
9.3.3IIR滤波器
9.4构建信号处理器的基本运算单元模型
9.4.1积分器(累加器)
9.4.2微分器
9.4.3抽样和插值滤波器
9.5流水线结构
9.5.1设计实例:流水线型加法器
9.5.2设计实例:流水线型FIR滤波器
9.6环形缓冲器
9.7异步FIFO――跨越时钟域的同步问题
9.7.1简化异步FIFO
9.7.2异步FIFO的时钟同步
参考文献
习题
第10章算术处理器架构
10.1数的表示方法
10.1.1负整数的原码表示
10.1.2负整数的反码表示方法
10.1.3正数和负数的补码表示方法
10.1.4小数的表示
10.2加减法功能单元
10.2.1行波进位加法器
10.2.2超前进位加法器
10.2.3上溢出和下溢出
10.3乘法运算功能单元
10.3.1组合(并行)二进制乘法器
10.3.2时序二进制乘法器
10.3.3时序乘法器设计:层次化分解
10.3.4基于STG的控制器设计
10.3.5基于STG的高效二进制时序乘法器
10.3.6基于ASMD的时序二进制乘法器
10.3.7基于ASMD的高效二进制时序乘法器
10.3.8基于ASMD数据通路和控制器设计的总结
10.3.9精简寄存器时序乘法器
10.3.10隐式状态机二进制乘法器
10.3.11Booth算法时序乘法器
10.3.12比特对编码
10.4有符号二进制数乘法
10.4.1有符号数的乘积:被乘数为负,乘数为正
10.4.2有符号数的乘积:被乘数为正,乘数为负
10.4.3有符号数的乘积:被乘数、乘数均为负
10.5小数乘法
10.5.1有符号小数:被乘数、乘数均为正
10.5.2有符号小数:被乘数为负,乘数为正
10.5.3有符号小数:被乘数为正,乘数为负
10.5.4有符号小数:被乘数、乘数均为负
10.6除法功能单元
10.6.1无符号二进制数的除法
10.6.2无符号二进制数的高效除法
10.6.3精简寄存器时序除法器
10.6.4有符号二进制数(补码)的除法
10.6.5带符号的计算
参考文献
习题
第11章后综合设计任务
11.1后综合设计验证
11.2后综合时序验证
11.2.1静态时序分析
11.2.2时序规范
11.2.3影响时序的因素
11.3ASIC中时序违约的消除
11.4虚假路径
11.5用于时序验证的系统任务
11.5.1时序检查:建立时间条件
11.5.2时序检查:保持时间约束
11.5.3时序检查:建立时间和保持时间约束
11.5.4时钟检查:脉冲宽度约束
11.5.5时序检查:信号偏移约束
11.5.6时序检查:时钟周期
11.5.7时序检查:恢复时间
11.6故障模拟及制造测试
11.6.1电路缺陷和故障
11.6.2故障检测与测试
11.6.3D标记法
11.6.4组合电路的自动测试模板生成
11.6.5故障覆盖和缺陷级别
11.6.6时序电路的测试生成
11.7故障模拟
11.7.1故障解析
11.7.2串行故障模拟
11.7.3并行故障模拟
11.7.4并发性故障模拟
11.7.5概率性故障模拟
11.8JTAG端口和可测性设计
11.8.1边界扫描和JTAG端口
11.8.2JTGA操作模式
11.8.3JTAG寄存器
11.8.4JTAG指令
11.8.5TAP结构
11.8.6TAP控制器状态机
11.8.7设计实例:JTAG测试
11.8.8设计实例:内建自测试
参考文献
习题
附录AVerilog原语
附录BVerilog关键词
附录CVerilog数据类型
附录DVerilog运算符
附录EVerilog语言形式化语法(I)
附录FVerilog语言形式化语法(II)
附录GVerilog语言的附加特性
附录H触发器和锁存器类型
附录IVerilog2001,2005
附录J编程语言接口
附录K相关网站
中英文术语对照表

前言/序言

  精炼、明晰化与验证
  用硬件描述语言(HDL)建立行为级模型是现代专用集成电路设计的关键技术。如今,大多数设计者使用基于硬件描述语言的设计方法,创建基于语言的高层、抽象的电路描述,以验证其功能和时序。在《Verilog HDL高级数字设计(第二版)》第一版的使用过程中,讲授设计方法学所用的语言(IEEE1464-1995)已经历了两次修改,分别是IEEE1364-2001及2005年的修订版,即Verilog-2001和Verilog-2005,以提高其有效性和效率。
  这一版的编写动机和第一版基本是相同的。对那些准备在产品研发团队做出成绩的学生们来说,必须了解如何在设计流程的关键阶段使用硬件描述语言。因此,需要有一门在内容上超越先修课程“数字设计”中学习过的基本原则和方法的课程,《Verilog HDL高级数字设计(第二版)》就是为该课程而著的。
  现在,市面上讨论硬件描述语言的书籍的数量已远远超过《Verilog HDL高级数字设计(第二版)》第一版出版时的数量。但是,这些书大部分都定位于解释语法,而不是如何运用语言进行设计,不太适合于课堂教学。《Verilog HDL高级数字设计(第二版)》的重点是硬件描述语言的设计方法学,因此语言本身只是一个配角。这一版中强化了如何通过实例证明,将一个数字系统描述并划分为数据通路、状态(反馈)信号和控制器(有限状态机)系统结构的重要性。我们认为,这种描述可使设计和验证复杂数字系统的方法更加清楚、直接、明了。《Verilog HDL高级数字设计(第二版)》给出了大量的仿真结果和注释,以帮助学生掌握时序机的操作过程,并深入理解由控制器产生的信号间的时序互动关系,数据通路的操作,以及从数据通路回馈给控制器的信号。其目的都是为了开发出可综合、无锁存且无竞争的设计。
  Verilog2001和2005的语言增强功能已用于重新描述和简化书中模型的代码。我们强调工业界通用的规范和风格,但并不鼓励不考虑模型能否被综合的学术模型风格。《Verilog HDL高级数字设计(第二版)》第二版已把第一版中处理同步FIFO的部分改为同步和异步FIFO,并给出了精心设计的例子,以解释使用异步FIFO来同步跨越时钟域的数据传输问题。
  书中的设计实例已多次优化和改进①。从设计方法学的角度,对一个嵌入式控制器,用C语言建模和用Verilog建模,这两种设计方法学之间存在着竞争和互补的关系。基于C的方法执行陈述性语句,而VerilogHDL模拟了某个机器的多个并发的行为动作。后一种设计方法对硬件进行编译,而前一种是编译预先存储在硬件单元中的语句。对于某个特定应用,Verilog模型编译的硬件在主机接口处生成了等效的I/O信号。对于嵌入式代码而言,其区别是不会产生等效的硬件。《Verilog HDL高级数字设计(第二版)》的目标就是讲授硬件建模/编译的范例,并预测综合实现后的结果。C语言编程是预测程序产生的数据,而状态机/处理器的应用却显而易见。作为对比,用Verilog描述的模型预测该硬件将产生应用所需求的I/O信号,因此需要开发者根据寄存器操作时序控制进行思考和设计。Verilog的模型鼓励学习者理解一个数字电路和系统的本质。
  《Verilog HDL高级数字设计(第二版)》要求学生已学过逻辑设计的入门课程,《Verilog HDL高级数字设计(第二版)》的目标是:(1)简要复习组合时序逻辑的基本原理,(2)介绍HDL在设计中的应用,(3)强调的是快速设计通过ASIC和/或FPGA实现的电路设计描述风格,(4)提供具有一定难度的设计实例。章末习题的目的是鼓励学生精炼、明晰化并验证他们自己的设计。从本质上讲,许多习题均为开放式的设计,要求验证以达到所要求的设计规范。
  广泛使用的Verilog硬件描述语言(IEEE1364标准),作为一个公共框架为《Verilog HDL高级数字设计(第二版)》的设计实例的讨论提供了支持。第一版重点关注数字电路的设计、验证和综合,而不是Verilog语言本身的语法,本版仍然保持这种风格。
  选修数字设计中级课程的多数学生至少应该熟悉一种编程语言,并且在阅读《Verilog HDL高级数字设计(第二版)》时能够将其作为可以借鉴的背景知识。《Verilog HDL高级数字设计(第二版)》仅讨论Verilog的核心设计方法及其广泛使用的特性。为了强调在面向综合的设计环境中使用该语言,我们还特意将许多语法的细节、特点和解释放在附录中中,以便于读者参考。附录中也提供了Verilog的所有形式化语法。
  大部分数字设计的入门课程都介绍过通过状态转移图表示的有限状态机及算法状态机(ASM)图。同样,《Verilog HDL高级数字设计(第二版)》中也大量使用了ASM图,演示了其在设计时序状态机的行为模型中的功用。对利用ASMD图(即通过标注显示出被控数据通道的寄存器操作的ASM图)系统地设计有限状态机来控制数字状态机中复杂数据通道的重要问题,进行了深入论述。并将精简指令集计算机中央处理器(RSICCPU)和其他重要硬件单元的设计作为实例给出。我们的支持网站上包含了RISC计算机的源代码和可用于应用程序开发的汇编程序。这个汇编程序也可作为研究鲁棒性更好的指令集和其他派生架构的基础。
  《Verilog HDL高级数字设计(第二版)》完整地引入了Verilog语言,但仅在支持设计实例的需要时才进行详细说明。正文中使用了大量的实例,讲解使用Verilog硬件描述语言进行VLSI电路设计时的重要和关键设计步骤。设计实例的源代码都经过了验证,并且所有实例的源代码和测试平台都可以从出版社的网站下载。读者对象
  《Verilog HDL高级数字设计(第二版)》适用于学习高级数字系统设计课程的学生,以及那些想通过实例学习Verilog的现代集成电路设计专业工程师。《Verilog HDL高级数字设计(第二版)》适合电子工程、计算机工程和计算机科学等专业的高年级本科生和低年级研究生,也适合学习过逻辑设计入门课程的专业工程师使用。《Verilog HDL高级数字设计(第二版)》假定读者具有布尔代数及其在逻辑电路设计中应用的背景知识,并熟悉同步时序有限状态机。在此基础上,《Verilog HDL高级数字设计(第二版)》讨论了一些应用于计算机系统、数字信号处理、图像处理、跨时钟域的数据传输、内建自测试(BIST)和一些其他应用的重要电路的设计实例。这些实例涵盖了建模、架构的设计折中、流水线技术、多处理器执行、功能验证、定时分析、测试生成、故障模拟,可测性分析、逻辑综合和综合后验证的关键设计问题。

其他推荐