《设计应用实例》PPT课件.ppt

上传人:小飞机 文档编号:5605410 上传时间:2023-08-01 格式:PPT 页数:245 大小:1.02MB
返回 下载 相关 举报
《设计应用实例》PPT课件.ppt_第1页
第1页 / 共245页
《设计应用实例》PPT课件.ppt_第2页
第2页 / 共245页
《设计应用实例》PPT课件.ppt_第3页
第3页 / 共245页
《设计应用实例》PPT课件.ppt_第4页
第4页 / 共245页
《设计应用实例》PPT课件.ppt_第5页
第5页 / 共245页
点击查看更多>>
资源描述

《《设计应用实例》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《设计应用实例》PPT课件.ppt(245页珍藏版)》请在三一办公上搜索。

1、第6章 VHDL设计应用实例,6.1 8位加法器的设计 6.3 序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计 6.5 数字频率计的设计 6.6 数字秒表的设计,6.1 8位加法器的设计,1设计思路 多位加法器由4位二进制并行加法器级联构成是较好选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如图6.1所示。,图6.1 8位加法器电路原理图,2VHDL源程序1)4位二进制并行加法器的源程序ADDER4B.VHDLIBRARY IEEE;ENTITY ADDER4B IS-4位二进制并行加法器PORT(C4:IN STD_LOGIC;-低位来

2、的进位,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:STD_LOGIC_VECTOR(4 DOWNTO 0);-扩展加数以及被加数

3、位,BEGIN A5=0&A4;-将4位加数矢量扩为5位,为进位提供空间 B5=0&B4;-将4位被加数矢量扩为5位,为进位提供空间 S5=A5+B5+C4;S4=S5(3 DOWNTO 0);-四位和给S4 CO4=S5(4);-进位给CO4END ARCHITECTURE ART;,2)8位二进制加法器的源程序ADDER8B.VHDLIBRARY IEEE;:ENTITY ADDER8B IS-由4位二进制并行加法器级联而成的8位二进制加法器PORT(C8:IN STD_LOGIC;A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8:IN STD_LOGIC_VEC

4、TOR(7 DOWNTO 0);,S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8:OUT STD_LOGIC);END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B IS-对要调用的元件ADDER4B的界面端口进行定义PORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);,B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4:OUT

5、 STD_LOGIC);END COMPONENT ADDER4B;SIGNAL SC:STD_LOGIC;-4位加法器的进位标志BEGINU1:ADDER4B-例化(安装)一个4位二进制加法器U1PORT MAP(C4=C8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWNTO0),S4=S8(3 DOWNTO 0),CO4=SC);,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

6、ART;,6.3 序列检测器的设计,1设计思路 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。如图6.3所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B”。,图6.3 8位序列检测器逻辑图,2VHDL源程序LIBRARY IEEE;ENTITY CHK IS PORT(DIN:IN STD_LOGIC;-串行输入数据位 CLK,CLR:IN STD_LOGIC;-工作时钟/复位信号 D:IN STD_LOGIC

7、_VECTOR(7 DOWNTO 0);-8位待检测预置数 AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-检测结果输出,END ENTITY CHK;ARCHITECTURE ART OF CHK IS SIGNAL Q:INTEGER RANGE 0 TO 8;-作为标志位BEGINPROCESS(CLK,CLR)ISBEGINIF CLR=1 THEN Q=0;ELSIF CLKEVENT AND CLK=1 THEN-时钟到来时,判断并处理当前输入的位,CASE Q ISWHEN 0=IF DIN=D(7)THEN Q IF DIN=D(6)THEN Q IF

8、 DIN=D(5)THEN Q IF DIN=D(4)THEN Q IF DIN=D(3)THEN Q IF DIN=D(2)THEN Q IF DIN=D(1)THEN Q IF DIN=D(0)THEN Q Q=0;END CASE;END IF;END PROCESS;,PROCESS(Q)IS-检测结果判断输出BEGINIF Q=8 THEN AB=1010;-序列数检测正确,输出“A”ELSE AB=1011;-序列数检测错误,输出“B”END IF;END PROCESS;END ARCHITECTURE ART;,6.4 正负脉宽数控调制信号发生器的设计,1设计思路 图6.4 是

9、脉宽数控调制信号发生器逻辑图,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高低电平脉宽可分别由两组8位预置数进行控制。,图6.4 脉宽数控调制信号发生器逻辑图,2VHDL源程序1)8位可自加载加法计数器的源程序LCNT8.VHDLIBRARY IEEE;ENTITY LCNT8 IS-8位可自加载加法计数器 PORT(CLK,LD:IN STD_LOGIC;-工作时钟/预置值加载信号 D:IN INTEGER RANGE 0 TO 255-8位分频预置数 CAO:OUT STD_LOGIC);-计数溢出输出END ENTITY LCNT8;,ARCHITEC

