是否可以在Modelsim中接收和计算时间?

问题描述 投票:0回答:1

是否可以在Modelsim中接收和计算时间?

例如,我想复位一个传感器。传感器复位需要在60 µs内的逻辑 "1",所以我的代码发送了它。我需要在testbench文件中捕获信号。我可以写这样的东西吗?

if signal = '1' for 60 us then...

这就像一个命令等待,但反之亦然。wait for 100 us;,但反之亦然。

我曾试过通过创建一个额外的时钟信号并计算上升沿来实现。但是,我希望有一个更简单的决定。

update.so,在我的情况下,我没有一个正确的代码,但我会尝试详细解释。

entity testbench is
end entity testbench;

architecture tb of testbench is

    signal reset_signal : std_logic;
    signal flag_success : std_logic;

begin

    RESET_PROCESS : process -- example process
    begin
        reset_signal <= '1';
        wait for 100 us;
        reset_signal <= '0';
        report "End simulation" severity failure;
    end process RESET_PROCESS;

    SENSOR_PROCESS : process
    begin
        -- i don't now how to write it correctly
        -- pseudocode
        if reset_signal = '1' within 60 us then
            flag_success <= '1';
        else
            flag_success <= '0';
        end if;
    end process;

end architecture tb;

RESET_PROCESS就像我的程序一样,它发送复位信号60us。我可以在SENSOR_PROCESS中增加一个clk,并且可以计算上升沿。但是,这是modelsim,它知道所有的时序特性,所以我认为可以不加clk。

我找到了属性,写了一段代码。

    if reset_signal = '0' then
        if reset_signal'quiet(60 us) then
            flag_success <= '1';
        else
            flag_success <= '0';
        end if;
    end if;

    -- or

    if reset_signal = '0' then
        wait for 60 us;
        if reset_signal'stable(60 us) then
            flag_success <= '1';
        else
            flag_success <= '0';
        end if;
    end if;

不幸的是,这段代码不能用...

vhdl fpga hdl modelsim test-bench
1个回答
0
投票

如果你想检查60us后的数据仍然是'1',那么你可以通过以下方式进行检查。

...
wait for 60 us;
if (reset == '1') then
    wait for 1 ns;
    if (reset == '0') then
        flag_success <= '1';
    else
        flag_success <= '1';
   end if
else
    flag_success <= '0';
end if;

如果你想检查所有60us的数据,也许你可以做这样的事情。

...
for i in loop 0 to 60
if (reset == '1') then
...
else
wait for 1 us;
end if;

0
投票

我找到了一个符合我要求的解决方案。

SENSOR_PROCESS : process
begin
    if reset_signal'stable(60 us) and (reset_signal = '0') then
        flag_success <= '1';
    else
        flag_success <= '0';
    end if;
    wait for 1 us;
end process;

最后的WAIT语句就像时钟信号一样,但是如果在两个周期之间发生了什么事情,代码就会识别出来。

谢谢)。)

© www.soinside.com 2019 - 2024. All rights reserved.