在 VHDL 中端口映射到地面
Port Map-ing to ground in 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”的行抛出。双引号不能修复此错误。将它移到 begin 中并不能修复错误。在开始集内,我得到一个 "UNEXPECTED TICK",在开始集外,我得到一个 "UNEXPECTED IDENTIFIER"。就是真的不想让我决定东西的价值。
更改代码:
-- w4 <= '0';
-- w3 <= '0000';
begin
w4 <= '0';
w3 <= "0000";
允许成功分析,注意没有来自 w4
或 w3
的其他驱动程序。
或者您可以在声明中提供默认值:
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。他们的使用条款是多余的。
我是 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”的行抛出。双引号不能修复此错误。将它移到 begin 中并不能修复错误。在开始集内,我得到一个 "UNEXPECTED TICK",在开始集外,我得到一个 "UNEXPECTED IDENTIFIER"。就是真的不想让我决定东西的价值。
更改代码:
-- w4 <= '0';
-- w3 <= '0000';
begin
w4 <= '0';
w3 <= "0000";
允许成功分析,注意没有来自 w4
或 w3
的其他驱动程序。
或者您可以在声明中提供默认值:
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。他们的使用条款是多余的。