10、TURE ART OF LCNT8 IS SIGNAL COUNT:INTEGER RANGE 0 TO 255;-8位计数器设置BEGINPROCESS(CLK)ISBEGIN IF CLKEVENT AND CLK=1 THEN IF LD=1 THEN COUNT=D;-LD为高电平时加载预置数,ELSE COUNT=COUNT+1;-否则继续计数 END IF;END IF;END PROCESS;,PROCESS(CLK,COUNT)ISBEGIN IF CLKEVENT AND CLK=1 THEN IF COUNT=255 THEN CAO=1;ELSE CAO=0;END IF

11、;END IF;END PROCESS;END ARCHITECTURE ART;,2)正负脉宽数控调制信号发生器的源程序LIBRARY IEEE-正负脉宽数控调制信号发生器顶层文件;ENTITY PULSE IS PORT(CLK:IN STD_LOGIC;-计数时钟 A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-8位计数预置数 PSOUT:OUT STD_LOGIC);-计数溢出并分频输出END ENTITY PULSE;,ARCHITECTURE ART OF PULSE ISCOMPONENT LCNT8 IS PORT(CLK,LD:IN STD_LOGI

12、C;D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CAO:OUT STD_LOGIC);END COMPONENT LCNT8;SIGNAL CAO1,CAO2:STD_LOGIC;SIGNAL LD1,LD2:STD_LOGIC;-计数加载信号中间量,SIGNAL PSINT:STD_LOGIC;BEGINU1:LCNT8 PORT MAP(CLK=CLK,LD=LD1,D=A,CAO=CAO1);U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2);PROCESS(CAO1,CAO2)ISBEGINIF CAO1=1 THEN

13、PSINT=0;-计数溢出信号清0,ELSIF CAO2 EVENT AND CAO2=1 THEN PSINT=1;END IF;END PROCESS;LD1=NOT PSINT;LD2=PSINT;PSOUT=PSINT;END ARCHITECTURE ART;,6.5 数字频率计的设计,1.设计思路 图6.5是8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、八个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。,图6.5 8位十进制数字频率计逻辑图,1)测频控制信号发生器设计 频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。要使计数

14、使能信号TSTEN能产生一个1秒脉宽的周期信号,对每个计数器CNT10的ENA使能端进行同步控制。TSTEN为高电平时,计数;低电平时,停止计数,并保持当前值。测频控制信号发生器的工作时序如图6.6所示。为了产生这个时序图,需建立一个由D触发器构成的二分频器,在每次时钟CLK(1HZ)上沿到来时,TSTEN值翻转,脉宽为1秒,作为闸门信号。,图6.6 测频控制信号发生器工作时序,2)寄存器REG32B设计 设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。3)十进制计数器CNT10的设计 如图6.5所示,此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定计数值

15、。当高电平时计数允许,低电平时计数禁止。,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位计数结果输出 CARRY_OUT:OUT STD_LOGIC);-计数进位输出,END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI:INTEGER

