我正在试着处理一个等待语句的例子。每次我试图编译我的代码时,编译器Quartus II都会给我以下错误消息。
错误(10533):VHDL等待语句错误在T1.vhd(23):等待语句必须包含条件子句和直到关键字
模型体系结构在下面。它的函数并不重要,这仅仅是编译器要求一条the语句的原因。我所看到的所有例子,互联网和书籍都说明了它的用途如下:
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;发布于 2016-01-27 16:09:53
我认为这里的基本问题是
WAIT ON CLK;正在CLK上等待任何类型的事件。例如,这可能是从'H'向'1'的过渡,也可能是CLK的上升或下降的边缘。在任何一种情况下,FPGA中没有真正的硬件能够以这种方式工作。在你看来,很明显,你正在寻找一个上升的边缘,因为if CLK = '1'线,但这不是合成工具看到它的方式。
通过添加一个until,您可以缩小您感兴趣的特定事件的范围,希望选择一些实际可以在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'event and clk = '1'边缘检测技术。这不是一种推荐的方法,因为由于模拟器响应从'H'到'1'的转换(以及其他可能性),您可以得到与现实不匹配的模拟,这是硬件无法做到的。
建议的边缘检测方法是使用rising_edge和falling_edge函数:
wait until falling_edge(clk); -- OK, no ambiguity here.最后,这里表示的整个结构看起来非常不标准。编写时钟进程的常见方法如下:
process (clk)
begin
if (rising_edge(clk)) then
-- Do something
end if;
end process;https://stackoverflow.com/questions/35038327
复制相似问题