0

2 つのスイッチを使用して変数の値を制御したいと考えています。1 つは値を増やすためのもので、もう 1 つは値を減らすためのものです。このコードをどのように変更すればよいですか。エラーは、変数のカウントが合成できないことを示しています。私は多くのことを試しましたが、問題が正確に何であるかを理解できませんでした。

エラー:Xst:827 - 34 行目: 信号 count0 を合成できません。同期の記述が正しくありません。同期要素 (レジスタ、メモリなど) の記述に使用している記述スタイルは、現在のソフトウェア リリースではサポートされていません。

library IEEE;
    use IEEE.std_logic_1164.ALL;
    use IEEE.numeric_std.ALL;

entity counts is
port(
        btn_up  : in std_logic;
        reset : IN  STD_LOGIC;
        btn_dn  : in std_logic;
        counted : out std_logic_vector(8 downto 0)
        );
end entity counts;

architecture behaviour of counts is
  signal counter : std_logic_vector(8 downto 0);
begin

  btupprocess : process(btn_up,reset,counter)
    variable counting : unsigned(8 downto 0);
  begin
    counting := unsigned(counter);
    if(reset = '1') then
      counting := (others => '0');
    elsif (rising_edge(btn_up)) then
      if(counting > 399) then
        counting := counting - 1;
      else
        counting := counting + 1;
      end if;
    end if;
    counter <= std_logic_vector(counting);
  end process;

  btndnprocess : process(btn_dn,counter)
    variable counting : unsigned(8 downto 0);
  begin
    counting := unsigned(counter);
    if (falling_edge(btn_dn)) then
      if(counting < 200) then
        counting := counting + 1;
      else
        counting := counting - 1;
      end if;
    end if;
    counter <= std_logic_vector(counting);
  end process;
  counted <= counter;
end behaviour;
4

1 に答える 1

1

場合によっては、2 つの異なるプロセスから信号を駆動することができますが、この場合はより良いアプローチがあります。

問題の可能な解決策は次のとおりです。

  • clockエンティティに入力を追加します。おそらく同期設計を使用する必要があります
  • アーキテクチャを書き直して、3 つのプロセスを使用し、各プロセスが 1 つの信号を駆動するようにします。
    • 1 つのプロセスがデバウンスし、 の立ち上がりエッジを検出しbtn_upます。このプロセスは信号を生成しますbtn_up_rising_edge
    • 1 つのプロセスがデバウンスし、 の立ち上がりエッジを検出しbtn_dnます。このプロセスは信号を生成しますbtn_dn_rising_edge
    • btn_up_rising_edge3 番目のプロセスはandを読み取りbtn_dn_rising_edge、必要に応じてカウントをインクリメントまたはデクリメントします。
  • 3 つのすべてのプロセスにおいて、機密リストには次の項目のみを含める必要がclockあります。reset

ここで、デバウンサーを使用したエッジ検出器の例を見つけることができます: https://electronics.stackexchange.com/questions/32260/vhdl-debouncer-circuit

于 2013-10-13T13:01:19.547 に答える