2017-01-07 5 views
0

私のW_EN(std_logic)信号が必要に応じて(ある条件を満たす場合)設定されているコードを書きたいと思います。 )はゼロです。 W_ENは、私がこれを行うには、この方法では、「その他」の文を(コード例では、「W_EN」が「one_if_one」と呼ばれている)を使用して行うことができますSTD_LOGIC_VECTORだろう場合:VHDL:std_logic信号の "others-like"コマンド

signal cnt : unsigned (1 downto 0); --incremented at every clk_cycle 
signal one_if_one : std_logic; 

process (cnt) 
begin 
one_if_one <= (others => '0'); 
if (cnt = "01") then 
one_if_one <= '1'; 
end if; 
end process; 

しかしW_ENは一つだけであるため、ビット、 "他の"それと使用することはできません。 "プロセスで指定されていない場合はゼロに設定する"というコマンドを実装する方法があるかどうか尋ねたいと思います。

PS:ifのelseブランチを書くことができますが、実際のコードではもっと問題になる可能性があるので、私はこれをやりたくありません。 「

one_if_one <= 'L'; 

one_if_one <= (others => '0'); 

が、これはゼロによって課せられたので、別の意味を持っているでしょう:

PPS:私は一瞬のために見つけた唯一の解決策は、ラインを交換することです他の人たちは強い人です。

ご協力いただきありがとうございます。

+1

'one_if_one <=' 0 '; '...プロセス内では、最後の割り当てが勝つので、同じ信号で複数のドライバを作成していません。 –

+0

問題が明らかでない仮想コードではなく、問題がある場合は実際のコードを投稿してみませんか? – mkrieger1

+0

Brianが示すように、プロセス内には1つのドライバがあり、各ドライバは特定のシミュレーション時間にアクティブな投影された出力波形ごとに1つのトランザクションを持ちます(IEEE Std 1076-2008 10.5シグナル割り当てステートメント、10.5.2.2単純な割り当てステートメントの実行)。 if文の前では、集計値の代わりに '0'を割り当てます。 ifステートメントの条件が真である場合、それは囲まれた代入で、前の代入に値 '1'を代入します。 * if文で異なるように指定されています* "* ...プロセスで異なって指定されました*"。 – user1155120

答えて

0

ここで特別な操作を行う必要はありません。信号が特定のプロセス内で複数回割り当てられる場合、の最後の割り当てが実際に割り当てられる値になります。

process (cnt) 
begin 
    one_if_one <= '0'; 
    if (cnt = "01") then 
    one_if_one <= '1'; 
    end if; 
end process; 

あなたが使用することを試みてきたothers構文は配列型を割り当てるための専用ですので、それはタイプstd_logicのオブジェクトとの関係では意味がありません

process (cnt) 
begin 
    if (cnt = "01") then 
    one_if_one <= '1'; 
    else 
    one_if_one <= '0'; 
    end if; 
end process; 

に相当します。