中国高校课件下载中心 》 教学资源 》 大学文库

《电子电工》课程教学资源(文献资料)Xilinx FPGA-Verilog(学习资料)

文档信息
资源类别:文库
文档格式:PDF
文档页数:171
文件大小:71.9MB
团购合买:点击进入团购
内容简介
第 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
刷新页面文档预览

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

最后一种表达方式限制了逻辑变量名只能包含单个字母。图2.1非门图2.2与门在Verilog中,用“&”符号作与运算符。图2.2所示与门的表达式为z=x&y3.或门图2.3所示为或门的逻辑符号和真值表。或门的逻辑符号为两个输入x,y和一个输出z。当x或y中有一个为1("真”或高电平)或两个都为1时,或门输出z为1;只有当x和y都为0时,输出z为0。常见的或运算表达形式有xvyxUyz=x+yx#y在Verilog中,用“”符号作或运算符。图2.3所示或门的表达式z为:z=xly。图2.3或门可能会使人惊的地方在于,所有的数字系统,包括计算机,都可以用这3种基本的逻辑门构建。接下来我们将介绍其他4种常用逻辑门,它们也可以用上述的基本逻辑门构建,表达式中运算符采用Verilog语言符号。2.1.2四种常用逻辑门利用之前所述3种基本逻辑门,我们可以构建4种新的常用逻辑门:与非、或非、异或及同或门。1.与非门

4 最后一种表达方式限制了逻辑变量名只能包含单个字母。 图 2.1 非门 图 2.2 与门 在 Verilog 中,用“&”符号作与运算符。图 2.2 所示与门的表达式为 z=x&y。 3. 或门 图 2.3 所示为或门的逻辑符号和真值表。或门的逻辑符号为两个输入 x, y 和一个输出 z。 当 x 或 y 中有一个为 1 ("真”或高电平)或两个都为 1 时,或门输出 z 为 1;只有当 x 和 y 都为 0 时,输出 z 为 0。 常见的或运算表达形式有 z=x+y x#y x∨y x∪y 在 Verilog 中,用“|”符号作或运算符。图 2.3 所示或门的表达式 z 为: z=x|y。 图 2.3 或门 可能会使人惊讶的地方在于,所有的数字系统,包括计算机,都可以用 这 3 种基本的逻辑门构建。接下来我们将介绍其他 4 种常用逻辑门,它们也 可以用上述的基本逻辑门构建,表达式中运算符采用 Verilog 语言符号。 2.1.2 四种常用逻辑门 利用之前所述 3 种基本逻辑门,我们可以构建 4 种新的常用逻辑门:与 非、或非、异或及同或门。 1.与非门

图2.4所示为与非门的逻辑符号和真值表。与非门的逻辑符号同与门的逻辑符号非常相似,只是在输出端多了一个小圆圈。从真值表中我们看到,当且仅当与非门的两个输入都为1时,输出z为0;否则,z为1。另外,从图中两个真值表中我们得知,与非门等价于与门连接一个非门。811图2.4与非门2.或非门图2.5所示为或非门的逻辑符号和真值表。或非门的逻辑符号同或门的逻辑符号非常相似,只是在输出端多了一个小圆圈。从真值表中我们看到,当且仅当或非门的两个输入都为0时,输出z为1。或非门等价于或门之后接一个非门。Owxlyw(xly)图2.5或非门3.异或门图2.6所示为异或门的逻辑符号和真值表。异或门的逻辑符号同或门的逻辑符号相似,只是在输入端多了一段圆弧。从真值表中我们看到,当异或门的两个输入不同(一个为1,一个为0)时,输出z为1;当两个输入相同(同

5 图 2.4 所示为与非门的逻辑符号和真值表。与非门的逻辑符号同与门的 逻辑符号非常相似,只是在输出端多了一个小圆圈。从真值表中我们看到, 当且仅当与非门的两个输入都为 1 时,输出 z 为 0;否则,z 为 1。另外, 从图中两个真值表中我们得知,与非门等价于与门连接一个非门。 图 2.4 与非门 2.或非门 图 2.5 所示为或非门的逻辑符号和真值表。或非门的逻辑符号同或门的 逻辑符号非常相似,只是在输出端多了一个小圆圈。从真值表中我们看到, 当且仅当或非门的两个输入都为 0 时,输出 z 为 1。或非门等价于或门之后 接一个非门。 图 2.5 或非门 3.异或门 图 2.6 所示为异或门的逻辑符号和真值表。异或门的逻辑符号同或门的 逻辑符号相似,只是在输入端多了一段圆弧。从真值表中我们看到,当异或 门的两个输入不同〔一个为 1,一个为 0)时,输出 z 为 1;当两个输入相同(同

为1或同为0)时,输出z为0在Verilog中,用“^"符号作异或运算符。异或门的逻辑表达式为z=xy从图2.6中我们看到,异或门可以通过两个反相器、两个与门和一个门构建。因此,异或运算叫一以写成:(2.1)z=xy=(~x&y))(x&~y)图2.6异或门4.同或门图2.7所示为同或门的逻辑符号和真值表。同或门实质上就是非异或门,所以它的逻辑符号与异或门的逻辑符号相似,只是在输出端多了一个小圆圈。从真值表中我们看到,当同或门的两个输入相同时(同为0或同为1时),其输出为1:当两个输入不同时(一个为1而另一个为0),其输出为0。图2.7同或门在Verilog中,用“_^”,符号作同或运算符。同或门的逻辑表达式为z=x~^y.Z

6 为 1 或同为 0)时,输出 z 为 0。 在 Verilog 中,用“^”符号作异或运算符。异或门的逻辑表达式为 z=x^y。 从图 2.6 中我们看到,异或门可以通过两个反相器、两个与门和一个门 构建。因此,异或运算叫一以写成: z=x^y=(~x&y)}(x&~y) (2.1) 图 2.6 异或门 4.同或门 图2.7所示为同或门的逻辑符号和真值表。同或门实质上就是非异或门, 所以它的逻辑符号与异或门的逻辑符号相似,只是在输出端多了一个小圆 圈。从真值表中我们看到,当同或门的两个输入相同时(同为 0 或同为 1 时), 其输出为 1;当两个输入不同时(一个为 1 而另一个为 0),其输出为 0。 图 2.7 同或门 在 Verilog 中,用“~^”,符号作同或运算符。同或门的逻辑表达式为 z=x~ ^y

