0

コンポーネントの interface( ) のレコードを定義するためにジェネリックを使用しようとしてportいます。以前の質問で、型ジェネリックの使用を指摘されました。ただし、レコードのフィールドにアクセスする方法がわかりません。タイプジェネリックを持つレコードの使用が促進された場合の答えは次のとおりです

次のコンポーネントを想定しています。

entity genericInput is
    generic(
        type recordType
    );
    port(
            result: integer;
        port: in recordType
    );
end entity;

architecture behav of genericInput is
begin
    result <= port.part1;
end architecture;

そして、このインスタンス化:

type myRecord is record
    part1: integer;
    part2: std_logic_vector(1 to 100)
end record;

inst: genericInput 
    generic map(recordType <= myRecord)
    port map(...)

modelsim からコンパイル エラーが発生します。

** Error: ****.vhd(21): Unknown expanded name. --line on which i attempt port.part1
** Error: ****.vhd(22): VHDL Compiler exiting

Record が常にその名前のフィールドを持っていると仮定すると (vhdl2008 が利用可能)、generics によって提供されるレコードのフィールドにアクセスするにはどうすればよいですか? (レコード内のベクトルの幅を変えたくない)?


言い直された質問:一般的な幅ベクトルを持つレコードをエンティティのポートに統合する最良の方法は何ですか?

4

1 に答える 1

1

初め:

  • PORTがキーワードです。ポートの名前として使用することはできません。フォーラムに投稿する前にコードをトリミングする場合は、テストも行っていただければ幸いです。( VETSMODにします)
  • ModelSim のどのバージョンを使用していますか? VHDL 2008 をサポートしていますか? エンティティでジェネリックをサポートしていると確信していますか?

あなたの質問に答える:

エンティティ (およびアーキテクチャ) の内部では、データ型については何もわかっていません。汎用パラメーターとして渡す関数またはプロシージャーを介してのみアクセスできます。ただし、現時点で ModelSim が実際にどれだけサポートしているかはわかりません。

于 2013-05-29T08:46:34.903 に答える