《基于FPGA的数字电路系统设计》课件第2章_第1页
《基于FPGA的数字电路系统设计》课件第2章_第2页
《基于FPGA的数字电路系统设计》课件第2章_第3页
《基于FPGA的数字电路系统设计》课件第2章_第4页
《基于FPGA的数字电路系统设计》课件第2章_第5页
已阅读5页,还剩195页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章基础设计实例2.1全加器设计2.2多位串行进位加法器设计2.3代码转换电路设计2.4BCD码优先编码电路设计2.5脉冲分频选择电路设计2.6汽车尾灯控制电路设计2.7彩灯控制电路设计2.8动态扫描显示电路设计2.9数值快速设置电路设计2.10音乐播放控制电路设计

2.1全 加 器 设 计

2.1.1设计实例

1.设计要求

设计半加器电路,创建模块符号,然后利用半加器模块设计全加器电路。

2.硬件环境

设计可以在FPGA开发装置上实现,比如DE2或LP—2900。半加器和全加器的输入变量用按键SWi设定,按下时为“1”;输出控制LED发光二极管,输出为“1”时LED亮。

LP—2900开发装置上LED发光二极管L1~L12的共阴极端受FPGA的I/O端口COM通过反相驱动器控制,如图2-1-1所示。所以设计时要使COM端口内置高电平Vcc(经反相后为低电平)。图2-1-1LP—2900开发装置的L1~L12与FPGA的电路连接2.1.2设计原理分析

1.半加器表2-1-1半加器真值表

半加器的逻辑符号如图2-1-2所示,有两个输入变量a、b和两个输出变量s、c。其中a、b为两个加数,s为相加的“和”,c表示加运算是否产生进位,高电平有效。半加器输入、输出的逻辑关系如表2-1-1所示。按照其变量定义,a、b和s、c符合两个一位二进制数相加运算功能,0加0时“和”s等于0,0加1(或1加0)时“和”s等于1,都没有进位;而1加1

有进位,“和”s为0。显然,表2-1-1的逻辑关系可以用逻辑

门实现。图2-1-2半加器逻辑符号

2.全加器

全加器的逻辑符号如图2-1-3所示,有3个输入变量a、b、ci和两个输出变量s、co。其中a、b、ci为3个加数,s为相加的“和”,co表示加运算是否产生进位,高电平有效。全加器输入、输出的逻辑关系如表2-1-2所示。可以分析,a、b、ci和s、co符合3个一位二进制数相加运算功能。同样,表2-1-2的逻辑关系可以用逻辑门或组合逻辑模块实现。图2-1-3全加器逻辑符号2.1.3设计预习准备

(1)分析表2-1-1的半加逻辑关系,采用与门和异或门实现半加器,画出逻辑图。

(2)分析表2-1-2的全加逻辑关系,列出s和co的输出表达式。

(3)用两个半加器和逻辑门设计全加器,画出电路原理图。

(4)选择所使用FPGA开发装置上作为加数输入的按键和作为输出指示的LED发光二极管,查阅其端口定义,在电路原理图中标出各输入、输出的端口编号。2.1.4参考设计步骤

(1)参照1.2.2节在QuartusⅡ中建立新工程,根据所用开发装置选择FPGA型号。

(2)设计半加器电路:

①参照1.2.5节新建一个图形文件BlockDiagram/

SchematicFile。

②参照1.3节进行半加器电路图设计。

在图形文件空白区域双击鼠标左键,弹出“Symbol”对话框。在Name(符号名称)栏中直接输入“and2”和“xor”,分别调出二输入与门和异或门,根据预习所画的半加器原理图连接电路,并给电路的输入、输出分别安置“input”和“output”端口符号,定义端口名。

③参照1.4.1节对电路进行分析与综合(Analysis&Synthesis)。

(3)仿真半加器电路:

①参照1.4.2节新建一个矢量波形仿真文件VectorWaveformFile。

②参照1.4.3节设置仿真观察点。在文件的最左栏中双击鼠标左键,在弹出的对话框中点击NodeFinder,选择Filter列表中预综合(Pre-synthesis)或后布局布线(Post-fitting)或全部(all)的类型,点击其右上方的list,出现该类型的所有节点。点击中间的双右方向键,所有信号出现在右方SelectedNodes栏中,确认后返回波形文件。

③参照1.4.4节以时钟脉冲方式对输入信号a、b进行编辑,使之具有“00”、“01”、“10”、“11”4种状态,保存波形图文件。④参照1.4.5节对半加器进行功能仿真。打开QuartusⅡ的工具栏“Tools”,在弹出的对话框中选择仿真工具“SimulatorTool”,在其对话框中的仿真模式SimulationMode中选择功能仿真“Functional”,点击其右方的“GenerateFunctionalSimulationNetlist”框,QuartusⅡ将产生设计文件的网表。选择“Overwritesimulationinputfilewithsimulationresults”,点击下方的“Start”框,启动仿真器。仿真结束后点击“Open”框,返回波形文件,对照预习所列的半加器真值表验证仿真结果。

(4)创建半加器逻辑符号。参照1.3.4节“2.根据设计源文件创建元件符号”,根据半加器图形设计文件创建模块符号。选择主菜单“File”

“Create/Update”

“CreateSymbolFilesforCurrentFile”,在本工程项目中生成半加器逻辑符号。

(5)设计全加器电路:

①重新建立一个图形文件,并参照1.2.3节2中有关“修改文件层次”的内容,将其设置为顶层文件。

②调用器件库中“project”栏下的半加器符号,采用两个半加器和一个二输入或门(符号名称为or2),设计全加器电路。

③在电路的输入、输出端分别安置3个“input”和2个“output”符号,定义端口名。④新建矢量文件或在原半加器矢量文件中根据全加器端口修改设置观察节点。按3位二进制的8个状态设置输入波形,进行功能仿真。由于电路结构改变,需要重新产生网表文件,注意矢量文件名是否正确。仿真正确后创建全加器逻辑符号。

(6)若采用LP—2900开发装置,增加一个输出端口符号output控制发光二极管的阴极公共端COM。导入电源符号“Vcc”连接COM输出端口使之为高电平(经外部反相器使发光二极管阴极为低电平)。

(7)根据预习所查阅的FPGA端口编号,参照1.5.1节为全加器分配引脚编号。

(8)点击文件上方的快捷键,编译(Compilation)工程。若有错误提示,在信息窗口中双击第一条错误信息,可以在设计文件中定位错误,修改错误,直至编译通过。

(9)点击文件上方的快捷键,下载编程文件“<项目名>.sof”。对照全加器真值表检查设计结果。2.1.5思考问题

(1)如何用2个异或门和3个与非门实现全加器?列出逻辑表达式。

(2)如何用n个全加器实现n位二进制数的加法?

2.2多位串行进位加法器设计

2.2.1设计实例

1.设计要求

在2.1节的基础上,利用全加器和半加器的逻辑符号设计一个两位串行进位加法器电路。相加结果用七段数码显示器以十进制形式显示。

2.硬件环境

设计可以在FPGA开发装置上实现,两个两位的二进制加数由4个按键输入。

