zhongpeng123 发表于 2013-10-25 14:31:29

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?

lans0625 发表于 2013-10-25 14:49:56

试试。。
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;

zhongpeng123 发表于 2013-10-25 14:57:39

lans0625 发表于 2013-10-25 14:49 static/image/common/back.gif
试试。。
library IEEE;



呵呵,可否告诉我为什么会出现那个问题。

lans0625 发表于 2013-10-25 15:05:03

信号flip_led在两个地方被赋值,且包含于 if 语句。。。。。。。。

zhongpeng123 发表于 2013-10-30 08:46:43

lans0625 发表于 2013-10-25 15:05 static/image/common/back.gif
信号flip_led在两个地方被赋值,且包含于 if 语句。。。。。。。。

谢谢,楼上正解。改完后确实是正常了,但不知道原程序为什么会正好在特定位置跳转。
页: [1]
查看完整版本: vhdl出现不该有的跳转