16、 RANGE 0 TO 15;BEGINPROCESS(CLK,CLR,ENA)ISBEGINIF CLR=1 THEN CQI=0;-计数器异步清零ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN,IF CQI9 THEN CQI=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 AR

17、CHITECTURE ART;,2)32位锁存器的源程序REG32B.VHDLIBRARY IEEE;ENTITY REG32B IS PORT(LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT:OUT STD_LOGEC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;,ARCHITECTURE ART OF REG32B IS BEGINPROCESS(LOAD,DIN)ISBEGINIF LOAD EVENT AND LOAD=1 THEN DOUT=DIN;-锁存输入数据 END IF;E

18、ND PROCESS;END ARCHITECTURE ART;,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);-输出锁存信号,END ENTITY TESTCTL;ARCHITECTURE ART OF TESTCTL IS SIGNAL DIV2CLK:STD_LOGIC;BEGINPROCESS(C

19、LK)IS BEGINIF CLKEVENT AND CLK=1 THEN DIV2CLK=NOT DIV2CLK;-1 HZ时钟二分频END IF;,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=NOT DIV2CLK;TSTEN=DIV2CLK;-根据时序图来确定END ARCHITECTURE ART;,4)数字频率计的源程序FREQ.VHDLIBRARY IEEE;EN

20、TITY FREQ IS PORT(FSIN:IN STD_LOGIC;CLK:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY FREQ;ARCHITECTURE ART OF FREQ IS,COMPONENT CNT10 IS-待调用的有时钟使能的十进制计数器端口定义 PORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT CNT10;COMPONENT REG

21、32B IS-待调用的32位锁存器端口定义 COMPONENT TESTCTL IS-待调用的测频控制信号发生器端口定义,SIGNAL SE,SC,SL:STD_LOGIC;SIGNAL S1,S2,S3,S4,S5,S6,S7,S7,S8:STD_LOGIC;SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU0:TESTCTL PORT MAP(CLK=CLK,TSTEN=SE,CLR_CNT=SC,LOAD=SL);U1:CNT10 PORT MAP(CLK=FSIN,CLR=SC,ENA=SE,CQ=SD(3 DOWNTO 0),CARRY_OU

22、T=S1);-名字关联,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 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,

23、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 ARCHITECTURE ART;,6.6 数字秒表的设计,1设计思路 设计一个计时范围为0.01秒1小时的数字秒表,因此要有一个比较精确的计时基准信号,这里用周期为1/100 s的计时脉冲。对每一计数器需设置CLR清零信号输入外,并在六个计数器设置时钟使能信号ENA,即计时允许信号。因此数字秒表可由一个分频器、四个十进制计

24、数器(1/100秒、1/10秒、1秒、1分)以及两个六进制计数器(10秒、10分)组成,如图6.7所示。,图6.7中六个4位二进制计数输出的最小显示值分别为:DOUT3.01/100秒、DOUT7.41/10秒、DOUT11.81秒、DOUT15.1210秒、DOUT19.161分、DOUT23.2010分。,图6.7 数字秒表电路逻辑图,2.VHDL源程序1)3 MHz100 Hz分频器的源程序CLKGEN.VHDLIBRARY IEEE;ENTITY CLKGEN IS PORT(CLK:IN STD_LOGIC;-3 MHz信号输入 NEWCLK:OUT STD_LOGIC);-100

25、Hz计时时钟信号输出END ENTITY CLKGEN;,ARCHITECTURE ART OF CLKGEN IS SIGNAL CNTER:INTEGER RANGE 0 TO 10#29999#;-十进制计数预制数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,ELSE CNTER=CNTER+1;END IF;END IF;END PROCESS;PROCES

26、S(CNTER)IS-计数溢出信号控制BEGIN IF CNTER=10#29999#THEN NEWCLK=1;ELSE NEWCLK=0;END IF;END PROCESS;END ARCHITECTURE ART;,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);CARRY_OUT:OUT STD_LOGIC)