若采用DE2开发板实现设计,其LED数码管为共阳显示器,采用静态驱动方式,每个显示器的七个段控制a~g及小数点dp分别输出。

若采用LP—2900开发装置实现设计,其LED数码管为共阴显示器。6个显示器的7个段控制a~g及小数点dp分别对应相连,各显示器的共阴极分别由一个3—8线译码器74138的输出Y0~Y5控制。译码器的3位输入码分别由FPGA的I/O端口DE3、DE2、DE1控制,如图2-2-1所示。图2-2-1LP—2900开发装置FPGA与LED数码显示器的电路连接

3—8线译码器的3位输入码DE3、DE2、DE1为“000”~“101”时,输出Y0~Y5中有一个为0,FPGA的a~g端口将控制共阴极为0的数码管显示。比如,当DE3、DE2、DE1为“011”时,Y3=0,数码管C4显示。由于本设计只需一位显示,所以可任意选择DE3、DE2、DE1为“000”~“101”中的一组码。采用DE2开发板实现设计,可任选8个LED数码管中的一个显示运算结果,不需要控制DE3、DE2和DE1脚。2.2.2设计原理分析

1.多位串行进位加法器的逻辑功能

多位串行进位加法器采用多个全加器构成。每个全加器负责一位二进制数的运算,3个输入分别为本位的被加数、加数和低位的进位输出。每个全加器产生本位的和输出以及向高位的进位。

2.LED七段显示器电路原理

LED七段显示器内部由8个发光二极管组成,七个段划和一个小数点,位置排成“—.”形。八个发光二极管的连接方式有共阴接法和共阳接法两种。共阳接法是所有发光二极管的阳极都接在一起,形成一个由高电平驱动的公共端COM,各管的阴极由低电平有效的段码信号a~g控制。共阴接法则相反,所有发光二极管的阴极连接成公共端COM,由低电平驱动,而各发光二极管的阳极由高电平驱动。图2-2-2表示了七段共阴显示器的内部电路原理、外引线排列图、各发光二极管在数码段中的排列位置以及以7个线段亮、灭构成的十进制显示符。各段发光二极管正向偏置时发光,比如,当公共端COM为低电平、二极管阳极b、c为高电平、其他阳极端为低电平时,共阴七段数码管显示十进制数符“1”。图2-2-2七段共阴显示器的内部原理、外引线排列图

3.七段显示译码器逻辑功能

n位加法器产生的和输出为n+1位二进制数,而七段数码管是以线段方式显示十进制数符,所以加法运算的和需要经过译码显示驱动才能控制数码管。七段显示译码器件有多种型号,比如7447是输入BCD码、输出控制七段共阳显示器的译码驱动器件;而控制共阴七段显示器的相似类型器件是7448。7448的逻辑符号如图2-2-3所示,表2-2-1列出了其逻辑功能。图2-2-37448逻辑符号

(1) BIN:消隐控制,低电平有效。

当BIN有效时,无论其他输入如何,所有段划输出控制均无效(低电平),显示器灭显。

(2) LTN:试灯控制,低电平有效。

当BIN不加输入或接高电平时,若LTN有效,则所有段划输出控制均为高电平(无论输入如何),显示器显示“8”。可测试显示器是否正常。

(3) RBIN:灭零控制,低电平有效。

当LTN无效,BIN/RBON作为输出(不加输入),RBIN接低电平时:

若输入码为“0000”时,所有输出无效,灭显(灭0),同时RBON输出低电平;

若输入码为1~9,正常显示,RBON输出高电平。

所以可用RBON控制RBIN作为顺序灭零控制。当希望多位数字的高位零和小数点后低位的零不显示时,可将最高位和最低位七段译码器的RBIN接低电平、RBON接相邻低位(整数)或相邻高位(小数)译码器的RBIN。则当最高位(小数点后最低位)为“0”时,所有的顺序“0”全部灭显,只显示有效数字。在QuartusⅡ的图形编辑器中,将集成器件的数据输入端悬空默认为输入“0”、使能端悬空默认为接有效电平、其他控制信号(如7448的灭显BIN、试灯LTN或触发器、计数器的复位、置数信号)悬空都默认为无效电平,以便不使用这些输入端时简化电路连线。2.2.3参考设计思路

采用一个全加器和一个半加器分别对两位二进制数的高位和低位进行加运算。半加器产生的进位输出信号作为全加器的进位输入信号。全加器的两个输出CO、S1及半加器的和输出S0构成一组BCD码的低3位信号,通过七段显示译码器转换成7个段输出控制信号,控制FPGA开发装置上的LED七段显示器。参考电路原理框图如图2-2-4所示。本例中译码器件的控制信号LTN、RBIN、BIN以及输入最高位码可以悬空。

图2-2-4二位加法器参考设计框图2.2.4设计预习准备

(1)分析两位加法器的输出最大值是多少?

(2)列出两位加法器的真值表,画出电路原理图。

(3)根据所用FPGA开发装置确定显示相加结果的显示控制电路以及七段显示译码器件的型号。若使用LP—2900开发装置,可任选一个数码管显示相加结果。并根据所选数码管确定共阴极译码控制信号DE3、DE2、DE1的逻辑电平。

(4)查阅所使用开发装置的FPGA端口协议,确定各输入、输出的引脚编号。注意区别两个二进制数(A1、A0和B1、B0)分别由哪两个按键设置,哪两个是高位数A1、B1,哪两个是低位数A0、B0。

(5)阅读参考设计步骤,了解设计流程。2.2.5参考设计步骤

(1)建立项目工程并添加半加器和全加器设计源文件。

参照1.2.2节建立新的项目工程,当第3步出现如图1-2-6的对话框时,点击“Filename”栏旁的浏览按钮,打开2.1节创建的全加器项目目录,查找选择半加器和全加器设计源文件,添加入本项目。

(2)设计两位加法器电路。

①参照1.2.5节新建图形文件。

②参照1.3.2节调用半加器和全加器逻辑符号。

在如图1-3-2的Symbol选项框中点击左中部位置“Name”栏旁的浏览按钮,查找全加器项目目录下分别以半加器(全加器)设计源文件为名、扩展名为bsf的文件,在选项框右方出现半加器(全加器)逻辑符号,放置在图形文件编辑区。

③导入4个输入端口符号和3个输出端口符号作为加法器输入、输出。连接加法器电路并定义端口名A1、A0、B1、B0、CO、S1、S0。

④对电路进行分析与综合(Analysis&Synthesis)。

(3)参照1.4.4节仿真二位加法器电路。

①参照1.4.2节新建一个矢量波形仿真文件。

②参照1.4.3节设置仿真观察点。分别把输入信号A1、A0和B1、B0,输出信号CO、S1、S0组合成数组A、B、S,显示方式为“UnsignedDesimal”(无符号十进制)。

③参照1.4.4节以计数方式对输入信号组A、B进行波形编辑,使每组分别有“0”、“1”、“2”、“3”4种数值,并组合成16种状态。保存波形图文件。

④参照1.4.5节对项目进行功能仿真。仿真结束后返回波形文件,对照预习所列的两位加法器真值表验证仿真结果。

