Vhdl 奇异行为

Vhdl 奇异行为,vhdl,Vhdl,我有以下几行代码: entity test is Port ( a : in STD_LOGIC_VECTOR (7 downto 0); b : in STD_LOGIC_VECTOR (7 downto 0); c : out STD_LOGIC_VECTOR (15 downto 0)); end test; architecture Behavioral of test is component adder is

我有以下几行代码:

entity test is
    Port ( a : in  STD_LOGIC_VECTOR (7 downto 0);
           b : in  STD_LOGIC_VECTOR (7 downto 0);
              c : out  STD_LOGIC_VECTOR (15 downto 0));
end test;

architecture Behavioral of test is

component adder is
    Port ( a : in  STD_LOGIC_VECTOR (7 downto 0);
           b : in  STD_LOGIC_VECTOR (7 downto 0);
           s : out  STD_LOGIC_VECTOR (7 downto 0));
end component;

signal prod: std_logic_vector (15 downto 0) :=X"0000";
signal tempsum1,tempsum2: std_logic_vector (7 downto 0):=X"00";
signal cin,cout:std_logic:='0';

begin

--Working(modelsim can see the upper value of c)

S1: adder port map(tempsum1, prod(15 downto 8), c(15 downto 8));


--Not working(c gets a red line on all bits):
--I replace the first S1 with this one and assign later.
S1: adder port map(tempsum1, prod(15 downto 8), tempsum2);
c(15 downto 8)<=tempsum2;

end Behavioral;
实体测试不可用
端口(a:标准逻辑向量(7到0);
b:标准逻辑向量(7到0);
c:输出标准逻辑向量(15到0);
结束试验;
行为测试的体系结构是
元件加法器
端口(a:标准逻辑向量(7到0);
b:标准逻辑向量(7到0);
s:输出标准逻辑向量(7到0);
端部元件;
信号产品:标准逻辑向量(15到0):=X“0000”;
信号tempsum1,tempsum2:std_逻辑_向量(7到0):=X“00”;
信号cin,cout:std_逻辑:='0';
开始
--工作(modelsim可以看到c的上限值)
S1:加法器端口映射(tempsum1,prod(15向下到8),c(15向下到8));
--不工作(c在所有位上都有一条红线):
--我用这个替换第一个S1,然后分配。
S1:加法器端口映射(tempsum1、prod(15到8)、tempsum2);

c(15到8)尝试抑制tempsum2的信号声明中的初始化。

只是澄清一下,实际上您没有同时使用
--工作
--不工作
部分,对吗?是的,不同的实例组件实例化标签隐式声明S1在示例代码中使用了两次。它不应该成功地分析。除此之外,还有两个c(15到8)的驱动程序,第一个S1加法器(形式s)和第二个S1加法器后面的并发信号分配语句。c(15到8)的值将由两个驱动程序的分辨率决定。好吧,看来我把你弄糊涂了。这是不同的代码,第一个S1可以工作,但是当我用第二个代码替换它时,它就不能工作了。那么“不工作”代码会发生什么呢?我没有立即可用的modelsim来尝试重现该问题。