2017-08-08 115 views
-2

在这个代码片段中:的Verilog语法错误附近的“<=” case语句

reg [4:0] status_led = 5'b00100; 
    case (status_led) 
     default: begin     
      if (rotation) begin 
       status_led[4] <= status_led[3]; 
       status_led[3] <= status_led[2]; 
       status_led[2] <= status_led[1]; 
       status_led[1] <= status_led[0]; 
       status_led[0] <= status_led[4]; 
      end else if (~rotation) begin 
       status_led[4] <= status_led[0]; 
       status_led[3] <= status_led[4]; 
       status_led[2] <= status_led[3]; 
       status_led[1] <= status_led[2]; 
       status_led[0] <= status_led[1]; 
      end 
     end 
    endcase 

我得到的错误“近< =语法错误”。为什么这是一个错误?

+1

之前显示的代码是什么?这是“永远”块还是函数的一部分? – mkrieger1

+0

为什么你懒得使用'case'语句而只有'default'的情况? – mkrieger1

+0

此代码是独立的。原本我有其他案件,但我改变了代码。我已经用优秀的代码替换了这些代码,但是我很好奇为什么我会在上面提到的错误中遇到以下情况,我需要在将来编写类似的代码 –

回答

0

你还没有定义你的情况,因此错误。这应该可以解决你的问题。一个好主意不是将组合和连续的块总是混合在一起。

reg [4:0] status_led = 5'b00100; 

    [email protected](posedge clk) begin 
    case (status_led) 
     default: begin     
      if (rotation) begin 
       status_led[4] <= status_led[3]; 
       status_led[3] <= status_led[2]; 
       status_led[2] <= status_led[1]; 
       status_led[1] <= status_led[0]; 
       status_led[0] <= status_led[4]; 
      end else if (~rotation) begin 
       status_led[4] <= status_led[0]; 
       status_led[3] <= status_led[4]; 
       status_led[2] <= status_led[3]; 
       status_led[1] <= status_led[2]; 
       status_led[0] <= status_led[1]; 
      end 
     end 
    endcase 
    end