(4)仿真正确后去掉加法器的3个输出端口CO、S1、S0,输入预习准备的七段显示译码器符号。将译码器的低3位输入C、B、A与加法器的3个输出相连接,最高位输入D可以悬空(默认为0)。

(5)根据预习准备的内容设计显示控制电路。若采用LP—2900开发装置,增加3个输出端口控制3—8线译码器的输入DE3~DE1。根据所选显示器连接3个输出端口的逻辑电平。导入符号“Vcc”连接输出“1”的DEi端口,导入符号“GND”连接输出“0”的Dei端口。

(6)根据预习所查阅的FPGA端口编号,参照1.5.1节为加法器分配引脚编号。

(7)点击主工具栏快捷图标,编译(Compilation)工程。若有错误修改设计。

(8)点击主工具栏快捷图标,下载编程文件“<项目名>.sof”。根据预习所列的二位加法器真值表检查设计结果。2.2.6思考问题

(1)两位加法器是否可以用两个全加器构成?低位全加器的进位输入如何连接?

(2)分析4位加法器的输出最大值是多少?若以十进制方式显示运算结果要用几个七段数码管?

2.3代码转换电路设计

2.3.1设计要求

1.设计要求

采用集成4位加法器74283设计一个代码转换电路,可以根据控制键状态进行余3码与8421BCD码的相互转换。待转换码由按键输入,输出码用发光二极管指示,并输出一位进位或借位信号。

2.硬件环境

设计可以在FPGA开发装置上实现,比如DE2或LP—2900。待转换码的输入变量用按键SWi设定,按下时为“1”;输出码控制LED发光二极管,输出为“1”时LED亮。

LP—2900开发装置上LED发光二极管L1~L12的共阴极端受FPGA的I/O端口COM控制,如2.1节中的图2-1-1所示。因此,设计时要使COM端口置高电平Vcc。2.3.2集成加法器原理

集成4位加法器74283有两组4位的二进制数输入A(A4~A1)和B(B4~B1),并有进位输入Cin,逻辑符号如图2-3-1所示。74283实现A加B加Cin的运算,并输出4位二进制运算和S(S4~S1)及进位输出Cout。比如,当输入A为“1101”、B为“0110”、Cin为“1”时,输出S为“0100”,Cout为“1”。图2-3-1集成4位二进制加法器74283逻辑符号2.3.3参考设计思路

余3码和8421BCD码都是表示0~9共10个十进制数符的4位二进制编码。8421BCD码是有权码,其编码中各位二进制数代表的位权分别是8、4、2、1。每组8421BCD码表示的十进制数符等于其编码中为“1”的位所代表的权值之和。比如十进制数符“5”的8421BCD码是“0101”。余三码是无权码,但若定义其编码中各位二进制数代表的位权仍然是8、4、2、1,则每组余三码表示的十进制数符等于其编码中为“1”的位所代表的权值之和再减3。比如十进制数符“5”的余三码是“1000”。所以,表示同样十进制数符的8421BCD码和余三码码值相差3。考虑到二进制减法可以采用加补码的方式实现,所以采用4位集成加法器74283实现代码转换电路。当输入码为8421BCD码时,利用控制键X的状态产生加数“0011”使输入码加3后输出余三码;当输入码是余三码时,利用控制键状态产生“0011”的补码“1101”,使输入码减3(加3的补码)后输出8421BCD码。参考电路框图如图2-3-2。图2-3-2代码转换电路框图2.3.4设计预习准备

(1)预习集成4位加法器74283的功能。

(2)列出余三码与8421BCD码对应关系表。

(3)考虑如何利用控制键状态产生两个不同的4位二进制数“0011”和“1101”。

(4)设计电路,画出原理图。

(5)针对所使用FPGA开发装置,选择输入按键和输出发光二极管,查阅FPGA端口编号表,确定各输入、输出端口的引脚编号。2.3.5参考设计步骤

(1)输入设计原理图。

(2)对项目进行分析与综合。

(3)仿真设计电路,验证代码转换功能是否正确。

(4)分配引脚,编译下载,根据预习所列的代码转换真值表检查设计结果。2.3.6思考问题

(1)能否对输入码进行鉴别,防止输入伪码。

(2)能否采用其他器件实现代码转换?比如译码器74138或数据选择器74151。

2.4BCD码优先编码电路设计

2.4.1设计要求

采用一片集成8—3线优先编码器74148设计8421BCD码优先编码器,输入I0~I9代表0~9十个数字的按键信号,高电平有效,数字越大优先级别越高。输出的BCD码用4个发光二极管指示,反映当前优先级别最高的有效按键输入,并输出一个状态指示灯Yex指示有无按键作用,高电平有效。2.4.2集成8—3线优先编码器74148的逻辑功能

集成8—3线优先编码器74148的输出为3位二进制码,可以表示代表8个不同信息的输入信号。为了便于输入信息和输出码位的扩展,74148还有一个使能输入EIN和一个使能输出EON、一个状态输出GSN。74148的逻辑功能如表2-4-1所示。由表2-4-1可见,74148有以下特点:

(1)输入信号为低电平有效,优先级别按7~0顺序降低。

(2)输出码为反码,各位取反后的权值之和等于所表示的输入端序号数。比如输出码为“000”时表示输入7N有效;输出码为“011”时表示输入4N有效。

(3)输入使能低电平有效,当EIN为高电平时,无论输入0N~7N是什么状态,输出端都总为高电平。

(4)当输入使能EIN有效,而输入0N~7N都无效时,输出使能EON有效,为低电平。但输出码和状态指示都为高电平,表示输出码无效。

(5)当输入0N~7N中至少一个有效(低电平)时,状态指示GSN有效(低电平)。所以当输出码为“111”而GSN为低时,表示输入0N有效。2.4.3参考设计思路

设计要求用8421BCD码(4位二进制)指示代表0~9十个输入(I0~I9)中有效的一个,优先级别由9至0顺序降低,采用8—3线优先编码器74148实现。由于74148只有8个输入、3位二进制反码输出,所以需要扩展2个输入、1位输出,并解决扩展输入的优先级别和输入有效电平、输出码取反问题。输入电平和输出码反相可采用反相器、与非门、或非门实现。当I9或I8有效时,输出最高位码为“1”,否则为“0”。所以可利用74148的状态指示GSN形成最高位输出码,并利用I9或I8控制最低位码以区别“1001”和“1000”。而BCD编码电路的状态指示Yex可利用74148的GNS和EIN综合。参考电路框图如图2-4-1。图2-4-1优先编码器电路框图2.4.4设计预习准备

(1)根据集成8—3线优先编码器74148的逻辑功能,考虑电路设计。如果采用参考设计方案,列出扩展输入I9、I8和74148的使能输入EIN、状态指示GSN的逻辑关系表。画出电路原理图。

(2)针对所使用FPGA开发装置,选择输入按键和输出发光二极管,查阅FPGA端口连接协议,确定各输入、输出端口的引脚编号。2.4.5参考设计步骤

(1)输入设计原理图。

