私は次のように定義されたレコードを持っています
type ifx_t is
record
data : std_logic_vector(127 downto 0);
address : std_logic_vector (19 downto 0);
WrReq : std_logic;--
RdReq : std_logic; --
end record;
type Array_ifx_t is array (0 to 2) of ifx_t;
そして、このレコードの配列のインスタンスを初期化する必要がありますが、次の方法を試しましたが、機能しません
signal pair_in : Array_ifx_t:= (others =>((others =>'0'),(others=>'0'),'0','0'));
親切に助けてください。
コメントで述べたように、ModelSimは、質問のコードをModelSimでコンパイルするときに機能します。ただし、他のツールでは、Array_ifx_t
の要素に型付きの値を使用することについてより厳密な場合があります。
型付きの代入と名前付きレコード要素の使用については、ゲッターの概要を示し、位置参照による間違いを回避すると思います。次の方法で初期化を行うことができます。
constant IFX_T_0S : ifx_t := (data => (others =>'0'),
address => (others=>'0'),
WrReq => '0',
RdReq => '0');
signal pair_in : Array_ifx_t:= (others => IFX_T_0S);
Pair_inのデフォルト値に集計が表示されたときの最初の反応は、「その他」が多すぎるというものだったので、レコード型宣言自体を使用して独自に作成しました。
library ieee;
use ieee.std_logic_1164.all;
package some_record is
type ifx_t is
record
data : std_logic_vector(127 downto 0);
address : std_logic_vector (19 downto 0);
WrReq : std_logic;--
RdReq : std_logic; --
end record;
type Array_ifx_t is array (0 to 2) of ifx_t;
-- positional association in an aggregate used for initialization:
signal pair_in: ifx_t := ((others => '0'), (others => '0'),'0','0');
end package;
そして、これはうまく分析されました。アグリゲートには、定位置または名前付きの2種類の関連付けがあります。上記のデフォルト値の式は定位置です。名前付きの関連付け:
signal pair_in: ifx_t := -- named association of record elements:
(
data => (others => '0'),
address => (others =>'0'),
WrReq => '0',
RdReq => '0'
);
これは、モーテンの受け入れられた回答の定数宣言に見られる値式に不思議な類似性を持っており、実際には集計式の互換性の物語を物語っています。
レコード型と互換性のある集計には、レコード型の各要素と互換性のある値式が含まれています。これは、配列要素のデータとアドレスに対して、デフォルト値の集計を提供することによって行われますが、WrReqとRdReqにはデフォルト値が直接提供されます。
pair_in
がifx_t
レコード型要素で構成される配列で構成される複合型である場合、最初の試行で見つかった追加のothersステートメントは適切でした。
LRM(IEEE Std 1076-1993など)には、式に関するセクション、集計に関するサブセクション、およびレコード集計に関するサブセクションがあります。
タイプに関するセクション、複合タイプに関するサブセクション、およびレコードタイプに関するサブセクションもあります。