开放实验报告题目:基于VHDL的多路彩灯控制系统班级:学号:姓名:指导教师:时间:2010年6月30日2基于VHDL的多路彩灯控制系统一、设计目的熟悉VHDL的设计方法,掌握VHDL的设计思想,了解VHDL向芯片的下载和测试,建立完整系统设计的概念。二、设计要求八路彩灯控制系统设定有四种花样变化,这四种花样可以进行自动切换,且每种花样可以选择不同的频率,可以清零和暂停。四种花样分别为:1.全亮,全灭,给、一个点亮。2.从左到右一次点亮。3.从左到右依次熄灭。4.从两边向中间再向两边依次点亮。三、设计原理用VHDL进行设计,首先应该理解,VHDL语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大而复杂的系统。在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。在该电路中只需简单的修改程序就可以灵活地调整彩灯图案和变化方式。四、设计方案首先应进行系统模块的划分,规定每一模块的功能以及各个模块之问的接口。设计方案为:一个四分频输出分频器,一个彩灯花样模式选择器,一个清零控制器,一个暂停控制器。3子模块及其功能:本次设计分为四个子模块,即八路彩灯花样控制器、四频率输出分频器,暂停控制器和清零控制器,其子模块及其功能如下:(1)四频率输出分频器:在本次设计中,我们只设计了四种花样,我们要求这四种花样以不同的频率显示,而只有一个输入的时钟信号,所以我们对所输入的时钟信号进行2分频、4分频、8分频、16分频,得到四种频率信号。(2)清零控制器,当清零生效时,将每个灯输入低电平。(3)暂停控制器:通过控制时钟信号来控制电路是否工作,当工作时输入时钟信号,当暂停时输入高电瓶。(4)八路彩灯花样控制器:通过花样控制器来选择每种模式下要亮的灯的规律,花样可任意设置。五、设计程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycaidengisport(clk:instd_logic;---时钟s:instd_logic_vector(1downto0);---速度clr:instd_logic;---清零低电平有效t:instd_logic;----暂停低电平有效f:instd_logic_vector(1downto0);---模式q0,q1,q2,q3,q4,q5,q6,q7:outstd_logic);---输出endcaideng;architecturertlofcaidengissignalclk1:std_logic;---1hz始时钟signalclk2:std_logic;---模式频率signalclk3:std_logic;signalcnt:std_logic_vector(2downto0);signalq:std_logic_vector(7downto0);beginprocess(t)---暂停beginift='0'thenclk3='1';elseclk3=clk;endif;endprocess;process(clk3)---1hz分频variablecount:integerrange0to4;4beginifclk3'eventandclk3='1'thenifcount=4thenclk1=notclk1;count:=0;elsecount:=count+1;endif;endif;endprocess;process(clk1,s)---模式分频variablecount1:std_logic_vector(2downto0);beginifclk1'eventandclk1='1'thencount1:=count1+1;endif;casesiswhen00=clk2=count1(2);when01=clk2=count1(1);when10=clk2=count1(0);when11=clk2=clk1;endcase;endprocess;process(clk2,clr,f)---清零beginifclr='0'thencnt=000;q=00000000;elsifclk2'eventandclk2='1'thencnt=cnt+1;iff=00then----全亮,全灭,隔一亮casecntiswhen000=q=11111111;when001=q=00000000;when010=q=01010101;when011=q=10101010;whenothers=q=00000000;endcase;endif;5iff=01then----依此点亮casecntiswhen000=q=10000000;when001=q=01000000;when010=q=00100000;when011=q=00010000;when100=q=00001000;when101=q=00000100;when110=q=00000010;when111=q=00000001;endcase;endif;iff=10then----依此熄灭casecntiswhen000=q=11111110;when001=q=11111101;when010=q=11111011;when011=q=11110111;when100=q=11101111;when101=q=11011111;when110=q=10111111;when111=q=01111111;endcase;endif;iff=11then----两边向中间亮casecntiswhen000=q=10000001;when001=q=01000010;when010=q=00100100;when011=q=00011000;when100=q=00011000;when101=q=00100100;when110=q=01000010;when111=q=10000001;endcase;endif;endif;endprocess;q0=q(0);q1=q(1);q2=q(2);q3=q(3);q4=q(4);q5=q(5);q6=q(6);q7=q(7);endrtl;6六、仿真波形图经硬件测试,结果和仿真结果相符。七、总结试验中遇到的问题:主要为编写程序时的语法错误、仿真波形图的波形设置和下载时的引脚匹配问题。通过此次试验,学到了VHDL语言的设计,进一步了进行设计的层次问题,先进行各个模块的分别设计,然后进行组合,实现特定的功能。另外学习了将设计好的程序向芯片中进行下载并测试,增强了动手能力,完成了理论与实际的结合。