2016-11-03 23 views
1

LEDがONになる前に20秒遅れる単純なVHDLコードを作りたいと思います。私はシグナルカウンターを20秒の遅延を作るために使用しましたが、私は非常に奇妙なことに気がつきました。もし私がLEDが遅れる前にOFFであると宣言していなければ、LEDは常にONになります。 2つのコード(クロックが50MHzの場合)で照明の前のVHDLの遅延

外観:このコードで

LEDが常にオンです。

library ieee; 
use ieee.std_logic_1164.all; 
entity check is 
port(clk : in std_logic; 
     led : out std_logic); 
end check; 

architecture arc of check is 
signal counter : integer range 0 to 100e6; 
begin 
process(clk) 
begin 
if rising_edge(clk) then 
    if counter<500e6 then 
     counter<=counter+1; 
    else 
     led<='1'; 
    end if; 
end if; 
end process; 
end arc; 

このコードでは、LEDは20秒後にのみオンになります。

library ieee; 
use ieee.std_logic_1164.all; 
entity check is 
port(clk : in std_logic; 
     led : out std_logic); 
end check; 

architecture arc of check is 
signal counter : integer range 0 to 100e6; 
begin 
process(clk) 
begin 
if rising_edge(clk) then 
    if counter<500e6 then 
     counter<=counter+1; 
     led<='0'; 
    else 
     led<='1'; 
    end if; 
end if; 
end process; 
end arc; 
+0

そのコードがシミュレーションで機能する場合、シミュレータは壊れています。それは決してLEDをオンにすることはできません。 –

答えて

0

カウンタとLEDの両方を初期化する必要があります。シミュレーションでは、これをしないと、初期化されていない信号の値は「U」になります。つまり、実際のシステムでどのような値が得られるかはわかりません。 0または1の両方を指定できます。 ポートの宣言では、= '0'を使用できます。

このコードによれば、カウンタ< 500e6の場合、 'led'の値は重要ではありません。それ以外は1です。コンパイラはそれを単純化します。 'led'は '1'です。

関連する問題