




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL设计应用实例第1页,共173页。7.1 移位相加8位硬件乘法器电路设计7.1.1 设计原理图7.1 8位乘法器原理图第2页,共173页。7.1.2 硬件乘法器的设计1选通与门模块源程序例【7-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH IS - 选通与门模块 PORT (ABIN: INSTD_LOGIC;DIN: INSTD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0) );END ANDARITH;第3页,共173页。ARCHIT
2、ECTURE behave OF ANDARITH ISBEGIN PROCESS(ABIN, DIN) BEGIN FOR I IN 0 TO 7 LOOP - 循环,完成8位与1位运算 DOUT(I) = DIN(I) AND ABIN; END LOOP;END PROCESS;END behave;第4页,共173页。28位加法器源程序例【7-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B IS PORT (CIN : IN STD_LOGIC;A, B
3、: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT : OUT STD_LOGIC );END ADDER8B;第5页,共173页。ARCHITECTURE behave OF ADDER8B IS SIGNAL SINT, AA, BB : STD_LOGIC_VECTOR( 8 DOWNTO 0 );BEGIN AA =0 & A; BB =0 & B; SINT = AA + BB + CIN;S = SINT ( 7 DOWNTO 0 ); COUT = SINT (8);END be
4、have;第6页,共173页。38位右移寄存器源程序例【7-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B IS- 8位右移寄存器 PORT ( CLK : IN STD_LOGIC; LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC );END SREG8B;ARCHITECTURE behave OF SREG8B IS SIGNAL REG8 :STD_LOGIC_VECTOR(7 DOWNTO 0);第7页,共17
5、3页。BEGIN PROCESS (CLK, LOAD) BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN - 装载新数据 REG8 = DIN; ELSE - 数据右移 REG8(6 DOWNTO 0) = REG8(7 DOWNTO 1); END IF; END IF;END PROCESS; QB = REG8(0); - 输出最低位END behave;第8页,共173页。416位锁存器源程序例【7-4】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS - 16位锁
6、存器PORT (CLK : IN STD_LOGIC;CLR: IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END REG16B;ARCHITECTURE behave OF REG16B IS SIGNAL R16S :STD_LOGIC_VECTOR( 15 DOWNTO 0 );第9页,共173页。BEGIN PROCESS( CLK, CLR ) BEGIN IF CLR = 1 THEN - 清零信号R16S = 0000000000000000; EL
7、SIF CLKEVENT AND CLK = 1 THEN - 时钟到来时,锁存输入值,并右移低8位 R16S( 6 DOWNTO 0 )= R16S(7 DOWNTO 1); - 右移低8位 R16S( 15 DOWNTO 7 ) = D; - 将输入锁到高8位 END IF;END PROCESS; Q = R16S;END behave;第10页,共173页。5. 运算控制模块源程序例【7-5】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL IS PORT (CL
8、K: IN STD_LOGIC; START : IN STD_LOGIC; CLKOUT : OUT STD_LOGIC;RSTALL : OUT STD_LOGIC;ARIEND : OUT STD_LOGIC );END ARICTL;ARCHITECTURE behave OF ARICTL IS第11页,共173页。 SIGNAL CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK, START) BEGIN RSTALL = START; IF START = 1 THEN CNT4B = 0000;ELSIF CLKEVENT
9、 AND CLK = 1 THEN IF CNT4B 8 THEN CNT4B = CNT4B + 1; END IF; END IF; END PROCESS;第12页,共173页。PROCESS(CLK, CNT4B, START)BEGINIF START = 0 THEN IF CNT4B 8 THEN CLKOUT = CLK; ARIEND = 0; ELSE CLKOUT = 0; ARIEND = 1; END IF; ELSE CLKOUT = CLK; ARIEND = 0;第13页,共173页。END IF; END PROCESS;END behave;第14页,共17
10、3页。68位乘法器的源程序例【7-6】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MULTI8X8 IS - 8位乘法器顶层设计 PORT (CLK, START : IN STD_LOGIC; A, B : INSTD_LOGIC_VECTOR(7 DOWNTO 0); ARIEND : OUT STD_LOGIC; DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END MULTI8X8;第15页,共173页。ARCHITECTURE b
11、ehave OF MULTI8X8 ISCOMPONENT ARICTLPORT ( CLK, START : IN STD_LOGIC;CLKOUT, RSTALL, ARIEND : OUT STD_LOGIC );END COMPONENT;COMPONENT ANDARITHPORT ( ABIN : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ); DOUT : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ) );END COMPONENT;第16页,共173页。COMPONENT ADDER8BPOR
12、T ( CIN : IN STD_LOGIC; A, B : IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ); S : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );COUT : OUT STD_LOGIC );END COMPONENT;COMPONENT SREG8BPORT ( CLK, LOAD : IN STD_LOGIC; DIN : INSTD_LOGIC_VECTOR( 7 DOWNTO 0 ); QB : OUTSTD_LOGIC );END COMPONENT;第17页,共173页。COMPONENT REG16BPORT ( C
13、LK, CLR : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR( 8 DOWNTO 0 );Q : OUTSTD_LOGIC_VECTOR( 15 DOWNTO 0 ) );END COMPONENT;SIGNAL GNDINT, INTCLK, RSTALL, QB : STD_LOGIC; SIGNALANDSD: STD_LOGIC_VECTOR( 7 DOWNTO 0 ); SIGNALDTBIN: STD_LOGIC_VECTOR( 8 DOWNTO 0 );第18页,共173页。 SIGNALDTBOUT: TD_LOGIC_VECTOR( 15 D
14、OWNTO 0 );BEGINDOUT = DTBOUT; GNDINT CLK, START= START, CLKOUT= INTCLK, RSTALL= RSTALL, ARIEND= ARIEND );U2 : SREG8B PORT MAP (CLK=INTCLK, LOAD=RSTALL, DIN=B, QB=QB );第19页,共173页。U3 : ANDARITH PORTMAP (ABIN=QB, DIN=A,DOUT=ANDSD );U4 : ADDER8B PORTMAP (CIN=GNDINT, A=DTBOUT(15 DOWNTO 8), B=ANDSD, S=DTB
15、IN(7 DOWNTO 0), COUT=DTBIN(8) );U5 : REG16B PORT MAP (CLK=INTCLK, CLR=RSTALL, D=DTBIN, Q=DTBOUT );END behave;第20页,共173页。7.1.3 系统仿真图 7.2 8位乘法器的仿真波形第21页,共173页。7.2 数字频率计设计7.2.1 设计原理图7.3 8位十进制数字频率计的电路逻辑图第22页,共173页。7.2.2 数字频率计设计1测频控制信号发生器设计测频控制信号发生器的工作时序如图7.3所示。为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时
16、其值翻转。其中控制信号时钟CLK的频率取1Hz,而信号TSTEN的脉宽恰好为1 s,可以用作闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。由图7.4可见,在计数完成后,即计数使能信号TSTEN在1 s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5 s后,CLR_CNT产生一个清零信号上跳沿。第23页,共173页。图7.4 频率计测频控制器TESTCTL测控时序图第24页,共173页。例【7-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY TESTCTL IS -测频控制信号发生器 POR
17、T (CLK : IN STD_LOGIC; -1 Hz测频控制时钟 TSTEN : OUT STD_LOGIC; -计数器时钟使能 CLR_CNT : OUT STD_LOGIC; -计数器清零 LOAD : OUT STD_LOGIC); -输出锁存信号END TESTCTL;ARCHITECTURE behave OF TESTCTL IS SIGNAL Div2CLK : STD_LOGIC; BEGINPROCESS ( CLK )BEGIN第25页,共173页。IF CLKEVENT AND CLK = 1 THEN -1 Hz时钟二分频Div2CLK=NOT Div2CLK;EN
18、D IF ;END PROCESS; PROCESS ( CLK, Div2CLK )BEGIN IF CLK = 0 AND Div2CLK = 0 THEN -产生计数器清零信号 CLR_CNT = 1; ELSE CLR_CNT = 0 ; END IF; END PROCESS; LOAD=NOT Div2CLK; TSTEN0) ;-计数器复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数 IF CQI 0);-大于9,计数值清零 END IF; END IF; END IF; IF CQI = 100
19、1 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS;END behave;第28页,共173页。332位锁存器设计例【7-9】LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS -32位锁存器 PORT(LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);EN
20、D REG32B;ARCHITECTURE behave OF REG32B IS BEGINPROCESS ( LOAD, DIN )BEGINIF LOAD EVENT AND LOAD= 1 THEN DOUT CLK, TSTEN = TSTEN, CLR_CNT = CLR_CNT, LOAD=LOAD);U1 : CNT10 PORT MAP(CLK = FSIN, RST = CLR_CNT, EN = TSTEN, CQ = DIN (3 DOWNTO 0), COUT = C1);U2 : CNT10 PORT MAP(CLK = C1, RST = CLR_CNT, EN
21、= TSTEN,第32页,共173页。CQ = DIN (7 DOWNTO 4), COUT = C2);U3 : CNT10 PORT MAP(CLK = C2, RST = CLR_CNT, EN = TSTEN, CQ = DIN (11 DOWNTO 8), COUT = C3);U4 : CNT10 PORT MAP(CLK = C3, RST = CLR_CNT, EN = TSTEN, CQ = DIN (15 DOWNTO 12), COUT = C4);U5 : CNT10 PORT MAP(CLK = C4, RST = CLR_CNT, EN = TSTEN,CQ = D
22、IN (19 DOWNTO 16), COUT = C5);U6 : CNT10 PORT MAP(CLK = C5, RST = CLR_CNT, EN = TSTEN, CQ = DIN (23 DOWNTO 20), COUT = C6);U7 : CNT10 PORT MAP(CLK = C6, RST = CLR_CNT, EN = TSTEN,第33页,共173页。CQ = DIN (27 DOWNTO 24), COUT = C7);U8 : CNT10 PORT MAP(CLK = C7, RST = CLR_CNT, EN = TSTEN, CQ = DIN (31 DOWN
23、TO 28), COUT = C8);U9 : REG32B PORT MAP(LOAD=LOAD, DIN=DIN(31 DOWNTO 0), DOUT=DOUT);END behave;第34页,共173页。7.2.3 系统仿真频率计设计的仿真波形如图7.5所示。在一个CLK时钟周期内,FISN有5个时钟周期,因此DOUT输出为00000005。图7.5 频率计设计的仿真波形第35页,共173页。7.3 电梯控制系统的设计7.3.1 设计要求 要求用FPGA设计实现一个3层电梯的控制系统。系统的要求如下:(1)电梯运行规则:当电梯处在上升模式时,只响应比电梯所在位置高的上楼请求,由下向上逐
24、个执行,直到最后一个上楼请求执行完毕。如果高层有下楼请求,直接升到有下楼请求的最高楼层,然后进入下降模式。电梯处在下降模式时,工作方式与上升模式相反。设电梯共有3层,每秒上升或下降一层。第36页,共173页。(2)电梯初始状态为一层,处在开门状态,开门指示灯亮。(3)每层电梯入口处均设有上下请求开关,电梯内部设有乘客到达楼层的停站请求开关及其显示。(4)设置电梯所处位置的指示及电梯上升或下降的指示。(5)电梯到达有停站请求的楼层后,电梯门打开,开门指示灯亮。开门4秒后,电梯门关闭,开门指示灯灭,电梯继续运行,直至执行完最后一个请求信号后停在当前层。(6)电梯控制系统能记忆电梯内外的请求信号,并
25、按照电梯运行规则工作,每个请求信号执行完毕后清除。 第37页,共173页。7.3.2 设计思路根据电梯控制系统的设计要求,除了具备系统时钟信号CLK以外,还应该定义输入信号和输出信号。(1)输入信号定义如下: 系统复位信号:RESET,高电平有效; 电梯入口处一层、二层的上楼请求开关:UP1、UP2; 电梯入口处二层、三层的下楼请求开关:DOWN2、DOWN3; 电梯内部到达楼层的停站请求开关:STOP1、STOP2、STOP3。 所有输入信号的规定为:输入信号等于1,表示有请求,信号等于0,表示无请求。第38页,共173页。(2)输出信号定义如下:电梯外部上升和下降请求指示灯:UPLIGHT
26、和DOWNLIGHT,这些信号与UPl、UP2、DOWN2和DOWN3信号相对应; 电梯内部乘客到达楼层的停站请求灯:STOPLIGHT,该信号与STOP1、STOP2和STOP3信号相对应; 电梯运行模式指示:UDSIG,1代表下降模式,0代表上升模式; 电梯所在楼层指示:POSITION,表示电梯在对应楼层;电梯门状态指示:DOORLIGHT,1表示开门,0表示关门。 第39页,共173页。7.3.3 设计实现图7.6 状态机设计流程第40页,共173页。例【7-11】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_A
27、RITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FLIFT ISPORT(CLK,RESET,UP1,UP2,DOWN2,DOWN3,STOP1,STOP2,STOP3:IN STD_LOGIC; UPLIGHT,DOWNLIGHT,STOPLIGHT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1);UDSIG : BUFFER STD_LOGIC;POSITION : BUFFER INTEGER RANGE 1 TO 3; DOORLIGHT : OUT STD_LOGIC);END FLIFT; ARCHITECTU
28、RE BEHAV OF FLIFT IS第41页,共173页。TYPE STATE_TYPE IS (STOPONL, DOOROPEN, DOORCLOSE,WAITL,WAIT2,WAIT3,WAIT4,UP,DOWN,STOP);SIGNAL STATE : STATE_TYPE:=STOPONL;SIGNAL CLEARUP,CLEARDN,BUTTCLK,FLICLK : STD_LOGIC;SIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK) -分频进程,产生电梯控制时钟FLIFTCLK和按键控制时钟BUFFCLK;BE
29、GINIF RESET=1 THEN Q=0000;ELSIF RISING_EDGE(CLK) THEN Q=Q+1;END IF;第42页,共173页。BUTTCLK=Q(0);FLICLK=Q(3);END PROCESS;CONT : PROCESS(RESET, FLICLK) -状态机进程VARIABLE POS : INTEGER RANGE 3 DOWNTO 1;BEGINIF RESET=1 THEN STATE=STOPONL; CLEARUP=0; CLEARDNDOORLIGHT=1;POSITION=1; POS:=1; STATESTATECLEARUP=0;CLE
30、ARDN=0;第43页,共173页。STATESTATESTATEDOORLIGHT=0; IF UDSIG=0 THEN -上升情况 IF POSITION=3 THEN -电梯在3层 IF STOPLIGHT=000 AND UPLIGHT=000 AND DOWNLIGHT=000 THEN UDSIG=1; STATE=DOORCLOSE; ELSE UDSIG=1;STATE=DOWN; END IF;ELSIF POSITION=2 THEN -电梯在2层第44页,共173页。IF STOPLIGHT=000AND UPLIGHT=000 AND DOWNLIGHT=000 THE
31、N UDSIG=0; STATE=DOORCLOSE; ELSIF STOPLIGHT(3)= 1 OR DOWNLIGHT(3)= 1 THEN UDSIG=0;STATE=UP; ELSE UDSIG=1;STATE=DOWN; END IF; ELSIF POSITION=1 THEN -电梯在1层 IF STOPLIGHT=000 AND UPLIGHT=000 AND DOWNLIGHT=000 THEN UDSIG=0;STATE=DOORCLOSE; ELSE第45页,共173页。UDSIG=0;STATE=UP; END IF; END IF; ELSIF UDSIG=1 TH
32、EN -下降情况 IF POSITION=1 THEN -电梯在1层 IF STOPLIGHT=000 AND UPLIGHT=000 AND DOWNLIGHT=000THEN UDSIG=0;STATE=DOORCLOSE; ELSE UDSIG=0;STATE=UP; END IF; ELSIF POSITION=2 THEN -电梯在2层第46页,共173页。IF STOPLIGHT=000 AND UPLIGHT=000 AND DOWNLIGHT=000 THEN UDSIG=1;STATE=DOORCLOSE; ELSIF STOPLIGHT(1)= 1 OR UPLIGHT(1
33、)= 1 THEN UDSIG=1;STATE=DOWN; ELSE UDSIG=0; STATE=UP; END IF; ELSIF POSITION=3 THEN -电梯在3层IF STOPLIGHT=000 AND UPLIGHT=000AND DOWNLIGHT =000 THEN UDSIG=1;第47页,共173页。STATE=DOORCLOSE; ELSE UDSIG=1;STATEPOSITION=POSITION+1; POS:=POS+1; -电梯上一层 IF POS=2 AND (STOPLIGHT(3)= 1 OR DOWNLIGHT(3)= 1) THEN STATE
34、=UP; ELSE STATEPOSITION=POSITION-1; POS:=POS-1; -电梯下一层 IF POS=2 AND (STOPLIGHT(1)= 1 OR UPLIGHT(1)= 1) THEN STATE=DOWN ;ELSE STATESTATEDOORLIGHT=1;CLEARUP=1;CLEARDN=1;STATESTATE=STOPONL; END CASE;第49页,共173页。END IF;END PROCESS CONT;BUTT : PROCESS (RESET,BUTTCLK) -读按键、控制指示灯进程BEGINIF RESET=1 THEN STOPL
35、IGHT=000;UPLIGHT=000;DOWNLIGHT=000;ELSE IF RISING_EDGE(BUTTCLK)THEN IF CLEARUP=1 THEN STOPLIGHT(POSITION) = 0; UPLIGHT(POSITION) = 0;第50页,共173页。ELSE IF UP1=1 THEN UPLIGHT(1)= 1; ELSIF UP2=1 THEN UPLIGHT(2)= 1; END IF; END IF; IF CLEARDN=1 THEN STOPLIGHT(POSITION)= 0;DOWNLIGHT(POSITION) =0; ELSE IF D
36、OWN2=1 THEN DOWNLIGHT(2)= 1; ELSIF DOWN3=1 THEN DOWNLIGHT(3)= 1; END IF; END IF; IF STOP1=1 THEN STOPLIGHT(1)= 1; ELSIF STOP2=1 THEN STOPLIGHT(2) = 1;第51页,共173页。ELSIF STOP3=1 THEN STOPLIGHT(3) = 1; END IF; END IF;END IF;END PROCESS BUTT;END BEHAV; 第52页,共173页。7.3.4 系统仿真图7.7 电梯控制系统的仿真波形一第53页,共173页。图7.
37、8 电梯控制系统的仿真波形二第54页,共173页。7.4 多功能信号发生器的设计7.4.1 设计思路 用FPGA设计一个多功能信号发生器,根据输入信号的选择可以输出递增锯齿波、递减锯齿波、三角波、阶梯波和方波等5种信号。信号发生器的控制模块可以用数据选择器实现,用5选1数据选择器实现对5种信号的选择。 7.4.2 多功能信号发生器的设计实现1递增锯齿波的设计第55页,共173页。例【7-12】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sawtooth_adder IS -递增锯
38、齿波sawtooth PORT(clk, reset : IN std_logic; -复位信号reset,时钟信号clk q : OUT std_logic_vector(7 DOWNTO 0); -输出信号qEND sawtooth_adder; ARCHITECTURE behave OF sawtooth_adder ISBEGINPROCESS(clk, reset)VARIABLE tmp : std_logic_vector(7 DOWNTO 0);第56页,共173页。BEGINIF reset=0 THEN tmp:=00000000;ELSIF rising_edge(cl
39、k) THEN IF tmp=11111111 THEN tmp:=00000000; ELSE tmp:=tmp+1; -递增信号的变化 END IF;END IF;q=tmp;END PROCESS;END behave; 第57页,共173页。2递减锯齿波的设计例【7-13】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity sawtooth_minus IS -递减锯齿波sawtooth_minus PORT(clk, reset : in std_logic; -复位信号res
40、et,时钟信号clk q : out std_logic_vector(7 downto 0); -输出信号q,8位数字信号END sawtooth_minus;ARCHITECTURE behave OF sawtooth_minus ISBEGINPROCESS(clk, reset)VARIABLE tmp : std_logic_vector(7 DOWNTO 0);第58页,共173页。BEGINIF reset=0 then tmp:=11111111;ELSIF rising_edge(clk) THEN IF tmp=00000000 THEN tmp :=11111111;
41、ELSE tmp:=tmp-1; -递减信号的变化 END IF;END IF;q=tmp;END PROCESS; END behave; 第59页,共173页。3三角波的设计例【7-14】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY triangle IS -三角波triangle PORT(clk, reset : in std_logic; -复位信号reset,时钟信号clk q : out std_logic_vector(7 DOWNTO 0); -输出信号q,8位数
42、字信号END triangle;ARCHITECTURE behave OF triangle ISBEGINPROCESS(clk, reset)VARIABLE tmp : std_logic_vector(7 DOWNTO 0);第60页,共173页。VARIABLE a : std_logic;BEGINIF reset=0 THEN tmp:=00000000;ELSIF rising_edge(clk) THENIF a=0 then IF tmp=11111110 TEEN tmp :=11111111; a :=1; ELSE tmp:=tmp+1; END IF; ELSE
43、IF tmp=00000001 THEN tmp:=00000000; a:= 0;第61页,共173页。ELSE tmp:=tmp-1; END IF; END IF;END IF;q=tmp;END PROCESS;END behave;第62页,共173页。4阶梯波的设计例【7-15】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ladder IS -阶梯波ladder PORT(clk, reset : in std_logic; -复位信号reset,时钟信号clk q
44、: out std_logic_vector(7 DOWNTO 0); -输出信号q,8位数字信号END ladder;ARCHITECTURE behave OF ladder ISBEGINPROCESS(clk, reset)VARIABLE tmp : std_logic_vector(7 DOWNTO 0);第63页,共173页。BEGINIF reset=0 THEN tmp: =00000000; ELSIF rising_edge(clk) THEN IF tmp=11111111 THEN tmp :=00000000; ELSE tmp :=tmp+16; -阶梯信号的产生
45、 END IF; END IF; q=tmp;END PROCESS;END behave;第64页,共173页。5. 方波的设计例【7-16】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY square is -方波square PORT(clk, reset : in std_logic; -复位信号reset,时钟信号clk q :out std_logic_vector(7 DOWNTO 0); -输出信号q,8位数字信号END square;ARCHITECTURE beh
46、ave OF square ISSIGNAL a : std_logic;BEGINPROCESS(clk, eset)第65页,共173页。VARIABLE tmp : std_logic_vector(7 downto 0);BEGINIF reset=0 thena=0;ELSIF rising_edge(clk) THEN IF tmp=11111111 THEN tmp:=00000000; ELSEtmp:=tmp+1; END IF; IF tmp=10000000 then a=1; ELSE a=0; END IF; END IF;第66页,共173页。END PROCESS
47、;PROCESS(clk,a) BEGINIF rising_edge(clk)THEN IF a=1 THEN q=11111111; ELSE qqqqqqnull;END CASE;END PROCESS;END behave;第69页,共173页。7顶层电路的设计图7.9 信号发生器顶层电路第70页,共173页。7.4.3 系统仿真图7.10 递增斜波仿真波形图7.11 递减斜波仿真波形第71页,共173页。图7.12 三角波仿真波形图7.13 阶梯波仿真波形第72页,共173页。图7.14 方波仿真波形第73页,共173页。7.5 数字闹钟系统设计7.5.1 闹钟系统的设计要求及设计
48、思路要求设计一个24小时的数字闹钟,该数字闹钟的面板如图7.15所示,它包括以下几个组成部分:(1)显示屏,由7个七段数码管组成,其中6个用于显示当前时间(时:分:秒)或设置的闹钟时间,而另一个则用于显示系统内部产生的周期性循环变化的待选预置数字;(2)YES(确认)键:用于输入新的时间或新的闹钟时间时,对每位待选预置数字输入的确认;第74页,共173页。图7.15 数字闹钟面板图(3)TIME(时间)键:用于确定新的时间设置;(4)ALARM(闹钟)键:用于确定新的闹钟时间设置,或显示已设置的闹钟时间;(5)扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声。第75页,共173页。7.5.2
49、 闹钟系统的总体设计思路图7.16 计时器的外部端口第76页,共173页。7.5.3 闹钟系统的控制器的设计图7.17 闹钟控制器的外部端口第77页,共173页。表7.1 控制器状态转换及控制输出表第78页,共173页。 由于在整个系统中有多个模块需要用到自行设计的数据类型,并且这些数据类型大部分相同,因此我们为了使用上的方便,可设计一个程序包P_ALARM,该程序既可加在调用该程序包的程序前面,也可加在整个系统的顶层设计程序的前面。但是对于一个比较复杂系统的设计,一般是分模块进行设计和调试,所以加在各个调用该程序包的程序前面会比较方便写。程序包P_ALARM的具体设计如下:第79页,共173
50、页。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE P_ALARM ISSUBTYPE T_DIGITAL IS INTEGER RANGE 0 TO 9;SUBTYPE T_SHORT IS INTEGER RANGE 0 TO 65535;TYPE T_CLOCK_TIME IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;TYPE T_DISPLAY IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;END PACKAGE P_ALARM;第80页,共173页。例【7-18】-控制器源程序CONTR
51、OL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY CONTROL IS PORT(KEY:IN STD_LOGIC; ALARM_BUTTON:IN STD_LOGIC; TIME_BUTTON:IN STD_LOGIC; CLK:IN STD_LOGIC; RESET:IN STD_LOGIC; LOAD_NEW_A:OUT STD_LOGIC; LOAD_NEW_C:OUT STD_LOGIC; SHOW_NEW_TIME:OUT STD_LOGIC; SHOW_A:OUT STD_LOGI
52、C);END ENTITY CONTROL;ARCHITECTURE BEHAVE OF CONTROL IS第81页,共173页。TYPE T_STATE IS(S0,S1,S2,S3,S4); CONSTANT KEY_TIMEOUT:T_SHORT:=500; CONSTANT SHOW_ALARM_TIMEOUT:T_SHORT:=500; SIGNAL CURR_STATE:T_STATE; SIGNAL NEXT_STATE:T_STATE; SIGNAL COUNTER_K:T_SHORT; SIGNAL ENABLE_COUNT_K:STD_LOGIC; SIGNAL COUN
53、T_K_END:STD_LOGIC; SIGNAL COUNTER_A:T_SHORT; SIGNAL ENABLE_COUNT_A:STD_LOGIC; SIGNAL COUNT_A_END:STD_LOGIC;BEGIN PROCESS(CLK,RESET) IS BEGIN IF RESET=1 THEN CURR_STATE=S0; 第82页,共173页。ELSIF RISING_EDGE(CLK)THEN CURR_STATE=NEXT_STATE; END IF; END PROCESS;PROCESS(KEY, ALARM_BUTTON, TIME_BUTTON, CURR_ST
54、ATE, COUNT_A_END, COUNT_K_END) BEGIN NEXT_STATE=CURR_STATE; LOAD_NEW_A=0; LOAD_NEW_C=0; SHOW_A=0; SHOW_NEW_TIME=0; ENABLE_COUNT_K=0; ENABLE_COUNT_AIF (KEY=0) THEN NEXT_STATE=S1; SHOW_NEW_TIME=1; ELSIF (ALARM_BUTTON=1) THEN NEXT_STATE=S4; SHOW_A=1; ELSE NEXT_STATEIF (KEY=1) THEN NEXT_STATE=S1; ELSIF
55、(ALARM_BUTTON=1) THEN NEXT_STATE=S2; LOAD_NEW_A=1; ELSIF (TIME_BUTTON=1) THEN第84页,共173页。NEXT_STATE=S3; LOAD_NEW_C=1; ELSE IF (COUNT_K_END=1) THEN NEXT_STATE=S0; ELSE NEXT_STATE=S1; END IF; ENABLE_COUNT_K=1; END IF; SHOW_NEW_TIMEIF (ALARM_BUTTON=1) THEN NEXT_STATE=S2; LOAD_NEW_A=1; ELSE NEXT_STATEIF
56、(TIME_BUTTON=1) THEN NEXT_STATE=S3; LOAD_NEW_C=1; ELSE NEXT_STATEIF (KEY=1) THEN NEXT_STATE=S1; ELSE NEXT_STATE=S4; IF (COUNT_A_END=1) THEN NEXT_STATE=S0; ELSE NEXT_STATE=S4; SHOW_A=1;第86页,共173页。 END IF; ENABLE_COUNT_ANULL; END CASE; END PROCESS; COUNT_KEY:PROCESS(ENABLE_COUNT_K,CLK) IS BEGIN IF (EN
57、ABLE_COUNT_K=0) THEN COUNTER_K=0; COUNT_K_END=KEY_TIMEOUT) THEN COUNT_K_END=1; ELSE COUNTER_K=COUNTER_K+1;第87页,共173页。END IF; END IF; END PROCESS; COUNT_ALARM:PROCESS(ENABLE_COUNT_A,CLK) IS BEGIN IF(ENABLE_COUNT_A=0) THEN COUNTER_A=0; COUNT_A_END=SHOW_ALARM_TIMEOUT) THEN COUNT_A_END=1; ELSE COUNTER_A
58、=COUNTER_A+1; END IF; END IF; END PROCESS;END ARCHITECTURE BEHAVE;第88页,共173页。7.5.4 闹钟系统的预置寄存器的设计图7.18 预置寄存器示意图第89页,共173页。例【7-19】-预置寄存器的VHDL源程序KEYBUFFER.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE WORK.P_ALARM.ALL;ENTITY KEYBUFFER IS PORT(KEY:IN STD_LOGIC; CLK:IN S
59、TD_LOGIC; RESET:IN STD_LOGIC; KEYNUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); NEW_TIME:OUT T_CLOCK_TIME);END ENTITY KEYBUFFER;ARCHITECTURE BEHAVE OF KEYBUFFER IS SIGNAL N_T:T_CLOCK_TIME; SIGNAL CNT:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TEMP:T_DIGITAL;第90页,共173页。BEGIN PROCESS(CLK) IS BEGIN IF (CLKEVENT AND C
60、LK=1) THEN IF CNT=9 THEN CNT=0000; ELSE CNT=CNT+1; END IF; END IF; TEMP=CONV_INTEGER(CNT); KEYNUM=CNT; END PROCESS; SHIFT:PROCESS(RESET,KEY) IS BEGIN IF (RESET=1) THEN第91页,共173页。 N_T(5)=0; N_T(4)=0; N_T(3)=0; N_T(2)=0; N_T(1)=0; N_T(0)=0; ELSIF (KEYEVENT AND KEY=1) THEN FOR I IN 5 DOWNTO 1 LOOP N_T(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 殡仪馆植树合同协议
- 商业房产出售合同协议
- 模拟股权协议合同协议
- 快递经营协议合同协议
- 楼道家政服务合同协议
- 商业配套项目合同协议
- 商业货物合同协议
- 品牌饭店加盟合同协议
- 和创协议书范本
- 咨询授权协议书范本
- 水磨钻专项方水磨钻专项方案
- 我爱刷牙幼儿课件
- 职高英语高一试题及答案
- 2024-2025年第二学期一年级语文教学进度表
- 3.1《百合花》课件 统编版高一语文必修上册
- 会展营销学知到智慧树章节测试课后答案2024年秋上海旅游高等专科学校
- 主动脉球囊反搏术(IABP)护理
- 《关于加强中小学地方课程和校本课程建设与管理的意见》专题培训
- 2025年中考物理押题猜想卷(苏州卷)(全解全析)
- 《半导体行业发展历程》课件
- 新能源开发知识培训课件
评论
0/150
提交评论