【发布时间】:2020-05-03 20:26:20
【问题描述】:
在Modelsim中可以接收和计算时间吗?
例如,我想重置传感器。传感器复位需要 60 µs 内的逻辑“1”,所以我的代码发送它。我需要在测试台文件中捕获信号。我可以写这样的东西吗?
if signal = '1' for 60 us then...
这就像一个命令等待:wait for 100 us;,反之亦然。
我试图通过创建一个额外的时钟信号并计算上升沿来做到这一点。不过,我希望有一个更简单的决定。
更新。 所以,就我而言,我没有正确的代码,但我会尝试详细解释。
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 就像我的程序一样,它为 60 us 发送 reset_signal。 SENSOR_PROCESS 应该接收到 reset_signal。 我可以在 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;
不幸的是,代码不起作用..
【问题讨论】:
-
也许我已经找到了答案。如果在 t 个时间单位内信号 S 上没有出现偶数,则预定义属性 S'STABLE(t) 为真。所以,我会试试的。
-
如果你想制作硬件,进行综合,那么你将不得不产生一个额外的时钟信号并计算上升沿。
S'stable不可合成。 -
@MatthewTaylor OP 想要这个作为测试平台,大概不需要综合。
-
您可能想提供一个minimal reproducible example。
标签: vhdl fpga hdl modelsim test-bench