Vhdl 如何处理过程语句中的信号
我有一个与外部设备的电缆连接,该设备将串行数据发送到我的FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备向我的FPGA发送一个位 每次我收到16位,我都要告诉设备它必须再发送16位。我通过在电缆内设置另一根导线(名为Vhdl 如何处理过程语句中的信号,vhdl,Vhdl,我有一个与外部设备的电缆连接,该设备将串行数据发送到我的FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备向我的FPGA发送一个位 每次我收到16位,我都要告诉设备它必须再发送16位。我通过在电缆内设置另一根导线(名为负载)来实现这一点 architecture Connection of main is begin process (OnboardClock) variable bitIndex : Integer := 0; begin
负载
)来实现这一点
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的答案可能不是“常见”的方法,但肯定是一个非常正常的方法。