(2)对项目进行分析与综合。

(3)建立仿真文件对设计电路进行功能仿真。输出信号编组构成8421BCD码,验证按键变化时代码转换功能是否正确。

(4)分析与综合通过后分配FPGA引脚,输入端口锁定为代表I0~I9的10个按键,输出端口锁定5个LED发光二极管。注意记录按键的优先顺序,并且代表各位编码的发光二极管应该按位序高低从左到右依序排列,状态指示可以位于最左边。

(5)编译通过后下载,从I0~I9逐个按下按键,检查编码及优先级控制是否满足设计要求。2.4.6思考问题

(1)为什么需要设置状态指示Yex?

(2)如果电路需要有使能输入和使能输出,可以如何设计?

(3)如果希望用两片74148设计16—4线优先编码器,画出电路原理简图,标出器件间的连线和输入、输出信号。

2.5脉冲分频选择电路设计

2.5.1设计要求

(1)设计一个8级倍率为10的分频电路,输出频率分别为1Hz、10Hz、100Hz、1kHz、10kHz、100kHz、1MHz、10MHz8组占空比为50%的脉冲信号。

(2)设计一个8输入、8输出的信号选择、分配电路,通过按键选择8组不同频率的脉冲信号并分配给对应的8个输出控制发光二极管。2.5.2设计原理分析

1.脉冲信号分频

本节要求设计输出8级频率差为10倍的分频电路,可采用十进制计数器级联实现。集成十进制计数器的类型很多,比较常用的有74160、74162、74190、74192和7490等。

7490是二—五—十进制加计数器,片上有一个二进制计数器和一个异步五进制计数器,其器件符号如图2-5-1所示。图中QA为二进制计数器的输出;QB~QD为五进制计数器输出,位序从高至低依序为D、C、B。CLKA和CLKB分别是两个计数器的脉冲输入端,下降沿触发有效。CLRA和CLRB是两个计数器的复位清零端,同为高电平时有效;SET9A和SET9B分别是两个计数器的置9控制端,当同为高电平时,QD、QC、QB、QA被预置为“1001”。7490的逻辑功能如表2-5-1所示。 图2-5-17490器件符号

7490片上的两个计数器级联后可实现十进制计数器。当计数脉冲CP控制二进制计数器的时钟CLKA,并以二进制计数器输出QA控制五进制计数器的时钟CLKB,即构成8421BCD码十进制计数器,输出码从高位至低位顺序为QD,QC,QB,QA。在每个计数脉冲的下降沿QA翻转;而在QA的下降沿,五进制计数器加1。每10个计数脉冲

QD~QA状态循环变化一周,计数时序波形如图2-5-2(a)

所示。如果计数脉冲CP控制五进制计数器的时钟CLKB,并以五进制计数器的最高位输出QD控制二进制计数器的时钟CLKA,即构成5421BCD码十进制计数器,输出码从高位至低位顺序为QA、QD、QC、QB。在每个计数脉冲的下降沿五进制计数器加1;而每个QD的下降沿QA翻转。每10个计数脉冲周期计数器输出状态循环一周,计数时序波形如图

2-5-2(b)所示。图2-5-27490分频信号波形显然,两种连接方式的计数器最高位输出信号频率都为计数脉冲频率的1/10,但前者分频信号QD的占空比为20%(8个CP周期为低电平、2个为高电平),后者分频信号QA的占空比为50%(5个CP周期为低电平、5个为高电平)。

与7490片内计数器的级联原理相同,利用两片十进制计数器级联,可构成百分频电路。同理,多片十进制计数器级联可构成千分频、万分频……。计数器的级联方式可参考2.9.2节。

2.脉冲信号选择

脉冲信号选择可以采用三态门或数据选择器实现。三态门tri具有使能控制端,功能类似由使能控制的电子开关,但只允许通过数字信号。当使能无效时,逻辑门输出高阻状态,相当于开关断开。当多个三态门输出并接时,可通过分时选通各门的使能实现信号选择。三态门构成的数据选择电路要注意避免有两个以上的使能同时有效,否则将造成短路导致信号混乱甚至损坏器件。数据选择器(Multiplexer)是多输入、单输出的逻辑器件,由n位地址码控制从2n个数据输入中选择一个输出。若n=2,则有2位地址选择信号B、A,可从4个数据输入信号D3~D0中选择一个输出至Y,称为四选一数据选择器。其功能类似于由B、A控制的单刀四掷数字开关,如图2-5-3所示。图2-5-3四选一数据选择器功能示意图

74151是八选一数据选择器,有8个数据输入D0~D7供选择,地址码位序为C、B、A,逻辑功能如表2-5-2所示。其中,G为使能控制,低电平有效;Y、W为两个互补的输出。当使能有效时,根据地址码CBA的码值i,输出Y等于不同的输入Di。若CBA为“101”,则Y=D5,W=

5。

3.脉冲信号分配

脉冲信号分配可以采用数据分配器、二进制译码器和与门、或门等。

数据分配器(Demultiplexer)又称多路分配器。从逻辑功能看,与数据选择器恰恰相反,数据分配器只有一个数据输入端,但有2n个数据输出端。根据n位地址码控制把数据输入分配到2n个数据输出端中的某一个去。若n=2,则有2位地址码B、A,控制输入信号分配给4个数据输出端,称为1—4线数据分配器。其功能也类似一个由B、A控制的单刀四掷数字开关,如图2-5-4所示。图2-5-41—4线数据分配器利用二进制译码器的使能输入可以实现数据分配功能。74138是3—8线二进制译码器,具有3位二进制码输入C、B、A和8个低电平有效的开关量输出Y0~Y7,另外还有一个高电平有效的使能输入G1和两个低电平有效的使能输入G2A和G2B,逻辑功能如表2-5-3所示。由于74138的输出端Y0~Y7为低电平有效,具有反相逻辑功能。所以,如果将8个译码输出Y0~Y7作为8个数据输出通道,3个译码输入C、B、A作为通道地址分配控制,则应选择低电平有效的使能输入G2A或G2B作为信号输入端D。输入信号D将根据地址码CBA的码值从不同的通道Yi输出。比如,当CBA为“001”时,若D为高电平(H),根据表2-5-3第一行,Y1为高电平(H);若D低高电平(L),根据表2-5-3第4行,Y1为低电平(L),即输入信号D被分配到输出端Y1。而其他数据输出端Y0和Y2~Y7都始终是高电平(H),与数据输入D无关。同样,当CBA为“101”时,数据输入信号D被分配到数据输出端Y5。

4.选择、分配控制

信号的选择、分配码可以由8个按键独立控制或由3个按键编码控制,也可以通过两个按键依序切换。比如开发装置LP—2900的F区有两个脉冲键UP和DOWM,可以作为信号从低频向高频切换(UP)或高频向低频切换(DOWN)。由于选择通道和分配通道是顺序变化的,所以控制码应该按二进制数序变化。采用3位二进制可逆计数器可以实现控制码状态按数序递增或递减。可逆计数器可以是双脉冲输入方式,由UP键控制加计数,DOWN键控制减计数,同时要考虑按键消抖动问题(参考3.1节数字单稳态电路功能)。2.5.3参考设计方案

