即使在VHDL进程内执行信号分配,信号也会变得未定义

即使在VHDL进程内执行信号分配,信号也会变得未定义,vhdl,test-bench,Vhdl,Test Bench,假设我有这个VHDL代码片段,存在于实体的体系结构中 p1 : process(resetn) begin if resetn'event and resetn = '0' then A <= '0'; B <= '0'; end if; end process 我看到的是,在模拟开始时,我的测试台再次从1->0->1驱动resetn(在某些ns之后) 但是,这些信号A和B没有指定值“0”,并且在整个模拟过程中也保持“U”(尽管我确保某些_表达

假设我有这个VHDL代码片段,存在于实体的体系结构中

p1 : process(resetn)
begin 
   if resetn'event and resetn = '0' then
      A <= '0';
      B <= '0';
   end if;
end process
我看到的是,在模拟开始时,我的测试台再次从1->0->1驱动resetn(在某些ns之后)

但是,这些信号A和B没有指定值“0”,并且在整个模拟过程中也保持“U”(尽管我确保某些_表达式和某些_其他_表达式都被命中)


知道原因吗?

“知道原因吗?”是的,您正在从两个进程中驱动相同的信号。请仔细阅读VHDL,异步复位寄存器有一个标准的语言结构。但是,在模拟开始时,some_表达式和some_other_表达式不成立。因此,在任何给定点上,我只有一个信号驱动程序-这是正确的解释吗?不,坚持标准语言结构。最后,你可能会让你的代码进行模拟,但你必须从头开始,通过合成工具来获得它。@Oldfart我不确定合成工具会拒绝它。我的意思是,如果在同一进程中拥有所有内容,它将工作不?@AyoubBargach这是异步重置寄存器的标准语言结构。“知道为什么吗?”是的,您正在从两个进程驱动相同的信号。请仔细阅读VHDL,异步复位寄存器有一个标准的语言结构。但是,在模拟开始时,some_表达式和some_other_表达式不成立。因此,在任何给定点上,我只有一个信号驱动程序-这是正确的解释吗?不,坚持标准语言结构。最后,你可能会让你的代码进行模拟,但你必须从头开始,通过合成工具来获得它。@Oldfart我不确定合成工具会拒绝它。我的意思是,如果所有内容都在同一个过程中,那么它将工作不?@AyoubBargach这是异步重置寄存器的标准语言构造。
p2 : process(clk)
begin
   if clk'event and clk = '1' then
      if some_expression then
         A <= '1';
      elsif some_other_expression then
         B <= '1';
      end if;
   end if;
end process
signal A :  std_logic;
signal B :  std_logic;