vhdl出现不该有的跳转
library IEEE;use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_Unsigned.all;
entity led_change is
port(
clk:in Std_Logic;
led:out Std_Logic_Vector(7 downto 0)
);
end led_change;
architecture fun of led_change is
signal cnt: Std_Logic_Vector(31 downto 0);
signal flip_led: Std_Logic_Vector(4 downto 0);
begin
process(clk)
begin
if(clk'event and clk='1')then
cnt<=cnt+1;
if(cnt=25000000)then
flip_led<=flip_led+1;
cnt<=(others=>'0');
end if;
end if;
case flip_led is
when "00000"=>led<="00000000";--0
when "00001"=>led<="11111111";--1
when "00010"=>led<="01111111";--2
when "00011"=>led<="00111111";--3
when "00100"=>led<="00011111";--4
when "00101"=>led<="00001111";--5
when "00110"=>led<="00000111";--6
when "00111"=>led<="00000011";--7
when "01000"=>led<="00000001";--8
when "01001"=>led<="00000000";--9
when "01010"=>led<="00000001";--10
when "01011"=>led<="00000011";--11
when "01100"=>led<="00000111";--12
when "01101"=>led<="00001111";--13
when "01110"=>led<="00011111";--14
when "01111"=>led<="00111111";--15
when "10000"=>led<="01111111";--16
when "10001"=>led<="11111111";--17
when "10010"=>led<="00000000";--18
when others =>led<="ZZZZZZZZ";--
end case;
if(flip_led>"10010")then
flip_led<="00000";
end if;
end process;
end fun;
以上语句仿真时从15直接跳到18,why? 试试。。
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_Unsigned.all;
entity led_change is
port(
clk:in Std_Logic;
led:out Std_Logic_Vector(7 downto 0)
);
end led_change;
architecture fun of led_change is
signal cnt: Std_Logic_Vector(31 downto 0);
signal flip_led: Std_Logic_Vector(4 downto 0);
begin
process(clk)
begin
if(clk'event and clk='1')then
cnt<=cnt+1;
if(cnt=25000000)then
if flip_led/="10010" then
flip_led<=flip_led+1;
else flip_led<="00000";
end if;
cnt<=(others=>'0');
end if;
end if;
case flip_led is
when "00000"=>led<="00000000";--0
when "00001"=>led<="11111111";--1
when "00010"=>led<="01111111";--2
when "00011"=>led<="00111111";--3
when "00100"=>led<="00011111";--4
when "00101"=>led<="00001111";--5
when "00110"=>led<="00000111";--6
when "00111"=>led<="00000011";--7
when "01000"=>led<="00000001";--8
when "01001"=>led<="00000000";--9
when "01010"=>led<="00000001";--10
when "01011"=>led<="00000011";--11
when "01100"=>led<="00000111";--12
when "01101"=>led<="00001111";--13
when "01110"=>led<="00011111";--14
when "01111"=>led<="00111111";--15
when "10000"=>led<="01111111";--16
when "10001"=>led<="11111111";--17
when "10010"=>led<="00000000";--18
when others =>led<="ZZZZZZZZ";--
end case;
end process;
end fun; lans0625 发表于 2013-10-25 14:49 static/image/common/back.gif
试试。。
library IEEE;
呵呵,可否告诉我为什么会出现那个问题。 信号flip_led在两个地方被赋值,且包含于 if 语句。。。。。。。。 lans0625 发表于 2013-10-25 15:05 static/image/common/back.gif
信号flip_led在两个地方被赋值,且包含于 if 语句。。。。。。。。
谢谢,楼上正解。改完后确实是正常了,但不知道原程序为什么会正好在特定位置跳转。
页:
[1]