2017-12-13 18 views
0

VHDL:ここ

に信号を送るためにシステムクロック(SYS_CLK)を割り当てることができない私は、シミュレーション結果をアップロードしています。ハイライト部分では、両方の信号にsys_clkを割り当てる必要があります 定義済みのsclk_1およびsclk_2信号の遅延によってシステムクロック(Sys_clk)を割り当てるvhdlコードを書きました。

カウンタを25カウントした後のシミュレーションでコードを実行して実行すると、両方の信号のステータスがシステムクロック(Sys_Clk)の代わりにハイ(ロジックレベルハイ)になります。

私はArtix 7 Basys -3 Boardとその100MHZシステムクロックを使用しています。

定義された信号にどのようにシステムクロック(Sys_Clk)を割り当てることができますか?

architecture Behavioral of Power_Sequence is 
signal counter : integer := 0; 
signal sclk_1 : std_logic := '0'; 
signal sclk_2 : std_logic := '0'; 

begin 

process(Sys_Clk) 

begin 

    if(Sys_Clk 'event and Sys_Clk = '1') then 
     if(resetb = '0')then 
      sclk_1 <= '0'; 
      sclk_2 <= '0'; 
     else 
      counter <= counter + 1; 
      if (counter > 24 and counter < 50) then 
      sclk_1 <= Sys_Clk; 
      sclk_2 <= Sys_Clk; 
      end if; 
     end if; 
    end if;  
end process; 
end Behavioral; 
+1

質問を編集して[MCVE]にしてください。あなたが得る正確なエラーメッセージを含めてください。現時点では、関連する宣言のどれも見ることができません(ただし、セミコロンがないことは明らかです)。 –

+0

クロック信号はCLOCK信号です。同期エレメントのクロック入力にのみ接続してください。 FFデータ入力には接続しないでください。ちなみに、if文は、Sys_Clkが '1'の場合にのみ真です。したがって、sclk_tpとsclk_btは常に高くなるはずです。 – Juergen

+0

'sclk_tp'と' sclk_bt'とは何ですか?彼らは 'sclk_1'と' sclk_2'を意図していますか? – mkrieger1

答えて

2

コードは機能しません。 線の間のプロセスのコード:SYS_CLKが上昇しているとき

if(Sys_Clk 'event and Sys_Clk = '1') then 
... 
    end if; 

が実行されます。この時点で、Sys_Clkの値は '1'です!それからシグナルsclk_tpとsclk_btにコピーすると、常に '1'がコピーされます。

それはあなたがこのような非同期プロセスでsclk_tpとsclk_bt信号を割り当てる必要が働くようにするには:

sclk_tp <= Sys_Clk when (counter > 24 and counter < 50) else '0'; 

そして、ちょうどカウントするように、同期プロセスを使用します。

[編集]

paebbelsは説明として、上記の行は、クロック・ゲーティングを作るための良い解決策ではありません。 colck gatingについてはthis stackoverflow responseに関する説明があります。

+0

この説明を使用してクロックゲーティングを実装しないでください。 – Paebbels

関連する問題