27、;,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 十进制计数器为1001 ELSE CQI=CQI+1;END IF;END IF;,END IF;END PROCESS;PROCESS(CQI)

28、IS BEGIN IF CQI=“0000”THEN CARRY_OUT=1;ELSE CARRY_OUT=0;END IF;END PROCESS;CQ=CQI;END ARCHITECTURE ART;,3)数字秒表的源程序TIMES.VHDLIBRARY IEEE;ENTITY TIMES IS PORT(CLR:IN STD_LOGIC;CLK:IN STD_LOGIC;ENA:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(23 DOWNTO 0);END ENTITY TIMES;ARCHITECTURE ART OF TIMES IS,COMPONE

29、NT CLKGEN IS PORT(CLK:IN STD_LOGIC;NEWCLK:OUT STD_LOGIC);END COMPONENT CLKGEN;COMPONENT CNT10 IS PORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);,END COMPONENT CNT10;COMPONENT CNT6 IS PORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_O

30、UT:OUT STD_LOGIC);END COMPONENT CNT6;SIGNAL S0:STD_LOGIC;SIGNAL S1,S2,S3,S4,S5:STD_LOGIC;BEGIN,U0:CLKGEN PORT MAP(CLK=CLK,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),S2);U3:CNT10 PORT MAP(S2,CLR,ENA,DOUT(11 DOWNTO 8),S3);U4:C

31、NT6 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.7 MCS-51单片机与FPGA/CPLD总线接口逻辑设计,单片机具有性能价格比高、功能灵活、易于人机对话和良好的数据处理能力等特点;PLD则具有高速、高可靠以及开发便捷规范等方面的优点,以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中被广泛应用。

32、单片机与CPLD的接口方式一般有两种,即总线方式与独立方式。,单片机以总线方式与FPGA/CPLD进行数据与控制信息通信有许多优点:(1)速度快。其通信工作时序是纯硬件行为,对于MCS-51单片机,只需一条单字节指令就能完成所需的读/写时序,如:MOV DPTR,A;MOV A,DPTR。(2)节省PLD芯片的I/O口线。如图6.8,如果将图中的译码DECODER设置足够的译码输出,以及安排足够的锁存器,就能仅通过19根I/O口线在FPGA/CPLD与单片机之间进行各种类型的数据与控制信息交换。,图6.8 CPLD/FPGA与MCS-51单片机的总线接口通信逻辑图,(3)相对于非总线方式,单片

33、机的编程便捷,控制可靠。(4)在FPGA/CPLD中通过逻辑切换,单片机易于与SRAM或ROM接口。这种方式有许多实用之处,如利用类似于微处理器DMA的工作方法,首先由FPGA/CPLD与接口的高速A/D等器件进行高速数据采样,并将数据暂存于SRAM中,采样结束后,通过切换,使单片机与SRAM以总线方式进行数据通信,以便发挥单片机强大的数据处理能力。,1设计思路 对单片机与FPGA/CPLD以总线方式通信的逻辑设计,应详细了解单片机的总线读/写时序,根据时序图来设计逻辑结构。图6.9是MCS-51系列单片机的时序图,其时序电平变化速度与单片机工作时钟频率有关。,图6.9 MCS-51单片机总线

34、接口方式工作时序,2.VHDL源程序LIBRARY IEEE;-MCS-51单片机读/写电路;ENTITY MCS_51 IS PORT(-与8031接口的各端口定义:P0:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);-双向地址/数据口 P2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-高8位地址线 RD,WR:IN STD_LOGIC;-读、写允许,ALE:IN STD_LOGIC;-地址锁存 READY:IN STD_LOGIC;-待读入数据准备就绪标志位AD_CS:OUT STD_LOGIC;-A/D器件片选信号DATAIN1:IN STD

