0

2 つの std_logic_vector 入力 (Operand1 と Operand2) があり、Operand1 を Operand2 の値だけシフトして std_logic_vector 出力 (Output1) に格納しようとしています。

Output1 <= std_logic_vector(unsigned(Operand1) srl to_integer(unsigned(Operand2)));

Output1 <= std_logic_vector(unsigned(Operand1) sll to_integer(unsigned(Operand2)));

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(unsigned(Operand2)));

最初の 2 行を動作させることができますが、sra を含む行は、「sra can not have such operands in this context.」というエラーを返します。私が間違っていることがあるかどうか、誰かに教えてもらえますか。

4

2 に答える 2

1

コメントから、あなたのシグナルのいくつかは std_logic_vector 型で、いくつかは bit_vector 型のように聞こえます。

では、何が問題なのですか?

  1. 質問には十分な情報がありません。関連する宣言を投稿します。

  2. 設計は明らかに間違っています。設計の大部分は使用されるデータ型であり、これらは不適切に選択されているように見えます。

この小さなウィンドウからデザインを覗いて修正するのに十分な情報がありません。したがって、これは大まかな推測です:

オペランド 1Unsignedとオペランド 2Integerを改善Naturalする (負の値が間違いになる場合) と、実装がはるかにスムーズで、クリーンで、シンプルで、理解しやすくなります。そして、より多くのバグを早期にキャッチします。これらのタイプは合成可能であり、必要に応じてレコード (構造体) 内のポートまたは信号またはコンポーネントとして使用できます。

そして、それSRAは VHDL 言語の一部ではないことに注意してください。これは、いくつかのライブラリで宣言された関数です。

したがって、Operand1 が Operand2 であるunsignedと判断した場合natural(整数のサブタイプ)、numeric_stdパッケージを見て、SRAそれらのパラメーターの型を受け入れ、必要な型を返す宣言があるかどうかを確認できます。

SRA存在しない場合は、独自の記述を妨げるものは何もありません (これは、見つけた を呼び出し、必要に応じてパラメーターの型を変換するラッパーと同じくらい簡単です)。これは、元の言語と同じように VHDL 言語の一部になります。

あなたが作成した便利な関数とヘルパーのパッケージは、将来の VHDL プロジェクトで役立ちます。

于 2013-11-10T10:54:09.337 に答える
0

最後の行を次のように変更してみてください。

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(signed(Operand2)));

つまり、signed代わりに使用しますunsigned

于 2013-11-10T07:10:40.687 に答える