延迟信号导致VHDL中的意外行为

时间:2015-03-19 17:23:54

标签: vhdl

当信号不正确时,我的程序将暂停。但是,输入信号需要时间来重新生成,并且该过程重用旧信号。它导致代码停止,无法恢复操作。

例如

process(A,B,startRun) 
begin
if (A = 1) then
    case (B) is
    when 0 => 
        -- do something
    when others =>  
    if(startRun = '1')then
        halt <= '1';
    end if;
end case;
else
    -- do something else
end if;
end process;

我的问题是当A = 1时,但B是旧值,比如说1.在B成为新值后,halt总是设置为1.程序最终会停止。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我同意&#34; Jonathan Drolet&#34;。我无法看到您将信号halt重置为零的位置。设置halt后,它始终为1,并且没有重置语句。 每当不需要暂停时,您可以使用else语句将halt重置为零:

process(A,B,startRun) 
begin
    if (A = 1) then
        case (B) is
            when 0 =>
                halt <= '0';
                -- do something
            when others =>  
                if(startRun = '1')then
                    halt <= '1';
                else
                    halt <= '0';
                end if;
        end case;
    else
        halt <= '0';
        -- do something else
    end if;
end process;

此外,您可以在流程开始时将halt重置为0,但如果(A = 1B /= 0以及startRun = '1')确保设置{应用了{1}}到hlat,因为在流程结束时应用了信号或端口分配:

1