《本科PLD与数字系统设计第5章.pdf》由会员分享,可在线阅读,更多相关《本科PLD与数字系统设计第5章.pdf(190页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章设计实例第5章设计实例第第5章 设计实例章 设计实例5.1 实验开发板原理实验开发板原理5.2 设计实例设计实例第5章设计实例第5章设计实例5.1 实验开发板原理实验开发板原理5.1.1 实验开发板原理CPLD-A型数字系统实验开发板的核心芯片是CPLD或FPGA,整个实验开发板由两块印刷电路板组成。一块含有CPLD或FPGA芯片,当需要使用不同型号的CPLD或FPGA芯片时,只需要更换这块印刷电路板。第5章设计实例第5章设计实例另一块设置了以下几种电路:(1)LED数码管和显示驱动电路,可以显示6位有效数字。(2)LED点阵88显示电路,用于汉字或其他图案显示。(3)数/模转换电路,把
2、输入的数字信号通过T型电阻网络转换成模拟输出。如果与比较器相结合,可以构成模/数转换电路。(4)单片机控制电路,单片机通过与CPLD或FPGA芯片连接的数据传输线与地址选通信号线对其进行控制。第5章设计实例第5章设计实例(5)RS-232串行接口电路,实验开发板可以与计算机的串行接口进行通信。(6)标准时钟产生电路输出2 MHz、2048 Hz和8 Hz的时钟信号。(7)蜂鸣器及其驱动电路。(8)电平测试电路,可以通过发光二极管的亮灭直接判断被测信号电平的高低。(9)5 V稳压电源电路、防止外接电源极性接反的控制电路,只要能够提供7.5 V和500 mA电流的直流电源,均可作为该实验开发板的电
3、源。该实验开发板的原理框图如图5-1所示。第5章设计实例第5章设计实例图5-1 实验开发板的原理框图LED数码管及其驱动电路LED发光二极管88 LED点阵及其驱动电路按键和波动开关输入RS-232串口通信电路蜂鸣器及其驱动电路时钟产生电路CPLD(XC95108、XCS10、XC2S15、ispLSI1032或EPM7128)数/模转换电路编程接口电路电源稳压电路第5章设计实例第5章设计实例实验开发板的具体电路见附录A。当采用Xlinx公司的Spartan-系列FPGA芯片时,其供电电源电压为2.5 V,为了能够与其他电源为5 V的芯片的管脚相连接,XC2S15芯片的I/O供电电源电压接3.
4、3 V。XC2S15芯片的电源连接如图5-2所示。第5章设计实例第5章设计实例图5-2 XC2S15芯片的电源连接5 V器件Spartan-3.3 V器件3.3 V5 V3.3 V5 V3.3 V3.3 V2.5 VI/O电源第5章设计实例第5章设计实例5.1.2 XC2S15-5VQ100C的管脚连接1按键的连接XC2S15-5VQ100C的10个管脚分别与10个按键相连。按下按键Ki时,Ki为低电平,否则Ki为高电平。管脚与按键的连接如表5-1所示。第5章设计实例第5章设计实例表5-1 管脚与按键的连接第5章设计实例第5章设计实例2LED点阵的连接XC2S15-5VQ100C的管脚与LED
5、点阵(采用行共阳极,列共阴极的LED点阵)连接。XC2S15-5VQ100C的3个管脚分别控制3个行控制信号ROW0、ROW1和ROW2,当ROW0、ROW1和ROW2均为低电平时,选中LED点阵的第一行;XC2S15-5VQ100C的8个管脚分别控制8个列控制信号,其中COL1为低电平时,选中第一列。LED点阵的连接如表5-2所示。第5章设计实例第5章设计实例表5-2 LED点阵的连接第5章设计实例第5章设计实例3LED发光二极管的连接XC2S15-5VQ100C的8个管脚分别与8个红、黄、绿LED发光二极管的阳极相连,例如,当COL8为高电平时,最右边的一个发光二极管发光。LED发光二极管
6、的连接如表5-3所示。第5章设计实例第5章设计实例表5-3 LED发光二极管的连接第5章设计实例第5章设计实例4LED数码管的连接LED数码管是共阴极数码管,XC2S15-5VQ100C的3个管脚分别控制3个位选择控制信号ROW0、ROW1和ROW2,决定哪一个LED数码管显示数字;XC2S15-5VQ100C的8个管脚分别控制8个LED数码管的段码a1、g1、dp1。例如,当需要实验开发板上的左边第一个LED数码管显示数字1时,控制信号ROW0、ROW1和ROW2都置0,段码控制信号a1和b1都置1。如果要显示多个数字时,采用动态扫描的方式,位选择控制信号和段码控制信号相配合,显示正确的数字
7、。LED数码管的连接如表5-4所示。第5章设计实例第5章设计实例表5-4 LED数码管的连接第5章设计实例第5章设计实例5T形电阻网络的连接XC2S15-5VQ100C的8个管脚分别与T形电阻网络中的8个电阻相连,XC2S15输出数字信号,通过T型电阻网络转换成模拟信号,其中DA7是最高位,DA0是最低位,完成数/模转换。被测模拟信号与数/模转换后的信号相比较,产生CMP信号,XC2S15的第84管脚接收比较CMP信号,用于实现逐次比较式模/数转换器。T形电阻网络的连接如表5-5所示。第5章设计实例第5章设计实例表5-5 T形电阻网络的连接第5章设计实例第5章设计实例6单片机的连接XC2S15
8、的管脚与单片机的连接如表5-6所示。7时钟信号的连接时钟信号CLK1的输入频率为2048 Hz,CLK2的输入频率为8 Hz,CLK3的输入频率为2 MHz。时钟信号的连接如表5-7所示。第5章设计实例第5章设计实例表5-6 单片机的连接第5章设计实例第5章设计实例表5-7 时钟信号的连接第5章设计实例第5章设计实例8其他BUZZER为蜂鸣器控制信号,做串行口实验时,TxD作为发送信号,RxD作为接收信号。其连接如表5-8所示。第5章设计实例第5章设计实例表5-8 其他信号的连接第5章设计实例第5章设计实例5.1.3 编程接口编译并且通过后的熔丝图(*.jed)或bit流(*.bit)文件的编
9、程信息经过编程接口和下载电缆传送到CPLD或FPGA芯片。在CPLD-A型实验板与计算机的并行接口(DB25)之间的通信是由一个编程接口电路和一根扁平电缆来完成的,其连接方法如图5-3所示。第5章设计实例第5章设计实例图5-3CPLD-A型实验板与计算机的连接CPLD-A型实验板编程接口电路PC机并行接口TMSTCKTDITDO第5章设计实例第5章设计实例采用JTAG命令执行编程和校验。其中:信号TMS是模式选择控制信号;信号TCK是时钟信号;信号TDI与时钟信号相配合,将编程数据和指令送到在线可编程逻辑芯片;信号TDO是从在线可编程逻辑芯片中读出数据。下载电缆也可以自己制作,编程接口电路原理
10、图如图5-4所示。第5章设计实例第5章设计实例图5-4编程接口电路原理图 151 1324356789123456789 41N58170.01FVCCGNDTCKTDITMSVCCGNDCCLKD/PDINPROGFPGA编程接口U1U21471471 k1N5817100 VCC 6100 100 DONEU2215.1 kU1PROG231100 pF100 300 2DIN300 TMS_IN300 U1564100 100 100 pF100 pFU1121113 5CTRL300 U19810 3 20 25 8 11 12CLKGNDD6BUSYPEGNDSHIELDU2564U
11、29810U2111213300 100 100 pFU174HC125U174HC125计算机并行接口TDO第5章设计实例第5章设计实例5.2 设 计 实 例设 计 实 例5.2.1 汉字显示实验开发板上的FPGA型号为XC2S15-5VQ100C。1设计要求实现在LED点阵屏上显示单个汉字、字母和数字的功能,也能够实现汉字或字母上下左右移动的显示功能。第5章设计实例第5章设计实例图5-5 汉字“电”字的点阵字型87654321D7D0第5章设计实例第5章设计实例LED点阵屏上有64个发光二极管,在某一时刻LED点阵屏只有一行中指定的发光二极管发光。实验开发板上LED点阵屏采用共阳极发光二极
12、管,LED点阵屏有行信号和列信号。CPLD提供3个行控制信号为LED点阵屏的某一行提供电源电压;CPLD直接驱动LED点阵屏的列信号,如果要某一列的发光二极管亮,则该列驱动信号为低电平。例如要显示电子技术的“电”字的点阵字型,第一行的数据为11101111B,第二行的数据为00000001B,如图5-5所示。第5章设计实例第5章设计实例实验板上有一个标准时钟发生电路(由32 768 Hz石英晶体和一个14位串行二进制计数/分频器MC4060组成,提供2048 Hz和8 Hz时钟信号)。FPGA芯片利用实验开发板上的2048 Hz时钟,给实验开发板上的74LS138和行驱动电路提供2048 Hz
13、的行扫描信号;根据行扫描信号确定该行所需要的列信号,其具体设计方案如图5-6所示。其中实验开发板上的8 Hz时钟信号用于控制显示每一个汉字的显示时间。第5章设计实例第5章设计实例图5-6 汉字显示原理框图74LS138行驱动88 LED点阵屏38CPLD2048 Hz8 Hz列驱动883第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现汉字显示用VHDL编写一个显示汉字“电子”的程序由三个进程组成。其中:P1进程是一个二进制计数分频器,确定一个汉字显示的时间,输入信号为实验板上的8 Hz时钟信号clka;P2进程为实验开发板上的74LS138提供行扫描地址输出信号addr(0)add
14、r(2),进程的输入信号为实验开发板上的2048 Hz时钟信号clk;P3进程输出每一行的列数据信号data(0)data(7),该输出信号决定一行中的哪一个或几个发光二极管发光,该进程的输入信号是P2进程提供的行扫描地址输出信号。汉字“电子”的字型分别定义成常量roma和romb,这是两个由8个数组和8位矢量组成的常量。第5章设计实例第5章设计实例具体程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY disp ISPORT(clk:IN STD_LOGIC;clka:
15、IN STD_LOGIC;addr:INOUT STD_LOGIC_VECTOR(2 DOWNTO 0);data:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END;第5章设计实例第5章设计实例ARCHITECTURE disp_arch OF disp ISTYPE romtable IS ARRAY(0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0);CONSTANT roma:romtable:=romtable(11101111,00000001,01101101,00000001,01101101,00000001,11101111,
16、11100001);-汉字“电”的字型第5章设计实例第5章设计实例CONSTANT romb:romtable:=romtable(00000000,11111101,11111011,0000000011110111,11110111,11110111,11100111);-汉字“子”的字型第5章设计实例第5章设计实例SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP1:PROCESS(clka)-二进制计数分频器BEGINIF rising_edge(clka)THENq=q+1;END IF;END PROCESS P1;第5章设计实例第5章设计实例
17、P2:PROCESS(clk)-行扫描控制信号BEGINIF rising_edge(clk)THENaddr=addr+1;END IF;END PROCESS P2;第5章设计实例第5章设计实例P3:PROCESS(addr)-输出每一行的列数据信号BEGINIF q(3)=1 THEN data=roma(addr);-显示汉字“电”ELSEdata=romb(addr);-显示汉字“子”END IF;END PROCESS P3;END disp_arch;第5章设计实例第5章设计实例下面是显示汉字“电子”程序中使用到的信号及其对应的管脚。#PACE:Start of Constrai
18、nts extracted by PACE from the DesignNET clk LOC=P88;NET clka LOC=P91;NET addr LOC=P47;NET addr LOC=P46;NET addr LOC=P45;第5章设计实例第5章设计实例NET data LOC=P44;NET data LOC=P43;NET data LOC=P41;NET data LOC=P40;NET data LOC=P34;NET data LOC=P32;NET data LOC=P31;NET data LOC=P30;第5章设计实例第5章设计实例5.2.2 数字频率计1设计要
19、求设计一个有效位为4位十进制数的数字频率计。频率计电路原理框图如图5-7所示。第5章设计实例第5章设计实例图5-7数字频率计电路原理框图LED数码管驱动电路4位十进制计数器4位LED数码管计数闸门控制电路标准时钟发生电路计数器复位控制电路待测输入信号第5章设计实例第5章设计实例实验板上有一个标准时钟发生电路(由32 768 Hz石英晶体和一个14位串行二进制计数/分频器MC4060组成,提供2048 Hz和8 Hz时钟信号),为计数闸门控制电路提供一个标准8 Hz信号,连接到XC2S15-5VQ100C的91脚;计数闸门控制电路控制4位十进制计数器在时间T1=1 s内计数,计数的个数就是待测输
20、入信号的频率,在T2=1 s内停止计数,并且在7/8 s内保持计数值不变,显示数字频率值;计数器复位控制电路在每次开始计数之前的1/8 s内,产生复位信号,将4位十进制计数器的上次计数值清零,为下一次从零开始计数做准备。其时序图如图5-8所示。第5章设计实例第5章设计实例图5-8 时序图输入脉冲信号计数器清零信号计数允许信号(en)1 s7/8 s第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现数字频率计用VHDL编写程序实现数字频率计控制4个十进制计数器在单位时间内计数、停止计数和清零等逻辑功能。第5章设计实例第5章设计实例图5-9 数字频率计端口控制信号clkxclkrowle
21、d第5章设计实例第5章设计实例用VHDL编写程序实现数字频率计的端口控制信号,如图5-9所示。其中,xclk为待测的输入信号;clk为石英晶体(32 768 Hz)分频后的8 Hz标准信号,作为产生1 s信号的输入信号;led为LED数码管的段码和小数点控制信号;row为位选择控制信号,决定哪一个LED数码管显示数字。该程序(文件名为freq.vhd)由8个进程组成,进程P3P6分别描述4个十进制计数器,P2进程产生计数器的清零信号clr和计数允许信号en。第5章设计实例第5章设计实例具体程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE
22、IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY freq IS PORT(clk:IN STD_LOGIC;xclk:IN STD_LOGIC;第5章设计实例第5章设计实例row:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END freq;-xclk为2048 Hz,clk为8 HzARCHITECTURE Behavioral OF freq ISSIGNAL count0:STD_LOGIC_VECTOR(3 DO
23、WNTO 0):=0000;-个位BCD码SIGNAL count1:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;-十位BCD码第5章设计实例第5章设计实例SIGNAL count2:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;-百位BCD码SIGNAL count3:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;-千位BCD码SIGNAL countdiv:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;
24、SIGNAL dispcnt:STD_LOGIC_VECTOR(1 DOWNTO 0):=00;SIGNAL clr,en,c0,c1,c2:STD_LOGIC;第5章设计实例第5章设计实例BEGINP1:PROCESS(clk)BEGINIF rising_edge(clk)THENcountdiv=countdiv+1;END IF;END PROCESS P1;P2:PROCESS(countdiv)第5章设计实例第5章设计实例BEGINIF countdiv=1111 THENclr=1;ELSEclr=0;END IF;IF countdiv=0111 THEN en=1;-在1 s
25、时间内允许计数ELSEen=0;-在另1 s时间内保持计数值,禁止计数END IF;END PROCESS P2;第5章设计实例第5章设计实例P3:PROCESS(xclk,clr,en)-个位计数器BEGINIF clr=1 THENcount0=0000;ELSIF(rising_edge(xclk)AND(en=1)THENIF count0=1001 THENcount0=0000;c0=0;ELSEcount0=count0+1;c0=1;END IF;END IF;END PROCESS P3;第5章设计实例第5章设计实例P4:PROCESS(c0,clr,en)-十位计数器BEG
26、INIF clr=1 THENcount1=0000;ELSIF(falling_edge(c0)AND(en=1)THENIF count1=1001 THENcount1=0000;c1=0;ELSEcount1=count1+1;c1=1;END IF;END IF;END PROCESS P4;第5章设计实例第5章设计实例P5:PROCESS(c1,clr,en)-百位计数器BEGINIF clr=1 THENcount2=0000;ELSIF(falling_edge(c1)AND(en=1)THENIF count2=1001 THENcount2=0000;c2=0;ELSEco
27、unt2=count2+1;c2=1;END IF;END IF;END PROCESS P5;第5章设计实例第5章设计实例P6:PROCESS(c2,clr,en)-千位计数器BEGINIF clr=1 THENcount3=0000;ELSIF(falling_edge(c2)AND(en=1)THENIF count3=1001 THENcount3=0000;ELSEcount3=count3+1;END IF;END IF;END PROCESS P6;第5章设计实例第5章设计实例P7:PROCESS(xclk)-动态扫描时钟BEGINIF rising_edge(xclk)THEN
28、dispcnt=dispcnt+1;END IF;END PROCESS P7;第5章设计实例第5章设计实例P8:PROCESS(dispcnt)-选择对应位的BCD码BEGINIF dispcnt=00 THENrow=000;num=count3;ELSIF dispcnt=01 THENrow=001;num=count2;ELSIF dispcnt=10 THENrow=010;num=count1;ELSIF dispcnt=11 THENrow=011;num=count0;END IF;END PROCESS P8;第5章设计实例第5章设计实例-a,b,c,d,e,f,g,dp
29、WITH num SELECT-7段译码器led=01100000 WHEN 0001,-111011010 WHEN 0010,-211110010 WHEN 0011,-301100110 WHEN 0100,-410110110 WHEN 0101,-510111110 WHEN 0110-611100000 WHEN 0111,-711111110 WHEN 1000,-811110110 WHEN 1001,-911111100 WHEN OTHERS;-0END Behavioral;第5章设计实例第5章设计实例下面是数字频率计程序中使用到的信号及其对应的管脚。#PACE:Star
30、t of Constraints extracted by PACE from the DesignNET clk LOC=P91;NET xclk LOC=P88;NET row LOC=P47;NET row LOC=P46;NET row LOC=P45;第5章设计实例第5章设计实例NET led LOC=P60;NET led LOC=P59;NET led LOC=P58;NET led LOC=P57;NET led LOC=P56;NET led LOC=P55;NET led LOC=P54;NET led LOC=P53;第5章设计实例第5章设计实例5.2.3 交通信号灯控制
31、器1设计要求模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED发光二极管作为交通信号灯,设计一个交通信号灯控制器。设计说明,有两条公路,一条是交通主干道,另一条是支干道。在主干道和支干道的交叉路口上,设置了红、黄、绿灯,进行交通管理,如图5-10所示。第5章设计实例第5章设计实例图5-10 路口交通管理示意图主干道支干道第5章设计实例第5章设计实例设计要求如下:(1)交通灯从绿变红时,有4 s黄灯亮的间隔时间。(2)交通灯红变绿是直接进行的,没有间隔时间。(3)主干道上的绿灯时间为20 s,支干道的绿灯时间为10 s。(4)在任意时间,显示每个状态到该状态结束所需要的时间。由
32、此可以得出交通信号灯A、B、C、D的4种状态,见表5-9。第5章设计实例第5章设计实例表5-9 交通信号灯的4种状态第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现交通信号灯控制器利用实验板上的红、黄、绿LED发光二极管模拟十字路口交通信号灯,LED 7段数码管显示交通信号灯在某一种状态所剩余的时间,利用实验板上的8 Hz时钟信号和2048 Hz时钟信号,分别作为交通信号灯控制器的计时信号和LED 7段数码管的扫描信号。第5章设计实例第5章设计实例用VHDL编写程序实现交通信号灯控制器,其原理框图如图5-11所示。程序中的时钟信号clk为8 Hz标准信号,作为产生1 s信号。程序中
33、的另一个时钟信号scanclk的频率为2048 Hz,作为LED 7段数码管的动态扫描信号,输出信号led和row分别输出段码和位选择控制信号。6个红、黄、绿信号灯输出信号(对应两组红、黄、绿灯,R1、Y1、G1为主干道红、黄、绿灯信号,R2、Y2、G2为支干道红、黄、绿灯信号),当输出信号为高电平时,实验板上LED发光二极管发光。第5章设计实例第5章设计实例图5-11 交通信号灯控制器原理框图进程P5、P6显示时间BCD码7段译码器进程P3状态寄存器进程P260 s计时器进程P11 s信号发生器进程P4次态发生器信号灯输出信号scanclkclk(8 Hz)scanclk次态load红、黄、
34、绿灯信号输出ledrow第5章设计实例第5章设计实例该程序由6个进程组成:进程P1将8 Hz标准信号分频后,产生1 s时钟信号(scanclk)。进程P2构成一个具有预置数功能的60 s计时器。当预置数控制信号load有效时,60 s计时器输出变成由进程P4输出的预置数输入信号,60 s计时器输出两位BCD码输出信号。进程P3为状态寄存器,保持交通信号灯A、B、C、D的4种状态,根据60 s计时器的输出,决定是否改变当前的状态,输出加载时间控制信号load。第5章设计实例第5章设计实例进程P4为次态发生器,根据当前的状态产生状态机的下一个状态,进程P3为时序电路,进程P4为组合电路,进程P3和
35、进程P4共同构成一个状态机,由进程P4产生进程P2所需要的预置数输入信号和控制6个红、黄、绿信号灯的输出信号。进程P5和进程P6组成LED 7段数码管显示驱动模块。第5章设计实例第5章设计实例具体程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY traffic ISPORT(clk,scanclk:INSTD_LOGIC;R1,Y1,G1,R2,Y2,G2:OUT STD_LOGIC;row:OUT STD_LO
36、GIC_VECTOR(2 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END traffic;第5章设计实例第5章设计实例ARCHITECTURE Behavioral OF traffic ISTYPE states IS(s3,s2,s1,s0);-定义4种状态SIGNAL state:states:=s0;SIGNAL next_state:states:=s0;SIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0);-分频计数器SIGNAL sec0:STD_LOGIC_VECTOR(3 DOWNTO 0);
37、-个位秒计数器SIGNAL sec1:STD_LOGIC_VECTOR(3 DOWNTO 0);-十位秒计数器第5章设计实例第5章设计实例SIGNAL data0:STD_LOGIC_VECTOR(3 DOWNTO 0);-个位计数器预置数据SIGNAL data1:STD_LOGIC_VECTOR(3 DOWNTO 0);-十位计数器预置数据SIGNAL light:STD_LOGIC_VECTOR(5 DOWNTO 0);-输出信号灯控制信号SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL secclk,load,carry,disp
38、cnt:STD_LOGIC;第5章设计实例第5章设计实例BEGINP1:PROCESS(clk)-进程P1将8 Hz标准信号分频BEGINIF rising_edge(clk)THENcount=count+1;END IF;secclk=count(2);-产生1 s信号count(2)END PROCESS P1;第5章设计实例第5章设计实例P2:PROCESS(secclk,load)-60 s计数器BEGINIF rising_edge(secclk)THENIF load=1 THEN-加载时间值sec0=data0;sec1=data1;ELSEIF sec0=0000 THEN第
39、5章设计实例第5章设计实例sec0=1001;ELSEsec0=sec0?1;END IF;IF sec0=0000 THENsec1=sec1?1;END IF;END IF;END IF;END PROCESS P2;第5章设计实例第5章设计实例P3:PROCESS(secclk)BEGINIF(falling_edge(secclk)THENIF(sec0=0000)AND(sec1=0000)THENload=1;-产生预置时间初值控制信号state=next_state;-改变当前状态ELSEload light=001100;-主干道绿灯亮,支干道红灯亮next_state=s1;
40、data0=0000;data1 light=010100;-主干道黄灯亮,支干道红灯亮next_state=s2;data0=0100;data1 light=100001;-主干道红灯亮,支干道绿灯亮next_state=s3;data0=0000;data1 light=100010;-主干道红灯亮,支干道黄灯亮next_state=s0;data0=0100;data1=0000;END CASE;END PROCESS P4;第5章设计实例第5章设计实例P5:PROCESS(scanclk)-动态扫描时钟BEGINIF rising_edge(scanclk)THENdispcnt=
41、not dispcnt;END IF;END PROCESS P5;第5章设计实例第5章设计实例P6:PROCESS(dispcnt)-选择对应位的BCD码BEGINIF dispcnt=1 THENrow=000;num=sec1;ELSErow=001;num=sec0;END IF;END PROCESS P6;第5章设计实例第5章设计实例-a,b,c,d,e,f,g,dp WITH num SELECT-7段译码器led=01100000 WHEN 0001,-111011010 WHEN 0010,-211110010 WHEN 0011,-301100110 WHEN 0100,-
42、410110110 WHEN 0101,-510111110 WHEN 0110,-611100000 WHEN 0111,-711111110 WHEN 1000,-811110110 WHEN 1001,-911111100 WHEN OTHERS;-0第5章设计实例第5章设计实例R1=light(5);Y1=light(4);G1=light(3);R2=light(2);Y2=light(1);G2=light(0);END Behavioral;第5章设计实例第5章设计实例下面是交通信号控制器程序中使用到的信号及其对应的管脚。#PACE:Start of Constraints ex
43、tracted by PACE from the DesignNET clk LOC=P91;NET scanclk LOC=P88;NET R1 LOC=P44;NET Y1 LOC=P43;NET G1 LOC=P41;第5章设计实例第5章设计实例NET R2 LOC=P40;NET Y2 LOC=P34;NET G2 LOC=P32;NET row LOC=P47;NET row LOC=P46;NET row LOC=P45;第5章设计实例第5章设计实例NET led LOC=P60;NET led LOC=P59;NET led LOC=P58;NET led LOC=P57;NET
44、 led LOC=P56;NET led LOC=P55;NET led LOC=P54;NET led LOC=P53;第5章设计实例第5章设计实例5.2.4 电子数字钟1设计要求(1)在LED数码管上显示小时、分钟和秒。(2)设置清零按键,使小时为1和分钟为1。(3)设置小时调整按键,使小时加1;设置分钟调整按键,使分钟加1。第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现电子数字钟用VHDL编写程序实现电子数字钟的端口控制信号如图5-12所示。clk信号为实验板上的石英晶体(32 768 Hz)分频后的8 Hz标准信号,作为产生1 s信号的输入信号。clr信号为清零按键输入信
45、号。按键按下时,clr信号为低电平。clr信号有效时,显示小时为1,显示分钟为1。第5章设计实例第5章设计实例clkclrh_addm_addscanclkrowled图5-12 电子数字钟的端口信号第5章设计实例第5章设计实例h_add信号为小时调整按键输入信号。按键按下时,h_add信号为低电平。h_add信号有效时,小时数字加1。m_add信号为分钟调整按键输入信号。按键按下时,m_add信号为低电平。m_add信号有效时,分钟数字加1。scanclk(2048 Hz)信号为LED数码管的位选择时钟信号。led为LED数码管的段码和小数点控制信号。第5章设计实例第5章设计实例row为位选
46、择控制信号,决定哪一个LED数码管显示数字。用VHDL编写程序实现电子数字钟,其原理框图如图5-13所示,程序由7个进程组成。第5章设计实例第5章设计实例图5-13 电子数字钟的原理框图P2进程秒计数器P3进程分钟计数器P4进程小时计数器P5进程LED数码管位选择信号P1进程1 s信号发生器P6进程多路选择器7段译码器clkm_addh_addscanclkclk1秒个位秒十位分钟个位分钟十位小时十位小时个位row led 第5章设计实例第5章设计实例进程P1将8 Hz标准信号分频后,产生1 s脉冲信号clk1。进程P2描述60 s计数器,输出秒十位和个位的BCD码。进程P3描述60 min计
47、数器,根据秒计数器的输出值,输出分钟十位和个位的BCD码。进程P4描述12 h计数器,根据秒计数器和分钟计数器的输出值,输出小时十位和个位的BCD码。进程P5和进程P6根据进程产生LED数码管的位选择信号,从小时、分钟和秒中,选择一个BCD码给7段译码器。第5章设计实例第5章设计实例具体程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY watch ISPORT(clk,scanclk,clr,m_add,h_ad
48、d:IN STD_LOGIC;row:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END watch;第5章设计实例第5章设计实例ARCHITECTURE Behavioral OF watch ISSIGNAL clk_div:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL clk1,m_carry:STD_LOGIC;SIGNAL h1,h0,m1,m0,s1,s0:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL dispcnt:STD_LOGIC
49、_VECTOR(2 DOWNTO 0);SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0);第5章设计实例第5章设计实例BEGINP1:PROCESS(clk)-产生1 s脉冲信号clk1BEGINIF rising_edge(clk)THENclk_div=clk_div+1;END IF;clk1=clk_div(2);END PROCESS P1;第5章设计实例第5章设计实例P2:PROCESS(clk1,clr)-60 s计数器BEGINIF(clr=0)THENs0=0000;s1=0000;ELSIF rising_edge(clk1)THENIF s0
50、=1001 THENs0=0000;ELSEs0=s0+1;END IF;第5章设计实例第5章设计实例IF(s1=0101)AND(s0=1001)THENs1=0000;ELSIF s0=1001 THENs1=s1+1;END IF;END IF;END PROCESS P2;第5章设计实例第5章设计实例P3:PROCESS(clk1,clr,s1,s0,m_add)-60 min计数器BEGINIF clr=0 THENm0=0001;m1=0000;ELSIF rising_edge(clk1)THENIF(s1=0101)AND(s0=1001)OR(m_add=0)THENIF(m