2016-07-22 286 views
2

我是VHDL的新手。我試圖編寫加法器減法器的代碼。合成後,我的一個電路輸入總線接地。我在Ubuntu 14.04 LTS 64位中使用Xilinx 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邏輯向量 –

+0

好吧,多個事情似乎與您的實施有點關係。 (A,B,減)不應該有一個進程,因爲一個進程會推斷一個內存元素(D-Latch)。對我來說,它似乎更加奇怪,它會在3個不同輸入的觸發器上改變狀態,您也可以在其上進行操作。另外我不明白爲什麼你定義你的輸入爲std_logic_vector時,你將它們轉換爲無符號,然後在std_logic向量之後。只需在開始時將它們定義爲無符號的權利。 Unisgned是合成的,不需要投它。 – h3X3n

+0

順便說一下,您並不需要在時鐘信號上進行處理。我只是把它放在那裏,因爲你似乎想要一個內存元素,但是我在切換A,B和減去狀態時遇到了問題(使內存元素幾乎無用[你可以在不改變任何行爲的情況下刪除該過程])。 – h3X3n

-1

沒有A沒有接地。 Xilinx ISE中的RTL原理圖不好...

您的加法器輸入的一個輸入位爲零。所以A與一個地面位串聯。請打開RTL技術原理圖以查看「真實」電路。

+0

我沒有從模擬中獲得正確的結果。例如A 00110000和B = 00100001給我Sum = 00000000 –

+0

您可以發佈RTL技術。原理? – Paebbels