例えば、私は長さが10のベクトルを持っています。 どうすれば16進数で初期化できますか? (合成ツールは、16進数値が4の倍数であると考えてサイズの不一致を訴えます)VHDLは16進数でベクトルを初期化します(長さは4の倍数ではありません)
signal v : std_logic_vector (9 downto 0) := x"11A";
多くの感謝! Nigong
例えば、私は長さが10のベクトルを持っています。 どうすれば16進数で初期化できますか? (合成ツールは、16進数値が4の倍数であると考えてサイズの不一致を訴えます)VHDLは16進数でベクトルを初期化します(長さは4の倍数ではありません)
signal v : std_logic_vector (9 downto 0) := x"11A";
多くの感謝! Nigong
可能な回避策は、例えば、六角形の値として4ビットの倍数を書いて、バイナリで休息を追加することです:
signal v: std_logic_vector(9 downto 0) := "01" & X"1A";
私の知る限りでは、達成するための「直接的」な方法はありませんあなたが探しているもの。あなたは、有効な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));
があることを書いたので、私はそれが提供されるオプションの最悪だと思うが、私は可能性として、ここでそれを残します!
以上、 ':= init(v'range);' –
私の初期回答には 'v'range'部分が含まれていましたが、コンパイルしようとしましたが、'不明な識別子 "v"私のコンパイラが 'v'について知らない全行を解析していないかのように思えます。 – simon
ああそうかもしれない。複数のものがある場合は、その型のサブタイプ(v_typeまたはdatawordまたは説明的な型名)を作成します。次に、dataword'range WOULDがそこで動作します。 –