如何用VHDL实现数据监控?
How to realize a data monitor in VHDL?
我不知道如何准确描述它,但也许是这样的?
void monitor_thread(void)
{
for(;;){
if (data==10){
data=0;
data2++;
}
}
}
对我来说,我会在VHDL中这样实现:
signal data,data2:std_logic_vector(3 downto 0);
...
process(data)
begin
case data is:
when "0101" => data2<=data2+1;
when others =>
end case;
end process;
但是在quartus II中编译时会出现警告。我认为这不是执行此操作的正确方法。有什么建议吗?
警告:
Warning (10492): VHDL Process Statement warning at xxx: signal "data2" is read inside the Process Statement but isn't in the Process Statement's sensitivity list
Warning (10631): VHDL Process Statement warning at xxx: inferring latch(es) for signal or variable "data", which holds its previous value in one or more paths through the process
我们先假设,data
是一个寄存器,在时钟clock
的上升沿更新。然后 data
每个时钟周期只会改变一次,因此,我们需要它与目标值进行比较,每个时钟周期也只需要一次。这是通过另一个时钟进程实现的,该进程将 data2
同步增加到 clock
:
process (clock)
begin
if rising_edge (clock) then
if data = x"0101" then
data2 <= data2 + 1; -- data2 of type unsigned, signed, or integer
end if;
end if;
end process;
如果data
是一些组合逻辑的输出,其中这个组合逻辑的输入是由clock
时钟控制的寄存器,那么data
在时钟周期内可能会改变几次.但是,您实际上只能依赖稳定值,因为中间值取决于硬件中的实际延迟,因此不是确定性的。对于监控,您可以使用与上述相同的过程。
如果 data
依赖于一些异步输入,那么您必须首先使用公共时钟同步这些输入。然后可以应用上面的解决方案。
我不知道如何准确描述它,但也许是这样的?
void monitor_thread(void)
{
for(;;){
if (data==10){
data=0;
data2++;
}
}
}
对我来说,我会在VHDL中这样实现:
signal data,data2:std_logic_vector(3 downto 0);
...
process(data)
begin
case data is:
when "0101" => data2<=data2+1;
when others =>
end case;
end process;
但是在quartus II中编译时会出现警告。我认为这不是执行此操作的正确方法。有什么建议吗?
警告:
Warning (10492): VHDL Process Statement warning at xxx: signal "data2" is read inside the Process Statement but isn't in the Process Statement's sensitivity list
Warning (10631): VHDL Process Statement warning at xxx: inferring latch(es) for signal or variable "data", which holds its previous value in one or more paths through the process
我们先假设,data
是一个寄存器,在时钟clock
的上升沿更新。然后 data
每个时钟周期只会改变一次,因此,我们需要它与目标值进行比较,每个时钟周期也只需要一次。这是通过另一个时钟进程实现的,该进程将 data2
同步增加到 clock
:
process (clock)
begin
if rising_edge (clock) then
if data = x"0101" then
data2 <= data2 + 1; -- data2 of type unsigned, signed, or integer
end if;
end if;
end process;
如果data
是一些组合逻辑的输出,其中这个组合逻辑的输入是由clock
时钟控制的寄存器,那么data
在时钟周期内可能会改变几次.但是,您实际上只能依赖稳定值,因为中间值取决于硬件中的实际延迟,因此不是确定性的。对于监控,您可以使用与上述相同的过程。
如果 data
依赖于一些异步输入,那么您必须首先使用公共时钟同步这些输入。然后可以应用上面的解决方案。