Xilinx ISIM:计算转换次数
Xilinx ISIM: Count the Number of Transitions
有没有一种方法可以让 ISIM 计算仿真期间给定时间段内从高到低的转换次数,反之亦然?
你不能在 iSim 中做到这一点,但在 VHDL 中。
每个信号变化都会触发信号 'event
。 rising_edge(clock)
使用此事件来测试 clock'last_value
是否为 '0'
且 clock
是否为 '1'
,反之亦然 falling_edge(...)
.
正如你所要求的,你只是在寻找上升沿和下降沿,所以你可以使用正常的"clocked"过程:
process(mySignal)
begin
if rising_edge(mySignal) then
RisingEdgeCount_us := RisingEdgeCount_us + 1;
elsif falling_edge(mySignal) then
FallingEdgeCount_us := FallingEdgeCount_us + 1;
end if;
end process;
带有敏感列表的进程的优点是,它只在 mySignal 改变时才被检查。
如果您想测量一个时间间隔内的转换,您可以设计一个在此期间为高的使能信号,或者您可以读取当前仿真时间并计算该时间点是否在该时间间隔内。
还有许多其他方法可以描述其他过程,但我认为这种方法最能解决您的问题。
有没有一种方法可以让 ISIM 计算仿真期间给定时间段内从高到低的转换次数,反之亦然?
你不能在 iSim 中做到这一点,但在 VHDL 中。
每个信号变化都会触发信号 'event
。 rising_edge(clock)
使用此事件来测试 clock'last_value
是否为 '0'
且 clock
是否为 '1'
,反之亦然 falling_edge(...)
.
正如你所要求的,你只是在寻找上升沿和下降沿,所以你可以使用正常的"clocked"过程:
process(mySignal)
begin
if rising_edge(mySignal) then
RisingEdgeCount_us := RisingEdgeCount_us + 1;
elsif falling_edge(mySignal) then
FallingEdgeCount_us := FallingEdgeCount_us + 1;
end if;
end process;
带有敏感列表的进程的优点是,它只在 mySignal 改变时才被检查。
如果您想测量一个时间间隔内的转换,您可以设计一个在此期间为高的使能信号,或者您可以读取当前仿真时间并计算该时间点是否在该时间间隔内。
还有许多其他方法可以描述其他过程,但我认为这种方法最能解决您的问题。