2017-04-22 4 views
2

の場合に与えられたプロセスのために、私は変数を宣言した場合は(variable temp : std_logic;、のは、1ビットの変数を言わせて)、私は変数に値を割り当てることができます与えられた条件が真を返す場合、すなわちクエリ、特に変数の代入

if (xyz=1) then --Assuming that this condition returns TRUE 
temp:= '1'; 

??このロジックはASICで合成可能ですか?

答えて

6

はい。変数はFPGAとICの両方で合成可能です。プロセスとは、ハードウェアを少しモデル化した、少しのソフトウェアです。ソフトウェアのほんの少しは変数を使うことができますが、変数はプロセス内のスコープ内にあるため、最終的にはハードウェアのわずかな出力である信号を駆動する必要があります。

例えば、ここでいくつかの組合せ論理である:それはクロックドであるため、ここで

process (A, B, C, D) 
    variable TMP : std_logic; 
begin 
    if A = '1' then 
    TMP := B and C; 
    TMP := TMP and D; 
    else 
    TMP := '0'; 
    end if; 
    F <= TMP; 
end process; 

は、フリップフロップ(のD入力に組合せ論理を合成する変数の使用例を示しプロセス):

process (CLOCK) 
    variable TMP : std_logic; 
begin 
    if rising_edge(CLOCK) then 
    TMP := A and B; 
    Q <= TMP; 
    end if; 
end process; 

そしてここで、そのD入力にANDゲートとフリップフロップ()を合成しますクロックドプロセス変数の使用例である:

process (CLOCK) 
    variable TMP : std_logic; 
begin 
    if rising_edge(CLOCK) then 
    Q <= TMP; 
    TMP := A and B; 
    end if; 
end process; 

2つのクロック処理の唯一の違いは、順序です。最初に、変数はアクセスされる前に割り当てられます。 2番目には、それが割り当てられる前にアクセスされます。

  • クロックされたプロセスで変数にアクセスする前に変数に割り当てると、組み合わせ論理が推論されます。あなたは、クロックドプロセスでそれに割り当てる前に 変数にアクセスする場合

  • 、フリップフロップ が推測されます。

  • を組み合わせプロセスに割り当てる前に、変数にアクセスすることはありません。ラッチが推測されます。

変数は、プロセスの実行間で値を保持します。変数は、クロックドプロセス中に割り当てられる前にアクセスされた場合従って、値の読み出しは、プロセスの前の実行に書き込まれていなければなりません。クロックされたプロセスでは、以前の実行は前のクロックエッジにあったはずです。したがって、フリップフロップが推測されます。

+0

だから、私は本当に変数にブール値を割り当てることはできません?信号を割り当ててICの入力ピンからドライブする必要がありますか? –

+0

私はあなたの質問を理解していません。 'boolean'は_type_です。 'boolean'シグナルや変数を使うことができます。両方とも合成可能である。タイプ 'boolean'が不明を表すことができないので、しかし、気にしない/初期化されていない/、boolean''より_type_ 'std_logic'を使用することをお勧めします。私はそれをもっと明確にしようとするために質問を編集しました。 –

+0

私は自分の質問を正しく表現していないと思います。私は何を意味している - 私は '言う値を割り当てる必要があればマップされた(ICのピンから0''値「上記の質問で定義された変数' temp'に0''、私はこれを '駆動する必要がありますか」 )入力ポートに信号を介して、次いで、それを変数に割り当てる、または状態が真である場合、所定の条件のための任意の方法で言う、変数 'temp'すなわち、'温度<=この値を割り当てる「0」。 '私はどの変数にも定数を直接割り当てることができ、それが合成されることを期待できますか? –