辉色天空zs 发表于 2017-3-5 10:19:23

verilog ,请问为啥做这样的改动就能通过编译

if(cnt < 5'd18)
cnt <= cnt + 1;
else cnt<=0;

if(cnt == 1)
init<= 1;//改为 init=1 也不对,编译显示这个位置是错的

上面这个代码,怎么编译都不过,显示错误为
Error (10200): Verilog HDL Conditional Statement error at LEDa.v(65): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct

但是我改成下面这样就编译通过了,
if(cnt < 5'd18)
begin
      cnt <= cnt + 1;
      if(cnt == 1)
                init<= 1;
end
else cnt<=0;

就是将错误的那句插入到上面那个if语句里   (插入到其他位置都会报错,只有插入到上面的if语句里才不报错)

请问各位知道这是什么原因吗?

辉色天空zs 发表于 2017-3-5 10:22:02

初学verilog,有些语法不知道

zhangalex88 发表于 2017-3-5 11:43:45

第一段是两句话,第二段是一句话,你把第一段头尾加上begin和end试试看。

辰星和月 发表于 2017-3-5 11:47:49

你可以先用nlint检查一下语法错误,那里面会给出详细建议。

wye11083 发表于 2017-3-5 12:28:11

zhangalex88 发表于 2017-3-5 11:43
第一段是两句话,第二段是一句话,你把第一段头尾加上begin和end试试看。

下面那个init果断要出错,因为它既不是latch也不是dff,肯定不能综合出来。原则上给它赋个初值就ok了。

zhangalex88 发表于 2017-3-5 14:19:15

wye11083 发表于 2017-3-5 12:28
下面那个init果断要出错,因为它既不是latch也不是dff,肯定不能综合出来。原则上给它赋个初值就ok了。 ...

写明了是always语句的问题,楼主给的代码不全,猜想他没有把后面一段包含进去,故让他将两段用begin和and包括进来。
页: [1]
查看完整版本: verilog ,请问为啥做这样的改动就能通过编译