2017-05-01 5 views
-3

私はFPGAで50MHzのクロックを使用しており、5秒のタイマーを作ろうとしています。 cnt_tの下に5 x 50MHz(x "0EE6B280" - > 250,000,000)に達した後、time_tick_32を1にしてcnt_tを< = x "00000000";にします。以下のコードは、15秒タイマーVHDL

signal cnt_t : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00000000"; 
signal time_tick : STD_LOGIC:= '0' ; 
signal time_tick_32 : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000"; 


process (clk_50) IS 
    begin 
     if falling_edge(clk_50) then 
     cnt_t <= cnt_t + '1'; 
     end if; 
    if (cnt_t = x"0EE6B280") then --if 5 seconds 
     time_tick <= '1'; 
     cnt_t <= x"00000000"; 
     time_tick_32(0)<=time_tick; 
    else 
     time_tick <= '0'; 
     time_tick_32(0)<=time_tick; 
    end if; 

end process; 
+0

わからないが、しかし、あなたはあなたの番号は、条件内の文字列と比較するにしてもよろしいですか? – Gogol

+1

@Gogol 'x" .... "は16進数のリテラルです。したがって、(文字)文字列との比較ではありません。 – Paebbels

+1

完全なコードを表示してください。ここにいくつかのヒントがあります:1. 'cnt_t'の型を' unsigned'または 'natural'に変更します。 2. 32ビットは必要ありません。 3.マジックナンバー=>整数値を使用しないでください。 (unsigned型は整数型と比較できます) – Paebbels

答えて

1

てみ取得することはありませんtime_tick_32動作しませんでした。この言語について

signal cnt_t : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00000000"; 
signal time_tick : STD_LOGIC:= '0' ; 
signal time_tick_32 : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000"; 


-- I assume you begin your architecture somewhere 
-- Can make the following a concurrent statement 
-- (unless it is some kind of shift reg assigned in a diff process... 
-- then you will get multiple driver issues) 
time_tick_32(0) <= time_tick; 

process (clk_50) IS 
begin 
    if rising_edge(clk_50) then -- Changed to rising_edge; 
           -- Any particular reason you are using falling_edge? 
     if (cnt_t = x"0EE6B280") then --if 5 seconds 
      time_tick <= '1'; 
      cnt_t <= x"00000000"; 
     else 
      time_tick <= '0'; 
      cnt_t <= cnt_t + '1'; 
     end if; 
    end if; 
end process; 
+0

プロセスの外側(アーキテクチャブロック内)に信号を割り当てることができます。これは_concurrent_割り当てを行います。 'time_tick_32'を使って何を使っているのかを判断するのは難しいです。あなたが他の場所に割り当てていない限り、あなたはうまくいくはずです – gsm

関連する問題