本科PLD与数字系统设计第5章

上传人:夏** 文档编号:568792139 上传时间:2024-07-26 格式:PDF 页数:190 大小:492.51KB
返回 下载 相关 举报
本科PLD与数字系统设计第5章_第1页
第1页 / 共190页
本科PLD与数字系统设计第5章_第2页
第2页 / 共190页
本科PLD与数字系统设计第5章_第3页
第3页 / 共190页
本科PLD与数字系统设计第5章_第4页
第4页 / 共190页
本科PLD与数字系统设计第5章_第5页
第5页 / 共190页
点击查看更多>>
资源描述

《本科PLD与数字系统设计第5章》由会员分享,可在线阅读,更多相关《本科PLD与数字系统设计第5章(190页珍藏版)》请在金锄头文库上搜索。

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

4、供电电源电压接3.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-5VQ1

5、00C的管脚与LED点阵(采用行共阳极,列共阴极的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为高电平时,最右边的一个发光二极管发

6、光。LED发光二极管的连接如表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单片

8、机的连接XC2S15的管脚与单片机的连接如表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流(

9、*.bit)文件的编程信息经过编程接口和下载电缆传送到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 12CLKGNDD6BUSYPEGNDS

11、HIELDU2564U29810U2111213300 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和行驱动

13、电路提供2048 Hz的行扫描信号;根据行扫描信号确定该行所需要的列信号,其具体设计方案如图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提供行扫描地址输出信

14、号addr(0)addr(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 ST

15、D_LOGIC;clka: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,

16、00000001,11101111,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 PRO

17、CESS P1;第5章设计实例第5章设计实例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章设计实例下面是显示汉字“电子”程序中使用到的信号及其对应的

18、管脚。#PACE: Start of Constraints 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 =

19、 P31;NET data LOC = P30;第5章设计实例第5章设计实例5.2.2 数字频率计1设计要求设计一个有效位为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-

20、5VQ100C的91脚;计数闸门控制电路控制4位十进制计数器在时间T1=1 s内计数,计数的个数就是待测输入信号的频率,在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个十进制计数器在单位时间内计数、停止

21、计数和清零等逻辑功能。第5章设计实例第5章设计实例图5-9 数字频率计端口控制信号clkxclkrowled第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章设计实例具体

22、程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE 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 HzARCHI

23、TECTURE Behavioral OF freq ISSIGNAL count0: STD_LOGIC_VECTOR(3 DOWNTO 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_LOGI

24、C_VECTOR(3 DOWNTO 0):= 0000;SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0):= 0000;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章设

25、计实例BEGINIF countdiv=1111 THENclr=1;ELSEclr=0;END IF;IF countdiv=0111 THEN en=1; -在1 s时间内允许计数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;ELSEcou

26、nt0=count0+1; c0=1;END IF;END IF;END PROCESS P3;第5章设计实例第5章设计实例P4:PROCESS(c0,clr,en) -十位计数器BEGINIF 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

27、 clr=1 THENcount2=0000;ELSIF (falling_edge(c1) AND (en=1) THENIF count2=1001 THENcount2=0000; c2=0;ELSEcount2=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;ELSEc

28、ount3=count3+1;END IF;END IF;END PROCESS P6;第5章设计实例第5章设计实例P7:PROCESS(xclk)-动态扫描时钟BEGINIF rising_edge(xclk) THENdispcnt=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 THENro

29、w=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 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 WH

30、EN 1000, -811110110 WHEN 1001, -911111100 WHEN OTHERS; -0END Behavioral;第5章设计实例第5章设计实例下面是数字频率计程序中使用到的信号及其对应的管脚。#PACE: Start 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 l

31、ed 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 交通信号灯控制器1设计要求模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED发光二极管作为交通信号灯,设计一个交通信号灯控制器。设计说明,有两条公路,一条是交通主干道,另一条是支干道。在主干道和支干道的交叉路口上,设置了红、黄、绿灯,进行交通管理,如图5-10所示。第5章设计实例第5章设计实例图5-

32、10 路口交通管理示意图主干道支干道第5章设计实例第5章设计实例设计要求如下:(1) 交通灯从绿变红时,有4 s黄灯亮的间隔时间。(2) 交通灯红变绿是直接进行的,没有间隔时间。(3) 主干道上的绿灯时间为20 s,支干道的绿灯时间为10 s。(4) 在任意时间,显示每个状态到该状态结束所需要的时间。由此可以得出交通信号灯A、B、C、D的4种状态,见表5-9。第5章设计实例第5章设计实例表5-9 交通信号灯的4种状态第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现交通信号灯控制器利用实验板上的红、黄、绿LED发光二极管模拟十字路口交通信号灯,LED 7段数码管显示交通信号灯在某一种

33、状态所剩余的时间,利用实验板上的8 Hz时钟信号和2048 Hz时钟信号,分别作为交通信号灯控制器的计时信号和LED 7段数码管的扫描信号。第5章设计实例第5章设计实例用VHDL编写程序实现交通信号灯控制器,其原理框图如图5-11所示。程序中的时钟信号clk为8 Hz标准信号,作为产生1 s信号。程序中的另一个时钟信号scanclk的频率为2048 Hz,作为LED 7段数码管的动态扫描信号,输出信号led和row分别输出段码和位选择控制信号。6个红、黄、绿信号灯输出信号(对应两组红、黄、绿灯,R1、Y1、G1为主干道红、黄、绿灯信号,R2、Y2、G2为支干道红、黄、绿灯信号),当输出信号为高

34、电平时,实验板上LED发光二极管发光。第5章设计实例第5章设计实例图5-11 交通信号灯控制器原理框图进程P5、P6显示时间BCD码7段译码器进程P3状态寄存器进程P260 s计时器进程P11 s信号发生器进程P4次态发生器信号灯输出信号scanclkclk(8 Hz)scanclk次态load红、黄、绿灯信号输出ledrow第5章设计实例第5章设计实例该程序由6个进程组成:进程P1将8 Hz标准信号分频后,产生1 s时钟信号(scanclk)。进程P2构成一个具有预置数功能的60 s计时器。当预置数控制信号load有效时,60 s计时器输出变成由进程P4输出的预置数输入信号,60 s计时器输

35、出两位BCD码输出信号。进程P3为状态寄存器,保持交通信号灯A、B、C、D的4种状态,根据60 s计时器的输出,决定是否改变当前的状态,输出加载时间控制信号load。第5章设计实例第5章设计实例进程P4为次态发生器,根据当前的状态产生状态机的下一个状态,进程P3为时序电路,进程P4为组合电路,进程P3和进程P4共同构成一个状态机,由进程P4产生进程P2所需要的预置数输入信号和控制6个红、黄、绿信号灯的输出信号。进程P5和进程P6组成LED 7段数码管显示驱动模块。第5章设计实例第5章设计实例具体程序和说明如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;U

36、SE 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_LOGIC_VECTOR(2 DOWNTO 0);led : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END traffic;第5章设计实例第5章设计实例ARCHITECTURE Behavioral OF traffic ISTYPE states IS

37、( 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);-个位秒计数器SIGNAL sec1: STD_LOGIC_VECTOR(3 DOWNTO 0);-十位秒计数器第5章设计实例第5章设计实例SIGNAL data0: STD_LOGIC_VECTOR(3 DOWNTO 0);-个位计数器预置数据SIGNAL dat

38、a1: 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, dispcnt: STD_LOGIC;第5章设计实例第5章设计实例BEGINP1:PROCESS (clk)-进程P1将8 Hz标准信号分频BEGINIF rising_edge (clk) THENcount = count+1;END IF;sec

39、clk=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第5章设计实例第5章设计实例sec0=1001;ELSEsec0=sec0?1;END IF;IF sec0=0000 THENsec1=sec1?1;END IF;END IF;END IF;END PROCESS P2;

40、第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;data0=0000;data1 light =010100;-主干道黄灯亮,支干道红灯亮next_state=s2;data0=0100;data1 light =100001;-主干道红灯

41、亮,支干道绿灯亮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= not dispcnt;END IF;END PROCESS P5;第5章设计实例第5章设计实例P6: PROCESS(dispcnt)-选择对应位的BCD码BEGINIF dis

42、pcnt=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, -410110110 WHEN 0101, -510111110 WHEN 0110, -611100000 WHEN 0111, -711111110 WHEN 1

43、000, -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 extracted by PACE from the DesignNET clk LOC =P91;NET scanclk LOC =P88;NET

44、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 led LOC =P56;NET led LOC =P55;NET led LOC =P54;NET led LO

45、C =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信号为清零按键输入信号。按键按下时,clr信号为低电平。clr信号有效时,显示小时为1,显示分钟为1。第5章设计实例第5章

46、设计实例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为位选择控制信号,决定哪一个LED数码管显示数字。用VHDL编写程序实现电子数字钟,其原理框图如图5-13所

47、示,程序由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计数器,根据秒计数器的输出值,输出分钟十位和个位的BCD码。进程P4描述12 h计数器,根据秒计数器和分

48、钟计数器的输出值,输出小时十位和个位的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_add: IN STD_LOGIC;row : OUT STD_LOGIC_VECTOR(2

49、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_VECTOR(2 DOWNTO 0);SIGNAL num: STD

50、_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=1001 THENs0=0000;ELSEs0=

51、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 (m0=1001)

52、 THENm0=0000ELSE第5章设计实例第5章设计实例m0=m0+1;END IF;IF (m1=0101) AND (m0=1001) THENm1=0000;ELSIF m0=1001 THENm1=m1+1;END IF;END IF;END IF;END PROCESS P3;第5章设计实例第5章设计实例P4: PROCESS(clk1, clr, m1, m0, s1, s0, h_add)-12 h计数器BEGINIF clr=0 THENh0=0001;h1=0000;ELSIF rising_edge (clk1) THENIF (s1=0101) AND (s0=100

53、1) AND (m1=0101) AND (m0=1001) OR (h_add=0) THEN第5章设计实例第5章设计实例IF (h1=0001) AND (h0=0010) OR (h0=1001) THENh0=0000;ELSEh0=h0+1;END IF;IF (h1=0001) AND (h0=0010) THENh1=0000;ELSIF h0=1001 THENh1=h1+1;END IF;END IF;END IF;END PROCESS P4;第5章设计实例第5章设计实例P5: PROCESS(scanclk)-动态扫描时钟BEGINIF rising_edge(scanc

54、lk) THENIF dispcnt=101 THENdispcnt=000;ELSEdispcnt=dispcnt+1;END IF;END IF;END PROCESS P5;第5章设计实例第5章设计实例P6: PROCESS(dispcnt)-选择对应位的BCD码BEGINIF dispcnt=000 THENrow=000; num=h1;ELSIF dispcnt=001 THENrow=001; num=h0;ELSIF dispcnt=010 THENrow=010; num=m1;ELSIF dispcnt=011 THENrow=011; num=m0;第5章设计实例第5章设

55、计实例ELSIF dispcnt=100 THENrow=100; num=s1;ELSIF dispcnt=101 THENrow=101; num=s0;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, -410110110 WHEN 0101, -510111110 WHEN 0110, -611100000 W

56、HEN 0111, -711111110 WHEN 1000, -811110110 WHEN 1001, -911111100 WHEN OTHERS; -0 END Behavioral;第5章设计实例第5章设计实例下面是电子数字钟程序中使用到的信号及其对应的管脚。#PACE: Start of Constraints extracted by PACE from the DesignNET clk LOC =P91;NET scanclk LOC =P88;NET m_add LOC =P65;NET h_add LOC =P66;NET clr LOC =P15;NET row LOC

57、 =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.5 计时器1设计要求(1) 在LED数码管上显示分钟和秒,最长的计时时间为59分59秒。(2) 按下清零按键,在LED数码管上显示的时间为00分00秒。(3) 按下开始/停止按键,则开

58、始或停止计时器计时。其功能与实际的计时器的开始/停止按钮功能相同。第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现计时器用VHDL编写程序实现计时器的端口控制信号,如图5-14所示。第5章设计实例第5章设计实例图5-14 计时器的端口信号clkresetscanclkstartstoprowled第5章设计实例第5章设计实例clk信号为实验板上的石英晶体(32 768 Hz)分频后的8 Hz标准信号,作为产生1 s信号的输入信号。reset信号为复位按键输入信号,低电平有效。按键按下时,reset信号为低电平,LED数码管显示00分00秒。scanclk(2048 Hz)信号为LE

59、D数码管的位选择时钟信号。startstop信号为开始/停止按键输入信号,低电平有效。按下该按键时,则开始或停止计时器计时。第5章设计实例第5章设计实例led为LED数码管的段码和小数点控制信号。row为位选择控制信号,决定哪一个LED数码管显示数字。用VHDL编写程序实现计时器,其原理框图如图5-15所示,程序由7个进程组成。第5章设计实例第5章设计实例图5-15 计时原理框图P2和P3进程有限状态机P1进程1s信号发生器P4和P5进程分秒计时器P6、P7进程和7段译码器输出LED数码管控制信号resetstartstopclkclk1rstclkenm1m0s1s0scanclkrowle

60、d第5章设计实例第5章设计实例进程P1将8 Hz标准信号分频后,产生1 s脉冲信号clk1。进程P2和进程P3构成一个有限状态机,根据控制按键reset和startstop以及当前计时器的状态,决定计时器是否计时,该有限状态机的状态转换图如图5-16所示。6个状态分别为clear、zero、start、counting、stop和stopped。第5章设计实例第5章设计实例图5-16 状态转换图 clearclken0rst1zeroclken0rst0startclken1rst0countingclken1rst0stoppedclken0rst0stopclken0rst0startst

61、op0startstop1startstop0startstop1startstop1startstop1startstop0startstop0startstop1startstop0reset0第5章设计实例第5章设计实例当复位按键reset按下时,状态机的计时允许控制输出信号clken为低电平,计时复位输出信号rst为高电平。当rst为高电平时,进程P4和进程P5描述的分秒计数器清零,然后从clear状态进入zero状态。在zero状态,当按下开始/停止按键时,进入开始计时start状态。在开始计时start状态,当开始/停止按键由闭合变成断开时,则进入计时counting状态,计时允许

62、控制输出信号clken为高电平,允许进程P4和进程P5描述的分秒计数器计数。第5章设计实例第5章设计实例在计时counting状态,当按下开始/停止按键时,则停止计时,进入stop状态。在stop状态,当开始/停止按键由闭合变成断开时,进入stopped状态。在stopped状态,如果按下开始/停止按键,则又进入开始计时start状态。当开始/停止按键由闭合变成断开时,进入计时counting状态,这时分秒计数器是在原来的数字的基础上继续计时。如果要从零开始,则先要按下复位按键。第5章设计实例第5章设计实例进程P4描述60 s计数器,输出秒十位和个位的BCD码。进程P5描述60 min计数器,

63、根据秒计数器的输出值,输出分钟十位和个位的BCD码。进程P6和进程P7根据产生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 startstopwatch ISPORT ( clk, scanclk, startstop, reset: IN STD_LOGIC;row : OUT STD_LOGIC_V

64、ECTOR(2 DOWNTO 0);led : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END startstopwatch;第5章设计实例第5章设计实例ARCHITECTURE Behavioral OF startstopwatch ISSIGNAL clk1, clken, rst: STD_LOGIC;SIGNAL dispcnt: STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL clk_div: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL m1,m0,s1,s0: STD_LOGIC_VECTOR(3 DO

65、WNTO 0);SIGNAL num: STD_LOGIC_VECTOR(3 DOWNTO 0);TYPE stmchine_state IS (clear,zero,start,counting,stop,stopped);SIGNAL current_state : stmchine_state;SIGNAL next_state : stmchine_state;第5章设计实例第5章设计实例BEGINP1: PROCESS(clk)-产生1 s脉冲信号clk1BEGINIF rising_edge (clk) THENclk_div=clk_div+1;END IF;clk1=clk_d

66、iv(2);END PROCESS P1;第5章设计实例第5章设计实例P2: PROCESS(reset,clk1)-状态转换BEGINIF (reset=0) THENcurrent_state=clear;ELSIF rising_edge (clk1) THENcurrent_statenext_state=zero;clken=0;rstIF (startstop=1) THENnext_state=zero;ELSIF (startstop=0) THEN第5章设计实例第5章设计实例next_state=start;END IF;clken=0;rstIF (startstop=1)

67、 THENnext_state=counting;ELSIF(startstop=0) THENnext_state=start;END IF;clken=0;rstIF (startstop=1) THENnext_state=counting;ELSIF (startstop=0) THENnext_state=stop;END IF;clken=1;rstIF (startstop=1) THENnext_state=stopped;ELSIF (startstop=0) THENnext_state=stop;END IF;clken=0;rstIF (startstop=1) THE

68、Nnext_state=stopped;ELSIF (startstop=0) THENnext_state=start;END IF;clken=0;rst=0;END CASE;END PROCESS P3;第5章设计实例第5章设计实例P4: PROCESS(clk1, rst, clken)-60 s计数器BEGINIF (rst=1) THENs0=0000;s1=0000;ELSIF rising_edge (clk1) THENIF clken=1 THEN IF s0=1001 THENs0=0000;ELSE第5章设计实例第5章设计实例s0=s0+1;END IF;IF (s1

69、=0101) AND (s0=1001) THENs1=0000;ELSIF s0=1001 THENs1=s1+1;END IF;END IF;END IF;END PROCESS P4;第5章设计实例第5章设计实例P5: PROCESS(clk1, rst, clken, s1, s0)-60 min计数器BEGINIF rst=1 THENm0=0000;m1=0000;ELSIF rising_edge (clk1) THENIF clken=1 THENIF (s1=0101) AND (s0=1001) THEN第5章设计实例第5章设计实例IF (m0=1001) THENm0=0

70、000;ELSEm0=m0+1;END IF;IF (m1=0101) AND (m0=1001) THENm1=0000;ELSIF m0=1001 THENm1=m1+1;END IF;第5章设计实例第5章设计实例END IF;END IF;END IF;END PROCESS P5; 第5章设计实例第5章设计实例P6: PROCESS(scanclk)-动态扫描时钟BEGINIF rising_edge(scanclk) THENdispcnt=dispcnt+1;END IF;END PROCESS P6;第5章设计实例第5章设计实例P7: PROCESS(dispcnt)-选择对应位

71、的BCD码BEGINIF dispcnt=00 THENrow=000; num=m1;ELSIF dispcnt=01 THENrow=001; num=m0;ELSIF dispcnt=10 thenrow=010; num=s1;ELSIF dispcnt=11 THENrow=011; num=s0;END IF;END PROCESS P7;第5章设计实例第5章设计实例-a,b,c,d,e,f,g,dp WITH num SELECT-7段译码器led=01100000 WHEN 0001, -111011010 WHEN 0010, -211110010 WHEN 0011, -3

72、01100110 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: Start of Constraints extracted by PACE from the DesignNET clk LOC =P91;NET scanclk LO

73、C =P88;NET startstop LOC =P21;NET reset LOC =P22;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.6 电子密码锁1设计要求(1) 具有密码输入功能。(2) 设置复

74、位按键,以便重新输入新的密码。(3) 在数码管上显示输入密码次数。(4) 拒绝接收超过规定次数的密码输入信号。(5) 当输入密码正确时,在数码管上显示字符“H”;当输入密码不正确时,在数码管上显示字符“E”。第5章设计实例第5章设计实例2采用VHDL语言输入的方式实现电子密码锁实验板上有10个按键k1k10,其中k1k9作为密码输入按键,k10作为复位按键,以便重新开始输入新的密码。当然,这个电子密码锁与实际的电子密码锁的设计有一些不一样,也许实际的电子密码锁并不设置复位按键,而是当密码输入错误后,延迟很长一段时间才接受新输入的密码。第5章设计实例第5章设计实例假设电子密码锁的密码为4位数32

75、16。利用实验板上的一个数码管显示输入密码次数,当输入密码正确时,在数码管上显示字符“H”;当输入密码不正确时,在数码管上显示字符“E”。用VHDL编写程序实现电子密码锁,其原理框图如图5-17所示,程序中的时钟信号clk为石英晶体(32 768 Hz)分频后的8 Hz标准信号,作为产生0.5 s信号的输入信号。其中k1k9为按键输入信号,k10作为复位按键。当没有按键按下时连接到CPLD或FPGA的信号k1k10都为高电平信号;当有按键按下时,k1k10的一个信号为低电平。第5章设计实例第5章设计实例图5-17 电子密码锁程序的原理框图 进程P7 判断按键输入 次数是否超过 规定的次数 进程

76、P6 按键输入次数 计数器,输出 密码正确或错 误信息进程P3按键输入 进程P1、P2 0.5 Hz 时钟发生器 进程P5 次态 发生器 进程P4 状态转换 寄存器BCD码-7段译码器k1k10carryclkledrow第5章设计实例第5章设计实例电子密码锁采用状态机和对按键输入次数计数相结合的方法,保证只有输入正确的密码,状态机才能转换到最后正确的状态,显示开锁字符。程序由7个进程组成,进程P1和P2将8 Hz标准信号分频后,产生0.5 s脉冲信号(carry),与按键输入信号配合,消除按键输入的抖动,并作为状态转换进程P4的时钟输入信号。第5章设计实例第5章设计实例进程P3锁存按键输入信

77、号,为状态机提供一个稳定的按键输入信号。进程P4将下一个状态(next_state)转换为当前状态(state)。进程P5产生次态信号(next_state),只有当有按键输入和状态转移控制信号en为逻辑“1”时才能够产生次态信号。进程P4和进程P5是电子密码锁的核心,密码的设置也是编写状态机时确定的。第5章设计实例第5章设计实例进程P6对按键输入次数计数,并且为显示按键输入次数的7段译码器BCD码数据。进程P7判断按键输入次数是否已经输入3次,如果输入密码的次数小于等于3,状态转移控制信号en为逻辑“1”,否则为逻辑“0”。当仍然有密码输入时,禁止状态发生变化,因此,如果在输入密码过程中,只

78、要输入一个错误密码,就不可能转换到最后正确的状态。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 elock ISPORT ( clk,k1,k2,k3,k4,k5: IN STD_LOGIC;k6,k7,k8,k9,k10: IN STD_LOGIC;row: OUT STD_LOGIC_VECTOR(2 DOWNTO

79、0);led: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END elock;第5章设计实例第5章设计实例ARCHITECTURE Behavioral OF elock ISSIGNAL count: STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL count1: STD_LOGIC_VECTOR(3 DOWNTO 0);TYPE states IS ( s4, s3, s2, s1, s0);SIGNAL state: states:=s0;SIGNAL next_state: states:=s0;SIGNAL en, carry, o

80、p, k11, k22, k33, k44, k55: STD_LOGIC;SIGNAL k66, k77, k88, k99, k100: STD_LOGIC;SIGNAL row1: STD_LOGIC_VECTOR(2 DOWNTO 0);第5章设计实例第5章设计实例BEGINP1: PROCESS (clk)BEGINIF rising_edge (clk) THENcount = count+1;END IF;END PROCESS P1;第5章设计实例第5章设计实例P2: PROCESS(clk)BEGINIF rising_edge(clk) THENIF count=11 TH

81、ENcarry=1;-clk信号经过分频后,信号carry的频率为0.5 HzELSEcarry=0;END IF;END IF;END PROCESS P2;第5章设计实例第5章设计实例P3: PROCESS (carry,k1,k2,k3,k6,k9)-当有按键输入时,锁存该按键信号BEGINIF rising_edge (carry) THENIF (k1=0) THENk11=0;ELSEk11=1;END IF;IF (k2=0) THENk22=0;第5章设计实例第5章设计实例ELSEk22=1;END IF;IF (k3=0) THENk33=0;ELSEk33=1;END IF

82、;IF (k4=0) THENk44=0;第5章设计实例第5章设计实例ELSEk44=1;END IF;IF (k5=0) THENk55=0;ELSEk55=1;END IF;IF (k6=0) THENk66=0;ELSEk66=1;END IF;第5章设计实例第5章设计实例IF (k7=0) THENk77=0;ELSEk77=1;END IF;IF (k8=0) THENk88=0;ELSEk88=1;END IF;第5章设计实例第5章设计实例IF (k9=0) THENk99=0;ELSEk99=1;END IF;IF (k10=0) THENk100=0;ELSEk100=1;EN

83、D IF;END IF;END PROCESS P3;第5章设计实例第5章设计实例P4: PROCESS(CARRY)BEGINIF rising_edge (carry) THENstateIF k33=0 AND en=1 THENnext_state=s1;opIF k22=0 AND en=1 THENnext_state=s2;opIF k11=0 AND en=1 THENnext_state=s3;opIF k66=0 AND en=1 THENnext_state=s4;op op next_state=s0;END CASE;第5章设计实例第5章设计实例IF k100=0 T

84、HEN-当复位键按下时,返回到s0状态next_state=s0;END IF;END PROCESS P5;第5章设计实例第5章设计实例P6: PROCESS(carry,k11,k22,k33,k44,k55,k66,k77,k88,k99,k100)-当有按键输入时,对按键-输入次数计数第5章设计实例第5章设计实例BEGINIF rising_edge (carry) THENIF k100=0 THENcount1=0000;ELSIF op=1 THENcount1=1111;-密码输入正确ELSIF (en=0 AND op=1) THENcount1=1110;-密码输入错误EL

85、SIF (en=1 AND (k11=0 OR k22=0 OR k33=0 OR k44=0 OR k55=0 OR k66=0 OR k77=0 OR k88=0 OR k99=0)THEN第5章设计实例第5章设计实例count1=count1+1;-按键输入次数计数END IF;END IF;END PROCESS P6;第5章设计实例第5章设计实例P7: PROCESS (count1)-判断按键输入次数是否超过4次,并且根据输入次数,-为进程P5产生状态转移控制信号enBEGINIF count1=011 THENen=1;ELSE en=0;END IF;END PROCESS P

86、7;第5章设计实例第5章设计实例-a,b,c,d,e,f,g,dp WITH count1 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, -8第5章设计实例第5章设计实例11110110 WHEN 1001, -901101110 WHEN 1111, -显示密码输入正确字

87、符“H”10011110 WHEN 1110, -显示密码输入错误字符“E”11111100 WHEN OTHERS; -0row=101;-选择其中一个数码管显示END Behavioral;第5章设计实例第5章设计实例下面是电子密码锁程序中使用到的信号及其对应的管脚。#PACE: Start of Constraints extracted by PACE from the DesignNET clk LOC =P91;NET k1 LOC =P22;NET k2 LOC =P21;NET k3 LOC =P20;NET k4 LOC =P19;NET k5 LOC =P18;NET k6

88、 LOC =P17;NET k7 LOC =P16;NET k8 LOC =P15;NET k9 LOC =P65;NET k10 LOC =P66;第5章设计实例第5章设计实例NET row LOC =P47;NET row LOC =P46;NET row LOC =P45;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.7 数字电压

89、表例如利用CPLD-A型教学实验开发板提供的硬件资源,设计实现一个数字电压表,输入的模拟电压范围为05 V,CPLD-A型教学实验开发板提供了可调输入电压信号、T型电阻网络和输出信号。实现数字电压表的原理框图如图5-18所示,它包含了逐次比较式模/数转换器模块、二进制到十进制的转换模块、BCD码到7段译码器模块、LED数码管动态显示数字模块以及相互之间的时序的设计,共由7个模块组成。第5章设计实例第5章设计实例图5-18 数字电压表的原理框图多路转换器7段译码器LED位选控制二进制/BCD转换锁存器逐次比较P2移位寄存器P1cmpclkshiftstartscanclkbcd2bcd1bcd0

90、enbcd12bcd11bcd10startbcdsegdaroweoc第5章设计实例第5章设计实例采用逐次比较的方式实现模/数转换,根据T型电阻网络的输出信号和模拟输入信号相比较的结果cmp,在线可编程逻辑器件输出8位数字信号da给T型电阻网络。进行一次模/数转换需要9个时钟脉冲,转换结束信号为eoc。当eoc有效时,将二进制数转换为BCD码(因为采用8位数字信号控制T型电阻网络的输出,所以需要3位BCD码表示电压数值bcd2为高位,显示精度为0.02 V),并且通过锁存器保存,然后使转换启动信号start处于有效状态,启动下一次模/数转换过程。模/数转换和电压数字结果显示的时钟信号分别为c

91、lk(2048 Hz)和scanclk(2 MHz)。电压值采用动态扫描显示的方式,6个LED数码管的段码信号为seg,位选信号为row。第5章设计实例第5章设计实例移位寄存器和逐次比较模块完成模/数转换,移位寄存器的输出控制模/数转换的时间和时序;二进制/BCD转换和锁存器模块为电压数字显示提供BCD码;LED的位选控制模块选中6个LED数码管中的一个,输出位选信号row;根据位选信号多路转换器模块选择其中的一个BCD码;7段译码器模块输出段码信号显示具体的十进制数。第5章设计实例第5章设计实例具体的程序和说明如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.

92、ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-使用XC2S15-5 VQ100C ENTITY vmeter ISPORT ( clk : IN STD_LOGIC;scanclk : IN STD_LOGIC;cmp: IN STD_LOGIC;第5章设计实例第5章设计实例row : INOUT STD_LOGIC_VECTOR(2 DOWNTO 0);led : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);led8: OUT STD_LOGIC;da: INOUT STD_LOGIC

93、_VECTOR(7 DOWNTO 0);da1: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);END vmeter;ARCHITECTURE Behavioral OF vmeter ISSIGNAL shift: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL bcd,bcd1,bcd2,bcd3: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL bcd11,bcd12,bcd13: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tempdata: STD_LOGIC_VECTOR(7 DOW

94、NTO 0);SIGNAL cclk,en,start,eoc,c1,c2: STD_LOGIC;第5章设计实例第5章设计实例BEGINP1: PROCESS(clk,start)BEGINIF rising_edge(clk) THENIF start=1 OR (shift/=000000001 AND shift/=000000010AND shift/=000000100 AND shift/=000001000AND shift/=000010000 AND shift/=000100000AND shift/=001000000 AND shift/=010000000AND sh

95、ift/=100000000) THENshift=100000000;第5章设计实例第5章设计实例eoc=0;ELSIF shift(0)= 1 THENeoc=1;ELSEshift=0 & shift(8 DOWNTO 1); eoc=0;END IF;END IF;END PROCESS P1;第5章设计实例第5章设计实例P2: PROCESS(clk,start,shift)BEGINIF rising_edge (clk) THENIF start=1 THENdada(7)da(7)=cmp;da(6)da(6)=cmp;da(5)da(5)=cmp;da(4)da(4)=cmp

96、;da(3)da(3)=cmp;da(2)da(2)=cmp;da(1)da(1)=cmp;da(0)da(0)NULL;END CASE;END IF;END PROCESS P2;Px: PROCESS(clk)BEGINIF rising_edge (clk) THENda1=da;END IF;END PROCESS Px;第5章设计实例第5章设计实例P30: PROCESS(scanclk,da,eoc) BEGINIF rising_edge(scanclk) THENIF eoc=0 THENtempdata=00000000;bcd1=0000;en=0;ELSIF tempd

97、ata da THEN第5章设计实例第5章设计实例tempdata=tempdata+1;IF bcd1=1000 THENbcd1=0000; c1=1;ELSEbcd1=bcd1+2; c1=0;END IF;ELSIF tempdata=da THENen=1;END IF; END IF;END PROCESS P30;第5章设计实例第5章设计实例P31: PROCESS(c1,eoc)BEGINIF eoc=0 THENbcd2=0000;ELSIF rising_edge(c1) THENIF bcd2=1000 THENbcd2=0000; c2=1;ELSEbcd2=bcd2+

98、1; c2=0;END IF;END IF;END PROCESS P31;第5章设计实例第5章设计实例P32: PROCESS(c2,eoc)BEGINIF eoc=0 THENbcd3=0000;ELSIF rising_edge(c2) THENIF bcd3=1001 THENbcd3=0000;ELSEbcd3=bcd3+1;END IF;END IF;END PROCESS P32;第5章设计实例第5章设计实例P4: PROCESS(clk,en)BEGINIF rising_edge(clk) THENIF en=1 THENbcd11=bcd1;bcd12=bcd2;bcd13

99、=bcd3;start=1;ELSEstart=010 THENrow=000;ELSErow bcd = bcd13;led8 bcd = bcd12;led8 bcd = bcd11;led8 NULL;END CASE;END PROCESS P6;第5章设计实例第5章设计实例-a,b,c,d,e,f,g,dpWITH bcd SELECT-7段译码器led=0110000 WHEN 0001, -11101101 WHEN 0010, -21111001 WHEN 0011, -30110011 WHEN 0100, -41011011 WHEN 0101, -51011111 WHE

100、N 0110, -61110000 WHEN 0111, -71111111 WHEN 1000, -81111011 WHEN 1001, -91111110 WHEN OTHERS; -0END Behavioral;第5章设计实例第5章设计实例下面是数字电压表程序中使用到的信号及其对应的管脚。#PACE: Start of Constraints extracted by PACE from the DesignNET clkLOC=P88;NET scanclkLOC=P36;NET rowLOC=P47;NET rowLOC=P46;NET rowLOC=P45;NET led8LO

101、C=P53;NET ledLOC=P54;NET ledLOC=P55;NET ledLOC=P56;NET ledLOC=P57;NET ledLOC=P58;第5章设计实例第5章设计实例NET ledLOC=P59;NET ledLOC=P60;NET cmpLOC=P84;NET daLOC=P67;NET daLOC=P68;NET daLOC=P69;NET daLOC=P70;NET daLOC=P71;NET daLOC=P72;NET daLOC=P82;NET daLOC=P83;第5章设计实例第5章设计实例NET da1LOC=P30;NET da1LOC=P31;NET

102、da1LOC=P32;NET da1LOC=P34;NET da1LOC=P40;NET da1LOC=P41;NET da1LOC=P43;NET da1LOC=P44;第5章设计实例第5章设计实例以上几个应用实例的设计文件都是在ISE 5.1i开发系统中编译通过的设计原文件,并且下载到实验板的FPGA或CPLD芯片中。虽然按照预先提出的设计要求,在CPLD-A型数字系统实验开发板中得到验证,但是从具体的设计思路和采用的方法上考虑,却不一定是最好和最优的。由于实验板上资源的限制,这些实例与实际情况还有一定的差距。在设计具体的产品和应用项目时,应该根据具体的情况,采用更加巧妙的设计思想和灵活的方法,满足不同的技术要求和实现不同的逻辑功能。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号