第6章VHDL设计应用实例.ppt

上传人:wealthynice100 文档编号:388616 上传时间:2018-10-12 格式:PPT 页数:245 大小:1.09MB
下载 相关 举报
第6章VHDL设计应用实例.ppt_第1页
第1页 / 共245页
第6章VHDL设计应用实例.ppt_第2页
第2页 / 共245页
第6章VHDL设计应用实例.ppt_第3页
第3页 / 共245页
第6章VHDL设计应用实例.ppt_第4页
第4页 / 共245页
第6章VHDL设计应用实例.ppt_第5页
第5页 / 共245页
亲,该文档总共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.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UN

2、SIGNED.ALL; ENTITY ADDER4B IS -4位二进制并行加法器 PORT(C4: IN STD_LOGIC; -低位来的进位,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 ISSIGNAL S5:STD_LOGIC_VECTOR

3、(4 DOWNTO 0);-中间结果SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0);-扩展加数以及被加数位,BEGIN A5=0& A4; -将4位加数矢量扩为5位,为进位提供空间B5=0& B4; -将4位被加数矢量扩为5位,为进位提供空间S5=A5+B5+C4 ;S4=S5(3 DOWNTO 0); -四位和给S4CO4=S5(4); -进位给CO4 END ARCHITECTURE ART;,2) 8位二进制加法器的源程序ADDER8B.VHD LIBRARY IEEE; USE IEEE.STE_LOGIC_1164.ALL; USE IEEE.S

4、TD_LOGIC_UNSIGNED.ALL: ENTITY ADDER8B IS -由4位二进制并行加法器级联而成的8位二进制加法器 PORT(C8:IN STD_LOGIC;A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);,S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8:OUT STD_LOGIC); END ENTITY ADDER8B; ARCHITECTURE ART OF ADDER8B IS COMPONENT ADDER4B IS -对要调用的元件ADDER

5、4B的界面端口进行定义 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 STD_LOGIC); END COMPONENT ADDER4B; SIGNAL SC:STD_LOGIC; -4位加法器的进位标志 BEGIN U1:ADDER4B -例化(安装)一个4位二进制加法器U1 PORT MAP(C4=C8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWN

6、TO0), S4=S8(3 DOWNTO 0),CO4=SC);,U2:ADDER4B -例化(安装)一个4位二进制加法器U2 PORT MAP(C4=SC,A4=A8(7 DOWNTO 4),B4=B8(7 DOWNTO 4),S4=S8 (7 DOWNTO 4),CO4=CO8); END ARCHITECTURE ART;,6.3 序列检测器的设计,1设计思路序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。如图6.3所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续

7、检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B”。,图6.3 8位序列检测器逻辑图,2VHDL源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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);-检测结果输出,END ENTITY CHK; ARCHITECTURE ART OF

8、 CHK IS SIGNAL Q :INTEGER RANGE 0 TO 8;-作为标志位 BEGIN PROCESS ( CLK,CLR) IS BEGIN IF CLR= 1 THEN Q=0; ELSIF CLKEVENT AND CLK= 1 THEN -时钟到来时,判断并处理当前输入的位,CASE Q IS WHEN 0 = IF DIN =D(7) THEN Q IF DIN =D(6) THEN Q IF 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

9、) THEN Q IF DIN =D(0) THEN Q Q=0;END CASE;END IF ; END PROCESS;,PROCESS(Q) IS -检测结果判断输出 BEGIN IF Q= 8 THEN AB= “1010“; -序列数检测正确,输出“A” ELSE AB= “1011“; -序列数检测错误,输出“B” END IF ; END PROCESS; END ARCHITECTURE ART;,6.4 正负脉宽数控调制信号发生器的设计,1设计思路图6.4 是脉宽数控调制信号发生器逻辑图,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高低电

10、平脉宽可分别由两组8位预置数进行控制。,图6.4 脉宽数控调制信号发生器逻辑图,2VHDL源程序 1) 8位可自加载加法计数器的源程序LCNT8.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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;,ARCHITECTURE ART OF LCNT8 IS SI

11、GNAL COUNT:INTEGER RANGE 0 TO 255; -8位计数器设置 BEGIN PROCESS ( CLK ) IS BEGINIF CLKEVENT AND CLK= 1 THENIF LD= 1 THEN COUNT=D; -LD为高电平时加载预置数,ELSE COUNT=COUNT+1; -否则继续计数END IF;END IF; END PROCESS;,PROCESS (CLK, COUNT) IS BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=255 THEN CAO= 1;ELSE CAO= 0;END IF;END IF;

12、END PROCESS; END ARCHITECTURE ART;,2) 正负脉宽数控调制信号发生器的源程序 LIBRARY IEEE -正负脉宽数控调制信号发生器顶层文件 USE IEEE.STD_LOGIC_1164.ALL; 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 IS COMPONENT LCN

13、T8 ISPORT(CLK,LD:IN STD_LOGIC;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; BEGIN U1:LCNT8 PORT MAP(CLK=CLK,LD=LD1,D=A,CAO=CAO1); U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2); PROCE

14、SS(CAO1,CAO2) IS BEGIN IF CAO1= 1 THEN 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位十进制数字频率计逻辑图

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

