2013-04-25 34 views

答えて

7

可能な回避策は、例えば、六角形の値として4ビットの倍数を書いて、バイナリで休息を追加することです:

signal v: std_logic_vector(9 downto 0) := "01" & X"1A"; 
4

私の知る限りでは、達成するための「直接的」な方法はありませんあなたが探しているもの。あなたは、有効なVHDLである以下を使用することができます。

constant init : std_logic_vector (11 downto 0) := X"11A"; 
signal v : std_logic_vector (9 downto 0) := init(9 downto 0); 
+2

以上、 ':= init(v'range);' –

+1

私の初期回答には 'v'range'部分が含まれていましたが、コンパイルしようとしましたが、'不明な識別子 "v"私のコンパイラが 'v'について知らない全行を解析していないかのように思えます。 – simon

+1

ああそうかもしれない。複数のものがある場合は、その型のサブタイプ(v_typeまたはdatawordまたは説明的な型名)を作成します。次に、dataword'range WOULDがそこで動作します。 –

9

x"11A"は、「16進ビット列リテラル」です。 VHDL-2008以前では、これらは4ビットの倍数でなければならなかったので、見ている問題です。 VHDL-2008ではこの制限が解除されたので、10x"11A"と書くことができます。しかし、2008年のツールサポートはどれくらいか分かりません。

+2

私はVHDL 2008の詳細を読む必要があります。便利な機能が満載です:) – simon

+1

Doulosのサイトには簡単な要約があります - http://www.doulos.com/knowhow/vhdl_designers_guide/vhdl_2008/ – EML

1

醜いハックの別の品種:

constant init : natural := 16#11A#; 
signal v : std_logic_vector(9 downto 0) := std_logic_vector(to_unsigned(init, 10)); 

があることを書いたので、私はそれが提供されるオプションの最悪だと思うが、私は可能性として、ここでそれを残します!

関連する問題