Vhdl 如何处理过程语句中的信号

Vhdl 如何处理过程语句中的信号,vhdl,Vhdl,我有一个与外部设备的电缆连接,该设备将串行数据发送到我的FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备向我的FPGA发送一个位 每次我收到16位,我都要告诉设备它必须再发送16位。我通过在电缆内设置另一根导线(名为负载)来实现这一点 architecture Connection of main is begin process (OnboardClock) variable bitIndex : Integer := 0; begin

我有一个与外部设备的电缆连接,该设备将串行数据发送到我的FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备向我的FPGA发送一个位

每次我收到16位,我都要告诉设备它必须再发送16位。我通过在电缆内设置另一根导线(名为
负载
)来实现这一点

architecture Connection of main is
begin
    process (OnboardClock)
       variable bitIndex : Integer := 0;
  begin
       if rising_edge(OnboardClock) then

            -- Do something with DATA
            -- Loop till bit index is 16
            -- At index 16, set LOAD to 1
            -- At index 0, unset LOAD to 0 again

            bitIndex := bitIndex + 1;
       end if;
    end process;
end architecture Connection;
现在需要注意的是,
LOAD
是一种信号类型,因此如果我使用

LOAD <= '1'

LOAD仅提前一个周期将
LOAD
设置为高,即当
bitIndex
为15时。然后,当
bitIndex
为16时,再次将
LOAD
重置为low。

仅提前一个周期将
LOAD
设置为high,即当
bitIndex
为15时。然后在
bitIndex
为16时,将
LOAD
重置为low(低)。

这确实是我想象的解决方案,但由于我缺乏VHDL方面的经验,我认为可能有更好的解决方案,而不是调整程序逻辑来处理信号。你认为这是常见的方法吗?@user1534664,这很常见。如果逻辑足够复杂,它可能需要一个状态机。但是对于这样简单的东西,计数器是可以的。@user1534664计数器是最简单的状态机。那么为什么不在合适的地方使用呢。我很少在我的过程中使用变量,因为在大多数模拟器的波形中不能包含它们。因此,它们很难调试。我有时在测试台上使用变量。另外,如果计数器是一个信号而不是变量,你可以在进程之外的并发语句中使用它的值,比如
Load这确实是我想象的解决方案,但由于我在VHDL方面缺乏经验,我认为可能有更好的解决方案,而不是调整程序逻辑来处理信号。你认为这是常见的方法吗?@user1534664,这很常见。如果逻辑足够复杂,它可能需要一个状态机。但是对于这样简单的东西,计数器是可以的。@user1534664计数器是最简单的状态机。那么为什么不在合适的地方使用呢。我很少在我的过程中使用变量,因为在大多数模拟器的波形中不能包含它们。因此,它们很难调试。有时我会在测试台上使用变量。另外,如果计数器是一个信号而不是变量,那么可以在并发语句中使用其值,例如
Load,如果你真的计数到16,然后是0,那么你已经引入了一个额外的循环-这是一个模17计数器。所以你可能想重新考虑一下你的计数循环。(我会使bitIndex成为一个有限范围的整数和一个显式的模计数器,
bitIndex:=bitIndex+1 mod 16;
Martin的答案可能不是“公共的”方法,但这肯定是一个非常正常的方法。如果你真的要数到16,然后是0,那么你已经引入了一个额外的循环-这是一个模17计数器。所以你可能想重新考虑你的计数循环。(我会将bitIndex设置为一个有限范围整数和一个显式模计数器,
bitIndex:=bitIndex+1 mod 16;
Martin的答案可能不是“常见”的方法,但肯定是一个非常正常的方法。