2016-05-20 4 views
3

私はVHDLを初めて使用しています。多くのチュートリアルを読み終えたら、私は足を濡らしています。ここでは、私が困っているコード例です。 trade_cellエンティティは、絶対値を取得した後に変数abs_nに割り当てられた符号付きの信号nを受け取ります。その結果は、出力のための信号量に割り当てられる。信号に変数と変数への信号を割り当てる

これをシミュレートするたびに、量はXに設定されます。 ここでは何が欠けていますか?優しいに関しては

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.NUMERIC_STD.ALL; 

entity trade_cell is 
    Port (
     n: IN signed(31 downto 0); 
     amount: OUT signed(31 downto 0); 
    ); 
end trade_cell; 

architecture Behavioral of trade_cell is 
begin 

    trader: process(start, value, n, P, dP, delta, ddelta) 
    variable abs_n : signed(31 downto 0) := abs(n); 
begin 
    amount <= abs_n; 
    end process; 
end Behavioral; 

、 RincewindWizzard

+0

あなたのコードは解析されません。最後のポート宣言の後に余分なセミコロンがあり、宣言されていない無関係の感度リスト要素があります。これらの2つのことを修正し、コードを分析します。 – user1155120

答えて

2

あなたの問題であり、このラインその:

variable abs_n : signed(31 downto 0) := abs(n); 

あるシミュレーションの冒頭で一度変数abs_nを初期化(技術的には中詳述)。このとき、信号n'U'の値を持ち、abs('U')'X'となるため、変数abs_nは値'X'で初期化され、その後は決して値が割り当てられません。

ので、代わりに:

trader: process(start, value, n, P, dP, delta, ddelta) 
    variable abs_n : signed(31 downto 0) := abs(n); 
begin 
    amount <= abs_n; 
    end process; 

次のものが必要です。

trader: process(start, value, n, P, dP, delta, ddelta) 
    variable abs_n : signed(31 downto 0); 
begin 
    abs_n := abs(n); -- assign abs_n here... 
    amount <= abs_n;  -- ...and use its value here 
    end process; 

私はあなたがの他の多くの信号がある理由ですMCVEを作るためのコードを、ダウン切り詰めていると仮定しますプロセスの感度リストtrader。そうでない場合は、そのプロセスの入力を感度リスト(この場合はただn)で必要とします。

+1

2つの ':=' 'がついたマイナーなタイプミスです。 ;) – PlayDough

関連する問題