📄 caidengkongzi.txt
字号:
一、设计任务与要求
设计一个彩灯控制器,彩灯控制器的第1种花样为彩灯从右到左,然后从左到右逐次点亮,接着全灭全亮;第2种花样为彩灯两边同时亮1个,并逐次向中间移动再散开;第3种花样为彩灯两边同时亮2个逐次向中间移动再散开;第4种花样为彩灯两边同时亮3个,然后4亮4灭,4灭4亮,最后1灭1亮。4种花样自动变换,循环往复。
二、电路原理分析与方案设计
VHDL是美国国防部提出的一种经过标准化认证的硬件描述语言,使用VHDL语言进行硬件设计有如下特点:将一项工程设计(或称设计实体)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。用VHDL进行设计,首先应该理解,VHDL语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大而复杂的系统。首先应进行系统模块的划分,规定每一模块的功能以及各个模块之问的接口。本次设计要求比较简单,故采用一个模块,即彩灯控制器。彩灯控制电路是整个设计的核心,它负责整个设计的输出效果即各种彩灯图案的样式变化。该程序充分地说明了用VHDL设计电路的“弹”性,即可通过改变程序中输出变量q的位数来改变彩灯闪烁的数目。其中,计数器s能进行彩灯的图案控制,改变s的位数即可改变要控制图案的数目,改变输出变量器q的组合即可变幻彩灯图案。
在电路设置一个时钟,以便控制彩灯的循环闪烁,即当时钟clk='1'时,彩灯开关处于开状态。一个周期后,彩灯开始重新循环。同时内置计数器s,令s<=s+1,实现控制彩灯连续变化的功能。电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。在该电路中只需设计好控制的彩灯开关就可以灵活地调整彩灯图案和变化方式,从而实现不同种类的视觉效果。
VHDL语言设计如下所示:
Library ieee;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_unsigned.ALL;
entity paomadeng is
port(clk,reset :in std_logic;
q:out std_logic_vector(7 downto 0));
end;
architecture a of paomadeng is
signal s:std_logic_vector(4 downto 0);
begin
process(s,clk)
begin
if reset='1' then s<="00000";
elsif clk'event and clk='1' then
if s="11111" then
s<="00000";
else s<=s+1;
end if;
case s is
when "00000"=>q<="00000001";
when "00001"=>q<="00000010";
when "00010"=>q<="00000100";
when "00011"=>q<="00001000";
when "00100"=>q<="00010000";
when "00101"=>q<="00100000";
when "00110"=>q<="01000000";
when "00111"=>q<="10000000";
when "01000"=>q<="10000001";
when "01001"=>q<="01000000";
when "01010"=>q<="00100000";
when "01011"=>q<="00010000";
when "01100"=>q<="00001000";
when "01101"=>q<="00000100";
when "01110"=>q<="00000010";
when "01111"=>q<="00000001";
when "10000"=>q<="00000000";
when "10001"=>q<="11111111";
when "10010"=>q<="10000001";
when "10011"=>q<="01000010";
when "10100"=>q<="00100100";
when "10101"=>q<="00011000";
when "10110"=>q<="00100100";
when "10111"=>q<="01000010";
when "11000"=>q<="10000001";
when "11001"=>q<="11000011";
when "11010"=>q<="00111100";
when "11011"=>q<="11000011";
when "11100"=>q<="11100111";
when "11101"=>q<="11110000";
when "11110"=>q<="00001111";
when "11111"=>q<="01010101";
when others=>null;
end case;
end if;
end process;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -