たとえば、長さが10のベクトルがあります。16進数で初期化するにはどうすればよいですか。 (合成ツールは、16進値が4の倍数であると見なすため、サイズの不一致を訴えます)
signal v : std_logic_vector (9 downto 0) := x"11A";
どうもありがとう!ニゴン
考えられる回避策は、4ビットの倍数を16進値として書き込み、残りを2進数で追加することです。例:
signal v: std_logic_vector(9 downto 0) := "01" & X"1A";
x"11A"
は「16進ビット文字列リテラル」です。 VHDL-2008より前は、これらは4ビットの倍数である必要があったため、問題が発生しています。 VHDL-2008ではこの制限が削除されたため、10x"11A"
と記述できるようになりました。ただし、2008年のツールサポートの量はわかりません。
私の知る限り、あなたが探しているものを達成するための「直接的な」方法はありません。有効なVHDLである次のものを使用できます。
constant init : std_logic_vector (11 downto 0) := X"11A";
signal v : std_logic_vector (9 downto 0) := init(9 downto 0);
別の種類の醜いハック:
constant init : natural := 16#11A#;
signal v : std_logic_vector(9 downto 0) := std_logic_vector(to_unsigned(init, 10));
それを書いたので、それは提供されるオプションの中で最悪だと思いますが、可能性としてここに残しておきます!