weixin_48670628 2020-06-15 13:50 采纳率: 0%
浏览 704

在quartus II软件上基于VHDL语言实现八路彩灯的仿真

1.问题:试设计一种彩灯控制器控制8盏灯。该彩灯控制器有4种自动切换的花样。第一种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮;第二种花样为彩灯两边同时亮一个逐次向中间移动再散开;第三种花样为彩灯两边同时亮两个逐次向中间移动再散开;第四种花样为彩灯两边同时亮三个,然后四亮四灭,四灭四亮,最后一灭一亮。四个花样自动变换,重复以上过程。输入时钟频率为500Hz,灯亮的时间在1—4秒之间,可以自由控制。电路中以“1”代表灯亮,以“0”代表灯灭。

2.自己更改了一段代码,但是仿真不出来,有没有大神愿意帮我改一下,从来没学过这个vhdl,太难了。跪谢~
代码:
LIBRARY IEEE;
USE IEEE.std_logIC_1164.ALL;
USE IEEE.std_logIc_ARITH.ALL;
USE IEEE.std_logic_UNSIGNED.ALL;
ENTITY CaiDeng IS
port(CLK:IN std_logic;
RST:in std_logic;
SelMode:in std_logic_vector(1 downto 0);--彩灯花样控制
Light:out std_logic_vector(7 downto 0));
END CaiDeng;
ARCHITECTURE control OF CaiDeng IS
SIGNAL clk1ms:std_logic:='0';
SIGNAL cnt1:std_logic_vector(3 downto 0):="0000";
SIGNAL cnt2:std_logic_vector(1 downto 0):="00";
SIGNAL cnt3:std_logic_vector(3 downto 0):="0000";
SIGNAL cnt4:std_logic_vector(1 downto 0):="00";
BEGIN

P1:PRoCESS(clk1ms)
BEGIN
if(clk1ms'EVENT AND clk1ms='1')then
if selmode="00" then --第一种彩灯花样的程序
if cnt1="1111" then
cnt1<="0000";
else cnt1<= cnt1+1;
end if;
case cnt1 is
when "0000"=>light<="00000001";
when "0001"=>light<="00000010";
when "0010"=>light<="00000100";
when "0011"=>light<="00001000";
when "0100"=>light<="00010000";
when "0101"=>light<="00100000";
when "0110"=>light<="01000000";
when "0111"=>light<="10000000";
when "1000"=>light<="01000000";
when "1001"=>light<="00100000";
when "1010"=>light<="00010000";
when "1011"=>light<="00001000";
when "1100"=>light<="00000100";
when "1101"=>light<="00000010";
when "1110"=>light<="00000001";
when "1111"=>light<="00000000";

when others=>light<="00000000";
end case;
elsif selmode="01" then -- 第二种彩灯花样的程序
if cnt2="11" then
cnt2<="00";
else cnt2<= cnt2+1;
end if;
case cnt2 is
when "00"=>light<="11000011";
when "01"=>light<="00111100";
when "10"=>light<="11000011";
when others=>light<="00000000";
end case;
elsif selmode="10" then --第三种彩灯花样的程序
if cnt3="1111" then
cnt3<="0000";
else cnt3<=cnt3+1;
end if;
case cnt3 is
when "0000"=>light<="10000001";
when "0001"=>light<="01000010";
when "0010"=>light<="00100100";
when "0011"=>light<="00011000";
when "0100"=>light<="00100100";
when "0101"=>light<="01000010";
when "0110"=>light<="10000001";
when others=>light<="00000000";
end case;
elsif selmode="11" then -- 第四种彩灯花样的程序
if cnt4="11" then
cnt4<="00";
else cnt4<= cnt4+1;
end if;
case cnt4 is
when "00"=>light<="11100111";
when "01"=>light<="11110000";
when "10"=>light<="00001111";
when "11"=>light<="01010101";
when others=>light<="00000000";
end case;
end if;
end if;
END PROCESS P1;
P2:PROCESS(clk) --分频进程
variable cnt:integer range 0 to 1000;
BEGIN
IF(RST='0')then
cnt:=0;
ELSIF(clk'EVENT AND clk='1')then
if cnt<999 then
cnt:=cnt+1;
clk1ms<='0';
else
cnt:=0;
clk1ms<='1';
end if;
end if;
end PROCESS P2;
end control;

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!