微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 程序有点小问题·哪个有空顺便帮下忙

程序有点小问题·哪个有空顺便帮下忙

时间:10-02 整理:3721RD 点击:
初学VHDL,下面是一个D触发器的VHDL代码,感觉没错,但是Quartus2在编译的时候总是不能成功,提示:
Error (10533): VHDL Wait Statement error at text.vhd(13): Wait Statement must contain condition clause with UNTIL keyword
为什么啊?难道只能用WAIT UNTIL语句?我只是仿真都不行啊!
===========================================================
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY text IS
PORT(clk,reset,d:IN STD_LOGIC;
q:OUT STD_LOGIC);
END text;
ARCHITECTURE x OF text IS
BEGIN
PROCESS
BEGIN
WAIT ON clk;
IF(clk'EVENT AND clk='1')THEN
IF(reset='1')THEN
q<='0';
ELSE
q<=d;
END IF;
END IF;
END PROCESS;
END x;

帮帮忙·谢了

把 WATI ON去掉就好了
你再程序中。已经有了触发敏感信号了。就是这个:if clk'event and clk=1 这个就是时钟触发嘛
你把WAIT ON删掉。然后 把进程PROCESS改为PROCESS(CLK)实验下吧

感谢你的回复!
我知道按你的方法用敏感参数表是可行的。但是书上也是说了的,如果不用敏感参数表,用其他的敏感信号激励也是可以的比如:wait until ,wait on, wait for只是在用wait语句的时候不能再带有PROCESS的敏感参数表。
可是为什么用wait on会出错呢?对不起,我是初学,所以想把每个问题搞清楚。

同一信号不能存在2种触发状态吧
wait on clk 和if rising_edge(clk) 都是同一种触发状态的描述方式,不能同时存在吧。只能用一个好像

wait on clk 是等待clk变化,和process(clk)中的敏感参数表是一样的功能,但是这种变化可能是从0变到1,也可能是从1变到0。所以用if rising_edge(clk)是判断clk的变化是否是上升沿(从0变到1)。
还有一个问题就是我的这个程序如果选择分析当前文档(Analyze Current File)的话,还是可以编译成功的。只是在全编译(Full Compilation)的时候不能通过。

你写的没错,不过Quartus综合器并不支持所有的语法. 最好是删掉wait语句,clk写在process的敏感变量列表里

但是不能综合的好像是wait for语句啊。而且就算不能综合,仿真总是可以的吧?那么编译怎么通不过呢?

而且我如果写成:wait on clk until (clk'event and clk='1');再编译的话也是能够通过的,说明wait on语句是可以用的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top