2

私はいくつかの場所でこの問題に遭遇しましたが、デザインエンティティ(この場合は4:1マルチプレクサ)から出力が得られない理由についての私の最も良い推測は、入力の1つが割り当てられていない(U)ということです。

したがって、このMuxが他の多くの構造に埋め込まれているふりをして、入力を強制することはできません。入力を強制することはできません。一部の構造では、何も駆動されない場合があります。

説明:入力0 = "111111111111111"

ただし、入力3 ="UUUUUUUUUUUUUUUU"

そして私が欲しいのはinput0(c0 = c1 = 0)を出力することだけなので、input3は論理的に重要ではありません

私はまだ得ます

output = "UUUUUUUUUUUUUUUU"(デフォルト値)

また、コンパイルや実行でエラーは発生しません。

コードは次のとおりです。

USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;

ENTITY Mux4to1 IS
  GENERIC (size : POSITIVE := 16);   -- Size of the input
  PORT (input0, input1, input2, input3 : IN std_logic_vector (size-1 DOWNTO 0);
    output: OUT std_logic_vector (size-1 DOWNTO 0); 
    control0, control1 : IN std_logic ); 
END ENTITY Mux4to1;

--
ARCHITECTURE Behavior OF Mux4to1 IS
BEGIN
   PROCESS ( input0, input1, input2, input3, control0, control1 )
    BEGIN
        IF (control0 = '0') THEN
          IF (control1 = '0') THEN     -- Enable 00
            output <= input0;
          ELSIF(control1 = '1')THEN       -- Enable 10
            output <= input2;
          END IF;
        ELSIF (control0 = '1') THEN
          IF (control1 = '0') THEN     -- Enable 01
            output <= input1;
          ELSIF(control1 = '1')THEN      -- Enable 11
            output <= input3;
          END IF;
        END IF;
  END PROCESS; 
END ARCHITECTURE Behavior;

この混乱を回避するために私は何ができますか?

4

1 に答える 1

0

outputとのすべてのオプションを運転しているわけではcontrol0ありませんcontrol1。それらのいずれかが0または1でない場合(Uシミュレーションの開始時にもある可能性があります)、運転することになりませんoutput

さまざまな解決策があります...

1つは、あまり明確にしないことです。

  IF (control0 = '0') THEN
          IF (control1 = '0') THEN     -- Enable 00
            output <= input0;
          ELSE                         -- Enable 10
            output <= input2;
          END IF;
        ELSE
          -- etc

または、本当に別のこと(警告の報告など)を実行したい場合は、elseelsif句の後にそれらのオプションとをキャッチするために追加しますreport

于 2012-12-05T11:40:36.700 に答える