如何处理流程语句中的信号
How to deal with signals in process statements
我用电缆连接了一个外部设备,将串行数据发送到我的 FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备都会向我的 FPGA 发送一位。
每次我收到 16 位时,我必须告诉设备它必须再发送 16 位。我通过在电缆中设置另一根电线(名为 LOAD
)来做到这一点。
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
是变量类型,我的程序逻辑将是一个简单的循环,但它不是...
我怎样才能体面地处理这个问题?我是否必须浪费额外的 迭代 才能将 LOAD
设置回 0?
将LOAD
提前一个周期设置为高电平,即当bitIndex
为15时。然后当bitIndex
为16时再次将LOAD
重置为低电平。
我用电缆连接了一个外部设备,将串行数据发送到我的 FPGA。我沿着电缆内的一根电线传递时钟信号。在每个时钟信号上,设备都会向我的 FPGA 发送一位。
每次我收到 16 位时,我必须告诉设备它必须再发送 16 位。我通过在电缆中设置另一根电线(名为 LOAD
)来做到这一点。
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
是变量类型,我的程序逻辑将是一个简单的循环,但它不是...
我怎样才能体面地处理这个问题?我是否必须浪费额外的 迭代 才能将 LOAD
设置回 0?
将LOAD
提前一个周期设置为高电平,即当bitIndex
为15时。然后当bitIndex
为16时再次将LOAD
重置为低电平。