0

VHDLの複数の定数ドライバーに関連するエラーが発生しました。ここで、コードのイメージをアップロードしています............私のコードではcmpはコンポーネントであり、 a=Nx-Nyからa=0..............のステートメントを生成する場合

a = Nx-Ny => tempx = ipx(Nx-1 downto Nx-Ny)
それ以外の場合、tempx = tempz(Ny-2 downto 0)&ipx(a)

このために私はwhen-elseステートメントを使用しましたが、エラーが発生しています......

ここに画像の説明を入力してください

エラー:エラー(10028):ArrayDivider.vhd(44)(画像の選択した行)でネット "tempx [0]"の複数の定数ドライバーを解決できませ
んエラー:最上位のユーザー階層を詳しく説明できません

解決策を教えてください??????

4

3 に答える 3

2

エラーは、tempx[0]に複数のドライバーがあることを示しています。

投稿したコードでは、tempxへの条件付き割り当ては1つだけです。

for ... generateただし、ステートメントに埋め込まれています。

これは、nx、nyの値に応じて、おそらく複数のコピーを生成していることを意味します。したがって、エラー。

編集

実際のVHDLコードの代わりに、読みにくい小さな画像を投稿することは役に立ちません。コードを使用して質問を編集してください。

その間、あなたは異なるモジュールのセット(Cmp?)を生成し、それぞれに異なる入力信号を供給していることがわかります。

ただし、これらすべての信号を同じ信号で同時に駆動することはできません。それはツールがあなたに言っていることです。必要なのは、生成変数aによってインデックス付けされた信号の配列です。

subtype temp is std_logic_vector(N downto 0);
signal Tempx : array(Nx-Ny downto 0) of temp;
...

for a in ... generate
   tempx(a) <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx(a), ...);
end generate;

これで、明らかに、アレイの各メンバーには1つのドライバーしかないため、複数のドライバーエラーがなくなります。

于 2013-03-27T14:21:14.750 に答える
1

for/generate構造はループではないことに注意してください。このステートメントは、for / generate構造内で説明するロジックの複数の実装((Nx-Ny)+1)につながります。したがって、tempxには複数のドライバーがあります。これはすでにここのコメントで言及されています:ここ にリンクの説明を入力してください

于 2013-03-27T14:38:25.567 に答える
0

tempxへの割り当ては、各ループに同じtempxを使用します。これにより、同じ信号に複数の割り当てが発生します。信号宣言を生成ブロックに移動すると(生成と開始の間)、ループごとに専用のtempx信号があります。

for a in ... generate
   signal tempx : std_logic_vector(Ny-1 downto 0);
begin
   tempx <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx, ...);
end generate;

結果は、配列を使用したアプローチと似ています。

于 2013-04-07T10:58:52.270 に答える