图书简介:
目 录
第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.2 IC工艺选择
1.3 后续内容概览
参考文献
第2章 组合逻辑设计回顾
2.1 组合逻辑与布尔代数
2.1.1 ASIC库单元
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.1 D触发器
3.2.2 主从触发器
3.2.3 J-K触发器
3.2.4 T触发器
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.1 Verilog原语和设计封装
4.1.2 Verilog结构化模型
4.1.3 模块端口
4.1.4 语言规则
4.1.5 自顶向下的设计和模块嵌套
4.1.6 设计层次和源代码结构
4.1.7 Verilog矢量
4.1.8 结构化连接
4.2 逻辑系统设计验证及测试方法
4.2.1 Verilog中的四值逻辑和信号解析
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.5 Verilog中的锁存器和电平敏感电路
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.1 IP(知识产权)的复用和参数化模型
5.11.2 时钟发生器
5.12 多循环操作状态机
5.13 设计文件中的函数和任务: 是精明还是愚蠢?
5.13.1 任务
5.13.2 函数
5.14 行为建模的算法状态机图
5.15 ASMD图
5.16 计数器、 移位寄存器和寄存器组的行为级模型
5.16.1 计数器
5.16.2 移位寄存器
5.16.3 寄存器组和寄存器(存储器)阵列
5.17 用于异步信号的去抖动开关、 亚稳定性和同步装置
5.18 设计实例: 键盘扫描器和编码器
参考文献
习题
第6章 组合逻辑与时序逻辑的综合
6.1 综合简介
6.1.1 逻辑综合
6.1.2 RTL综合
6.1.3 高级综合
6.2 组合逻辑的综合
6.2.1 优先级结构的综合
6.2.2 利用逻辑无关紧要条件
6.2.3 ASIC单元与资源共享
6.3 带锁存器的时序逻辑综合
6.3.1 锁存器的无意综合
6.3.2 锁存器的有意综合
6.4 三态器件和总线接口的综合
6.5 带有触发器的时序逻辑综合
6.6 显式状态机的综合
6.6.1 BCD码/余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.3 RISC存储程序机的设计与综合
7.3.1 RISC SPM: 处理器
7.3.2 RISC SPM: ALU
7.3.3 RISC SPM: 控制器
7.3.4 RISC SPM: 指令集
7.3.5 RISC SPM: 控制器设计
7.3.6 RISC SPM: 程序执行
7.4 设计实例: UART
7.4.1 UART的操作
7.4.2 UART发送器
7.4.3 UART接收器
参考文献
习题
第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.6 ROM的比较
8.2.7 基于ROM的状态机
8.2.8 闪存
8.2.9 静态随机存储器(SRAM)
8.2.10 铁电非易失性存储器
8.3 可编程逻辑阵列(PLA)
8.3.1 PLA最小化
8.3.2 PLA建模
8.4 可编程阵列逻辑(PAL)
8.5 PLD的可编程性
8.6 复杂可编程逻辑器件
8.7 现场可编程门阵列
8.7.1 FPGA在ASIC市场中的角色
8.7.2 FPGA技术
8.7.3 Xilinx公司Virtex系列FPGA
8.8 片上系统(SoC)的嵌入式可编程IP核
8.9 基于Verilog的FPGA设计流程
8.10 FPGA综合
参考文献
相关网站
习题及基于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.1 FIR滤波器
9.3.2 数字滤波器设计过程
9.3.3 IIR滤波器
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.11 Booth算法时序乘法器
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.3 ASIC中时序违约的消除
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.3 D标记法
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.8 JTAG端口和可测性设计
11.8.1 边界扫描和JTAG端口
11.8.2 JTGA操作模式
11.8.3 JTAG寄存器
11.8.4 JTAG指令
11.8.5 TAP结构
11.8.6 TAP控制器状态机
11.8.7 设计实例: JTAG测试
11.8.8 设计实例: 内建自测试
参考文献
习题
附录A Verilog原语
附录B Verilog关键词
附录C Verilog数据类型
附录D Verilog运算符
附录E Verilog语言形式化语法(I)
附录F Verilog语言形式化语法(II)
附录G Verilog语言的附加特性
附录H 触发器和锁存器类型
附录I Verilog 2001, 2005
附录J 编程语言接口
附录K 相关网站
中英文术语对照表
展开
前 言
精炼、明晰化与验证
用硬件描述语言(HDL)建立行为级模型是现代专用集成电路设计的关键技术。如今, 大多数设计者使用基于硬件描述语言的设计方法, 创建基于语言的高层、抽象的电路描述, 以验证其功能和时序。在本书第一版的使用过程中, 讲授设计方法学所用的语言(IEEE 1464-1995)已经历了两次修改, 分别是IEEE 1364-2001及2005年的修订版, 即Verilog-2001和Verilog-2005, 以提高其有效性和效率。
这一版的编写动机和第一版基本是相同的。对那些准备在产品研发团队做出成绩的学生们来说, 必须了解如何在设计流程的关键阶段使用硬件描述语言。因此, 需要有一门在内容上超越先修课程“数字设计”中学习过的基本原则和方法的课程, 本书就是为该课程而著的。
现在, 市面上讨论硬件描述语言的书籍的数量已远远超过本书第一版出版时的数量。但是, 这些书大部分都定位于解释语法, 而不是如何运用语言进行设计, 不太适合于课堂教学。本书的重点是硬件描述语言的设计方法学, 因此语言本身只是一个配角。这一版中强化了如何通过实例证明, 将一个数字系统描述并划分为数据通路、状态(反馈)信号和控制器(有限状态机)系统结构的重要性。我们认为, 这种描述可使设计和验证复杂数字系统的方法更加清楚、直接、明了。本书给出了大量的仿真结果和注释, 以帮助学生掌握时序机的操作过程, 并深入理解由控制器产生的信号间的时序互动关系, 数据通路的操作, 以及从数据通路回馈给控制器的信号。其目的都是为了开发出可综合、 无锁存且无竞争的设计。
Verilog 2001和2005的语言增强功能已用于重新描述和简化书中模型的代码。我们强调工业界通用的规范和风格, 但并不鼓励不考虑模型能否被综合的学术模型风格。本书第二版已把第一版中处理同步FIFO的部分改为同步和异步FIFO, 并给出了精心设计的例子, 以解释使用异步FIFO来同步跨越时钟域的数据传输问题。
书中的设计实例已多次优化和改进登录华信教育资源网www.hxedu.com.cn可注册下载本书相关配套资源。。从设计方法学的角度, 对一个嵌入式控制器, 用C语言建模和用Verilog建模, 这两种设计方法学之间存在着竞争和互补的关系。基于C的方法执行陈述性语句, 而Verilog HDL模拟了某个机器的多个并发的行为动作。后一种设计方法对硬件进行编译, 而前一种是编译预先存储在硬件单元中的语句。对于某个特定应用, Verilog模型编译的硬件在主机接口处生成了等效的I/O信号。对于嵌入式代码而言, 其区别是不会产生等效的硬件。本书的目标就是讲授硬件建模/编译的范例, 并预测综合实现后的结果。C语言编程是预测程序产生的数据, 而状态机/处理器的应用却显而易见。作为对比, 用Verilog描述的模型预测该硬件将产生应用所需求的I/O信号, 因此需要开发者根据寄存器操作时序控制进行思考和设计。Verilog的模型鼓励学习者理解一个数字电路和系统的本质。
本书要求学生已学过逻辑设计的入门课程, 本书的目标是:(1) 简要复习组合时序逻辑的基本原理, (2) 介绍HDL在设计中的应用, (3) 强调的是快速设计通过ASIC和/或FPGA实现的电路设计描述风格, (4) 提供具有一定难度的设计实例。章末习题的目的是鼓励学生精炼、明晰化并验证他们自己的设计。从本质上讲, 许多习题均为开放式的设计, 要求验证以达到所要求的设计规范。
广泛使用的Verilog硬件描述语言(IEEE 1364标准), 作为一个公共框架为本书的设计实例的讨论提供了支持。第一版重点关注数字电路的设计、验证和综合, 而不是Verilog语言本身的语法, 本版仍然保持这种风格。
选修数字设计中级课程的多数学生至少应该熟悉一种编程语言, 并且在阅读本书时能够将其作为可以借鉴的背景知识。本书仅讨论Verilog的核心设计方法及其广泛使用的特性。为了强调在面向综合的设计环境中使用该语言, 我们还特意将许多语法的细节、特点和解释放在附录中中, 以便于读者参考。附录中也提供了Verilog的所有形式化语法。
大部分数字设计的入门课程都介绍过通过状态转移图表示的有限状态机及算法状态机(ASM)图。同样, 本书中也大量使用了ASM图, 演示了其在设计时序状态机的行为模型中的功用。对利用ASMD图(即通过标注显示出被控数据通道的寄存器操作的ASM图)系统地设计有限状态机来控制数字状态机中复杂数据通道的重要问题, 进行了深入论述。并将精简指令集计算机中央处理器(RSIC CPU)和其他重要硬件单元的设计作为实例给出。我们的支持网站上包含了RISC计算机的源代码和可用于应用程序开发的汇编程序。这个汇编程序也可作为研究鲁棒性更好的指令集和其他派生架构的基础。
本书完整地引入了Verilog语言, 但仅在支持设计实例的需要时才进行详细说明。正文中使用了大量的实例, 讲解使用Verilog硬件描述语言进行VLSI电路设计时的重要和关键设计步骤。设计实例的源代码都经过了验证, 并且所有实例的源代码和测试平台都可以从出版社的网站下载。
读者对象
本书适用于学习高级数字系统设计课程的学生, 以及那些想通过实例学习Verilog的现代集成电路设计专业工程师。本书适合电子工程、计算机工程和计算机科学等专业的高年级本科生和低年级研究生, 也适合学习过逻辑设计入门课程的专业工程师使用。本书假定读者具有布尔代数及其在逻辑电路设计中应用的背景知识, 并熟悉同步时序有限状态机。在此基础上, 本书讨论了一些应用于计算机系统、数字信号处理、图像处理、跨时钟域的数据传输、内建自测试(BIST)和一些其他应用的重要电路的设计实例。这些实例涵盖了建模、架构的设计折中、流水线技术、多处理器执行、功能验证、定时分析、测试生成、故障模拟、可测性分析、逻辑综合和综合后验证的关键设计问题。
本版的新颖之处
● 探索了Verilog 2001和2005的主要特点
● 阐述并推广基于Verilog 2001和2005且可综合的寄存器传输级(RTL)描述和算法建模的设计风格
● 深入讨论基于Verilog 2001和2005的数字处理系统(如图像处理器、数字滤波器和环形缓冲器)算法和架构
● 给出了基于Verilog 2001和2005语言的综合设计实例(如RISC计算机和各种数据通道控制器)
● 提供了大量有评注和解释的仿真结果的图形化描述
● 给出了150多个经过完全验证的基于Verilog 2001和2005的设计实例
● 含有利用Verilog 2001和2005编写的具备JTAG和BIST可测功能的实用设计案例
● 附录中给出了Verilog 2001和2005 HDL的语法形式
● 讨论了异步和同步FIFO设计
本书特色
● 简要回顾了组合时序逻辑设计的基本原则
● 重点讨论现代数字设计方法
● 说明了行为级建模中ASM和ASMD图的作用
● 明确指出了可综合和不可综合循环的区别
● 通过实例对时序分析、故障模拟、测试和可测性设计进行切合实际的讨论
● 每章后均设计了一些涉及面广且难度高的习题相关教辅的申请(PPT, 习题解答)请与电子工业出版社联系, 联系电话: 010-88254555,E-mail: Te_serivce@pheicomcn。
课程讲授次序
本书首先对组合逻辑设计进行简要介绍和回顾, 接着描述了一个ASIC或FPGA的设计流程。按照书中内容的顺序, 第1章至第6章利用综合的方法来研究设计了一些题目和内容。但是, 阅读第7章至第10章时, 则不必按照书中的顺序。课后作业具有挑战性, 而且基于FPGA的实验练习适于同步实验或学期末的课题。第10章列出了一些算术运算的架构, 覆盖了较多的应用范围。第11章介绍了后综合设计验证、时序分析、故障模拟和可测试性设计。根据课程教学的深度和重点, 本章涵盖的内容和范围也可省略。
说明
我们没有坚持常规使用大写和小写字体, 或使用代码清单专用字体。本书的选择一直是基于最大化的整体视觉效果及所列代码的可读性。我们认为, 设计实例中的代码得到正确表达才是至关重要的。模块框图已被简化, 以减少视觉混乱。所以, 我们通常只显示信号的实际外部名称, 而省略其形式化的内在对应名称。由于D触发器在现代EDA工具的综合中起着主导作用, 因此书中几乎唯一性地使用了D触发器。
各章概述
第1章简要论述了硬件描述语言在基于库单元的ASIC和FPGA设计流程中的作用。第2章和第3章则根据传统的教学方式(例如卡诺图算法), 回顾了数字设计先修课程中涉及的主要知识。这些资料可以奠定读者的数字设计的背景知识, 便于之后利用实例介绍许多基于硬件描述语言的数字设计方法。第4章和第5章介绍了组合电路与时序电路的Verilog语言建模方法, 重点强调了行为级建模中的代码编写风格。第6章着重基于库单元的ASIC综合, 介绍了组合逻辑与时序逻辑的综合。这一章追求两个主要目标:(1) 提出可综合的代码描述风格; (2) 建立能够让读者预测综合结果的基础知识和能力。尤其在对时序状态机综合时, 通常会把时序状态机分成数据通道和控制通道两部分来编写。第7章介绍了一些例子, 这些例子描述了怎样设计一个数据通道的控制器, 包括带有从数据通道反馈给控制器的状态信号的状态机设计。而RISC CPU设计和通用异步收发器(UART, 用于系统间传输数据的电路)的设计作为这个例子的应用平台。第8章讲述了可编程逻辑器件(PLD)、复杂PLD、只读存储器(ROM)和静态随机存储器(SRAM)的知识, 并将综合目标扩展为FPGA的综合。第9章主要涉及计算机结构、数字滤波器和其他信号处理器中有关计算单元和算法的建模和综合。第10章研究并描述了数字状态机中计算单元的算法和结构。第11章使用Verilog语言, 结合故障仿真器和时序分析器, 重新审查了之前设计的状态机选择方案, 并考虑性能、时序问题及可测性问题, 来优化和完善这个主要取决于设计者的设计流程和任务。本章建模的测试访问端口(TAP)控制器由IEEE 1149.1标准定义(即俗称的JTAG标准), 并提出了其应用实例。另外还给出了一个内建自测试(BIST)的详细实例。
致谢
本书作者非常感谢曾为本书做出贡献并提出宝贵意见的同事和学生们的支持。本书是我的研发经验和在科罗拉多大学教学经历的综合成果, 也包括我在惠普、福特微电子公司和Prisma公司的工作经历, 在荷兰的Delft技术大学的教学经验, 以及在欧洲和亚洲的短期课程的教学经验。虽然其中有的公司如今已成回忆, 但是我仍然深深感谢这些公司和科罗拉多大学对我进行VLSI电路设计研究工作的支持。本书手稿的第一版审稿人也提出了鼓励、关键内容的调整与许多有益的建议。我非常感谢Jim Tracey博士和Rodger Ziemer博士, 他们支持并肯定了我在VLSI电路设计方面的努力和成就, 我也十分感谢福特微电子公司的Deepak Goel先生, 他向我介绍了后来成为最先进的VLSI设计平台的福特微电子的Daisy工作站。感谢Simucad公司的Bill Fuchs先生, 他帮助我获取了工业级的Verilog仿真器。感谢惠普公司的Tom Saponas和Dave Ritchey先生, 他们给我机会领导完成一个动态时序分析器的反向设计工程, 两名学生David Uranek和Jerry Barnett参与并获成功。十分感谢我在Prisma公司暑期工作的主管Dave Still先生, 提供了设计环境与精神鼓励, 使我完成了高性能多核系统中建模的难题。感谢Sutherland HDL的Stu Sutherland帮助我理解并更深入研究了数字系统建模中的竞争条件问题, 这些观点使我坚持使用非阻塞赋值来进行边缘敏感的行为级建模和使用阻塞赋值进行电平敏感的行为级建模的描述风格, 让我更好地帮助学生理解同步数字系统的操作和设计。谢谢我的朋友兼同行、瑞士联邦理工学院的Hubert Kaeslin博士, 与他进行的有意义的讨论让我能更深入钻研数字处理器的算法和结构。感谢Kirk Sprague和Scott Kukel帮助研发了一个可用于UART的汉明编码器。同时感谢Cris Hagan, 他的论文提供了本书第9章的数字信号处理器中的抽取器和其他功能单元建模。非常感谢Rex Anderson先生帮助校正了几章的内容, 并对第一版进行了修改。谢谢我的学生Terry Hansen和Lisa Horton, 他们提供了咖啡自动贩卖机例子的灵感, 并开发了支持RISC CPU的汇编代码。同时我还要感谢科罗拉多大学的Greg Tumbush教授和Temple大学的Chen-Huan Chiang教授为本书第二版提供了重要建议, 也谢谢许多学生的课堂讨论, 他们的发言为第二版提供了帮助。谢谢Scott Disanno和Irwin Zucker领导了第二版的出版, 谢谢Haseen Khan精心策划本书的结构。我向所有给予本书支持的朋友表示衷心的感谢!
展开