根据设计原理,拟采用7490构成5421BCD码十进制计数器实现十分频电路,将FPGA开发装置上的基准时钟OSC分成10MHz~1Hz共8个10倍频脉冲信号。信号选择采用数据选择器74151,信号分配采用3—8线二进制译码器74138。选择、分配控制方式由设计者自选。参考方案原理框图如图

2-5-5所示。图2-5-5脉冲分频、选择、分配电路参考设计方案原理框图2.5.4设计预习准备

(1)设计可以在FPGA开发装置上实现。数据选择器和数据分配器的控制输入用按键SWi设定;基准脉冲信号OSC的频率由开发装置决定,比如LP—2900装置上的基准时钟频率为10MHz,DE2开发板上有两个时钟信号,分别为27MHz和50MHz。

(2)选择合适的分频计数器、数据选择和数据分配器件构成电路。如果采用参考方案,复习集成计数器7490、数据选择器74151和译码器74138的逻辑功能。

(3)根据分频计数器触发有效沿、计数方式考虑级联方法。如果计数器有进/借位溢出可以利用,要考虑信号逻辑匹配问题;如果计数器没有进/借位溢出(如7490),可以利用计数器的最高位输出作为进/借位信号实现级联。列出级联逻辑关系。

(4)如果采用74151实现数据选择,信号可以从Y或W输出。采用74138实现信号分配时,信号可以从G1或G2A、G2B输入。考虑整个电路的连接,画出电路原理图。

(5)针对所使用FPGA开发装置,选择输入按键和输出发光二极管,查阅FPGA端口编号表,确定各输入、输出端口的引脚编号。若采用LP—2900实现设计,建议8个输出控制其面板上具有频率标识的发光二极管L27~L34。需要注意这8个发光二极管的连接方式如图2-2-1所示,阴极连在一起,由

3—8线译码器74138的输出Y6控制。当该74138输入码为“110”时,L27~L34才可能被点亮。所以,须将LP—2900装置上FPGA端口DE3、DE2内接高电平Vcc,DE1内接低电平GND。2.5.5参考设计步骤

(1)设计10分频电路,进行功能仿真,验证输出信号与计数脉冲是否满足10分频关系,分频信号占空比是否为50%,记录仿真波形。

(2)设计8级10分频器,将FPGA开发装置上的基准时钟分频后输出10MHz,1MHz,100kHz,10kHz,1kHz,100Hz,10Hz,1Hz共8个频率的信号。创建成一个通用逻辑符号div8在以后需要不同频率信号的设计项目中使用。

(3)设计信号选择和信号分频电路,通过3个输入端口将div8器件输出的8个频率信号分配给不同的输出端口。

(4)分析与综合通过后分配FPGA引脚,输入端口根据选择、分配控制锁定为若干个按键,8个输出端口锁定8个LED发光二极管。编译通过后下载,按下按键观察实验效果。2.5.6思考问题

(1)分析采用三态门和数据选择器实现脉冲信号选择各有什么优点?

(2)采用74138实现信号分配时,如果信号D从高电平有效的使能端G1输入,分配到Y0~Y7的输出信号与D能否满足同相关系?

(3)若希望能将8个输入通道中的任何一路信号选择并分配到8个输出中的任何一个通道中去,电路应做哪些修改?

2.6汽车尾灯控制电路设计

2.6.1设计要求

用6个发光二极管模拟汽车尾部左、右两侧的3个尾灯,用开关模拟左转、右转、刹车、倒车和检查控制。当汽车处于左转或右转状态时,左侧或右侧的3个汽车尾灯按照左循环或右循环的顺序以1Hz的频率依次轮流点亮。当刹车键按下时,汽车所有的尾灯同时长亮。当倒车键按下时,汽车所有的尾灯以1Hz的频率闪烁,同时蜂鸣器以0.5s响、0.5s停的方式鸣响。4个按键优先级别最高的为倒车。若转弯键和刹车键同时按下,转弯侧的灯轮流循环亮,另一侧的灯长亮。若左、右转按键同时按下,做刹车处理。2.6.2参考设计思路

分析设计要求可知,电路主要根据3个按键对两组6个发光二极管进行控制。发光二极管的点亮模式有3种:循环轮流点亮、闪烁、长亮。

发光二极管循环轮流点亮可以采用移位寄存器产生的序列脉冲信号或数据分配器依序分配的脉冲信号控制,闪烁点亮和蜂鸣器鸣响可以采用一定频率的脉冲信号控制。考虑到移位寄存器初始状态预置和状态切换控制不便,拟采用计数器控制译码器实现电路。左、右两组尾灯的控制模式对称,所以可采用相同的控制电路。每组尾灯有3路输出,采用三进制计数器控制2—4线译码器74139m或74139o实现,前者使能控制为高电平有效,后者使能控制为低电平有效。当使能无效时,74139的4个输出都为高电平;当使能有效时,根据译码输入B、A的码值i输出Yi为低电平。74139o的逻辑功能如表2-6-1所示。

由表2-6-1可见,如采用74139的输出Y0~Y2反相后控制3个尾灯,当使能G有效时,可由计数器控制译码输入B、A按“00”、“01”、“10”状态变化,则3个尾灯轮流依次点亮。若使能G无效,译码器输出全为高电平,可采用逻辑门由刹车键控制发光二极管全亮或由倒车键选通脉冲信号控制发光二极管闪烁。采用20Hz至20kHz的音频脉冲信号控制蜂鸣器,可以使蜂鸣器鸣响,信号频率越高,音调越高。本设计要求在倒车时,蜂鸣器以0.5s的间隔鸣响,可在刹车键按下时,通过逻辑门控制产生如图2-6-1的脉冲信号波形驱动蜂鸣器。一组尾灯控制的参考设计方案原理框图如图2-6-2所示。图2-6-1倒车时蜂鸣器控制信号波形图2-6-2尾灯控制参考设计方案原理框图2.6.3设计预习准备

选择按键有效电平。如果自拟设计方案,考虑设计细节,画出电路框图。如果采用参考设计方案,思考以下问题:

(1)列出4个按键与译码器使能G的控制逻辑、闪烁脉冲、蜂鸣器控制脉冲信号的选通逻辑以及发光二极管控制逻辑的关系表。

(2)采用触发器或集成计数器设计三进制计数器,画出电路图。

(3)根据需要的脉冲信号频率和所用FPGA开发装置的基准时钟OSC确定分频系数。设计满足分频率及信号占空比的分频电路。

(4)考虑译码器的使能应该由哪个按键控制。

(5)当译码器使能无效、输出全高时,怎样使倒车键按下时1Hz脉冲信号可以被允许通过逻辑门控制发光二极管和蜂鸣器,而刹车键按下时灯全亮。

(6)如何满足倒车最优先操作?

(7)当左、右转弯键同时按下时,电路如何作刹车处理?

(8)当控制电路相同时,如何使左、右转弯时灯循环点亮方向不同。

