问题描述
当我针对Virtex-6和Spartan-6器件并且元注释不起作用时,XST中出现以下警告,但我没有针对旧器件的任何问题。为什么?
解决/修复方法
在11.2中,XST为Virtex-6和Spartan-6系列引入了新的VHDL / Verilog解析器。有关此更改的更多信息,请参阅(Xilinx答复32927) 。
随着Verilog-2001的引入,Verilog属性成为应用设计约束的首选方法。 XST仍支持Verilog综合元件,但是,对于在Virtex-6或Spartan-6设计中工作的元件,存在以下限制:
如果metacomment适用于:
找到信号和元信息
– 在模块描述之前,旧器件的XST和Virtex-6和Spartan-6系列的XST都忽略该属性。
– 在模块描述中,旧器件的XST和Virtex-6和Spartan-6系列的XST都考虑了这个元件。
– 在模块描述之后,旧器件的XST会考虑这个元件,而Virtex-6和Spartan-6系列的XST会忽略它。
-a模块,然后无论元件位置如何,旧器件的XST和Virtex-6和Spartan-6系列的XST都将其考虑在内。
在以下示例中,fsm_extract约束应用于状态信号。约束位于模块描述之后。
文件:ex_0016_v.v
编译库:工作
模块ex_0016_v(clk,reset,x1,outp);
输入clk,reset,x1;
输出输出;
reg outp;
reg [1:0]状态;
参数s1 = 2’b00;参数s2 = 2’b01;
参数s3 = 2’b10;参数s4 = 2’b11;
最初开始
state = 2’b00;
结束
总是@(posedge clk或posedge reset)
开始
如果(重置)
开始状态<= s1; outp <= 1’b1;结束
其他
开始
案件(州)
s1:开始
if(x1 == 1’b1)
开始
州<= s2;
outp <= 1’b1;
结束
其他
开始
州<= s3;
outp <= 1’b0;
结束
结束
s2:开始状态<= s4; outp <= 1’b1;结束
s3:开始状态<= s4; outp <= 1’b0;结束
s4:开始状态<= s1; outp <= 1’b0;结束
ENDCASE
结束
结束
endmodule
//状态的综合属性fsm_extract为“no”//注意:此处为警告点。
旧器件的XST接受元件并且不推断状态机。
为信号<state>设置属性“fsm_extract = no”。
Virtex-6和Spartan-6系列的XST忽略了应用于信号的元模型并提取状态机。
警告:HDLCompiler:924 – “ex_59_1_0.v”第42行:在此范围内找不到属性目标标识符状态
…
找到信号<state>的有限状态机<FSM_0>。
要解决此问题,必须将元信息放在模块描述中。
文件:ex_0016_v.v
编译库:工作
模块ex_0016_v(clk,reset,x1,outp);
输入clk,reset,x1;
输出输出;
reg outp;
reg [1:0]状态;
参数s1 = 2’b00;参数s2 = 2’b01;
参数s3 = 2’b10;参数s4 = 2’b11;
最初开始
state = 2’b00;
结束
//状态的综合属性fsm_extract为“no”
总是@(posedge clk或posedge reset)
开始
如果(重置)
开始状态<= s1; outp <= 1’b1;结束
其他
开始
案件(州)
s1:开始
if(x1 == 1’b1)
开始
州<= s2;
outp <= 1’b1;
结束
其他
开始
州<= s3;
outp <= 1’b0;
结束
结束
s2:开始状态<= s4; outp <= 1’b1;结束
s3:开始状态<= s4; outp <= 1’b0;结束
s4:开始状态<= s1; outp <= 1’b0;结束
ENDCASE
结束
结束
endmodule
Xilinx建议您不要使用metcomments。相反,您应该遵循Verilog 2001construct来传递属性。
没有回复内容