2015-09-06 117 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。他们的使用条款是多余的。