(9)针对所使用FPGA开发装置,选择输入按键和输出发光二极管,查阅FPGA端口编号表,确定各输入、输出端口的引脚编号。若采用LP—2900实现设计,建议采用D区的发光二极管L13~L15、L20~L22作为左、右两组尾灯。注意这些发光二极管的连接方式与图2-1-1中L1~L12相似,阴极连在一起,由FPGA的端口Dice_COM控制,设计时需要在片内将该端口接高电平Vcc。2.6.4参考设计步骤

(1)输入三进制计数器电路和译码器电路。译码器的使能接有效电平。分析与综合通过后进行功能仿真,输出编组显示波形,验证三路输出能否按设计要求循环变化。

(2)输入逻辑门控制电路和译码器使能控制电路。分析与综合通过后进行功能仿真,验证3个按键的控制功能是否正确。

(3)输入分频器电路。分析与综合后分配控制各输入、输出端口的FPGA引脚。

(4)编译通过后下载设计项目,观察结果是否满足设计要求。2.6.5思考问题

(1)能否采用逻辑门控制转弯时尾灯轮流点亮?

(2)尾灯闪烁时的亮度能否调节?

(3)如果采用移位寄存器实现设计,怎样解决初始状态设置问题?

2.7彩灯控制电路设计

2.7.1设计要求

具体要求如下:

(1)彩灯亮、灭变化节拍可有0.5s和0.25s两种周期。

(2)彩灯亮、灭变化有8种模式,每种模式可以有2~16种不同的亮、灭组合或按不同的方向移动,比如单向(左、右)循环移动或双向移动。

(3)每种模式执行16拍后依序改变,全部模式演示完毕后切换节拍周期。

(4)可以设置一个启/停控制键,按键后系统状态在运行和停止之间切换。也可不设控制键,上电后系统自动开始运行,停止运行必须断开电源。2.7.2设计原理分析

1.存储器设计与控制

存储器中含有的存储单元数称为字数(Numberofwords),每个存储单元(Word)中拥有的二进制信息位数(Bit)称为字长(Wordsize)。每个存储单元可以通过一组二进制编码访问,称地址码。地址码的位数n与存储单元数(字数)N

满足:N=2n

。在FPGA中,可以灵活选择字长和字数设计存储器。如果以存储器的数据输出直接控制彩灯,每位数据控制一个灯,则所需存储器的数据位数(字长)应该等于彩灯数。如果将彩灯变化的控制信息按模式分区域依地址码顺序存放在存储器各单元中,则存储器的字数应该大于等于彩灯变化的所有组合。存储区域的块数由模式数决定,每个区域内的存储单元数由相应模式中彩灯变化的组合数决定。改变存储器的高位地址切换彩灯变化模式,改变存储器的低位地址可实现同一模式的花色组合切换。所以,存储器的地址由计数器控制,计数脉冲周期为彩灯变化节拍时间。当计数脉冲输入后,低地址计数器状态按二进制数序周而复始循环变化,逐个寻址访问ROM的存储单元,依序输出存储信息控制彩灯有规律地亮、灭循环变化。改变计数器的脉冲频率,可以改变彩灯变化时间。改变存储器的高位地址,可以改变彩灯变化模式。如果发光二极管的数量较多,可以考虑将彩灯控制信息分组存放在存储器中。由控制逻辑分时读取ROM中的各组信息通过锁存器控制不同的发光二极管。比如40个彩灯的信息可以分5组,每组8位存放在5个存储单元中。每个节拍将5次读出的信息存入40位锁存器,控制彩灯点亮。也可不增加锁存器的数量而采用动态扫描点亮发光二极管的方式,使彩灯按组分时点亮,当扫描频率较高时人眼观察到的是稳定变化的彩灯亮灭组合。动态扫描的工作原理和电路结构可参见2.8节。

2.彩灯控制信息的编辑与数据格式

因为采用存储器存放彩灯控制信息,彩灯与存储器的连接方式决定了存储数据文件的信息存放格式。设12个彩灯从左到右的编号依次为L1,L2,L3,…,L12,每个灯由存储器的一位数据输出控制。存储器的12位数据输出D11~D0与所控制的灯序满足逆序关系,即D11控制L1,D10控制L2,D9控制L3,…,D1控制L11,D0控制L12。并设某模式的亮灯规律为连续3只灯亮并逐个向右移动循环变化,每拍移动一个灯位。即亮灯规律为L1,L2,L3→L2,L3,L4→L3,L4,L5→L4,L5,L6→L5,L6,L7→L6,L7,L8→L7,L8,L9→L8,L9,L10→L9,L10,L11→L10,L11,L12→L11,L12,L1→L12,L1,L2→L1,L2,L3。在ROM对应该模式的存储区域中存放的彩灯控制信息如表2-7-1所示。显然,该模式的彩灯亮灭组合为12个,需要12个存储单元存放控制信息,区域地址码至少为4位。其他有左移、右移、两侧向中央移动、中央向两侧移动等模式可以按相同的格式编辑数据信息。考虑到每种模式的组合数不一定相等,低地址计数器的位数可根据组合数最多的模式决定。当最大组合数为M时,最大区域地址码的位数(计数器的位数)n满足下式:若各模式中的信息组合数与模式演示的节拍数相同,可用低地址计数器的溢出信号触发高地址计数器控制模式切换;若各模式中的信息组合数不同,可在每个模式的存储区域末地址设置一个结束信息位,或设置1位标志表示结束信息。当存储器输出结束信息时使地址计数器复0或切换存储器高位地址改变彩灯模式。所有模式演示完毕,可利用高地址计数器溢出信号触发一个状态机改变节拍周期。2.7.3参考设计方案

参考设计方案的原理框图如图2-7-1所示。存储器的输出控制代表彩灯的12个发光二极管,存储器的地址由两个计数器控制。低地址计数器控制彩灯在某一模式中的亮、灭组合变化,溢出时触发高地址计数器改变彩灯演示模式;高地址计数器溢出时触发控制逻辑单元中的状态机翻转。数据选择器或三态门选择频率为2Hz或4Hz的节拍脉冲信号,选择信号由状态机控制。 图2-7-1彩灯自动控制电路参考设计方案原理框图2.7.4设计预习准备

(1)考虑设计方案,在所用FPGA开发装置上选择12个发光二极管模拟彩灯。

(2)拟定彩灯控制模式和各模式中的亮灭组合。参照表

2-7-1的数据形式,列出每种控制模式的数据组合,建议以12位二进制数表示。

(3)考虑怎样具体实现模式切换和节拍脉冲切换,怎样用一个按键控制彩灯的启动和停止。

(4)预习1.2.5节例1了解在QuartusⅡ中建立存储器初始化数据文件 *.Hex或 *.mif的方法。

(5)预习1.3.4节例2了解在QuartusⅡ中创建参数化只读存储器LPM_ROM的方法。

(6)根据所使用FPGA开发装置上的基准时钟频率,确定分频系数,设计分频电路。

(7)针对所使用开发装置上的FPGA端口协议,确定控制发光二极管的I/O端口引脚编号。2.7.5参考设计步骤

(1)创建设计项目Project。

