2015-09-06 81 views
0

我是VHDL的新手,嘗試將地圖端口映射到地面。端口映射到VHDL地面

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_ARITH.ALL; 
use IEEE.STD_LOGIC_UNSIGNED.ALL; 

---- Uncomment the following library declaration if instantiating 
---- any Xilinx primitives in this code. 
--library UNISIM; 
--use UNISIM.VComponents.all; 

entity msPC4 is 
    Port (b : in STD_LOGIC_VECTOR (3 downto 0); 
      clk : in STD_LOGIC; 
      reset : in STD_LOGIC; 
      a : out STD_LOGIC_VECTOR (3 downto 0); 
       co : out STD_LOGIC); 
end msPC4; 

architecture Structure of msPC4 is 

    component msdff4 
     Port (d : in STD_LOGIC_VECTOR (3 downto 0); 
       clk : in STD_LOGIC; 
       q : out STD_LOGIC_VECTOR (3 downto 0)); 
    end component; 

    component msFA4bit 
    Port (a : in STD_LOGIC_VECTOR (3 downto 0); 
      b : in STD_LOGIC_VECTOR (3 downto 0); 
      ci : in STD_LOGIC; 
      s : out STD_LOGIC_VECTOR (3 downto 0); 
      co : out STD_LOGIC); 
    end component; 

    component ms21mux4 
    Port (d1 : in STD_LOGIC_VECTOR (3 downto 0); 
      d0 : in STD_LOGIC_VECTOR (3 downto 0); 
      s : in STD_LOGIC; 
      z : out STD_LOGIC_VECTOR (3 downto 0)); 
    end component; 

    signal w0, w1, w2, w3: STD_LOGIC_VECTOR (3 downto 0); 
    signal w4 : STD_LOGIC; 


w4 <= '0'; 
w3 <= '0000'; 

begin 
gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,w4,w0,co); 
gmsPC4g3: ms21mux4 port map (w0,w3,clk,w1); 
a <= w2; 

end Structure; 

所以,如果你會注意到,我有3個組件,一些信號來連接一切等。

我真正想要的是將信號w3和w4設置爲接地(儘管與邏輯低電平相連),但無論出於何種原因,我無法爲我的生活找出我應該如何做這個。

FWIW我是EE,所以我更習慣於從硬件端看到這一點。另外,這個項目特別是與端口映射,而不是行爲的東西。對於那個很抱歉。

編輯:錯誤在w3設置爲'0',w4設置爲'0000'的行被拋出。雙引號不能解決這個錯誤。將其移入內部並不能解決錯誤。在開始集內我得到一個「意外的TICK」,並在開始集之外我得到一個「意外標識符」。它真的不想讓我決定某件事的價值。

+1

他們沒有教導聲明和聲明之間的區別嗎? –

+0

您不能在架構和開始之間分配值。 – Paebbels

+0

因爲矢量文字必須放在雙引號之間,而不是蜱('「0000」',而不是''0000''),所以出現非預期的勾號。意外的標識符,因爲這兩個賦值必須放在體系結構體中(在'begin'之後),而不是在體系結構聲明中(在'begin'之前)。您隨機嘗試了幾種解決方案,但不是全部:您在開始後忘記了組合雙引號。如果你試圖用這個隨機策略來解決你的所有問題,在學習VHDL之前需要花時間。書籍和課程可能更有效率。 –

回答

1

更改代碼:

-- w4 <= '0'; 
-- w3 <= '0000'; 

begin 
    w4 <= '0'; 
    w3 <= "0000"; 

允許成功的分析,並指出有來自w4w3沒有其他的驅動程序。

或者,你可以在聲明提供默認值:

signal w0, w1, w2: STD_LOGIC_VECTOR (3 downto 0); 
    signal w3: STD_LOGIC_VECTOR (3 downto 0) := "0000"; 
    signal w4 : STD_LOGIC := '0'; 


-- w4 <= '0'; 
-- w3 <= '0000'; 

這也分析。

默認值表示信號分配之前的信號值。

您也可以直接提供值:

gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,'0',w0,co); -- w4 
gmsPC4g3: ms21mux4 port map (w0,"0000",clk,w1); -- w3 

此分析。

,或者提供的恆定值:

signal w0, w1, w2: STD_LOGIC_VECTOR (3 downto 0); 
    constant w3: std_logic_vector(3 downto 0) := "0000"; 
    constant w4 : STD_LOGIC := '0'; 


-- w4 <= '0'; 
-- w3 <= '0000'; 

begin 

gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,w4,w0,co); 
gmsPC4g3: ms21mux4 port map (w0,w3,clk,w1); 

其中還分析。

注意字符串字面值中使用的雙引號("0000")。單引號(刻度)用於具有圖形表示的字符文字。

您沒有使用包std_logic_arith和std_logic_unisigned。他們的使用條款是多餘的。