- 締切済み
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; 以上、よろしくお願いします
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- P0O9I
- ベストアンサー率32% (693/2146)
立上り・立下り両方でのクロックで動作するFFが無いので、論理合成ができるわけはありません。 そこらが、言語から入った人の勘違いしやすい所かな。 考えられる方法としては、立上りと立下りそれぞれで動作するカウンタを別々に作り、2つのカウンタの値を加算するとか、でしょうね。
お礼
前略 ・ ありがとうございます。 お礼遅くなって申し訳ありません。 質問して、1-2日あまりは30分、1時間毎に回答がないかチェックしましたが回答がないので MSNの質問箱では VHDLはダメとあきらめていました。 ・XC7572XLには、立上り・立下り両方でのクロックで動作するFFがないようなのですが、そのような情報はどこにあるのでしょうか? ・ CPLD、FPGAについて 勉強中です。 VHDLのサンプルコードがのってるHPをご存知でしたらおしえてください。 以上 よろしくお願いします