(2)参照1.2.5节例1新建ROM初始数据文件 *.hex或 *.Mif。注意选定合适的字长(Wordsize)和字数(Numberofwords),存储数据显示方式(MemoryRadix)选择二进制(Binary)。根据预习拟定的彩灯控制信息表输入数据。校对完毕后保存,记录文件路径和文件名。

(3)新建图形文件。参照1.3.4节例2创建参数化只读存储器LPM_ROM元件,注意选择的字长(Wordsize)和字数(Numberofwords)应该与步骤2建立ROM数据文件匹配。在向导页面5(MegaWizardPlug-InManager-LPM_ROM[page5of6])中选择“Yes,usethisfileforthememorycontentdata”项,并在文件名(Filename)栏中浏览查找在步骤2中建立的数据文件。

(4)设计低地址计数器,连接计数器和存储器地址。注意,存储器的地址输入端口为总线方式,可以参照图1-3-4的方法以端口命名的方法连接计数器和存储器。计数器的脉冲输入端先设置一个输入端口input,存储器的输出连接一个12位宽的输出端口output。

(5)设计项目分析与综合通过后建立仿真波形文件,进行功能仿真。观察计数脉冲输入后存储器能否将模式0的16个组合信息正确输出,存储器输出波形以12位二进制编码形式显示。

(6)设计高地址计数器、节拍脉冲选择控制电路和分频电路。分析与综合通过后分配FPGA端口引脚编号。编译通过后下载,观察彩灯变化是否与设计一致。2.7.6思考问题

(1)根据你的设计,彩灯变化花色全部演示一遍需要多少时间?

(2)参考设计方案中的低地址计数器和高地址计数器能否合为一个7位的二进制计数器?如果各彩灯模式中的信息组合数不同,是否可以合并?

(3)若希望每种彩灯模式先以两种不同的节拍执行,然后再切换模式,电路可以如何设计?

(4)怎样控制n位低地址计数器按组合数M循环变化(M≠2n)?

(5)若需要控制24个发光二极管,采用12位ROM外扩锁存器实现控制,应怎样设计电路?需要增加哪些控制信号?

(6)怎样利用乐声中的节拍信号控制彩灯变化?

2.8动态扫描显示电路设计

2.8.1设计要求

设计一个4位LED数码显示动态扫描控制电路,显示4

位十进制数或4字母的单词,要求显示内容可以通过按键

切换。2.8.2设计原理分析

LED七段数码显示器的原理可参见2.2.2节,其内部有8个发光二极管,它们的阴(阳)极共接,称为共阴(阳)显示器。当共阴显示器的公共端接低(高)电平时,a~g七个段划和小数点dp由高(低)电平驱动,可以点亮相应的段。多位七段显示器的控制分为静态和动态扫描两种方法。静态驱动方法是将所有显示器的公共端都接有效电平,各位显示器的段控制信号互不相干,分别控制。这样,n位显示器需要7 × n个控制信号(不包括小数点)。比如DE2开发板上8个共阳七段LED显示管HEX0~HEX7采用静态驱动方式,需要FPGA的56个I/O口(HEX0[0]~HEX0[6],HEX1[0]~HEX1[6],…,HEX6[0]~HEX6[6],HEX7[0]~HEX7[6])对其进行控制。动态扫描方法是将所有显示器的各个段控制端(a、b…、g、dp)一一对应连接,而各显示器的公共端COM由位扫描信号分别控制。这样,n位显示器只需要8+n个控制信号(包括小数点)。比如,LP—2900开发装置上B区的6个共阴显示器采用动态扫描驱动方式,6个共阴端C1~C6通过一个3—8线译码器分时控制,电路原理如图2-2-1所示。这样FPGA只需要11个I/O口,其中8个控制段信号、3个输出二进制码(“000”~“101”)控制C1~C6。

1.动态显示扫描控制

动态扫描驱动电路中所有的显示器由相同的段信号控制,公共端有效的显示器将显示相同的字符。所以,要使各显示器显示不同的内容,必须控制它们的公共端分时轮流有效。每个显示器只在其公共端为有效电平时根据段码信号显示相应的字符,公共端无效时灭显。 比如,若LP—2900上FPGA端口DE3、DE2、DE1按“000”→“001”→“010”→

“011”→“100”→“101”→“000”循环输出二进制码,图2-2-1中的3—8线译码器74138将输出顺序脉冲扫描控制6个共阴显示器的公共端C1~C6,信号波形如图2-8-1所示。每路脉冲信号的周期为6个时钟周期,只有1个时钟周期为低电平,且低电平时间依序错开。由于各显示器的阴极端分时轮流选通,任意瞬时只有一个显示器的公共段为有效(低)电平,所以虽然所有显示器的阳极端对应共接,但FPGA输出的段信号a~h只能使当前阴极为低电平的那个显示器显示字符,而其他显示器都由于阴极为高电平而呈灭显状态。显然,根据位扫描时序同步输出各位显示器对应的段控制信号N1~N6,就能使它们逐位顺序轮流显示。C1控制的LED显示N1、C2控制的LED显示N2,……,C6控制的LED显示N6。图2-8-16位动态显示扫描信号时序动态扫描显示电路每位显示的时间为一个CP周期,显示扫描周期T为时钟周期的n倍(n为显示位数),每个显示器的显示时间为1/n。当扫描时钟CP较低时,因为轮流导通可能造成显示信息闪烁。但当扫描频率提高到使每个显示器每秒的导通次数多于50次(T<20ms)时,由于人眼的视觉暂留效应,就不会感觉显示器闪烁。但扫描位数过多时,显示亮度将受到影响。

2.显示译码电路

在数字电路中,数符、文字信息一般用二进制编码表示,信息数量N和编码位数n满足N<2n。比如,表示10个十进制数符0~9的二进制码有4位,称BCD码。LED七段显示器通过7个段形的发光二极管a~g显示数符或字母。因此,表示数符、文字信息的二进制编码需要通过显示译码器件译成段信号Ni(a~g)控制LED显示相应的字符。在2.2节中介绍的集成七段显示译码器件7447和7448可以将8421BCD码译成控制共阳或共阴数码管显示十进制数符的段信号,但器件输入非8421BCD码时,输出使数码管灭显或无意义。根据七段数码管的段划排列,除10个数符外,还可以显示英文字母A、b、C、d、E、F、H、J、L、P、q、U、y,加上灭显码,可以显示的信息量至少有24个,需要5位二进制码表示。若设5位二进制编码“00000”~“01001”表示十进制数符0~9;而二进制码“01010”表示字母A,“01011”表示字母b,……这样,如果需要显示字母等信息,必须设计一个显示译码器件,输入为5位二进制码,输出为a~g七个显示段控制信号。比如,当译码器输入二进制码为“01010”时,可以输出a、b、c、e、f、g有效、d无效,控制显示器显示“A”,共阴显示器的控制信号如图2-8-2所示。显然,七段显示译码器件具有典型的组合逻辑功能。在QuartusⅡ中,采用AHDL硬件描述语言的形式可以很方便地以列真值表的方法创建组合逻辑器件符号,具体方法参见1.3.4节例3。 图2-8-2显示“A”2.8.3参考设计思路

