2017-08-08 3 views
-2

Dans ce bout de code:erreur de syntaxe Verilog proche "<=" dans une instruction 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 

Je reçois l'erreur "erreur de syntaxe près < =". Pourquoi est-ce une erreur?

+1

Ce qui précède le code que vous avez affiché? Est-ce que cela fait partie d'un bloc 'always' ou d'une fonction? – mkrieger1

+0

Et pourquoi prenez-vous la peine d'utiliser une instruction 'case' avec rien d'autre qu'un cas 'default'? – mkrieger1

+0

Ce code est indépendant. A l'origine j'avais d'autres cas mais j'ai changé le code. J'ai déjà remplacé ce code avec un code supérieur, mais je suis curieux de savoir pourquoi je reçois l'erreur ci-dessus au cas où je devrais écrire un code similaire à l'avenir –

Répondre

0

Vous n'avez pas défini votre cas dedans toujours, d'où l'erreur. Cela devrait résoudre votre problème. Une bonne idée serait de ne pas mélanger les blocs combinatoires et séquentiels toujours ensemble.

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