私は、レコードのstd_logic_vector表現を返すVHDL関数を持っており、そのstd_logic_vectorの長さが必要です。私は長さの属性を関数上で直接使用することができます。 ModelSimで警告が表示されるのはなぜですか?微妙な問題を招いていますか?私が理解しているものは、警告テキストをグーグルで見つけても役に立たなかった。VHDL - 長さ属性を直接関数に使用すると警告が表示されるのはなぜですか?
my_function_returns_slv(my_record)'length;
**警告:../src/my.vhd(line#):(VCOM-1515が事前定義された属性 "長さ" の)接頭辞は、関数呼び出し "my_function_returns_slv"
私は、レコード要素のstd_logic_vector表現を連結して出力をアセンブルする関数を書いています。レコードの長さはコンパイル時に固定されていますが、長さをハードコードしたくありません。関数出力を使用するための信号を作成するためには長さが必要です。したがって、出力を保持するために拘束されていない信号を宣言することはできないため、関数の出力(たとえば、関数の出力を保持する信号の長さを呼び出すこと)で 'length'を呼び出すことはできません。私はstd_logic_vectorの長さを計算するために同様の関数を書くことができますが、それは私が持っているレコードの数について、特に重要なコードを追加します。私はModelSimの警告を受け入れ続けなければなりませんか?レコードのビット幅を組み立てるための関数を書く余分なコードを扱うべきですか?もっと良い解決策はありますか?私が利用しています
参考記録パック/アンパックサブプログラム:
http://www.eda-twiki.org/twiki/pub/P1076/RecordReflectionToSlv/standard_functions.vhd
ありがとう!
'my_function_returns_slv(my_record) 'length'が正当であるかどうかは、長さ属性接頭辞の要件をAda 83 LRMの-1987 LRMに転記することに起因します。 [Issue Report 1005(-1993)](http://web.archive.org/web/20120217010956/http://www.eda.org/isac/IRs-VHDL-93/IR1005.txt) - タイプミス意味が一致する必要はないはずであり、「配列オブジェクトには適切」であるべきではないという論理的根拠はどこでも定義されていません。 – user1155120
ありがとう@ user1155120!私はちょうどLRMと標準プロセスに精通し始めています。この歴史的な情報は私にとってとても興味深いものです。 –
ありがとう@モルテン!長さの呼び出しを関数でカプセル化すると、私の環境でも警告が取り除かれます。割り当てようとしている信号を制約する必要があると私は考えていました。どのような創造的な解決策!私は、私の合成ツール(Quartus)がmy_func()の長さに警告を表示していないことを後世にも報告すると思った。 –