35、_LOGIC_VECTOR(7 DOWNTO 0);-单片机待读回信号LATCH1:IN STD_LOGIC;-读回信号锁存 DATOUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-锁存输出数据1 DATOUT2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-锁存输出数据2 END ENTITY MCS_51;,ARCHITECTURE ART OF MCS_51 IS SIGNAL LATCH_ADDRES:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LATCH_OUT1:STD_LOGIC_VECTOR(7 DO

36、WNTO 0);SIGNAL LATCH_OUT2:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LATCH_IN1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL WR_ENABLE1:STD_LOGIC;SIGNAL WR_ENABLE2:STD_LOGIC;,BEGINPROCESS(ALE)IS-低8位地址锁存进程BEGIN IF ALEEVENT AND ALE=0 THEN LATCH_ADDRES=P0;-ALE的下降沿将P0口的低8位地址 END IF;-锁入锁存器LATCH_ADDRES中END PROCESS;,PROCES

37、S(P2,LATCH_ADDRES)IS-WR写信号译码进程1BEGIN IF(LATCH_ADDRES=11110101)AND(P2=01101111)THEN WR_ENABLE1=WR;-写允许 ELSE WR_ENABLE1=1;END IF;-写禁止 END PROCESS;PROCESS(WR_ENABLE1)IS-数据写入寄存器1,BEGIN IF WR_ENABLE1EVENT AND WR_ENABLE1=1 THEN LATCH_OUT1=P0;END IF;END PROCESS;PROCESS(P2,LATCH_ADDRES)IS-WR写信号译码进程2 BEGIN I

38、F(LATCH_ADDRES=11110011)AND(P2=00011111)THEN WR_ENABLE2=WR;-写允许 ELSE WR_ ENABLE2=1;END IF;-写禁止,END PROCESS;PROCESS(WR_ENABLE2)IS-数据写入寄存器2BEGIN IF WR_ENABLE2EVENT AND WR_ENABLE2=1 THEN LATCH_OUT2=P0;END IF;END PROCESS;PROCESS(P2,LATCH_ADDRES,READY,RD)IS-8031对PLD中数据读入进程,BEGIN IF(LATCH_ADDRES=01111110)

39、AND(P2=10011111)AND(READY=1)AND(RD=0)THEN P0=LATCH_IN1;-寄存器中的数据读入P0口 ELSE P0=ZZZZZZZZ;END IF;-禁止读数,P0口呈高阻态 END PROCESS;PROCESS(LATCH1)IS-外部数据进入CPLD进程,BEGIN IF LATCH1EVENT AND LATCH1=1 THEN LATCH_IN1=DATAIN1;END IF;END PROCESS;PROCESS(LATCH_ADDRES)IS-A/D工作控制片选信号输出进程 BEGIN,IF(LATCH_ADDRES=00011110)THE

40、N AD_CS=0;-允许A/D工作 ELSE AD_CS=1;END IF;-禁止A/D工作 END PROCESS;DATOUT1=LATCH_OUT1;DATOUT2=LATCH_OUT2;END ARCHITECTURE ART;,这是一个CPLD与8031单片机接口的VHDL电路设计。8031以总线方式工作,例如,由8031将数据5AH写入目标器件中的第一个寄存器LATCH_OUT1的指令是:MOV A,#5AH MOV DPTR,#6FF5H MOVX DPTR,A 当READY为高电平时,8031从目标器件中的寄存器LATCH_IN1将数据读入的指令是:MOV DPTR,#9F7

41、EH MOVX A,DPTR,3.硬件逻辑验证请读者根据前述方法自行完成硬件逻辑验证工作。,6.8 交通灯信号控制器的设计,1设计思路 欲设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2)主干道处于常允许通行状态,而支干道有车来才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。,(3)当主、支道均有车时,两者交替允许通行,主干道每次放行45 s,支干道每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作为过渡,并进行减计时显示。

