Syntax Verilog语法错误?

Syntax Verilog语法错误?,syntax,verilog,Syntax,Verilog,我正在尝试实现一个带有停止输入的计数器MOD7,以便在Stop=1时冻结输出值 我一辈子都搞不明白为什么我会收到“附近的语法错误”,指向下面代码中end上方的那行: module CounterMod7Reset( input clock, input reset, input Stop, output reg[2:0] value ); always @(posedge clock) begin value <= (!Stop ||(Stop &&a

我正在尝试实现一个带有停止输入的计数器MOD7,以便在
Stop=1
时冻结输出值

我一辈子都搞不明白为什么我会收到“附近的语法错误”,指向下面代码中
end
上方的那行:

module CounterMod7Reset(
  input clock,
  input reset,
  input Stop,
  output reg[2:0] value
);

  always @(posedge clock) begin
    value <= (!Stop ||(Stop && reset)) ? 
             (reset ? 0 : value == 3'b110 ? 0 : (value + 1)) : 
             (Stop ? (value + 0));
  end
endmodule
模块计数器MOD7复位(
输入时钟,
输入复位,
输入停止,
输出寄存器[2:0]值
);
始终@(posedge时钟)开始

value我不懂这种语言,但我知道:每个表达式都需要返回一些东西。因此,ternary操作符
?:
需要一个
,一个else。因此,我认为您得到了错误,因为您在上一个ternairy运算符中没有else case(标记为
):

始终@(posedge时钟)开始

value看起来case语句可能更容易理解,例如:

wire max = (value == 3'b110);
always @(posedge clock) begin
 casez ({stop,reset, max})
   ?1? : value <= 'b0;
   000 : value <= value + 1;
   100 : value <= value;
end
wire max=(值==3'b110);
始终@(posedge时钟)开始
casez({stop,reset,max})

?1? : 一个典型的例子,说明了为什么嵌套三元运算符通常不受欢迎;)我想他希望计数器在7点滚动,而不是冻结,所以需要一个单独的例子:
否则如果(!stop)开始如果(值<3'b110)值
wire max = (value == 3'b110);
always @(posedge clock) begin
 casez ({stop,reset, max})
   ?1? : value <= 'b0;
   000 : value <= value + 1;
   100 : value <= value;
end
always @(posedge clock) begin
 if (reset) begin
   value <= 'b0;
 end
 else if (!stop & (value < 3'b110)) begin
   value <= value + 1
 end
end