1

タイプの不一致エラーが発生していますが、すべての値が同じタイプのstd_logicです。これがコードです

Nx、Ny-ジェネリック

ipx-入力ポートベクトル

tempx、tempz-シグナル

ipx:in std_logic_vector(Nx-1 downto 0);
.......
信号tempx:std_logic_vector(Ny-1 downto 0):= ipx(Nx-1 downto Nx-Ny); (信号の初期化)
信号の温度:std_logic_vector(Ny-1 downto 0);
............
tempx <=(Ny-1から1まで=> tempz(Ny-2から0まで)、0 => ipx(a-1));

エラー:エラー(10381):ArrayDivider.vhd(53)でのVHDLタイプの不一致エラー:インデックス付きの名前は、ターゲット式のタイプである「std_ulogic」とタイプが一致しない値を返します(tempxの最後のコード行のエラー)

しかし、ipxとtempzはどちらもstd_logicベクトルなので、ここで型の不一致はどこにありますか???? 解決策を教えてください

連結演算子を使用してみましたが、トップレベルの階層に関連する別のエラーが発生し、「tempx[0]の複数の定数ドライバーを解決できません」!!!!!!

4

2 に答える 2

3

エラーメッセージは、問題が何であるかを正確に示しています。

error : Error (10381): VHDL Type Mismatch error at ArrayDivider.vhd(53): indexed name returns a value whose type does not match "std_ulogic", the type of the target expression

そして確かに、tempz(Ny-2 downto 0)std_ulogicではなくベクトルです。

問題は、名前付きの関連付けがベクトルのスライスではなく、個々の要素を識別することです。これを使用して、あるベクトルの1つのスライスを別のベクトルのスライスに割り当てることはできません。

代わりに、連結演算子を使用してください&

tempx <= tempz(Ny-2 downto 0) & ipx(a-1);

あなたの投稿は、連結によって他のエラーが発生することを示唆しています。これらを質問に自由に追加してください。

編集 :

>Error (10028): Can't resolve multiple constant drivers for net 
>"tempx[0]" at ArrayDivider.vhd(44) (on the line of initialing >tempx) 

繰り返しますが、これは何が悪いのかを教えてくれます。このエラーは、ほぼ確実に両方のバージョンのデザインに存在しますが、元のエラーはそれを隠すだけです。tempx(0)の2つのドライバーを見つけて、どちらか間違っているドライバーを削除します。何が起こっているのかを明確にするのに十分なコードを投稿していないので、それはあなた次第です。Modelsimを使用している場合、「drivers」コマンドは信号上のすべてのドライバーを識別します。

入力信号に対してtempxを初期化し、後で別の信号で駆動する必要がある場合は、2つの信号から選択する必要があります(例:

tempx <= ipx(Nx-1 downto Nx-Ny) when <some condition>
         else tempz(Ny-2 downto 0) & ipx(a-1);

ほとんどの場合、このエラーを修正すると、「階層」エラーも排除されます。これは基本的に「以前に問題が発生したため、コンパイルを完了できません」です。

于 2013-03-23T13:17:11.300 に答える
1

これは、名前付き関連付けと位置関連付けの概念を非常にうまく説明しているページです。この例は、bit_vectorタイプを使用した両方の関連付けメソッドの使用を示していることに注意してください。

http://www.ics.uci.edu/~jmoorkan/vhdlref/aggregat.html

お気づきのとおり、std_logicベクターで名前付きアソシエーションを実行すると、VHDLはbit_vectorを返します。これにより、結果をstd_logic_vectorに割り当てようとすると、型の不一致が発生します。

1つのオプションは、TO_BITVECTORとTO_STDLOGICVECTORを使用してbit_vectorとstd_logic_vectorの間で変換することです。これらはieee.std_logic_1164ライブラリで定義されており、構文は次のように説明されています。

http://www.seas.upenn.edu/~ese171/vhdl/PackageSTD_1164.html

これを行うと、不要なフープを飛び越えるように感じますが、機能するはずです。幸運を!

于 2013-05-06T19:37:39.627 に答える