2.2基于乘积和的设计对于真值表中的每一行,都可以写出对应的乘积项,也就是最小项(minterm)。最小项由各输入变量做与运算构成。如果真值表中某行某一变量(比如x)的输入值为1,我们直接将其写为x。与此相对,如果其输入值为0,我们就将其写为~x。因此,对于图2.8所示的真值表中的第一行,其最小项应写成mo=~x&~y。注意:当x和y均为0时,其输出值为0。同样,第三行的最小项应为m2=x&~y。注意:当x为1且Y为0时,其输出为1。图2.8列出了两输入(x,y)户的所有最小项表达式。minterms00nmm--rdy01m,=x&)m2=x&~)10m&-ymi=x&ymm(x&y)/(x&~y)图2.8基于1输出的乘积和设计图2.8所小右边的真值表对应异或运算函数。观察其中输出为1的各行我们注意到当mi或m2为1时,输出z为1。而当x为。且y为1时,ml为1,因为此时~x&y的值为1。同理,当x为1目~y为0时,m2为1。将mi和m2(也就是输出值为1的最小项)做或运算,就可以得到z的最终表达式:z=m|m2(2.2)=(-x&y)(x&y) 这同我们在图2.6中所用的异或表达式一模一样。在逻辑表达式中,我们采用以下的优先级定义:(1)所有取反运算(“”)最先被执行。(2)所有与运算(“&”)其次被执行。(3)所有或运算(““)最后被执行。根据优先级的定义,式(2.2)就可以被写成以下形式:(2.3)z=-x&ylx&~y将真值表输出列中所有值为1的最小项做逻辑或运算,进而得到对应函数的逻辑表达式。这就是基于乘积和的设计。或运算符“}”代表逻辑和而与运算符“&”代表逻辑乘。式(2.3)所对应的逻辑电路如图2.9所示,同图2.6所示的逻辑电路一模一样。7

