2016-11-26 4 views
0

varは、サイズmの符号付きベクトル(ライブラリIEEE.NUMERIC_STD.ALL)の略です。`others`式を` signed`キャストと組み合わせる

fooは、std_logic_vector(n-1 downto 0)の別の変数であるとします(nはmより小さい)。

fooの左に「0」を連結し、そのサイズがmになるまで右端にゼロを埋め込み、結果をvarに保存します。

は私が

rdsor <= signed('0' & divisor & others=>'0'); 

を試みたが、ザイリンクスは、合成上、次のメッセージを表示して文句を言う:

Syntax error near "others". 

どのように私は私がやりたいですか?

+1

解決策を提供するために必要な 'divisor '、' rdsor'の宣言は提供していません。 1行のスニペットには 'var'も' foo'も表示されません。また、ツールで期待されるVHDL標準のリビジョンも省略しました。 – user1155120

答えて

2

rdsorを使用すると、2つの割り当てを使用することができfooにあなたの理論varと除数と同等と同等であると仮定しプロセス文で:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity jsevillamol is 
end entity; 

architecture fum of jsevillamol is 
    constant M:  natural := 42; 
    constant N:  natural := 23; 
    signal rdsor: signed (M - 1 downto 0); 
    signal divisor: std_logic_vector (N - 1 downto 0); 
begin 
    -- rdsor <= signed('0' & divisor & others=>'0'); 
    process (divisor) 
    begin 
     rdsor <= (others => '0'); 
     rdsor (rdsor'LEFT downto rdsor'LEFT - divisor'LENGTH) 
      <= signed('0' & divisor); 
    end process; 
end architecture; 

これは、rdsorの各要素が別の記号であるために機能しますまた、投影された出力波形のには、特定の時間に対して1つの値しかありません。 aftertime_expressionを2番目の割り当ての波形要素に入力しないことによって、rdsorの要素に2番目の割り当て式の値が割り当てられます。 (最初の割り当ての要素は2番目の割り当てに置き換えられます)。投影された出力波形を上書きするこの方法は、if文で不完全な条件カバレッジを行う前にデフォルト値を提供する際によく使用されます。

この例では、インデックスの範囲が適切に構成されていることを示していますが、何も面白くしていない間に分析、精緻化、シミュレートします。

Matthew Taylorの答えによってもたらされる連結と集計の問題を回避していることに注意してください。ツールVHDLリビジョンに対して敏感ではない方法で単一の信号割り当てについて

architecture fie of jsevillamol is 
    constant M:  natural := 42; 
    constant N:  natural := 23; 
    signal rdsor: signed (M - 1 downto 0); 
    signal divisor: std_logic_vector (N - 1 downto 0); 
    subtype other is signed (rdsor'LEFT - divisor'LENGTH - 1 downto 0); 
begin 
    -- rdsor <= signed('0' & divisor & others=>'0'); 
    rdsor <= '0' & signed(divisor) & other'(others => '0'); 
end architecture; 

これは、連結を使用して骨材にothersを包含する。末尾の '0'部分には、集計式を修飾された式のターゲットにするためのサブタイプ宣言があります。

また、このアーキテクチャでは、インデックスの算術演算が正確であることを分析、精緻化、シミュレートします。

+0

アップ、私は変数の名前を混在させました。網羅的なソリューションをありがとう! – Jsevillamol

1

あなたは集計ない連結の一部の一部としてothersを使用する必要があります。ここで集合体を用いたソリューションだとは(VHDL 2008使用して、あなたに依存していた)属性:

rdsor <= (rdsor'LEFT => '0', (rdsor'LEFT-1) downto (rdsor'LEFT-divisor'LENGTH) => signed(divisor), others => '0'); 

https://www.edaplayground.com/x/5Yuw

+0

-2008オプションに注目してください。 – user1155120

+0

@ user1155120あなたが正しいです。初めてではなく、誤ってVHDL 2008を必要とするソリューションを思いつきました。そのスイッチはEDA PlaygroundのRiviera Proにデフォルトで設定されているためです。 –

関連する問題