用Verilog设计FPGA样机实例解析(Xilinx Spartan-3版)
定 价:165 元
丛书名:国际信息工程先进技术译丛
- 作者:[美] 彭皮·楚 著;李艳志 译
- 出版时间:2016/11/1
- ISBN:9787111536444
- 出 版 社:机械工业出版社
- 中图法分类:TP332.1
- 页码:553
- 纸张:胶版纸
- 版次:1
- 开本:16开
本书主要内容包括三部分:基本的数字电路、外围模块和内嵌的微控制器。介绍了基础的HDL结构和对应硬件,并示范如何用这些结构来搭建基本的数字电路。第二部分是应用部分的技术为原型板设计外围模块,介绍了一个单独外设的开发、实现和验证。可以将这些模块组成一个复杂的系统。第三部分介绍了基于FPGA的软核微控制器,即PicoBlaze,展示了如何将通用处理器和定制电路进行集成。本书通过实例深入浅出地介绍了使用Verilog对可编程逻辑器件进行设计的方法,不仅介绍了HDL的语法,还重点介绍了对可编程逻辑器件的设计方法,提供了一系列使用Verilog对可编程逻辑器件进行设计的实例,书中的实例均可运行于Xilinx公司的Spartan3原型开发板中,使读者能够边动手边学习,达到快速入门并掌握其要领的目的。
本书可作为可编程逻辑器件的学习指导书,通过书中的案例,初学者终可以完全掌握可编程逻辑器件的设计。同时,也可作为工程实践的指导用书,对提高可编程逻辑器件开发人员的设计水平有借鉴价值。
适读人群 :可变程逻辑器件
本书主要特色:
本书深入浅出地介绍了如何使用Verilog对可编程逻辑器件进行设计的方法,主要针对可编程逻辑器件的设计,而不是仅仅介绍HDL的语法。同时还提供了一系列使用Verilog对可编程逻辑器件进行设计过程的实例,从简单的门级电路,到带有8位软核处理器和定制I/O外设的复杂嵌入式系统。这些实例可作为通用的基本模块组合成具体电路,乃至结构复杂的大系统。
本书中的实例严格遵循设计准则,编码和设计方法是“向上兼容的”,特点如下:
同样的方法可应用于未来的大型设计之中。
同样的方法能够有助于其他系统的开发项目,包括仿真,时序分析,验证和测试。
同样的方法能够应用到ASIC技术和不同类型的FPGA器件中。
代码能够被不同厂家的软件综合。
总之,本书是一本实用的、以硬件为核心的教材,其内容涉及用简洁的HDL、遵循规范的设计和编码原则,大限度地实现向上兼容。
HDL(硬件描述语言)和FPGA(现场可编程门阵列)器件可以使设计者很快地完成复杂数字电路的开发和仿真,并在样机器件上实现,随后对器件电路的实际运行情况进行检查。随着工艺的成熟,HDL和FPGA已经成为设计实践的主流。利用PC机和普通的FPGA开发板就能构造出十分复杂的数字系统。本书采用实际操作的学习方法,利用丰富的示例来阐述FPGA和HDL的开发和设计过程。书中包含了大量实例,从简单的门级电路,到带有8位软核处理器和定制I/O外设的复杂嵌入式系统。所有这些例子都可以被综合成具体电路,并在开发板上进行实际测试。
本书关注要点:
本书关注的重点是综合后生成硬件的优劣,而不是HDL语法。本书只关注一小部分可综合子集,并使用少量的代码模板为不同类型的电路提供框架,而不是解释每一个语句的结构。这些模板都是通用的,很容易综合到复杂的系统中。虽然这种方法限制了语法表达的“自由”,但并不妨碍我们开发创新性的硬件结构。由于HDL语言的通用性和适应性,同一个电路通常可以用多种语言结构和代码风格表达。其中许多代码是用于建模的。这些代码综合后可能导致不必要的复杂硬件实现,有时还根本不可能综合成任何具体电路。这种模板方式实际上能够促使我们更多地去思考硬件电路本身,养成良好的编码习惯。由于我们的主要兴趣是在硬件上,所以花一些时间研究如何使用同一个代码模板来开发多种不同的硬件结构,而不是用多种不同版本的代码来描述同一个电路是十分有价值的。
目前有两种流行的HDL语言,它们分别是VHDL和Verilog。这两种语言都得到广泛的应用,并且都是IEEE标准。本书使用Verilog,而另一本标题类似的书使用VHDL。尽管两者的语法差异较大,但它们的功能却非常相似,都能很好地达到设计目标。当我们掌握了一种语言的设计实践和编码方法后,再学习另一种语言就会变得非常简单。
虽然本书是为初学者编写的,但书中的示例都严格遵循设计准则,可为读者今后的工作打下良好的基础。编码和设计方法是“向上兼容的”,意思是:
同样的方法可应用于未来的大型设计之中。
同样的方法能够有助于其它的系统开发任务,包括仿真,时序分析,验证和测试。
同样的方法能够被应用到ASIC技术和不同类型的FPGA器件中。
代码能够被不同厂家的综合软件综合。
总之,本书是一本实用的、以硬件为核心的教材,其内容涉及用最简洁的HDL、遵循规范的设计和编码原则,最大限度地实现向上兼容。
购买本书得益处:
本书包含三大部分:
基本数字电路,外设模块和嵌入式微控制器。针对的读者群除了正在学习入门级或者高级数字系统设计课程的学生外,还包括想要学习FPGA和基于HDL开发的在职工程师。对于书中前两部分内容,需要读者具有数字系统的基本知识,而数字系统通常是电子工程和计算机工程专业课程中的必修课。对于第三部分的内容而言,如果之前学习过汇编语言编程会很有帮助。
本书所采用的工具:
虽然本书的主要目标是教会读者如何编写与开发工具和FPGA器件无关的HDL代码,但我们必须得选择一种开发工具(即软件包)和一套FPGA开发板来进行综合和实现这些示例。本书使用了Xilinx公司的综合工具和FPGA器件,Xilinx公司是一家在该领域处于领导地位的公司。
软件:
使用的综合软件是Xilinx ISE开发套件的网络版。与完全版的套件相比,网络版除了支持的器件数量受限外,功能与完全版是类似的。大多数入门级开发板都使用便宜的Spartan-3系列FPGA器件。由于网络版支持Spartan-3器件,因此它符合我们的需求。本书使用的仿真软件是Mentor Graphics公司的 ModelSim XE III入门版。它是ModelSim的定制版。这两个软件包都是免费的,并且能够从Xilinx网站上下载。
FPGA开发板:
使用由Digilent Inc公司生产的几款入门级FPGA开发板,其中包括Spartan-3 Starter,Nexys-2和Basys等开发板,它们都包含一个Spartan-3/3E FPGA芯片和相似的外围电路。书中的设计示例是基于Spartan-3 Starter开发板(或简称为S3板)的,但大多数示例也能在其他开发板上直接使用。HDL代码的适用性总结如下:
Spartan3 Starter (S3)开发板。 S3开发板包含所有的外围器件,不需要其他的附属模块。所有的HDL代码和相关讨论能够直接应用在这块开发板上。
Nexys-2开发板。 Nexys-2开发板是一块比较新的开发板,包含了一片较大型的FPGA芯片和存储芯片。外围器件与S3开发版相似。与S3开发板有两处不同:第一,其VGA接口的\"颜色深度\"由3位扩展到8位。因此第13和14章讨论的VGA接口电路的输出需要根据情况进行相应的修改。第二,Nexys-2板包含更复杂的外部存储器。尽管能够配置为异步SRAM,但其时序特性与S3开发板上的存储芯片是不同的,因此第11章描述的存储控制器HDL代码便不能直接使用。但同样的设计准则依然可以应用于新的控制器的构造。
Basys开发板 Basys开发板是一个简易的开发板。缺少RS-232连接器。为了实现第8章描述UART模块和串行接口,我们需要Digilent的RS-232转换器外设模块。Basys开发板没有外部存储器件,因此第11章描述的存储控制器无法应用。
其他FPGA开发板 本书描述的大部分外设器件其实都是工业级标准的器件,并且相应的HDL代码能够被用于开发板上,只要开发板提供类似的接口和连接器。除了Xilinx特定的部分外,这些代码也能够应用于其他厂商设计的基于FPGA器件的开发板上。
PC的附件:
设计示例包含了用于连接PC外围设备的接口。键盘,鼠标和VGA显示器是必需的,还需要一条用于连接UART模块的普通串行数据线。这些外设使用广泛,通常可以在一台旧的PC上找到。
本书的结构:
本书分为三个主要部分。第一部分介绍基础的HDL结构和对应硬件,并示范如何用这些结构来搭建基本的数字电路。本书由六章组成:
第一章介绍了HDL程序的结构,基础语法和逻辑操作符。根据这些语言结构,可以推导出相应的门级组合电路。
第二章介绍FPGA器件、原型板和开发流程。借助于Xilinx ISE综合软件教程和Mentor Graphics ModelSim仿真软件教程进行开发过程的示范。
第三章介绍与HDL语言相关的操作符和算法操作符及其电路的结构。它们与中规模元件(如比较器,加法器和多路复用开关等元件)对应。模块级组合电路就是由这些语言结构得到的。
第四章介绍存储元件和构造简单时序电路的代码,例如计数器和移位寄存器,这些电路的状态转移表现为简单的有序模式。
第五章讨论有限状态机(FSM)的构建,有限状态机也是一种时序电路,但它的状态转移表现为复杂的非有序模式。
第六章介绍了带有数据路径的有限状态机(FSMD)的构建。FSMD用于实现寄存器传输(RT)方法学,通过数据在寄存期间的传输和操作,描述系统的运行。
第七章介绍关于语言构造和编码技术方面的若干高级话题,并介绍更加复杂测试平台的开发技术。读者可以跳过该章,不会影响对其他章节的理解。
第二部分是应用第一部分的技术为原型板设计一系列外围模块。每章介绍一个单独外设的开发、实现和验证。可以将这些模块组成一个更大的工程。该部分包括七个章节:
第八章介绍了普通的异步收发送器(UART)的设计,用于提供原型板上的RS-232接口接收和发送数据的串行链路。
第九章介绍了键盘接口的设计,可以从键盘上读取扫描码。键盘通过开发板上的PS2接口与其连接。
第十章介绍了鼠标接口的设计,可以从鼠标上获得点击和移动信息。鼠标也是通过开发板上的PS2接口与其连接。
第十一章讨论了存储控制器的实现和时序。该控制器用于对S3板上的两个静态随机存储器(SRAM)读取和写入数据。
第十二章讨论了Spartan-3器件中特定元件的推断和使用。重点是FPGA的内部存储块。
第十三章介绍了一个视频控制器的设计和实现。讨论的内容包括视频同步信号的产生并展示了比特映射和对象映射图像界面的构造。显示器通过开发板上的VGA接口进行连接。
第十四章继续介绍视频控制器的开发。讨论展示了文字界面和常规分片映射机制的构建。
第三部分介绍基于FPGA的软核微控制器,即PicoBlaze,展示了如何将通用处理器和定制电路进行集成。该部分包括四个章节:
第十五章对PicoBlaze的结构和指令集进行了简介。
第十六章对基本的汇编语言编程进行了介绍,并提供了一个总的开发流程。
第十七章讨论了PicoBlaze的I/O特性,并展示了如何将其与其他外设通过定制电路连接起来。
第十八章讨论了PicoBlaze的中断性能,并展示了一个定制的中断处理电路的构建。
除了常规的章节,附录部分总结和列出了所有的代码模版。
特殊标识xilinx specific 本书中我们使用了两种特殊的段落标记:一个是为了描述Xilinx-specific(Xilinx公司特有的)特性,另一个是为了描述Verilog-1995的结构。虽然在本书中描述的例子是基于Xilinx开发板来实现的,并且代码也是采用Xilinx ISE软件进行综合,我们仍设法使HDL代码不依赖于器件和软件。本书提到的大多数内容和代码能够应用到不同的目标器件,也可以被不同的综合软件综合。然而,一些代码或器件特性是Xilinx ISE或者Spartan-3FPGA芯片所独有的。我们用Xilinx specific上标,表示相应的部分或者章节的内容仅是针对Xilinx公司的器件。
同样,像在这一页的边缘,我们用边缘标记来表明这段的内容仅针对Xilinx。这些标记表明代码或设计不可直接移植,需要针对不同的软件包或目标板对代码和设计进行修改。1995年Verilog语言第一次得到批准(被引用作Verilog-1995),并在2001年修订(被引用作Verilog-2001)。修订版有很多改进。本书中使用的是Verilog-2001。如果一种语言使用了两种不同版本进行构建,我们会将其分开,单独对旧版本进行描述,并在页边缘做上标记,用于这种类型的讨论。这些内容“供参考”,目的是帮助读者理解旧版本的Verilog代码。
指导价值:
本书可作为数字系统概论或者高级工程指导的参考书。在数字系统概论中,本书提供了课程的试验部分。第一部分的章节基本上都遵循了典型的课程顺序,可作为常规课程的参考。可以选择一
1.门级组合电路
1.1引言
1.2简述
1.3结构描述
1.4测试平台
1.5参考书目说明
1.6推荐的实验
2.FPGA和EDA软件概述
2.1引言
2.2FPGA
2.3Digilent S3开发板简介
2.4开发流程
2.5Xilinx ISE project navigator简介
2.6ISE project navigator简明教程
2.7ModelSim 仿真器简明教程
2.8参考书目说明
2.9推荐的实验
3.RTL组合电路
3.1引言
3.2RT级元件
3.3使用并发赋值语言布线
3.4使用process建模
3.5使用IF和CASE语句布线
3.6constant和generic
3.7设计实例
3.8参考书目说明
3.9推荐的实验
4.常规的时序电路
4.1引言
4.2触发器和寄存器
4.3简单的设计实例
4.4时序电路的测试平台
4.5实例学习
4.6参考书目说明
4.7推荐的实验
5.FSM
5.1引言
5.2FSM代码开发
5.3设计实例
5.4参考书目说明
5.5推荐的实验
6.FSMD
6.1引言
6.2FSMD代码开发
6.3设计实例
6.4参考书目说明
6.5推荐的实验
7.UART
7.1引言
7.2UART 接收子系统
7.3UART发送子系统
7.4整体的UART系统
7.5定制一个UART
7.6参考书目说明
7.7推荐的实验
8.PS2 键盘
8.1引言
8.2PS2接收子系统
8.3PS2键盘扫描码
8.4PS2键盘接口电路
8.5参考书目说明
8.6推荐的实验
9. PS2鼠标
10.1引言
10.2PS2 鼠标协议
10.3PS2发送子系统
10.4双向PS2接口
10.5PS2鼠标接口
10.6参考书目说明
10.7推荐的实验
10. 外部SRAM
10.1引言
10.2IS61LV25616AL SRAM规范
10.3基本内存控制
10.4一个安全的设计
10.5更加有挑战的设计
10.6参考书目说明
10.7推荐的实验
11.Xilinx Spartan-3内存
11.1引言
11.2Spartan-3器件的嵌入式内存
11.3加入内存模块的方法
11.4内存接口的HDL模板
11.5参考书目说明
11.6推荐的实验
12.VGA控制器:图形
12.1引言
12.2VGA同步化
12.3像素生成电路概述
12.4使用对象映射方案生成图像
12.5使用bit映射方案生成图像
12.6参考书目说明
12.7推荐的实验
13.VGA控制器:文本
13.1引言
13.2文本生成
13.3全屏文本显示
13.4完整的pong游戏
13.5参考书目说明
13.6推荐的实验
14.PicoBlaze 概述
14.1引言
14.2定制的软件和硬件
14.3PicoBlaze概述
14.4开发流程
14.5指令集
14.6汇编程序指导
14.7参考书目说明
15.PicoBlaze汇编代码开发
15.1引言
15.2有用的代码片断
15.3子程序开发
15.4程序开发
15.5汇编代码的处理
15.6与PicoBlaze综合
15.7参考书目说明
15.8推荐的实验
16.PicoBlaze I/O接口
16.1引言
16.2输出端口
16.3输入端口
16.4带有开关和七段LED显示接口的平方程序
16.5带有组合多路开关和UART终端的平方程序
16.6参考书目说明
16.7推荐的实验
17.PicoBlaze中断接口
17.1引言
17.2PicoBlaze的中断控制
17.3外部接口
17.4软件开发注意事项
17.5设计实例
17.6参考书目说明
17.7推荐的实验
附录A: VHDL模板样例