• 締切済み

VHDL CPLD ISEパルス立上り・立下り検出

前略 ・VHDLの初心者です。ザイリンクスの ISE13.1とCPLD(XC9572XL)を使ってLEDのON/OFFをさせようとしています。 外部クロック(1KHz)をカウントして1000回でLEDを ON→OFF、OFF→ON を繰り返すようにしています。 外部クロック立上りのタイミングで Clk' event and Clk = '1' によりパルスをカウントするとは 論理合成もできてターゲットボード上でLEDのON/OFFを確認できています。 <質問>  外部パルスの立下りもカウントするようにしたいのですが、どのようなVHDL コードをかけばよいのでしょうか おしえてください。  下記のように if(( Clk' event and Clk = '1') or (Clk' event and Clk = '0')) とすると Syntax チェックはOKなのですが 論理合成(Synthesize XST)をおこなうと unsupported Clock statement の論理合成エラーがでてしまいます。 以下 VHDLソースコード //----------------------------- architecture RTL of Clk_Led_OnOff is Signal Count: Integer range 0 to 2000; Signal Led_signal : Std_Logic; begin process(Clk) begin if(( Clk' event and Clk = '1') or (Clk' event and Clk = '0')) -- if( Clk' event and Clk = '1') then Count <= Count + 1; --インクリメント if(Count < 1000)then Led_Signal <= '0'; else Led_Signal <= '1'; --OFF end if; if(Count >= 2000)then Count <= 0; end if; end if; Led <= Led_signal; end process; end RTL; 以上、よろしくお願いします

みんなの回答

  • P0O9I
  • ベストアンサー率32% (693/2146)
回答No.1

立上り・立下り両方でのクロックで動作するFFが無いので、論理合成ができるわけはありません。 そこらが、言語から入った人の勘違いしやすい所かな。 考えられる方法としては、立上りと立下りそれぞれで動作するカウンタを別々に作り、2つのカウンタの値を加算するとか、でしょうね。

stokyostokyo3
質問者

お礼

前略 ・ ありがとうございます。 お礼遅くなって申し訳ありません。 質問して、1-2日あまりは30分、1時間毎に回答がないかチェックしましたが回答がないので MSNの質問箱では VHDLはダメとあきらめていました。 ・XC7572XLには、立上り・立下り両方でのクロックで動作するFFがないようなのですが、そのような情報はどこにあるのでしょうか? ・ CPLD、FPGAについて 勉強中です。 VHDLのサンプルコードがのってるHPをご存知でしたらおしえてください。 以上 よろしくお願いします  

関連するQ&A