1

私は VHDL プログラミングの初心者で、ISE プロジェクト ナビゲーター 13.1 を使用して次の vhdl コード (プッシュ ボタンを非難するソフトウェア) を合成しようとしています。

entity PBdebouncer is
Port ( PB : in  STD_LOGIC;
       CLK : in  STD_LOGIC;
       reset : in  STD_LOGIC;
       PBdebounced : out  STD_LOGIC);
end PBdebouncer;

architecture Behavioral of PBdebouncer is

begin

    p1: process(CLK , PB , reset)
        variable enable,count : integer range 0 to 100000 := 0;
    begin
        if(reset = '1') then
            count := 0;
            enable :=0;
        elsif(CLK' event and CLK = '1' ) then
            if (enable = 1) then
                count := count + 1;
            end if;

            if(count = 99999 ) then 
                if(PB = '0') then
                    PBdebounced <= '0';
                else
                    PBdebounced <= '0';
                end if;

                count := 0;
                enable := 0;
            end if;

            count := count;

        else
            enable := 1;
        end if;

    end process;
end Behavioral;

残念ながら、次のエラーが発生しました。

ERROR:Xst:827 - ".../digital lab II 110/PBdebouncer/PBdebouncer.vhd" 行 43: シグナル イネーブルを合成できません。同期記述が正しくありません。同期要素 (レジスタ、メモリなど) の記述に使用している記述スタイルは、現在のソフトウェア リリースではサポートされていません。

このエラーについて説明していただけますか?

4

3 に答える 3

4

Clk' と event の間のスペースなしで試してみてください...

他にもいくつか質問があります。
なぜ「enable」の範囲が 0 から 100000 までしかないのに、これらの値を 2 つしか使用しないのですか? ブール値またはstd_logicを使用しないのはなぜですか?
「pbdebounced」は「0」以外に設定する必要がありますか?
ブール式を括弧で囲むのはなぜですか?
機密リストに PB が含まれているのはなぜですか?
シミュレーションで期待どおりに動作しましたか?

これらはおそらく今のところうまくいきます...

EDIT:フォーマットが悪いと問題が隠されました:

begin
   if reset = '1' then
      count := 0;
      enable :=0;
   elsif rising_edge(clk) then
      if enable = 1 then 
         count := count + 1; 
      end if;
      if count = 99999 then 
         -- do stuff
      end if;
      count:= count;
-- else   
-- enable := 1;
-- THE TWO LINES ABOVE are the problem
-- They are outside both the CLK and RESET clauses.
   end if;
end process;
于 2013-02-15T21:35:22.523 に答える
2

ちょっとしたアドバイス: 初心者は変数を避けてください。それらはソフトウェア プログラムのように機能するように見えますが、ハードウェアの厄介なものにマッピングされることがあります。

于 2013-02-22T16:12:39.613 に答える
1

問題の原因はブライアンの回答で特定されたようですが、これらの場合のヒントを追加します。

ザイリンクス ISE では、多数の言語テンプレートを表示でき ([編集] -> [言語テンプレート] を選択)、さまざまなスタイルのフリップフロップ (同期/非同期リセット、立ち上がり/立ち下がりエッジ トリガーなど) やその他の構造を実装する際に役立ちます。 .

これらは非常に役立ちます。特に、このようなエラー メッセージが表示される場合は、通常、選択したデバイスで合成できないハードウェアを記述する構文的に正しい VHDL コードが原因です。

于 2013-02-16T18:07:28.457 に答える