根据设计原理分析,动态扫描显示控制的关键问题在于产生顺序脉冲分时选通各显示器的公共端,并同步输出其段控制信号。在数字电路中,类似图2-8-1的时序波形可以采用移位脉冲发生器产生,也可采用计数器控制二进制译码器产生。若采用LP—2900开发装置,由于已在FPGA外部设置了3—8线译码器74138控制显示器的共阴极,因此只要采用计数器产生二进制计数信号控制译码器即能实现动态显示扫描。在LP—2900上实现4位动态扫描显示控制电路的参考设计方案原理框图如图2-8-3所示,图中虚线框内为开发装置上的固有器件,框外为FPGA中需要设计的部分。图2-8-3动态扫描显示电路参考设计方案原理框图本设计要求实现4位动态扫描显示,可以任选LP—2900装置上6位显示中的前4位或后4位显示。若采用六进制计数器产生“000”~“101”6组码控制74138,全部显示的选通信号轮流有效,可以使N1、N2为全“0”灭显前两位显示器或使N5、N6为全零灭显后两位。如果采用四进制计数器的输出控制DE2、DE1,并使DE3始终为0(端口接GND),则74138输入码A以“000”、“001”、“010”、“011”循环变化,输出控制C1~C4轮流为低电平,C5、C6始终为高电平,后两位显示器灭显,不必输出N5、N6信号。由于Ni必须在相应的Ci有效时同步输出,所以可采用控制产生Ci顺序脉冲的计数器同步控制数据选择器选择各位的显示码,经过显示译码输出七段控制信号Ni,同时选择该位的小数点控制信号控制显示器的dp端。比如,若需要显示4位十进制数字“42.75”,则各位显示码为E1~A1=“00100”;E2~A2=“00010”;E3~A3=“00111”;E4~A4=“00101”;dp1~dp4=“0100”。由于4个通道的显示码选择与4位显示器的扫描信号由计数器同时控制,所以当计数器输出DE2,DE1为“00”,C1有效,选择显示码E1~A1(E1、D1、C1、B1、A1)和小数点dp1;若计数器输出为“01”,C2有效,选择显示码是E2~A2和dp2,如此一一对应。2.8.4设计预习准备

(1)拟定显示码代表的显示字符,列出七段显示译码器的真值表。

(2)拟定四组希望显示的内容,比如任意4位十进制数或4字母以下的单词,如“HELP”、“JEEP”、“FLy”等,根据译码表列出显示码。

(3)预习1.3.4节,了解利用宏功能模块设计LPM参数化器件的方法。

(4)根据所用FPGA开发装置拟定设计方案,考虑各器件的连接关系。

(5)分析显示码选择器需要几个选择通道,每个通道的位宽是多少?

(6)选择扫描时钟频率,确定分频系数。

(7)针对所使用开发装置上的FPGA端口协议,确定控制输入、输出端口的FPGA引脚编号。2.8.5参考设计步骤

(1)新建设计项目project。

(2)新建AHDL文本文件,按1.3.4节例3的方法插入真值表模板“TruthTableStatement”,根据预习所列的七段显示译码表填入输入、输出逻辑关系。分析与综合通过后创建逻辑符号。

(3)新建图形文件,输入七段显示译码器逻辑符号,设计扫描控制计数器,计数脉冲先采用一个输入端口input控制。计数器输出控制扫描译码器,若采用LP—2900可直接控制输出端口DE3~DE1。

(4)选择合适的数据选择器或采用宏功能模块设计参数化数据选择器lpm_mux。选择器的数据输入设置输入端口组input。计数器输出控制选择器的选择输入端。

(5)分析与综合通过后建立仿真文件,设置数据选择器的输入显示码,进行功能仿真。观察扫描脉冲输入后,段控制信号输出是否符合设计初衷。功能仿真正确后创建4位动态扫描显示器逻辑符号,可在其他设计项目中调用。

(6)新建图形文件并设置为顶层文件,调入4位动态扫描显示器逻辑符号,显示码输入以参数化逻辑常量lpm_constant的形式设置或通过按键控制,要注意各位显示码在选择器的输入位置。设计分频电路。

(7)分析与综合通过后分配FPGA端口引脚编号。编译通过后下载,观察显示内容是否正确。2.8.6思考问题

(1)根据你的设计,每个显示器的显示切换频率是多少?每次的显示时间是多少?

(2)如果控制的显示器为共阳方式,电路需要作哪些修改?

(3)如果用设计好的4位动态扫描显示控制电路实现3位显示,是否可以?

(4)如果希望将显示码存放在存储器中,通过按键选择不同的显示内容,电路应如何设计?是否还需要数据选择器?存储器的字数和字长与什么有关?

2.9数值快速设置电路设计

2.9.1设计要求

设计一个数值快速设置电路,用两个按键UP和DOWM分别对4位十进制数进行递增或递减设置。要求设置过程中数值的变化速率随着按键闭合时间而增加。数值变化速率分为1Hz、2Hz、5Hz、10Hz、50Hz、100Hz、250Hz、500Hz共8级,按键闭合时间每增加1s递进1级。按键闭合时间超过8s后保持最高速率修改设置数值。2.9.2设计原理分析

设计要求通过按键对4位十进制数实现递加或递减修改,而且数值修改的速率可以改变。采用可逆计数器可以实现数值递增或递减。采用加计数器累计按键闭合时间,并根据计时值选择不同频率的脉冲信号控制可逆计数器计数,即可以改变数值修改速率。按键的闭合时间越长,选择的计数脉冲频率越高。

所以,电路需要解决的问题是:脉冲信号分频、按键闭合时间计时、计时值对脉冲信号频率的选择。

1.脉冲信号分频

脉冲信号分频可以采用计数器实现。n位二进制计数器的第i(i=1~n)位输出信号的频率是输入计数脉冲频率的1/2i,十进制计数器的溢出信号的频率是输入计数脉冲频率的1/10。

2.按键闭合时间计时

计数器的另一功能是计时。采用加计数器可以累计按键的闭合时间。当按键闭合后,计时器开始计数,闭合时间越长,计时器的计数值越大。当按键断开后,计时器清零。

3.脉冲信号选择

脉冲信号选择可以采用数据选择器实现。数据选择器的基本功能相当于一个由二值信号控制的单刀多掷开关。采用按键计时器的输出控制数据选择器的选择端,选择器的数据输入为各频率不同的脉冲信号。当计时时间不同时,数据选择器输出不同频率的脉冲信号控制数值设置。

4.计数器设计

由于设计要求设置的参数值通过七段LED显示器以十进制数符形式显示,为简化译码电路,可采用可逆十进制计数器实现数值的增、减计数设置。两个按键的闭合信号分别控制计数器进行加计数或减计数。

74系列的可逆十进制计数器有74190和74192。74190由电平信号DNUP区别计数方式,其真值表和波形图参见表3-2-2和图3-2-2。74192有两个脉冲输入DN和UP,分别控制计数器实现不同的计数方式,其功能表如表2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论