仿真时如何通过when语句输出变量的历史时间步数值?
输出仿真中变量的上一时间步数值
可行,核心思路是用额外变量缓存变量的历史值,具体实现分两种场景:
1. 带时钟的同步逻辑场景
声明一个与目标变量同类型的缓存变量,在每个时钟沿将当前变量值存入缓存,后续需要输出历史值时直接调用缓存变量即可:
-- 声明变量/信号 signal dummy : integer := 0; signal dummy_prev : integer := 0; -- 时钟进程中更新缓存 process(clk) begin if rising_edge(clk) then dummy_prev <= dummy; -- 先缓存当前值,再执行dummy的更新逻辑 -- 此处添加dummy的赋值或更新逻辑 end if; end process; -- 在when语句中输出上一时间步的值 when time == 1000 then to_csv(dummy_prev, "dummy_prev.csv"); end when;
2. 无时钟的异步仿真场景
如果是基于事件触发的纯行为仿真(比如用wait语句触发逻辑),可以用专门的进程跟踪变量的历史值:
signal dummy : integer := 0; signal dummy_prev : integer := 0; -- 跟踪dummy的历史值 process begin dummy_prev <= dummy; -- 先缓存当前值,再等待dummy变化 wait on dummy; end process; -- 输出历史值 when time == 1000 then to_csv(dummy_prev, "dummy_prev.csv"); end when;
注意:外部C函数to_csv无需修改,只要传入缓存的历史变量即可完成需求。
内容的提问来源于stack exchange,提问作者burritotukituki
相关产品推荐
相关产品推荐