16、10的设计如图6.5所示,此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定计数值。当高电平时计数允许,低电平时计数禁止。,2. VHDL源程序 1) 有时钟使能的十进制计数器的源程序CNT10.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 ISPORT (CLK:IN STD_LOGIC; -计数时钟信号CLR:IN STD_LOGIC; -清零信号ENA:IN STD_LOGIC; -计数使能信号CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出CARRY_OUT:OUT STD

17、_LOGIC); -计数进位输出,END ENTITY CNT10; ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK,CLR,ENA) IS BEGIN IF 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 (

18、CQI) ISBEGINIF CQI=9 THEN CARRY_OUT= 1; -进位输出ELSE CARRY_OUT= 0;END IF;END PROCESS;CQ=CQI; END ARCHITECTURE ART;,2) 32位锁存器的源程序REG32B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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

19、ENTITY REG32B;,ARCHITECTURE ART OF REG32B IS BEGIN PROCESS ( LOAD, DIN ) IS BEGIN IF LOAD EVENT AND LOAD= 1 THEN DOUT=DIN; -锁存输入数据END IF; END PROCESS; END ARCHITECTURE ART;,3) 测频控制信号发生器的源程序TESTCTL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY TESTCTL IS PORT (

20、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; BEGIN PROCESS ( CLK ) ISBEGIN IF CLKEVENT AND CLK= 1 THEN DIV2CLK=NOT DIV2CLK;-1 HZ时钟二分频 END IF ;,END PROC

21、ESS; PROCESS ( CLK,DIV2CLK ) IS BEGIN 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.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FREQ ISPORT(FSIN:IN STD_LOGIC;CL

22、K: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 REG32B IS -待调用的32位锁存器端口定义 COMPONENT T

23、ESTCTL 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); BEGIN U0: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_OUT=S1); -名字关联,U2:CNT10 P

24、ORT 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,SC,SE,SD (

25、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,即计时允许信号。因此数字秒表可由一个分频器、四个十进制计数器(1/

26、100秒、1/10秒、1秒、1分)以及两个六进制计数器(10秒、10分)组成,如图6.7所示。,图6.7中六个4位二进制计数输出的最小显示值分别为:DOUT301/100秒、DOUT741/10秒、DOUT1181秒、DOUT151210秒、DOUT19161分、DOUT232010分。,图6.7 数字秒表电路逻辑图,2. VHDL源程序 1) 3 MHz100 Hz分频器的源程序CLKGEN.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CLKGEN ISPORT (CLK:IN STD_LOGIC; -3 MHz信号输入NEWC

27、LK:OUT STD_LOGIC); -100 Hz计时时钟信号输出 END ENTITY CLKGEN;,ARCHITECTURE ART OF CLKGEN ISSIGNAL CNTER:INTEGER RANGE 0 TO 10#29999#; -十进制计数预制数 BEGIN PROCESS(CLK) IS -分频计数器,由3 MHz时钟产生100 Hz信号 BEGIN ISIF CLKEVENT AND CLK=1 THENIF CNTER=10#29999# THEN CNTER=0; -3 MHz信号变为100 Hz,计数常数为30000,ELSE CNTER=CNTER+1;EN

28、D IF;END IF; END PROCESS; PROCESS(CNTER) IS -计数溢出信号控制 BEGINIF CNTER=10#29999# THEN NEWCLK=1;ELSE NEWCLK=0;END IF; END PROCESS; END ARCHITECTURE ART;,2) 六进制计数器的源程序CNT6.VHD(十进制计数器的源程序CNT10.VHD与此类似) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT6 IS PORT (CLK:IN

29、STD_LOGIC;CLR:IN STD_LOGIC;ENA: IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT: OUT STD_LOGIC );,END ENTITY CNT6; ARCHITECTURE ART OF CNT6 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK,CLR,ENA) ISBEGINIF CLR=1 THEN CQI=“0000“;ELSIF CLKEVENT AND CLK=1 THENIF ENA=1 THENIF CQI

30、=“0101” THEN CQI=“0000”;-六进制为0101十进制计数器为1001ELSE CQI=CQI+1;END IF;END IF;,END IF;END PROCESS;PROCESS(CQI) ISBEGIN IF CQI=“0000” THEN CARRY_OUT=1;ELSE CARRY_OUT=0;END IF;END PROCESS;CQ=CQI; END ARCHITECTURE ART;,3) 数字秒表的源程序TIMES.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY TIMES ISPORT(CLR:I

31、N 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,COMPONENT CLKGEN ISPORT(CLK:IN STD_LOGIC;NEWCLK:OUT STD_LOGIC); END COMPONENT CLKGEN; COMPONENT CNT10 ISPORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO

32、0);CARRY_OUT:OUT STD_LOGIC);,END COMPONENT CNT10; COMPONENT CNT6 ISPORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT: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(S

33、0, 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: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 DOWNT

34、O 20); END ARCHITECTURE ART;,6.7 MCS-51单片机与FPGA/CPLD总线接口逻辑设计,单片机具有性能价格比高、功能灵活、易于人机对话和良好的数据处理能力等特点;PLD则具有高速、高可靠以及开发便捷规范等方面的优点,以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中被广泛应用。单片机与CPLD的接口方式一般有两种,即总线方式与独立方式。,单片机以总线方式与FPGA/CPLD进行数据与控制信息通信有许多优点:(1) 速度快。其通信工作时序是纯硬件行为,对于MCS-51单片机,只需一条单字节指令就能完成所需的读/写时序,如:MOV DPTR,A;MOV

