verilog编译器错误:接近“;”:语法错误,意外“;”

verilog编译器错误:接近“;”:语法错误,意外“;”,verilog,Verilog,我正在尝试为绿色、黄色和红色编写交通灯FSM代码,其延迟为20个时间单位。它从绿-黄-红-黄-绿开始。这是我的代码,使用“repeat”表示延迟时出错 错误: 错误:C:/Users/Desktop/Design/tlights.v33:near;:语法错误,意外的“;” 错误:C:/Users/Desktop/Design/tlights.v37:near;:语法错误,意外的“;” 错误:C:/Users/Desktop/Design/tlights.v44:near;:语法错误,意外的“;”

我正在尝试为绿色、黄色和红色编写交通灯FSM代码,其延迟为20个时间单位。它从绿-黄-红-黄-绿开始。这是我的代码,使用“repeat”表示延迟时出错

错误:

错误:C:/Users/Desktop/Design/tlights.v33:near;:语法错误,意外的“;” 错误:C:/Users/Desktop/Design/tlights.v37:near;:语法错误,意外的“;” 错误:C:/Users/Desktop/Design/tlights.v44:near;:语法错误,意外的“;”

问题在于`定义'语句`define类似于C/C++中的define。语句进行文字替换,终止符是行尾,而不是分号。repeat`延迟意味着重复20。删除该文件;它将模拟

即使有修正,它也不会合成。组合逻辑中不允许使用阻塞语句,如@、和wait。要实现可合成,您需要为计数器添加一些触发器。您的下一个状态和下一个计数器组合逻辑应该如下所示:

always @* begin
  // default value
  ns = cs;
  next_counter  = counter + 1;
  // update value
  case(cs)
    s0: begin
      if (counter >= `delay) begin
        ns = s1;
        next_counter = 0;
      end
    end
   /* ... */
  endcase
end

此外,记住为那些审核接近票数的人分配非阻塞性失败。这个bug很简单,但是定义本身就很难调试。编译器只在使用宏的行上声明错误,很少在宏本身中对错误进行点击。我建议这个问题保持开放,除非能找到重复的问题。我尝试过不使用分号。它不起作用。它抛出了相同的错误。@Greg,:我还可以用分号编译它,如果我更改了'define delay 20',请提供。至参数延迟=20。所以,我不确定这个错误是否与分号有关,我所做的只是给你的分号加上注释,然后它就模拟了。格雷格:事实上,如果我把“define delay 20”改为“parameter delay=20”,我就可以编译它,有分号也没有分号。我现在很困惑,它是“定义延迟20或参数延迟=20;我建议使用模块内部声明的参数。
always @* begin
  // default value
  ns = cs;
  next_counter  = counter + 1;
  // update value
  case(cs)
    s0: begin
      if (counter >= `delay) begin
        ns = s1;
        next_counter = 0;
      end
    end
   /* ... */
  endcase
end