7 2.2 基于乘积和的设计 对于真值表中的每一行,都可以写出对应的乘积项,也就是最小项 (minterm)。最小项由各输入变量做与运算构成。如果真值表中某行某一变量 (比如 x)的输入值为 1,我们直接将其写为 x。与此相对,如果其输入值为 0, 我们就将其写为~x。因此,对于图 2.8 所示的真值表中的第一行,其最小项 应写成 m0=~x&~y。注意:当 x 和 y 均为 0 时,其输出值为 0。同样,第三 行的最小项应为 m2=x&~y。注意:当 x 为 1 且 Y 为 0 时,其输出为 1。图 2.8 列出了两输入(x,y)户的所有最小项表达式。 图 2.8 基于 1 输出的乘积和设计 图 2.8 所小右边的真值表对应异或运算函数。观察其中输出为 1 的各行, 我们注意到当 m1 或 m2 为 1 时,输出 z 为 1。而当 x 为。且 y 为 1 时,ml 为 1,因为此时~x&y 的值为 1。同理,当 x 为 1 目~y 为 0 时,m2为 1。将 ml和m2(也就是输出值为1 的最小项)做或运算,就可以得到 z的最终表达式: z=m1|m2 (2.2 ) =(~x&y)|(x&y) 这同我们在图 2.6 中所用的异或表达式一模一样。在逻辑表达式中,我 们采用以下的优先级定义: (1)所有取反运算(“~”)最先被执行。 (2)所有与运算(“&”)其次被执行。 (3)所有或运算(“|“)最后被执行。 根据优先级的定义,式(2.2)就可以被写成以下形式: z=~x&y|x&~y (2.3) 将真值表输出列中所有值为 1 的最小项做逻辑或运算,进而得到对应函 数的逻辑表达式。这就是基于乘积和的设计。或运算符“}”代表逻辑和, 而与运算符“&”代表逻辑乘。式(2.3 )所对应的逻辑电路如图 2.9 所示,同 图 2.6 所示的逻辑电路一模一样

图2.9异或函数的逻辑电路图2.3基于和项积的设计本节中,我们不再关注真值表中的,"1”输出行,转而将重点放在“Q输出行,如图2.13所示。在这种情况下,输出:为非最小项mo(NOTmo)和非最小项m3(NOTm3)的逻辑与。那么非最小项是什么意思呢?从上节最小项的定义及德摩根定律,我们可以推出:NOT mintenn mo= ~mo=~(~x&~y)=~~(xly)=xly我们称此为最大项(maxterm)Mo。图2.11给出了真值表中所有最大项表达式。请注意:每个最大项为相应最小项取反得到。可以用德摩根定律来验证每个最大项表达式。N0560图2.10从0输出得到和项积的设计结合图2.10和图2.11得知,输出可以写作真值表中所有最大项之积。所以,如图2.12所示,异或运算函数也可以写成:z=M0&M3=(xly)&(~x-y)(2.4)这就是和项之积的表达形式,对应的逻辑电路如图2.13所示。比较图2.9和图2.13的逻辑电路发现,虽然它们的电路不同,但最后实现的逻辑函数8

8 图 2.9 异或函数的逻辑电路图 2.3 基于和项积的设计 本节中,我们不再关注真值表中的,"1”输出行,转而将重点放在“Q; 输出行,如图 2.13 所示。在这种情况下,输出:为非最小项 m0(NOT m0)和非 最小项 m3(NOT m3)的逻辑与。那么非最小项是什么意思呢?从上节最小项 的定义及德摩根定律,我们可以推出: NOT mintenn m0= ~m0 =~(~x&~y) =~~(x|y) =x|y 我们称此为最大项(maxterm ) M0。图 2.11 给出了真值表中所有最大项 表达式。请注意:每个最大项为相应最小项取反得到。可以用德摩根定律来 验证每个最大项表达式。 图 2.10 从 0 输出得到和项积的设计 结合图 2.10 和图 2.11 得知,输出 z 可以写作真值表中所有最大项之积。 所以,如图 2.12 所示,异或运算函数也可以写成: z=M0&M3=(x|y)&(~x|~y) (2.4) 这就是和项之积的表达形式,对应的逻辑电路如图 2.13 所示。比较图 2.9 和图 2.13 的逻辑电路发现,虽然它们的电路不同,但最后实现的逻辑函数

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档