描述
当我试图推断同步元件(寄存器、触发器、存储器等)时,报告以下错误消息:
“错误:xST:827文件名(行XX)。信号XX不能综合,不良同步描述。
上述错误消息的典型场景将是类似于下面的VHDL代码:
:
:
过程(C,R)开始
如果r’事件和r=“1”,那么
q& lt;=“0”;
ELSIFF C’事件和C=“1”
q=D;
如果结束;
结束过程;
:
:
或
:
:
过程(C,R)开始
如果(r=1)则
q& lt;=“0”;
如果C’事件和C=“1”,那么
q=D;
如果结束;
如果结束;
结束过程;
:
:
解决方案
虽然您的VHDL代码可能是语法正确的,XST支持预定义的模板来推断各种类型的同步元件。
同步元件描述是基于事件VHDL属性的。为了使XST推断同步元件,事件VHDL属性必须出现在进程的最顶层“如果”语句中。此外,过程中不应该有嵌入的事件语句。下面的两个例子说明了这一点:
例1:
:
:
同步描述:进程(CLK,Read)开始
如果CLK’事件和CLK=“1”,则是TopMax if语句
如果RESET=“1”,则同步复位
q& lt;=“0”;
其他的
q=D;
如果结束;
如果结束;
结束过程;
:
:
在上面的示例中,没有嵌入的事件语句。此外,“事件语句”是最高级“IF”语句的一部分。最上面的“如果”语句下面是一个描述,它将推断同步重置。如果需要,可以将更多的嵌入“IF”语句添加到您的设计中。
例2:
:
:
同步描述:进程(CLK,Read)开始
如果RESET=“1”,则异步复位
q& lt;=“0”;如果需要的话,你可以有嵌入的if语句。
ELSIF CLK’事件和CLK =“1”然后仍然是最顶层if语句
q & lt;= d;-你可以把你的case语句放在这里或者
结束if;-嵌入更多的if语句但不
结束过程;任何事件声明
:
:
在上面的示例中,没有嵌入的事件语句。此外,“事件语句”是最顶层的“如果”语句的一部分,因为它与“ELSIF”语句关联。更多的VHDL代码可以插入到最顶层的“IF”语句的下面。
推理模板也可以在软件手册中的ISE模板和XST用户指南中找到。HTTP://www. xLimx.COM/Spope/Studio软件手册
没有回复内容