42、整个交通控制器的内部逻辑结构原理如图6.10所示。,图6.10 交通控制器的内部逻辑结构原理图,2 VHDL源程序-JTDKZ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY JTDKZ IS PORT(CLK,SM,SB:IN STD_LOGIC;MR,MY0,MG0,BR,BY0,BG0:OUT STD_LOGIC);END ENTITY JTDKZ;,ARCHITECTURE ART OF JTDKZ IS TYPE STATE_TYPE IS(A,B,C,D);SIGNAL STATE:STATE_TYPE;BEGIN CNT:PR

43、OCESS(CLK)IS VARIABLE S:INTEGER RANGE 0 TO 45;VARIABLE CLR,EN:BIT;,BEGIN IF(CLKEVENT AND CLK=1)THEN IF CLR=0THEN S:=0;ELSIF EN=0 THEN S:=S;ELSE S:=S+1;END IF;CASE STATE IS WHEN A=MR=0;MY0=0;MG0=1;BR=1;BY0=0;BG0=0;IF(SB AND SM)=1 THEN IF S=45 THEN STATE=B;CLR:=0;EN:=0;,ELSE STATEMR=0;MY0=1;MG0=0;BR=1

44、;BY0=0;BG0=0;IF S=5 THEN STATE=C;CLR:=0;EN:=0;ELSE STATE=B;CLR:=1;EN:=1;,END IF;WHEN C=MR=1;MY0=0;MG0=0;BR=0;BY0=0;BG0=1;IF(SM AND SB)=1 THEN IF S=25 THEN STATE=D;CLR:=0;EN:=0;ELSE STATE=C;CLR:=1;EN:=1;END IF;ELSIF SB=0 THEN STATE=D;CLR:=0;EN:=0;ELSE STATE=C;CLR:=1;EN:=1;,END IF;WHEN D=MR=1;MY0=0;MG

45、0=0;BR=0;BY0=1;BG0=0;IF S=5 THEN STATE=A;CLR:=0;EN:=0;ELSE STATE=D;CLR:=1;EN:=1;END IF;END CASE;END IF;END PROCESS CNT;END ARCHITECTURE ART;,-CSKZ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CSKZ IS PORT(INA:IN STD_LOGIC;OUTA:OUT STD_LOGIC);END ENTITY CSKZ;,ARC

46、HITECTURE ART OF CSKZ IS BEGIN PROCESS(INA)IS BEGIN IF INA=1 THEN OUTA=1;ELSE OUTA=0;END IF;END PROCESS;END ARCHITECTURE ART;,-CNT45S.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT45S IS PORT(SB,CLK,EN45:IN STD_LOGIC;DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWN

47、TO 0);END ENTITY CNT45S;,ARCHITECTURE ART OF CNT45S IS SIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIN PROCESS(SB,CLK,EN45)IS BEGIN IF SB=0 THEN CNT6B=CNT6B-CNT6B-1;ELSIF(CLKEVENT AND CLK=1)THEN IF EN45=1 THEN CNT6B=CNT6B+1;,ELSIF EN45=0 THEN CNT6BDOUT45MDOUT45M=01000100;DOUT45B=01001001;,WHEN 00001

48、0=DOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45M=00110011;DOUT45B=00111000;,WHEN 001101=DOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45M=00100000;DOUT45B=00100101;,WHEN 011010=DOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MD

49、OUT45MDOUT45MDOUT45MDOUT45MDOUT45M=00001000;DOUT45B=00010011;,WHEN 100110=DOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45MDOUT45M=00000000;DOUT45B=00000000;,END CASE;END PROCESS;END ARCHITECTURE ART;-CNT05S.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;,ENTITY CNT05S I

50、S PORT(CLK,EN05M,EN05B:IN STD_LOGIC;DOUT5:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY CNT05S;ARCHITECTURE ART OF CNT05S IS SIGNAL CNT3B:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN PROCESS(CLK,EN05M,EN05B)IS,BEGIN IF(CLKEVENT AND CLK=1)THEN IF EN05M=1 THEN CNT3B=CNT3B+1;ELSIF EN05B=1 THEN CNT3B=CNT3B+1;ELSIF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号