35、A,DPTR。(2) 节省PLD芯片的I/O口线。如图6.8,如果将图中的译码DECODER设置足够的译码输出,以及安排足够的锁存器,就能仅通过19根I/O口线在FPGA/CPLD与单片机之间进行各种类型的数据与控制信息交换。,图6.8 CPLD/FPGA与MCS-51单片机的总线接口通信逻辑图,(3) 相对于非总线方式,单片机的编程便捷,控制可靠。(4) 在FPGA/CPLD中通过逻辑切换,单片机易于与SRAM或ROM接口。这种方式有许多实用之处,如利用类似于微处理器DMA的工作方法,首先由FPGA/CPLD与接口的高速A/D等器件进行高速数据采样,并将数据暂存于SRAM中,采样结束后,通过

36、切换,使单片机与SRAM以总线方式进行数据通信,以便发挥单片机强大的数据处理能力。,1设计思路对单片机与FPGA/CPLD以总线方式通信的逻辑设计, 应详细了解单片机的总线读/写时序,根据时序图来设计逻辑结构。图6.9是MCS-51系列单片机的时序图,其时序电平变化速度与单片机工作时钟频率有关。,图6.9 MCS-51单片机总线接口方式工作时序,2. VHDL源程序 LIBRARY IEEE; -MCS-51单片机读/写电路 USE IEEE.STD_LOGIC_1164.ALL; ENTITY MCS_51 ISPORT( -与8031接口的各端口定义:P0:INOUT STD_LOGIC_

37、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_LOGIC_VECTOR(7 DOWNTO 0); -单片机待读回信号 LATCH1:IN STD_LOGIC; -读回信号锁存DATOUT1:OUT STD_LOGIC_VECTOR(7

38、DOWNTO 0); -锁存输出数据1DATOUT2: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 DOWNTO 0); SIGNAL LATCH_OUT2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LATCH_IN1:STD_LOGIC_VECTOR(7

39、 DOWNTO 0); SIGNAL WR_ENABLE1:STD_LOGIC;SIGNAL WR_ENABLE2:STD_LOGIC;,BEGIN PROCESS ( ALE ) IS -低8位地址锁存进程 BEGINIF ALEEVENT AND ALE= 0 THENLATCH_ADDRES=P0; -ALE的下降沿将P0口的低8位地址END IF; -锁入锁存器LATCH_ADDRES中 END PROCESS;,PROCESS(P2,LATCH_ADDRES) IS -WR写信号译码进程1 BEGINIF ( LATCH_ADDRES= “11110101“) AND ( P2= “

40、01101111“ ) THENWR_ENABLE1=WR; -写允许ELSE WR_ENABLE1= 1; END IF ; -写禁止END PROCESS; PROCESS ( WR_ENABLE1 ) IS -数据写入寄存器1,BEGINIF WR_ENABLE1EVENT AND WR_ENABLE1 = 1THEN LATCH_OUT1= P0; END IF; END PROCESS; PROCESS (P2,LATCH_ADDRES ) IS -WR写信号译码进程2 BEGINIF ( LATCH_ADDRES= “11110011“)AND(P2= “00011111“ ) T

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

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

43、10“ ) THEN 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,#5AHMOV DPTR,#6FF5HMOVX DPTR,A当READY为高电平时,8031从目标器件中的寄存器LATCH_IN1将数据读入的指令是:

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

45、黄灯作为过渡,并进行减计时显示。整个交通控制器的内部逻辑结构原理如图6.10所示。,图6.10 交通控制器的内部逻辑结构原理图,2 VHDL源程序 -JTDKZ.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY JTDKZ ISPORT(CLK,SM,SB:IN STD_LOGIC;MR,MY0,MG0,BR,BY0,BG0: OUT STD_LOGIC); END ENTITY JTDKZ;,ARCHITECTURE ART OF JTDKZ ISTYPE STATE_TYPE IS(A,B,C,D);SIGNAL STATE: STA

46、TE_TYPE;BEGIN CNT:PROCESS(CLK) ISVARIABLE S:INTEGER RANGE 0 TO 45;VARIABLE CLR,EN:BIT;,BEGINIF(CLKEVENT AND CLK=1)THENIF CLR=0THEN S:=0;ELSIF EN=0 THEN S:=S;ELSE S:=S+1;END IF; CASE STATE ISWHEN A=MR=0; MY0=0;MG0=1;BR=1; BY0=0; BG0=0;IF(SB AND SM)= 1 THENIF S=45 THEN STATE=B;CLR:= 0; EN:= 0;,ELSE ST

47、ATEMR=0; MY0=1;MG0=0;BR=1; 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 THENIF 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;MG0=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;,

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

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1