即使在VHDL进程内执行信号分配,信号也会变得未定义
假设我有这个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”(尽管我确保某些_表达
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;