《《设计应用实例》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《设计应用实例》PPT课件.ppt(245页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6 6章章 VHDL VHDL设计应用实例设计应用实例 第第6章章 VHDL设计应用实例设计应用实例 6.1 8位加法器的设计位加法器的设计 6.3 序列检测器的设计序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计正负脉宽数控调制信号发生器的设计 6.5 数字频率计的设计数字频率计的设计 6.6 数字秒表的设计数字秒表的设计 第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.1 8位加法器的设计位加法器的设计 1设计思路设计思路 多位加法器由多位加法器由4位二进制并行加法器级联位二进制并行加法器级联构成是较好选择。构成是较好选择。本本设设计计中中的的8位位二二进进制
2、制并并行行加加法法器器即即是是由由两两个个4位位二二进进制制并并行行加加法法器器级级联联而而成成的的,其其电电路原理图如图路原理图如图6.1所示。所示。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图图6.1 8位加法器电路原理图位加法器电路原理图第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2VHDL源程序源程序1)4位二进制并行加法器的源程序位二进制并行加法器的源程序ADDER4B.VHDLIBRARY IEEE;ENTITY ADDER4B IS -4位二进制并行加法器位二进制并行加法器PORT(C4:IN STD_LOGIC;-低位来的进位低位来的进位第第6
3、 6章章 VHDL VHDL设计应用实例设计应用实例 A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-4位加数位加数 B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-4位被加数位被加数 S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-4位和位和 CO4:OUT STD_LOGIC);-进位输出进位输出 END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B IS SIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0);-中间结果中间结果 SIGNAL A5,B5
4、:STD_LOGIC_VECTOR(4 DOWNTO 0);-扩展加数以及被加数位扩展加数以及被加数位第第6 6章章 VHDL VHDL设计应用实例设计应用实例 BEGIN A5=0&A4;-将将4位加数矢量扩为位加数矢量扩为5位,为进位提供空间位,为进位提供空间 B5=0&B4;-将将4位被加数矢量扩为位被加数矢量扩为5位,为进位提供空间位,为进位提供空间 S5=A5+B5+C4;S4=S5(3 DOWNTO 0);-四位和给四位和给S4 CO4C8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWNTO0),S4=S8(3 DOWNTO 0),CO4=SC);第第6 6章章 VH
5、DL VHDL设计应用实例设计应用实例 U2:ADDER4B -例化例化(安装安装)一个一个4位二进制加法器位二进制加法器U2PORT MAP(C4=SC,A4=A8(7 DOWNTO 4),B4=B8(7 DOWNTO 4),S4=S8(7 DOWNTO 4),CO4=CO8);END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.3 序列检测器的设计序列检测器的设计 1设计思路设计思路 序列检测器可用于检测一组或多组由二进制序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号。码组成的脉冲序列信号。当序列检测器连续收到当序列检测器连
6、续收到一组串行二进制码后,一组串行二进制码后,如果这组码与检测器中预如果这组码与检测器中预先设置的码相同,则输出先设置的码相同,则输出1,否则输出,否则输出0。如图如图6.3所示,当一串待检测的串行数据进入检测器后,所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续检测中都与预置的密码数若此数在每一位的连续检测中都与预置的密码数相同,则输出相同,则输出“A”,否则仍然输出,否则仍然输出“B”。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图图6.3 8位序列检测器逻辑图位序列检测器逻辑图第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2VHDL源程序源程序
7、LIBRARY IEEE;ENTITY CHK IS PORT(DIN:IN STD_LOGIC;-串行输入数据位串行输入数据位 CLK,CLR:IN STD_LOGIC;-工作时钟工作时钟/复位信号复位信号 D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-8位待检测预置数位待检测预置数 AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-检测结果输出检测结果输出第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END ENTITY CHK;ARCHITECTURE ART OF CHK IS SIGNAL Q:INTEGER RANGE
8、0 TO 8;-作为标志位作为标志位BEGINPROCESS(CLK,CLR)ISBEGINIF CLR=1 THEN Q IF DIN=D(7)THEN Q=1;ELSE Q IF DIN=D(6)THEN Q=2;ELSE Q IF DIN=D(5)THEN Q=3;ELSE Q IF DIN=D(4)THEN Q=4;ELSE Q IF DIN=D(3)THEN Q=5;ELSE Q IF DIN=D(2)THEN Q=6;ELSE Q IF DIN=D(1)THEN Q=7;ELSE Q IF DIN=D(0)THEN Q=8;ELSE Q Q=0;END CASE;END IF;EN
9、D PROCESS;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 PROCESS(Q)IS -检测结果判断输出检测结果判断输出BEGINIF Q=8 THEN AB=1010;-序序列列数数检检测测正正确确,输输出出“A”ELSE AB=1011;-序列数检测错误,输出序列数检测错误,输出“B”END IF;END PROCESS;END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.4 正负脉宽数控调制信号发生器的设计正负脉宽数控调制信号发生器的设计1设计思路设计思路 图图6.4 是脉宽数控调制信号发生器逻辑图,是脉宽数控调制
10、信号发生器逻辑图,此信号发生器是由两个完全相同的此信号发生器是由两个完全相同的可自加载加法可自加载加法计数器计数器LCNT8组成的,它的组成的,它的输出信号的高低电平输出信号的高低电平脉宽可分别由两组脉宽可分别由两组8位预置数进行控制。位预置数进行控制。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图图6.4 脉宽数控调制信号发生器逻辑图脉宽数控调制信号发生器逻辑图第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2VHDL源程序源程序1)8位可自加载加法计数器的源程序位可自加载加法计数器的源程序LCNT8.VHDLIBRARY IEEE;ENTITY LCNT8 IS
11、 -8位可自加载加法计数器位可自加载加法计数器 PORT(CLK,LD:IN STD_LOGIC;-工作时钟工作时钟/预置值预置值加载信号加载信号 D:IN INTEGER RANGE 0 TO 255 -8位分频预置数位分频预置数 CAO:OUT STD_LOGIC);-计数溢出输出计数溢出输出END ENTITY LCNT8;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTURE ART OF LCNT8 IS SIGNAL COUNT:INTEGER RANGE 0 TO 255;-8位计数器设置位计数器设置BEGINPROCESS(CLK)ISBEGIN
12、IF CLKEVENT AND CLK=1 THEN IF LD=1 THEN COUNT=D;-LD为高电平时加载为高电平时加载预置数预置数第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ELSE COUNT=COUNT+1;-否则继续计数否则继续计数 END IF;END IF;END PROCESS;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 PROCESS(CLK,COUNT)ISBEGIN IF CLKEVENT AND CLK=1 THEN IF COUNT=255 THEN CAO=1;ELSE CAOCLK,LD=LD1,D=A,CAO=CAO1);
13、U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2);PROCESS(CAO1,CAO2)ISBEGINIF CAO1=1 THEN PSINT=0;-计数溢出信号清计数溢出信号清0第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ELSIF CAO2 EVENT AND CAO2=1 THEN PSINT=1;END IF;END PROCESS;LD1=NOT PSINT;LD2=PSINT;PSOUT=PSINT;END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.5 数字频率计的设计
14、数字频率计的设计1.设计思路设计思路 图图6.5是是8位位十十进进制制数数字字频频率率计计的的电电路路逻逻辑辑图图,它它由由一一个个测测频频控控制制信信号号发发生生器器TESTCTL、八八个个有有时时钟钟使使能能的的十十进进制制计计数数器器CNT10、一一个个32位锁存器位锁存器REG32B组成。组成。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图图6.5 8位十进制数字频率计逻辑图位十进制数字频率计逻辑图 第第6 6章章 VHDL VHDL设计应用实例设计应用实例 1)测频控制信号发生器设计测频控制信号发生器设计 频率测量的基本原理是计算每秒钟内待测信号的频率测量的基本原理是
15、计算每秒钟内待测信号的脉冲个数。脉冲个数。要使计数使能信号要使计数使能信号TSTEN能产生一个能产生一个1秒脉秒脉宽的周期信号,对每个计数器宽的周期信号,对每个计数器CNT10的的ENA使能端进使能端进行同步控制。行同步控制。TSTEN为高电平时,计数;低电平时,为高电平时,计数;低电平时,停止计数,并保持当前值。停止计数,并保持当前值。测频控制信号发生器的工作时序如图测频控制信号发生器的工作时序如图6.6所示。为所示。为了产生这个时序图,需建立一个由了产生这个时序图,需建立一个由D触发器构成的二分触发器构成的二分频器,频器,在每次时钟在每次时钟CLK(1HZ)上沿到来时,上沿到来时,TSTE
16、N值值翻转,脉宽为翻转,脉宽为1秒秒,作为闸门信号。作为闸门信号。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图6.6测频控制信号发生器工作时序第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2)寄存器寄存器REG32B设计设计 设置锁存器的好处是,显示的数据稳定,设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。不会由于周期性的清零信号而不断闪烁。3)十进制计数器十进制计数器CNT10的设计的设计 如如图图6.5所所示示,此此十十进进制制计计数数器器的的特特殊殊之之处处是是,有有一一时时钟钟使使能能输输入入端端ENA,用用于于锁锁定定计计数数
17、值。当高电平时计数允许,低电平时计数禁止。值。当高电平时计数允许,低电平时计数禁止。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2.VHDL源程序源程序1)有时钟使能的十进制计数器的源程序有时钟使能的十进制计数器的源程序CNT10.VHDLIBRARY IEEE;ENTITY CNT10 IS PORT(CLK:IN STD_LOGIC;-计数时钟信号计数时钟信号 CLR:IN STD_LOGIC;-清零信号清零信号 ENA:IN STD_LOGIC;-计数使能信号计数使能信号 CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出位计数结果输出 CARR
18、Y_OUT:OUT STD_LOGIC);-计数进位输出计数进位输出第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI:INTEGER RANGE 0 TO 15;BEGINPROCESS(CLK,CLR,ENA)ISBEGINIF CLR=1 THEN CQI=0;-计数器异步清零计数器异步清零ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN 第第6 6章章 VHDL VHDL设计应用实例设计应用实例 IF CQI9 THEN CQI
19、=CQI+1;ELSE CQI=0;END IF;-等于等于9,则计数器清零,则计数器清零 END IF;END IF;END PROCESS;PROCESS(CQI)IS BEGIN IF CQI=9 THEN CARRY_OUT=1;-进位输出进位输出 ELSE CARRY_OUT=0;END IF;END PROCESS;CQ=CQI;END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2)32位锁存器的源程序位锁存器的源程序REG32B.VHDLIBRARY IEEE;ENTITY REG32B IS PORT(LOAD:IN STD_
20、LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT:OUT STD_LOGEC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTURE ART OF REG32B IS BEGINPROCESS(LOAD,DIN)ISBEGINIF LOAD EVENT AND LOAD=1 THEN DOUT=DIN;-锁存输入数据锁存输入数据 END IF;END PROCESS;END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设
21、计应用实例设计应用实例 3)测频控制信号发生器的源程序测频控制信号发生器的源程序TESTCTL.VHD LIBRARY IEEE;ENTITY TESTCTL IS PORT(CLK:IN STD_LOGIC;-1 Hz测频控制时钟测频控制时钟 TSTEN:OUT STD_LOGIC;-计数器时钟使能计数器时钟使能 CLR_CNT:OUT STD_LOGIC;-计数器清零计数器清零 LOAD:OUT STD_LOGIC);-输出锁存信号输出锁存信号第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END ENTITY TESTCTL;ARCHITECTURE ART OF TESTC
22、TL IS SIGNAL DIV2CLK:STD_LOGIC;BEGINPROCESS(CLK)IS BEGINIF CLKEVENT AND CLK=1 THEN DIV2CLK=NOT DIV2CLK;-1 HZ时钟二分频时钟二分频END IF;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END PROCESS;PROCESS(CLK,DIV2CLK)ISBEGIN IF CLK=0 AND DIV2CLK=0 THEN CLR_CNT=1;-0.5S后后产产生生计计数数器器清清零零信信号号 ELSE CLR_CNT=0;END IF;END PROCESS;LOAD=NO
23、T DIV2CLK;TSTENCLK,TSTEN=SE,CLR_CNT=SC,LOAD=SL);U1:CNT10 PORT MAP(CLK=FSIN,CLR=SC,ENA=SE,CQ=SD(3 DOWNTO 0),CARRY_OUT=S1);-名字名字关联关联第第6 6章章 VHDL VHDL设计应用实例设计应用实例 U2:CNT10 PORT MAP(CLK=S1,CLR=SC,ENA=SE,CQ=SD(7 DOWNTO 4),CARRY_OUT=S2);U3:CNT10 PORT MAP(S2,SC,SE,SD(11 DOWNTO 8),S3);-位置关联位置关联U4:CNT10 PORT
24、 MAP(S3,SC,SE,SD(15 DOWNTO 12),S4);U5:CNT10 PORT MAP(S4,SC,SE,SD(19 DOWNTO 16),S5);U6:CNT10 PORT MAP(S5,SC,SE,SD(23 DOWNTO 20),S6);U7:CNT10 PORT MAP(S6,SC,SE,SD(27 DOWNTO 24),S7);U8:CNT10 PORT MAP(S7,SC,SE,SD(31 DOWNTO 28),S8);U9:REG32B PORT MAP(LOAD=SL,DIN=SD(31 DOWNTO 0),DOUT=DOUT);END ARCHITECTUR
25、E ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.6 数字秒表的设计数字秒表的设计 1设计思路设计思路 设计一个计时范围为设计一个计时范围为0.01秒秒1小时的数字秒表,小时的数字秒表,因此要有一个比较精确的计时基准信号,这里用周因此要有一个比较精确的计时基准信号,这里用周期为期为1/100 s的计时脉冲。的计时脉冲。对每一计数器需设置对每一计数器需设置CLR清零信号输入外,并在六个计数器设置时钟使能信清零信号输入外,并在六个计数器设置时钟使能信号号ENA,即计时允许信号。因此数字秒表可由一个,即计时允许信号。因此数字秒表可由一个分频器、四个十进制计数器分频器、四个十
26、进制计数器(1/100秒、秒、1/10秒、秒、1秒、秒、1分分)以及两个六进制计数器以及两个六进制计数器(10秒、秒、10分分)组成,如组成,如图图6.7所示。所示。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图图6.7中六个中六个4位二进制计数输出的最小显示位二进制计数输出的最小显示值分别为:值分别为:DOUT3.01/100秒、秒、DOUT7.41/10秒、秒、DOUT11.81秒、秒、DOUT15.1210秒、秒、DOUT19.161分、分、DOUT23.2010分。分。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图6.7数字秒表电路逻辑图第第6 6章章
27、VHDL VHDL设计应用实例设计应用实例 2.VHDL源程序源程序1)3 MHz100 Hz分频器的源程序分频器的源程序CLKGEN.VHDLIBRARY IEEE;ENTITY CLKGEN IS PORT(CLK:IN STD_LOGIC;-3 MHz信号输入信号输入 NEWCLK:OUT STD_LOGIC);-100 Hz计时时钟信号输出计时时钟信号输出END ENTITY CLKGEN;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTURE ART OF CLKGEN IS SIGNAL CNTER:INTEGER RANGE 0 TO 10#2999
28、9#;-十进制计数预制数十进制计数预制数BEGINPROCESS(CLK)IS -分频计数器,由分频计数器,由3 MHz时钟产生时钟产生100 Hz信号信号BEGIN IS IF CLKEVENT AND CLK=1 THEN IF CNTER=10#29999#THEN CNTER=0;-3 MHz信号变为信号变为100 Hz,计数常数为,计数常数为30000第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ELSE CNTER=CNTER+1;END IF;END IF;END PROCESS;PROCESS(CNTER)IS -计数溢出信号控制计数溢出信号控制BEGIN IF
29、CNTER=10#29999#THEN NEWCLK=1;ELSE NEWCLK=0;END IF;END PROCESS;END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2)六进制计数器的源程序六进制计数器的源程序CNT6.VHD(十进制计数器的源十进制计数器的源程序程序CNT10.VHD与此类似与此类似)LIBRARY IEEE;ENTITY CNT6 ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
30、;CARRY_OUT:OUT STD_LOGIC);第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END ENTITY CNT6;ARCHITECTURE ART OF CNT6 IS SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK,CLR,ENA)IS BEGIN IF CLR=1 THEN CQI=0000;ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN IF CQI=“0101”THEN CQI=“0000”;-六进制为六进制为0101 十进制计数器为十进制计数器为1
31、001 ELSE CQI=CQI+1;END IF;END IF;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 END IF;END PROCESS;PROCESS(CQI)IS BEGIN IF CQI=“0000”THEN CARRY_OUT=1;ELSE CARRY_OUT=0;END IF;END PROCESS;CQCLK,NEWCLK=S0);-名字关联名字关联 U1:CNT10 PORT MAP(S0,CLR,ENA,DOUT(3 DOWNTO 0),S1);-位置关联位置关联 U2:CNT10 PORT MAP(S1,CLR,ENA,DOUT(7 DOWNTO 4
32、),S2);U3:CNT10 PORT MAP(S2,CLR,ENA,DOUT(11 DOWNTO 8),S3);U4:CNT6 PORT MAP(S3,CLR,ENA,DOUT(15 DOWNTO 12),S4);U5:CNT10 PORT MAP(S4,CLR,ENA,DOUT(19 DOWNTO 16),S5);U6:CNT6 PORT MAP(S5,CLR,ENA,DOUT(23 DOWNTO 20);END ARCHITECTURE ART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 6.7 MCS-51单片机与单片机与FPGA/CPLD总线接总线接口逻辑设计口逻辑设
33、计 单片机具有性能价格比高、功能灵活、易于人机对话和良好的数据处理能力等特点;PLD则具有高速、高可靠以及开发便捷规范等方面的优点,以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中被广泛应用。单片机与CPLD的接口方式一般有两种,即总线方式与独立方式。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 单片机以总线方式与FPGA/CPLD进行数据与控制信息通信有许多优点:(1)速度快。其通信工作时序是纯硬件行为,对于MCS-51单片机,只需一条单字节指令就能完成所需的读/写时序,如:MOVDPTR,A;MOVA,DPTR。(2)节省PLD芯片的I/O口线。如图6.8,如果将
34、图中的译码DECODER设置足够的译码输出,以及安排足够的锁存器,就能仅通过19根I/O口线在FPGA/CPLD与单片机之间进行各种类型的数据与控制信息交换。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图6.8CPLD/FPGA与MCS-51单片机的总线接口通信逻辑图第第6 6章章 VHDL VHDL设计应用实例设计应用实例 (3)相对于非总线方式,单片机的编程便捷,控制可靠。(4)在FPGA/CPLD中通过逻辑切换,单片机易于与SRAM或ROM接口。这种方式有许多实用之处,如利用类似于微处理器DMA的工作方法,首先由FPGA/CPLD与接口的高速A/D等器件进行高速数据采样,
35、并将数据暂存于SRAM中,采样结束后,通过切换,使单片机与SRAM以总线方式进行数据通信,以便发挥单片机强大的数据处理能力。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 1设计思路对单片机与FPGA/CPLD以总线方式通信的逻辑设计,应详细了解单片机的总线读/写时序,根据时序图来设计逻辑结构。图6.9是MCS-51系列单片机的时序图,其时序电平变化速度与单片机工作时钟频率有关。第第6 6章章 VHDL VHDL设计应用实例设计应用实例 图6.9MCS-51单片机总线接口方式工作时序第第6 6章章 VHDL VHDL设计应用实例设计应用实例 2.VHDL源程序LIBRARYIEEE
36、;-MCS-51单片机读/写电路;ENTITYMCS_51ISPORT(-与8031接口的各端口定义:P0:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);-双向地址/数据口P2:INSTD_LOGIC_VECTOR(7DOWNTO0);-高8位地址线RD,WR:INSTD_LOGIC;-读、写允许第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ALE:INSTD_LOGIC;-地址锁存READY:INSTD_LOGIC;-待读入数据准备就绪标志位AD_CS:OUTSTD_LOGIC;-A/D器件片选信号DATAIN1:INSTD_LOGIC_VECTOR(7DOW
37、NTO0);-单片机待读回信号LATCH1:INSTD_LOGIC;-读回信号锁存DATOUT1:OUTSTD_LOGIC_VECTOR(7DOWNTO0);-锁存输出数据1DATOUT2:OUTSTD_LOGIC_VECTOR(7DOWNTO0);-锁存输出数据2ENDENTITYMCS_51;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTUREARTOFMCS_51ISSIGNALLATCH_ADDRES:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLATCH_OUT1:STD_LOGIC_VECTOR(7DOWNTO0);SIGNAL
38、LATCH_OUT2:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLATCH_IN1:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALWR_ENABLE1:STD_LOGIC;SIGNALWR_ENABLE2:STD_LOGIC;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 BEGINPROCESS(ALE)IS-低8位地址锁存进程BEGINIFALEEVENTANDALE=0THENLATCH_ADDRES=P0;-ALE的下降沿将P0口的低8位地址ENDIF;-锁入锁存器LATCH_ADDRES中ENDPROCESS;第第6 6章章 V
39、HDL VHDL设计应用实例设计应用实例 PROCESS(P2,LATCH_ADDRES)IS-WR写信号译码进程1BEGINIF(LATCH_ADDRES=11110101)AND(P2=01101111)THENWR_ENABLE1=WR;-写允许ELSEWR_ENABLE1=1;ENDIF;-写禁止ENDPROCESS;PROCESS(WR_ENABLE1)IS-数据写入寄存器1第第6 6章章 VHDL VHDL设计应用实例设计应用实例 BEGINIFWR_ENABLE1EVENTANDWR_ENABLE1=1THENLATCH_OUT1=P0;ENDIF;ENDPROCESS;PROC
40、ESS(P2,LATCH_ADDRES)IS-WR写信号译码进程2BEGINIF(LATCH_ADDRES=11110011)AND(P2=00011111)THENWR_ENABLE2=WR;-写允许ELSEWR_ENABLE2=1;ENDIF;-写禁止第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ENDPROCESS;PROCESS(WR_ENABLE2)IS-数据写入寄存器2BEGINIFWR_ENABLE2EVENTANDWR_ENABLE2=1THENLATCH_OUT2=P0;ENDIF;ENDPROCESS;PROCESS(P2,LATCH_ADDRES,READY
41、,RD)IS-8031对PLD中数据读入进程第第6 6章章 VHDL VHDL设计应用实例设计应用实例 BEGINIF(LATCH_ADDRES=01111110)AND(P2=10011111)AND(READY=1)AND(RD=0)THENP0=LATCH_IN1;-寄存器中的数据读入P0口ELSEP0=ZZZZZZZZ;ENDIF;-禁止读数,P0口呈高阻态ENDPROCESS;PROCESS(LATCH1)IS-外部数据进入CPLD进程第第6 6章章 VHDL VHDL设计应用实例设计应用实例 BEGINIFLATCH1EVENTANDLATCH1=1THENLATCH_IN1=DA
42、TAIN1;ENDIF;ENDPROCESS;PROCESS(LATCH_ADDRES)IS-A/D工作控制片选信号输出进程BEGIN第第6 6章章 VHDL VHDL设计应用实例设计应用实例 IF(LATCH_ADDRES=00011110)THENAD_CS=0;-允许A/D工作ELSEAD_CS=1;ENDIF;-禁止A/D工作ENDPROCESS;DATOUT1=LATCH_OUT1;DATOUT2MR=0;MY0=0;MG0=1;BR=1;BY0=0;BG0=0;IF(SBANDSM)=1THENIFS=45THENSTATE=B;CLR:=0;EN:=0;第第6 6章章 VHDL
43、VHDL设计应用实例设计应用实例 ELSESTATE=A;CLR:=1;EN:=1;ENDIF;ELSIF(SBAND(NOTSM)=1THENSTATE=B;CLR:=0;EN:=0;ELSESTATEMR=0;MY0=1;MG0=0;BR=1;BY0=0;BG0=0;IFS=5THENSTATE=C;CLR:=0;EN:=0;ELSESTATEMR=1;MY0=0;MG0=0;BR=0;BY0=0;BG0=1;IF(SMANDSB)=1THENIFS=25THENSTATE=D;CLR:=0;EN:=0;ELSESTATE=C;CLR:=1;EN:=1;ENDIF;ELSIFSB=0THE
44、NSTATE=D;CLR:=0;EN:=0;ELSESTATEMR=1;MY0=0;MG0=0;BR=0;BY0=1;BG0=0;IFS=5THENSTATE=A;CLR:=0;EN:=0;ELSESTATE=D;CLR:=1;EN:=1;ENDIF;ENDCASE;ENDIF;ENDPROCESSCNT;ENDARCHITECTUREART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 -CSKZ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCSKZISPORT(I
45、NA:INSTD_LOGIC;OUTA:OUTSTD_LOGIC);ENDENTITYCSKZ;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTUREARTOFCSKZISBEGINPROCESS(INA)ISBEGINIFINA=1THENOUTA=1;ELSEOUTA=0;ENDIF;ENDPROCESS;ENDARCHITECTUREART;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 -CNT45S.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL
46、;ENTITYCNT45SISPORT(SB,CLK,EN45:INSTD_LOGIC;DOUT45M,DOUT45B:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDENTITYCNT45S;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ARCHITECTUREARTOFCNT45SISSIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO0);BEGINPROCESS(SB,CLK,EN45)ISBEGINIFSB=0THENCNT6B=CNT6B-CNT6B-1;ELSIF(CLKEVENTANDCLK=1)THENIFEN45=1T
47、HENCNT6B=CNT6B+1;第第6 6章章 VHDL VHDL设计应用实例设计应用实例 ELSIFEN45=0THENCNT6BDOUT45M=01000101;DOUT45BDOUT45M=01000100;DOUT45BDOUT45M=01000011;DOUT45BDOUT45M=01000010;DOUT45BDOUT45M=01000001;DOUT45BDOUT45M=01000000;DOUT45BDOUT45M=00111001;DOUT45BDOUT45M=00111000;DOUT45BDOUT45M=00110111;DOUT45BDOUT45M=00110110;
48、DOUT45BDOUT45M=00110101;DOUT45BDOUT45M=00110100;DOUT45BDOUT45M=00110011;DOUT45BDOUT45M=00110010;DOUT45BDOUT45M=00110001;DOUT45BDOUT45M=00110000;DOUT45BDOUT45M=00101001;DOUT45BDOUT45M=00101000;DOUT45BDOUT45M=00100111;DOUT45BDOUT45M=00100110;DOUT45BDOUT45M=00100101;DOUT45BDOUT45M=00100100;DOUT45BDOUT4
49、5M=00100011;DOUT45BDOUT45M=00100010;DOUT45BDOUT45M=00100001;DOUT45BDOUT45M=00100000;DOUT45BDOUT45M=00011001;DOUT45BDOUT45M=00011000;DOUT45BDOUT45M=00010111;DOUT45BDOUT45M=00010110;DOUT45BDOUT45M=00010101;DOUT45BDOUT45M=00010100;DOUT45BDOUT45M=00010011;DOUT45BDOUT45M=00010010;DOUT45BDOUT45M=00010001;
50、DOUT45BDOUT45M=00010000;DOUT45BDOUT45M=00001001;DOUT45BDOUT45M=00001000;DOUT45BDOUT45M=00000111;DOUT45BDOUT45M=00000110;DOUT45BDOUT45M=00000101;DOUT45BDOUT45M=00000100;DOUT45BDOUT45M=00000011;DOUT45BDOUT45M=00000010;DOUT45BDOUT45M=00000001;DOUT45BDOUT45M=00000000;DOUT45B=00000000;第第6 6章章 VHDL VHDL设计