FPGA-Verilog 学习资料
FPGA-Verilog 学习资料
目录 第1章概述 1.1数字逻辑 1.2 Verilog 2 第2章基本逻辑门 3 2.1真值表和逻辑表达式 3 2.1.1三种基本逻辑门 3 2.1.2四种常用逻辑门 4 2.2基于乘积和的设计 .6 2.3基于和项积的设计 .8 第3章现场可编程门阵列(FPGA) 21 第4章Basys2原理图 25 第5章组合逻辑 32 第6章运算电路 83 第7章时序电路 110 附录A代码仿真及设计实现 161
目 录 第 1 章 概述.1 1.1 数字逻辑.1 1.2 Verilog. 2 第 2 章 基本逻辑门.3 2.1 真值表和逻辑表达式.3 2.1.1 三种基本逻辑门.3 2.1.2 四种常用逻辑门.4 2.2 基于乘积和的设计.6 2.3 基于和项积的设计.8 第 3 章 现场可编程门阵列(FPGA). 21 第 4 章 Basys2 原理图. 25 第 5 章 组合逻辑.32 第 6 章 运算电路.83 第 7 章 时序电路. 110 附录 A 代码仿真及设计实现. 161
第1章概述1.1数字逻辑今天的数字设计人员用硬件描述语言(HDL)设计数字电路系统。其中,应用最广泛的硬件描述语言是VHDL和Verilog。这两种硬件描述语言都允许用户通过程序描述数字电路的行为,从而进行数字电路的设计。这些程序可以被用来仿真电路的功能,以及综合到CPLD,FPGA或专用集成电路(ASIC)中。为了让大家更容易地掌握Verilog知识,本书在介绍基础数字电路设计的过程中列举了很多 Verilog 的例程,并假设读者一没有任何的数字逻辑基础知识。我们将用XilinxISE来仿真和综合我们的Verilog代码。Verilog程序可以用任何Verilog仿真器仿真。在附录A中,我们提供了一卜简明的XilinxISE软件的使用向导。你可以在Xilinx网站上下载免费版的ISETMWebPACKTM。在程序实现过程中,产生的“*,bit"文件可以下载到BASYS2,NEXYS2(如图1.1所示)和类似功能的FPGA开发板上。Digilent公司的BASYS2开发板包含一块10万门的XilinxSpartan3EFPGA(同时提供25万门的版本)、8个拨位开关、4个按钮开关、8个LED和7段数码管。开发板上时钟频率可采用跳线的方式将其设置为25MHzZ、50MHz或100MHz。同时,它还提供了外部电路的接口,包含一个 VGA 口和一个 PS/2 口。NEXYS2开发板和BASYS2有些类似,但是其功能更为强大,它包含一块50万门或120万门的Spartan3EFPGA、一个HiroseFX2扩展口、16MB的快速PSDRAM,16MB的Flash,50MHz时钟和为外部时钟而设的管座。这使得NEXYS2非常适用于嵌入式处理。本书中所有的Verilog程序都可以用BASYS2,NEXYS2和类似功能的FPGA开发板来实现。唯一的区别在于,不同的开发板需要选用不同的约束文件,文件“nexys2.ucf"约束NEXYS2开发板中的引脚,文件“basys2.ucf约束BASYS2开发板中的引脚。相关的配套资料可以到译者序中提供的网址下载。表1.2列出了BASYS2开发板和NEXYS2开发板的跳线设置
1 第 1 章 概述 1.1 数字逻辑 今天的数字设计人员用硬件描述语言(HDL)设计数字电路系统。其中, 应用最广泛的硬件描述语言是 VHDL 和 Verilog。这两种硬件描述语言都允 许用户通过程序描述数字电路的行为,从而进行数字电路的设计。这些程序 可以被用来仿真电路的功能,以及综合到 CPLD,FPGA 或专用集成电路 (ASIC)中。 为了让大家更容易地掌握 Verilog 知识,本书在介绍基础数字电路设计 的过程中列举了很多 Verilog 的例程,并假设读者一没有任何的数字逻辑基 础知识。 我们将用 Xilinx ISE 来仿真和综合我们的 Verilog 代码。Verilog 程序可 以用任何Verilog仿真器仿真。在附录A中,我们提供了一卜简明的Xilinx ISE 软 件 的 使 用 向 导 。 你 可 以 在 Xilinx 网 站 上 下 载 免 费 版 的 ISETM WebPACKTM。在程序实现过程中,产生的“*.bit”文件可以下载到 BASYS2, NEXYS2(如图 1.1 所示)和类似功能的 FPGA 开发板上。Digilent 公司的 BASYS2 开发板包含一块 10 万门的 Xilinx Spartan 3E FPGA(同时提供 25 万 门的版本)、8 个拨位开关、4 个按钮开关、8 个 LED 和 7 段数码管。开发板 上时钟频率可采用跳线的方式将其设置为 25MHz、50MHz 或 100MHz。同 时,它还提供了外部电路的接口,包含一个 VGA 口和一个 PS/2 口。NEXYS2 开发板和 BASYS2 有些类似,但是其功能更为强大,它包含一块 50 万门或 120 万门的 Spartan 3E FPGA、一个 Hirose FX2 扩展口、16MB 的快速 PSDRAM,16MB 的 Flash,50MHz 时钟和为外部时钟而设的管座。这使得 NEXYS2 非常适用于嵌入式处理。 本书中所有的 Verilog 程序都可以用 BASYS2,NEXYS2 和类似功能的 FPGA 开发板来实现。唯一的区别在于,不同的开发板需要选用不同的约束 文件,文件“nexys2.ucf"约束 NEXYS2 开发板中的引脚,文件“basys2.ucf” 约束 BASYS2 开发板中的引脚。相关的配套资料可以到译者序中提供的网 址下载。表 1.2 列出了 BASYS2 开发板和 NEXYS2 开发板的跳线设置
(b)NEXYS2开发板(a)BASYS2开发板图1.1开发板实物图表1.1开发板跳线设置BASYS2开发板NEXYS2开发板JP3跳线设置为JTAG电源选项跳线设置为USB移除JP4跳线选择50MHz时钟模式跳线设置为JTAG1.2 VerilogVerilog基于C语言但又不是C语言,它是硬件描述语言,用来对数字逻辑电路进行建模。它和C语言的语法非常相似,但语言本身的行为却大不相同。在本书中,你可以通过学习其中的例程,以及完成每章之后的习题来学习Verilog。和任何程序语言一样,你只有通过自己编写程序,然后仿真你的设计并观察输出波形才能学会Verilog。除此之外,通过这样的力一法,你还能学会数字电路的设计方法
2 (a) BASYS2 开发板 (b) NEXYS2 开发板 图 1.1 开发板实物图 表 1.1 开发板跳线设置 BASYS2 开发板 NEXYS2 开发板 JP3 跳线设置为 JTAG 电源选项跳线设置为 USB 移除 JP4 跳线选择 50MHz 时钟 模式跳线设置为 JTAG 1.2 Verilog Verilog 基于 C 语言但又不是 C 语言,它是硬件描述语言,用来对数字 逻辑电路进行建模。它和 C 语言的语法非常相似,但语言本身的行为却大 不相同。在本书中,你可以通过学习其中的例程,以及完成每章之后的习题 来学习 Verilog。和任何程序语言一样,你只有通过自己编写程序,然后仿 真你的设计并观察输出波形才能学会 Verilog。除此之外,通过这样的力一 法,你还能学会数字电路的设计方法
第2章基本逻辑门所有的数字系统都由一些基本的数字电路,也就是逻辑门构成。它们实现最基本的逻辑函数,这在本章将会详细讲解。而逻辑门电路的实现方式也在过去的数十年中经历了继电器、电子管、晶体管及集成电路的演变过程。2.1真值表和逻辑表达式所有计算机里的数据都是以二进制的形式存储的。这些二进制位通常被认为是逻辑值0和1。其中,1为“真”而0为“假”。与其相关联的物理量可以是低电平(0)或高电平(5V)。对于所有可能的逻辑输入,真值衷定义了其对应的逻辑输出。在本节中我们将通过真值表介绍3种基本的逻辑门:非门、与门和或门,然后我们将用这3种基本逻辑门来定义一些其他的逻辑门。利用真值表我们将认识著名的迪摩根定律,接着我们将讨论将0作为“真”,将1作为“假”的可能性,这将加深我们对各种门的认识。2.1.1三种基本逻辑门1. 非门图2.1所示为非门的逻辑符号和真值表。非门的逻辑符号为一个输入x和个输出y。y的值是x的反码。当x为0时,Y为1;当x为1时,Y为0。简单地说,非门就是将输入值取反并输出。常见的取反运算表达形式有y=xy=Ixy=/xy=xy=-x在Verilog中,用“_”图2.1所示非门的表达式为y=~x2.与门图2.2所示为与门的逻辑符号和真值表。与门的逻辑符号为两个输入x,y及一个输出z。仅当x,都为1“真”或高电平)时,与门的输出z为l;当x或y其中有一个为0。时,输出z为0。常见的与运算表达形式有Z=xnyx*yxy
3 第 2 章 基本逻辑门 所有的数字系统都由一些基本的数字电路,也就是逻辑门构成。它们实 现最基本的逻辑函数,这在本章将会详细讲解。而逻辑门电路的实现方式也 在过去的数十年中经历了继电器、电子管、晶体管及集成电路的演变过程。 2.1 真值表和逻辑表达式 所有计算机里的数据都是以二进制的形式存储的。这些二进制位通常被 认为是逻辑值 0 和 1。其中,1 为“真”而 0 为“假”。与其相关联的物理量 可以是低电平(0)或高电平(5V)。 对于所有可能的逻辑输入,真值衷定义了其对应的逻辑输出。在本节中 我们将通过真值表介绍 3 种基本的逻辑门:非门、与门和或门,然后我们将 用这 3 种基本逻辑门来定义一些其他的逻辑门。利用真值表我们将认识著名 的迪摩根定律,接着我们将讨论将 0 作为“真”,将 1 作为“假”的可能性, 这将加深我们对各种门的认识。 2.1.1 三种基本逻辑门 1. 非门 图 2.1 所示为非门的逻辑符号和真值表。非门的逻辑符号为一个输入 x 和个输出 y。y 的值是 x 的反码。当 x 为 0 时,Y 为 1;当 x 为 1 时,Y 为 0。 简单地说,非门就是将输入值取反并输出。 常见的取反运算表达形式有 y=x′ y=!x y= x y=/x y=-x 在 Verilog 中,用“~”图 2.1 所示非门的表达式为 y=~x。 2. 与门 图 2.2 所示为与门的逻辑符号和真值表。与门的逻辑符号为两个输入 x, y 及一个输出 z。仅当 x,都为 1(“真”或高电平)时,与门的输出 z 为 1; 当 x 或 y 其中有一个为 0。时,输出 z 为 0。 常见的与运算表达形式有 Z=x∩y x*y xy