2016-12-21 6 views
0

私は信号割り当てがプロセスの最後に行われることを知っています。しかし、私は2つの信号 "A"と "B"を持っているとしましょう。私のプロセス(ほとんどのサイクルで)ではAの値が頻繁に変化し、BはAの値を次のクロックサイクルで他の信号に割り当てるための一時的な値として保持するために使用されます。しかし、ある種のことが起こらない限り、Bの価値を変えたくない。ですから、AをBに1回代入すると、Aの値が変わるたびにBの値が自動的に更新されますか?答えが「はい」の場合、if文が成立したときにのみ、Bがその値を変更できるようにするにはどうすればよいですか? Bがこれを解決するため、シグナルの代わりに変数を使用していますか?信号を使って温度値を保持するVHDL

+1

私はあなたの質問を理解していません。 [MCVE](http://stackoverflow.com/help/mcve)の生成はどうですか?もしあなたがそうしたら、あなたは自分自身によく答えるかもしれません。 –

+1

あなたは不明です。コードで説明してください。機密リストには何がありますか? – user1155120

+0

プロセス内のどのような割り当てがやや基本的なレベルであるかを理解しているとは思いません。実行するたびにプロセス内に 'B <= A'を割り当てると、プロセスの最後に(0時の差分)' B'は 'A'がプロセスにエントリ*したときの値を取得します。 'if'文内に' B <= A'を割り当てるだけであれば、プロセスは実行されますが 'if'文を満たさない場合、' B'は前の値を保持します。あなたのプロセスがクロック供給されていると仮定すると、これはフリップフロップに 'B'を実装します。それがロックされていないプロセスだった場合、それはラッチ(悪い)で実装されます。 – QuantumRipple

答えて

0

信号と変数の主な違いの1つは、変数の割り当てが直ちに行われ、信号の割り当てがプロセス評価の終了時(通常はクロックサイクルの終了時)に行われることです。

AおよびBは、両方の信号として宣言された場合:

ステートメントが真と評価された場合、Bは、Aが(Some_Frequently_Changing_Signalの間であった何であろうどのプロセスへのエントリ時に有していた値が割り当てられ
process (reset, clk) 
begin 
    if (reset = '1') then 
     A <= '0'; 
     B <= '0'; 
    elsif rising_edge(clk) then 

     A <= Some_Frequently_Changing_Signal; 

     if ("certain thing happens") then 
     B <= A; 
     end if; 

    end if; 
end process; 

前のクロックサイクル)。

我々ではなく、信号の変数として宣言する場合:

process (reset, clk) 
begin 
    if (reset = '1') then 
     A := '0'; 
     B <= '0'; 
    elsif rising_edge(clk) then 

     A := Some_Frequently_Changing_Signal; 

     if ("certain thing happens") then 
     B <= A; 
     end if; 

    end if; 
end process; 

文が真と評価された場合、Bが割り当てられているA.しかし、Aは変数の代入がかかるためSome_Frequently_Changing_Signalの現在の値を保持していますすぐに置く。このタイプのコーディングスタイルはお勧めしません。

process (reset, clk) 
begin 
    if (reset = '1') then 
     B <= '0'; 
    elsif rising_edge(clk) then 

     if ("certain thing happens") then 
     B <= Some_Frequently_Changing_Signal; 
     end if; 

    end if; 
end process; 
関連する問題