2016-07-22 7 views
2

私はVHDLを初めて使用しています。私は加算器減算器のコードを書こうとしていました。循環のための私の入力バスの1つは、合成後に地面に接続されています。私はUbuntu 14.04 LTS 64ビットでザイリンクスISE 14.2を使用しています。VHDL入力が強制的に接地される

library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use IEEE.NUMERIC_STD.ALL; 

    entity examples is 
    Generic(n: Natural :=8); 
    port (
      A : in std_logic_vector(n-1 downto 0); 
      B : in std_logic_vector(n-1 downto 0); 
     subtract : in std_logic; 
     sum: out std_logic_vector(n-1 downto 0); 
     carry : out std_logic 
    ); 
    end examples; 

    architecture Behavioral of examples is 
     Signal result: std_logic_vector(n downto 0); 
    begin 

     my_adder_subtractor : process(A,B,subtract) 
      begin 
      if(subtract = '0') Then 
       result <= std_logic_vector(('0' & unsigned(A))+('0' & unsigned(B))); 

      else 
       result <= std_logic_vector(('0' & unsigned(A))-('0' & unsigned(B))); 
      end if; 
      sum <= result(n-1 downto 0); 
      carry <= result(n); 
     end process my_adder_subtractor; 

    end Behavioral; 

RTL回路図:これはどのように

RTL schematic

+0

あなたの質問は何ですか。 – lorond

+0

私の質問は、ポートAがグランドに接続されている理由です。 –

答えて

1

。そのことが分かれば教えてください。私のVHDLは戻って行く。

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.NUMERIC_STD.ALL; 

entity examples is 
Generic(n: Natural :=8); 
port (
    A : in std_logic_vector(n-1 downto 0); 
    B : in std_logic_vector(n-1 downto 0); 
    subtract, clk : in std_logic; 
    sum: out std_logic_vector(n-1 downto 0); 
    carry : out std_logic_vector(0 downto 0) 
); 
end examples; 

    architecture Behavioral of examples is 
    begin 
     process(clk) 
      begin 
      if(subtract = '0') then 
       (carry, sum) <= ('0' & A)+('0' & B); 
      else 
       (carry, sum) <= ('0' & A)-('0' & B); 
      end if; 
     end process; 
    end Behavioral; 
+0

私の質問は、ポートAがグランドに接続されている理由です。また、2つの信号を加算しようとしました。私は何かを逃しているかもしれません。信号のデータ型はどうすればよいですか?私はstd logic vectorで試しました –

+0

あなたの実装では、複数のことがあるようです。プロセスがメモリ要素(D-Latch)を推論するため、(A、B、substract)にはプロセスがあってはなりません。それはあなたが操作を行う3つの異なる入力の引き金の上で状態を変えると私には嫌に思えます。また、私はあなたが入力をunsignedにキャストしたときにstd_logic_vectorsとして、そしてstd_logicベクトルの直後にあなたの入力を定義する理由を理解していません。最初は署名なし権利として定義してください。 Unisgnedは合成可能で、キャストする必要はありません。 – h3X3n

+0

ところで、実際にクロック信号を処理する必要はありません。私はちょうどメモリ要素が欲しいと思ったのでそこに置きましたが、A、B、およびsubstractの状態を切り替えることに問題がありました(メモリ要素を事実上無駄にしています。 – h3X3n

-1

いいえAは接地されていません。ザイリンクスISEのRTLスケマティック図は適切ではありません。

加算器の入力の入力ビットの1つがゼロです。したがって、Aは1つのグランドビットと連結されています。実際の回路を見るには、RTL技術回路図を開きます。

+0

シミュレーションからも適切な結果が得られません。例えば、A 00110000とB = 00100001の和を与える場合= 00000000 –

+0

RTL techを投稿できますか?スケマティック? – Paebbels

関連する問題