在ISE12.4版本中,用ISE自带的综合工具XST综合时出现以下错误:
ERROR:Xst:902 - "nc_calculate.v" line 82: Unexpected left_nzc event in always block sensitivity list.
源程序:
行82 always@(*)
k_idx,nzc_valid,block_nzc)
begin
nT = 0; uT = 0;
nL = 0; uL = 0;
if(is_luma)
begin
case(block_idx)
4'h0: begin nT = top_nzc[0]; nL = left_nzc[0]; uT=1; uL=1; end
……..
解决办法:
1、将always@(*)改为always@(aaa) aaa为begin end块内等号右边的所有变量和begin end块中所有input变量
如:always@(is_luma or block_idx or top_nzc[0] or .....)
2、将所用器件改为 family:Virtex6 Device:XC6VLX240T。原来为Virtex5。
下面来看:
always@(*) 指的是对其后面语句块中所有的输入变量的变化时敏感的。
Always@(*) 和always@*的区别:
Example 1
always @(*) // equivalent to @(a or b or c or d or f)
y = (a & b) | (c & d) | myfunction(f);
Example 2
always @* begin // equivalent to @(a or b or c or d or tmp1 or tmp2)
tmp1 = a & b;
tmp2 = c & d;
y = tmp1 | tmp2;
end
Example 3
always @* begin // equivalent to @(b)
@(i) kid = b; // i is not added to @*
End
Example 4
always @* begin // equivalent to @(a or b or c or d)
x = a ^ b;
@* // equivalent to @(c or d)
x = c ^ d;
end