VHDL-等待<;信号>;陈述
我正在尝试处理WAIT-ON语句的一个示例。每次我试图用编译器编译代码时,Quartus II都会给我以下错误消息 错误(10533):VHDL等待语句在T1处出错。vhd(23):等待语句必须包含带有UNTIL关键字的条件子句 模型架构如下所示。它的功能并不重要,只是因为编译器需要一个UNTIL语句。我所看到的所有例子、互联网和书籍都显示了它的用途如下:VHDL-等待<;信号>;陈述,vhdl,Vhdl,我正在尝试处理WAIT-ON语句的一个示例。每次我试图用编译器编译代码时,Quartus II都会给我以下错误消息 错误(10533):VHDL等待语句在T1处出错。vhd(23):等待语句必须包含带有UNTIL关键字的条件子句 模型架构如下所示。它的功能并不重要,只是因为编译器需要一个UNTIL语句。我所看到的所有例子、互联网和书籍都显示了它的用途如下: ARCHITECTURE dflow OF T1 IS SIGNAL middle : std_logic; BEGIN P1 : PR
ARCHITECTURE dflow OF T1 IS
SIGNAL middle : std_logic;
BEGIN
P1 : PROCESS IS
BEGIN
IF CLK = '1' THEN
middle <= input;
END IF;
WAIT ON CLK;
END PROCESS P1;
OUTPUT <= MIDDLE;
END ARCHITECTURE dflow;
T1的架构数据流是
信号中间:标准逻辑;
开始
P1:过程是
开始
如果CLK='1',则
中间我认为这里的基本问题是
WAIT ON CLK;
正在等待CLK
上的任何类型的事件。例如,这可能是从'H'
到'1'
的转换,也可能是CLK
的上升或下降边缘。在这两种情况下,FPGA中都没有真正的硬件能够以这种方式工作。对于您来说,很明显您正在寻找一个上升的边缘,因为CLK='1'行是的,但这不是合成工具所看到的
通过在
之前添加一个,您可以缩小您感兴趣的特定事件的范围,希望选择能够在FPGA中实际实现的事件。示例:
wait on clk until clk = '1'; -- Detect a rising edge, OK (ish, see below)
wait on clk until clk = '0'; -- Detect a falling edge, OK (^^)
此方法类似于clk'事件和clk='1'
边缘检测技术。这不是一种推荐的方法,因为由于模拟器响应从'H'
到'1'
的转换(除其他可能性外),可能会导致模拟与现实不匹配,这是硬件无法做到的
建议使用上升沿
和下降沿
功能检测边缘:
wait until falling_edge(clk); -- OK, no ambiguity here.
最后,这里表示的整个结构看起来非常不标准。编写时钟进程的常用方法如下:
process (clk)
begin
if (rising_edge(clk)) then
-- Do something
end if;
end process;
我认为这里的基本问题是线路
WAIT ON CLK;
正在等待CLK
上的任何类型的事件。例如,这可能是从'H'
到'1'
的转换,也可能是CLK
的上升或下降边缘。在这两种情况下,FPGA中都没有真正的硬件能够以这种方式工作。对于您来说,很明显您正在寻找一个上升的边缘,因为CLK='1'
行是的,但这不是合成工具所看到的
通过在
之前添加一个,您可以缩小您感兴趣的特定事件的范围,希望选择能够在FPGA中实际实现的事件。示例:
wait on clk until clk = '1'; -- Detect a rising edge, OK (ish, see below)
wait on clk until clk = '0'; -- Detect a falling edge, OK (^^)
此方法类似于clk'事件和clk='1'
边缘检测技术。这不是一种推荐的方法,因为由于模拟器响应从'H'
到'1'
的转换(除其他可能性外),可能会导致模拟与现实不匹配,这是硬件无法做到的
建议使用上升沿
和下降沿
功能检测边缘:
wait until falling_edge(clk); -- OK, no ambiguity here.
最后,这里表示的整个结构看起来非常不标准。编写时钟进程的常用方法如下:
process (clk)
begin
if (rising_edge(clk)) then
-- Do something
end if;
end process;
允许合成限制它接受的VHDL构造的范围。在这种情况下,等待上升沿(clk)代码>可能被接受,正如错误消息所暗示的那样。请注意,等待
如果需要检测两个时钟边缘,则会出现问题,常规FPGA硬件无法支持这一点。如果需要使用等待
。。。模拟。@BrianDrummond是等待clk
相当于等待clk'event
,因此在合成上下文中不明确?允许合成限制其接受的VHDL构造的范围。在这种情况下,等待上升沿(clk)代码>可能被接受,正如错误消息所暗示的那样。请注意,等待
如果需要检测两个时钟边缘,则会出现问题,常规FPGA硬件无法支持这一点。如果需要使用等待
。。。模拟。@BrianDrummond是等待clk
相当于等待clk'event
,因此在合成的上下文中是不明确的?嗨,杰夫,谢谢你花时间整理出一个非常好的答案。嗨,杰夫,谢谢你花时间整理出一个非常好的答案。