VHDL程序设计小组成员:王悦凯夏晓天张正罡总体框架VHDL程序设计概述组合逻辑电路的VHDL程序设计时序电路的VHDL程序设计状态机的VHDL程序设计VHDL程序设计概述VHDL语言简介•VHDL是一种硬件描述语言VHDL程序结构•一个完整的VHDL程序包括:库(library),包(package),实体(entity),结构体(architecture),配置(configuration)VHDL语言并行与串行VHDL程序结构VHDL串语并行与串行VHDL的并行语句用来描述一组并发行为,是并发执行的,与程序的书写顺序无关•进程语句、赋值语句、块语句、生成语句、组件例化语句等VHDL顺序语句•IFTHENELSE、CASE、LOOP、WAIT等。组合逻辑电路的VHDL程序设计组合逻辑电路的特点•任意时刻的输出仅取决于该时刻的输入,与电路原来的状态无关组合逻辑电路VHDL程序设计•组合电路一般采用并行语句,也可以采用顺序语句组合逻辑电路具体实例•3-8译码器组合逻辑电路的VHDL程序设计libraryIEEE;UseIEEE.std_logic_1164.all;entityyimaisport(a:inSTD_LOGIC;b:inSTD_LOGIC;c:inSTD_LOGIC;en:inSTD_LOGIC;Y0:outSTD_LOGIC;Y1:outSTD_LOGIC;Y2:outSTD_LOGIC;Y3:outSTD_LOGIC;Y4:outSTD_LOGIC;Y5:outSTD_LOGIC;Y6:outSTD_LOGIC;Y7:outSTD_LOGIC);endyima;process(input,en)beginif(en='1')thencaseinputiswhen000=output=11111110;when001=output=11111101;when010=output=11111011;when011=output=11110111;when100=output=11101111;when101=output=11011111;when110=output=10111111;when111=output=01111111;whenothers=output=XXXXXXXX;endcase;elseoutput=11111111;endif;组合逻辑电路的VHDL程序设计时序逻辑电路的VHDL程序设计时序逻辑电路的特点•任意时刻的输出取决于该时刻的输入与电路原来的状态。时序逻辑电路的VHDL程序设计•主要是对触发器与时钟信号的VHDL描述时序逻辑电路实例•模值可变的计数器时序逻辑电路的VHDL程序设计architecturejishuqi_archofjishuqiissignalinput:std_logic_vector(3downto0);signaloutput:std_logic_vector(3downto0);begininput=D&C&B&A;process(CLK)beginifCLR='0'thenoutput=0000;elsif(CLK'eventandCLK='1')thenifoutput=inputthenoutput=0000;elseoutput=output+1;endif;endif;Y0=output(0);Y1=output(1);Y2=output(2);Y3=output(3);endprocess;endjishuqi_arch;时序逻辑电路的VHDL程序设计状态机VHDL程序设计状态机概述•Moore状态机和Melay状态机状态机VHDL程序设计实例•电梯状态机VHDL程序设计功能•控制电梯在4层间升降输入输出•输入:clk、reset、up1、up2、up3、dn2、dn3、dn4•输出:c1、c2、c3、c4(楼层显示)、upsig(升降标志)、doorlight(表示门开门关信号)状态描述•initial,dooropen,doorclose,wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,up,down,stop状态转换图•见下页状态机VHDL程序设计状态机VHDL程序设计architecturedianti_archofdiantiistypestate_typeis(initial,dooropen,doorclose,wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,up,down,stop);signalstate:state_type;signalcdisplay:std_logic_vector(3downto0);signalclearup,cleardn:std_logic;Beginzhuangtai:process(clk,reset)……………………………………………………………..endprocesszhuangtai;shu_ru:process(clk)……………………………………………………………endprocessshu_ru;enddianti_arch;状态机VHDL程序设计casestateiswheninitial=doorlight='1';position=1;pos:=1;state=wait1;upsig='0';--初始状态whenwait1=state=wait2;--停8秒whenwait2=clearup='0';cleardn='0';state=wait3;whenwait3=state=wait4;whenwait4=state=wait5;whenwait5=state=wait6;whenwait6=state=wait7;whenwait7=state=wait8;whenwait8=state=doorclose;whendoorclose=doorlight='0';状态机VHDL程序设计ifposition=4then--电梯在四楼if(uplight=0000anddownlight=0000)or(downlight(4)='1')thenstate=stop;elseupsig='1';state=down;endif;elsifposition=3then--电梯在三楼if(uplight(1)='1'oruplight(2)='1')or(downlight(2)='1')thenupsig='1';state=down;elsifdownlight(4)='1'thenupsig='0';state=up;elsestate=stop;endif;elsifposition=2then--电梯在二楼ifuplight(1)='1'thenupsig='1';state=down;elsif(downlight(4)='1'ordownlight(3)='1')or(uplight(3)='1')thenupsig='0';state=up;elseupsig='1';state=stop;endif;elsifposition=1then--电梯在一楼if(uplight=0000anddownlight=0000)or(uplight(1)='1')thenstate=stop;elseupsig='1';state=up;endif;endif;状态机VHDL程序设计whenup=position=position+1;pos:=pos+1;ifpos=2and(downlight(3)='1'oruplight(3)='1'ordownlight(4)='1')thenstate=up;elsifpos=3and(downlight(4)='1')thenstate=up;elsestate=stop;endif;whendown=position=position-1;pos:=pos-1;ifpos=3and(downlight(2)='1'oruplight(2)='1'oruplight(1)='1')thenstate=down;elsifpos=2and(uplight(1)='1')thenstate=down;elsestate=stop;endif;whenstop=state=dooropen;whendooropen=doorlight='1';clearup='1';cleardn='1';state=wait1;whenothers=state=initial;endcase;谢谢