首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL -等待<signal>语句

VHDL -等待<signal>语句
EN

Stack Overflow用户
提问于 2016-01-27 13:10:38
回答 1查看 7.2K关注 0票数 0

我正在试着处理一个等待语句的例子。每次我试图编译我的代码时,编译器Quartus II都会给我以下错误消息。

错误(10533):VHDL等待语句错误在T1.vhd(23):等待语句必须包含条件子句和直到关键字

模型体系结构在下面。它的函数并不重要,这仅仅是编译器要求一条the语句的原因。我所看到的所有例子,互联网和书籍都说明了它的用途如下:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 16:09:53

我认为这里的基本问题是

代码语言:javascript
复制
WAIT ON CLK;

正在CLK上等待任何类型的事件。例如,这可能是从'H''1'的过渡,也可能是CLK的上升或下降的边缘。在任何一种情况下,FPGA中没有真正的硬件能够以这种方式工作。在你看来,很明显,你正在寻找一个上升的边缘,因为if CLK = '1'线,但这不是合成工具看到它的方式。

通过添加一个until,您可以缩小您感兴趣的特定事件的范围,希望选择一些实际可以在FPGA中实现的内容。示例:

代码语言:javascript
复制
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_edgefalling_edge函数:

代码语言:javascript
复制
wait until falling_edge(clk); -- OK, no ambiguity here.

最后,这里表示的整个结构看起来非常不标准。编写时钟进程的常见方法如下:

代码语言:javascript
复制
process (clk)
begin
  if (rising_edge(clk)) then
    -- Do something
  end if;
end process;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35038327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档