
本书介绍基于FPGA的数字系统设计方法,在基本的功能部件设计基础上,设计微处理器及单芯片系统。本书不仅介绍通用的数字电路和数字系统的设计方法,并对计算机硬件系统的组织进行深入分析。通过运算电路设计、状态机设计、RISC模型机设计等实验用例的训练,学生可以建立计算机的整机概念,了解数据在计算机中的表示、传送、处理以及控制信息是如何完成对计算机系统的控制。
本书取材新颖,采用实例教学的组织形式,内容由浅入深,循序渐进。书中给出了大量设计实例及扩展方案,不仅可以作为教学内容进行学习,部分内容还具有工程实践价值。本书可作为高等院校计算机类、电子类和自动化类等有关专业的教材和参考书,也可供有关专业工程技术人员参考。
1. 写作背景
目前,关于我国高等教育计算机专业一级学科和专业方向设置问题受到非常大的关注。原有的计算机科学与技术一级学科现在逐渐分化为计算机科学、计算机工程和软件工程3个学科,同时保密与信息安全专业方向也在积极地进行准备。对于计算机专业的本科生教育而言,其基本的培养方案、课程设置和教学大纲都需要根据新的形势进行变革。
传统的计算机专业课程体系中与计算机硬件设计相关的课程是“数字逻辑”、“计算机组成原理”和“计算机系统结构”,每一门课程都辅助有相应的实践学时。实践环节的设置不仅起到加深学生理解理论课所学知识的作用,还有助于培养学生将理论与实践相联系并解决实际问题的能力,对于实现当前的高等教育改革目标,提高毕业生综合素质具有重要的意义。但是,受实验设备所限,各课程的实验环节分别在数字逻辑实验箱、计算机部件实验平台和EDA实验开发平台上进行,缺乏连贯性和整体性。
随着现场可编程逻辑器件的广泛应用,以FPGA为核心器件的实验教学平台日益成熟,采用FPGA芯片实现数字逻辑、计算机部件和计算机组成及系统设计实验已经成为新的趋势。采用FPGA芯片实现硬件设计实验,开发速度快、方便、可靠,并且由于FPGA芯片可反复编程,因此几乎没有器件损耗,大大降低了实验室的维护成本。另一方面,随着可编程逻辑器件集成度的迅速提高和嵌入式系统应用的日益广泛,基于FPGA的SoPC系统设计技术已经在通信、工业控制等许多领域得到实际应用。在计算机专业硬件课程的实验教学环节中引入SoPC相关的内容,渗透片上系统软硬件协同设计的思想,对于提高学生的实际动手能力和就业竞争力都有非常大的帮助。
2. 本书特点
本书兼顾高等学校理论教学需要与培养学生实践能力的需求,借鉴国外名校在计算机科学与工程专业课程设置及相关课程内容的安排,组织本教程的相关理论知识及实验用例设计,力争理论详尽、用例科学、指导到位。配合高等学校的“数字逻辑”、“计算机组成原理”、“计算机系统结构”等课程的实践教学环节,突出实用性。所有实验可操作性强,与实践结合紧密。本书不仅介绍基于FPGA的EDA设计方法,更着眼于介绍在基本的数字逻辑功能部件的基础上如何构造微处理器,即本教材着眼于计算机的硬件系统组织,而不仅仅是介绍通用的数字电路和数字系统的设计方法。通过浮点运算电路设计、状态机设计、RISC模型机部分模块的设计等实验用例的训练,学生可以建立计算机的整机概念,了解数据在计算机中的表示、传送、处理以及控制信息是如何完成对计算机系统进行控制的。
本书可作为计算机科学与技术专业及相关专业“数字逻辑实验”、“EDA设计实验”、“计算机部件实验”、“计算机组成实验”等课程的教材,书中的全部实验示例都经过精心的设计和完全的调试,可以放心使用。除数字钟、VGA接口控制器和SoPC系统设计这3章的实验结果需要下载到目标平台上以外,其他实验均可直接在仿真开发环境中进行,方便可靠。此外,与平台相关的实验内容也只需少量修改(主要是修改引脚约束文件),就可以移植到不同的实验平台上运行。
3. 内容安排
本书的内容安排如下:
第1章介绍可编程逻辑器件的基本概念、发展历程以及分类方法和开发流程,并介绍FPGA的发展及主要厂商和产品的概况。
第2章简要介绍Verilog HDL的基本语法知识、进行硬件描述的一般结构及使用硬件描述语言进行电路设计的3种描述方式(结构描述、数据流描述和行为级描述)。
第3章介绍进行FPGA开发所需的工具软件、目前国内高校常用的FPGA实验平台以及一些常用仪器仪表的使用方法,并以实验0的形式详细介绍基于FPGA的硬件设计过程。
第4~5章以常用的组合逻辑电路和几种常见的同步触发器电路为例,分别详细描述采用原理图输入法和硬件描述语言方法设计组合逻辑、时序逻辑及功能仿真的方法。
第6章简要介绍FSM中状态的描述方法、不同类型FSM的设计方法、FSM的复位和毛刺问题等。通过乘法状态机、序列检测器和交通灯控制器3
个示例说明FSM的设计方法。
第7章介绍定点加法器和浮点加法器的设计,详细描述了一个32位浮点加法器和一个简单算术逻辑运算单元的设计实现过程。
第8章介绍基本乘法器和除法器的原理与设计方法,以及两种快速乘法器设计技术。
第9章讨论对存储器的建模,介绍利用Verilog HDL对只读存储器和随机存取存储器进行建模,以及利用IP Core生成工具MegaWizard PlugIn Manager生成存储器核的方法。
第10章通过详细设计一个教学用模型微处理器HEUR1,介绍处理器设计的基本方法和步骤。
第11章详细描述了利用Verilog HDL语言设计基于FPGA的数字电子时钟的过程,而且所设计的电路具有工程实用性。
第12章介绍VGA接口的基本原理和控制方式,通过设计并实现了在CRT显示器上显示彩色条块、圆环的示例来说明基于FPGA的VGA接口设计技术,并在GW48SoPC实验台上进行实验。
第13章阐述FIR滤波器的基本原理、结构以及窗函数法设计FIR滤波器的过程,并详细描述在FPGA上实现FIR滤波的方法及验证过程。
第14章介绍利用Altera公司提供的嵌入式微处理器核Nios实现SoPC系统的基本方法,以一个跑马灯控制器的软硬件设计为例对SoPC系统设计流程进行详细描述。
4. 致谢
首先感谢哈尔滨工程大学计算机科学与技术学院嵌入式系统研究室和计算机实验教学中心的各位老师和研究生,感谢他们的大力支持和热情帮助。以下研究生参与了本书实验示例代码的编写和调试以及原始资料的翻译和整理工作: 康萌萌、刘铭、张智钧、孙盟哲、王春艳、关琳、颜丽、吴剑、李玲、谢争、杜小雪、菅庆峰、张明涛等,感谢他们付出的辛勤劳动。感谢刘书勇老师和付晓晶老师的热情帮助,他们为编者提供了实验平台及相关资料。
感谢评阅专家对本书提出的宝贵修改意见,他们的劳动对完善和提高全书质量起到了关键的作用。
编者虽然从事计算机硬件课程教学多年,但是由于水平所限,书中难免存在缺点和错误,希望各位读者提出宝贵意见。编者的联系方式为: yaoaihong@hrbeu.edu.cn。
编者
2011年2月
第1章可编程逻辑器件简介
1.1可编程逻辑器件概述
1.1.1可编程逻辑器件的发展历程
1.1.2可编程逻辑器件的分类方法
1.2可编程逻辑器件的设计流程
1.3FPGA发展概况
1.3.1FPGA的主要优势与发展前景
1.3.2主流FPGA产品及供应商简介
习题1
第2章Verilog HDL基础
2.1前言
2.2程序示例
2.3模块
2.3.1模块的结构
2.3.2模块的实例化
2.4变量和信号的类型
2.5Verilog HDL表达式
2.5.1常量
2.5.2操作符
2.6Verilog HDL的主要功能语句
2.6.1Verilog HDL对硬件的描述方式
2.6.2数据流描述
2.6.3行为描述——过程块
2.7其他语法规则说明
2.7.1标识符命名原则
2.7.2标点的使用
2.7.3注释
2.7.4转义字符
2.7.5编译命令
2.7.6参数
2.8示例程序分析
2.9推荐阅读
习题2
第3章实验环境介绍
3.1EDA软件工具介绍
3.1.1集成的FPGA开发环境
3.1.2ModelSim介绍
3.1.3Synplify简介
3.2FPGA典型实验开发平台简介
3.2.1康芯GW48SoPC实验台
3.2.2Xilinx XUP Spartan板
3.3实验仪器的使用方法
3.3.1函数信号发生器
3.3.2数字存储示波器
3.3.3逻辑分析仪
3.4熟悉实验环境
3.4.1实验目的
3.4.2实验内容
3.4.3实验步骤
习题3
第4章基本组合逻辑电路设计
4.1组合逻辑电路基础知识
4.1.1组合逻辑电路的分析方法
4.1.2组合逻辑电路分析举例
4.1.3组合逻辑电路的设计方法
4.2数据比较器
4.2.1数据比较器的功能
4.2.2比较器电路的设计
4.3数据选择器
4.3.1四选一数据选择器
4.3.2四选一数据选择器的设计
4.3.3数据选择器的应用
4.4二进制加法器
4.4.1半加器
4.4.2全加器
4.5编码/译码器
4.5.1BCD码编码器
4.5.2BCD码译码器
实验41用原理图输入法设计四位加法器
实验42数码显示译码器
习题4
第5章基本时序逻辑设计
5.1时序逻辑电路的基础知识
5.2触发器
5.2.1RS触发器
5.2.2D触发器
5.2.3JK触发器与T触发器
5.3时序逻辑电路的分析方法
5.3.1同步时序电路的分析方法
5.3.2异步时序电路的分析方法
5.4常见的时序逻辑电路设计
5.4.1移位寄存器
5.4.2计数器
5.4.3分频器
5.4.4顺序脉冲发生器
5.4.5阶乘运算器
实验51可预置的加减计数器实验
实验52扭环形计数器
习题5
第6章有限状态机设计
6.1状态的描述
6.1.1整数编码状态
6.1.2parameter语句声明状态
6.1.3`define编译引导语句
6.2FSM的设计方法
6.2.1Moore型FSM的设计
6.2.2Mealy型FSM的设计
6.2.3混合型FSM的设计
6.3FSM的复位和毛刺问题
6.4FSM设计示例
6.4.1乘法器建模
6.4.2序列检测器的设计
6.4.3交通灯控制器的设计
实验61设计序列检测器
习题6
第7章加法器设计
7.1定点加法器
7.1.1进位链结构
7.1.2串行进位
7.1.3并行进位
7.2浮点加法器
7.2.1规格化浮点数加减运算基本原理
7.2.2浮点加法器的设计
7.3运算器(ALU)的设计
实验718位加法器的设计
实验7216位超前进位加法器
习题7
第8章乘、除法器的设计
8.1常用的机器数编码格式
8.2定点乘法器原理及实现
8.2.1原码一位乘算法及实现
8.2.2补码一位乘算法及实现
8.3定点除法器原理及实现
8.3.1原码不恢复余数除法
8.3.2补码不恢复余数除法
8.4快速乘法器
8.4.1修正布斯算法
8.4.2华莱士树结构
实验81原码两位乘法器
实验82补码两位乘法器
习题8
第9章存储器建模
9.1只读存储器ROM的建模
9.1.1ROM的基本结构
9.1.2ROM的建模
9.1.3ROM的仿真测试
9.2随机存储器RAM的建模
9.2.1RAM的基本结构
9.2.2RAM的建模
9.2.3RAM的仿真测试
9.3利用IP Core工具生成ROM和RAM
实验91利用SRAM设计并实现FIFO
习题9
第10章CPU的设计
10.1CPU的基本组成
10.1.1控制部件
10.1.2运算部件
10.1.3寄存器组
10.2CPU设计的一般过程
10.3HEUR1处理器指令集的设计
10.3.1指令格式
10.3.2指令集的设计
10.4HEUR1内部数据通路的设计
10.5时序系统的设计
10.6HEUR1各功能模块的设计
10.6.1指令译码模块的设计
10.6.2立即数生成模块
10.6.3分支处理模块
10.6.4地址生成模块
10.6.5算术逻辑单元模块
10.6.6寄存器组模块
10.6.7CPU模块
10.7仿真验证及结果
10.7.1外围模块建模
10.7.2系统复位
10.7.3功能验证
实验101HEUR1处理器核的指令集扩展
习题10
第11章数字电子时钟设计
11.1数字钟功能需求说明
11.2实验平台相关电路说明
11.2.17段数码管
11.2.2外部按键
11.2.3音频输出
11.3数字钟系统的设计
11.4数字钟各模块的设计
11.4.1时钟分频模块
11.4.2计时模块(包含按键控制)
11.4.3音频输出模块
11.5仿真验证
11.6引脚设置
实验111整点报时闹钟设计
习题11
第12章VGA接口控制器
12.1视频信号原理
12.2数字视频图像的表示
12.3VGA接口介绍
12.4VGA信号时序
12.5VGA接口控制器设计
12.5.1VGASig模块
12.5.2ColorMap模块
12.5.3顶层模块
12.5.4功能仿真
12.5.5引脚设置
实验121800×600分辨率VGA接口的设计
实验122VGA动态图形显示控制
习题12
第13章FIR数字滤波器设计
13.1数字滤波器概述
13.2FIR滤波器的结构
13.3FDATool工具使用介绍
13.3.1MATLAB简介
13.3.2FDATool设计FIR滤波器的参数
13.4窗函数法FIR滤波器的设计
13.4.1窗函数的选择
13.4.2窗函数法FIR滤波器的设计步骤
13.5FIR滤波器的FPGA实现
13.5.1滤波器系数的量化
13.5.216阶FIR滤波器的实现
13.5.3在ModelSim中加入Altera仿真库
13.6FIR滤波器的仿真验证
13.6.1仿真数据文件的格式
13.6.2测试平台程序的设计
13.6.3仿真结果分析
实验131低通FIR滤波器的设计
实验132FIR滤波器的硬件实现及仿真
习题13
第14章基于Nios的SoPC系统
14.1SoPC技术概述
14.1.1IP核与IP复用技术
14.1.2片上总线
14.2嵌入式微处理器核介绍
14.2.1Altera Nios Ⅱ软核处理器
14.2.2Xilinx MicroBlaze核
14.3基于Nios的SoPC系统开发流程
14.4基于Nios的跑马灯控制器的设计
14.4.1基本SoPC系统硬件结构
14.4.2JTAG UART IP核
14.5跑马灯控制器的硬件实现
14.5.1新建SoPC设计项目
14.5.2各模块的设计
14.5.3存储器地址和IRQ分配
14.5.4Nios Ⅱ系统生成
14.5.5SoPC系统生成
14.6跑马灯控制器的软件设计
14.6.1C源程序输入
14.6.2代码优化
14.6.3程序运行和下载
实验141基于Nios Ⅱ处理器计时器的设计
习题14
附录Verilog HDL 关键字
参考文献