web-dev-qa-db-ja.com

16進数のVHDL初期化ベクトル(長さは4の倍数ではありません)

たとえば、長さが10のベクトルがあります。16進数で初期化するにはどうすればよいですか。 (合成ツールは、16進値が4の倍数であると見なすため、サイズの不一致を訴えます)

signal v : std_logic_vector (9 downto 0)    := x"11A";

どうもありがとう!ニゴン

7
nigong

考えられる回避策は、4ビットの倍数を16進値として書き込み、残りを2進数で追加することです。例:

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

x"11A"は「16進ビット文字列リテラル」です。 VHDL-2008より前は、これらは4ビットの倍数である必要があったため、問題が発生しています。 VHDL-2008ではこの制限が削除されたため、10x"11A"と記述できるようになりました。ただし、2008年のツールサポートの量はわかりません。

10
EML

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

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

別の種類の醜いハック:

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

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

1
Martin Thompson