2010-10-25 4 views
1

J'ai essayé de compiler le codeNe peut pas faire sens d'erreur dans le système Verilog

module counter(
    input clk, 
    input upSignal, 
    input downSignal, 
    output [7:0] count 
    ); 
     always_ff @(posedge clk) begin 
      if (upSignal) 
       count <= count + 1; 
      else if (downSignal) 
       count <= count - 1; 
     end 
    endmodule 

mais je reçois l'erreur

Error (10170): Verilog HDL syntax error at counter.v(7) near text "@"; expecting ".", or "("

qu'est-ce que cela signifie?

+1

Quel outil logiciel essayez-vous de compiler? Certains simulateurs par défaut à la syntaxe Verilog-2001 et doivent être dit d'attendre SystemVerilog ... – Marty

+0

Altera Quartus II – segfault

+1

Je ne suis pas familier avec ce logiciel. 'always_ff' est un mot-clé dans SystemVerilog, mais pas dans Verilog-2001. Vérifiez les documents du logiciel pour voir si vous devez activer le support de SystemVerilog. Si vous l'exécutez à partir de la ligne de commande, cela peut être quelque chose comme '-sv' ou similaire. – Marty

Répondre

6

Quartus prend en charge certains systemverilog. Voir ce lien pour plus de détails> Quartus Help

Pour quartus de reconnaître automatiquement que vous utilisez le système Verilog, vous devez appeler votre fichier something.sv

Donc dans ce cas, probablement counter.sv

Si votre fichier s'appelle counter.v, vous obtiendrez une erreur. Je peux confirmer que c'est effectivement compiler avec Quartus II v10.0.

Je recommanderais de changer votre port de sortie de module à reg, Quartus ne s'est pas plaint, mais un simulateur le ferait.

output reg [7:0] count 

Dites-nous comment vous en êtes.

Vive

1

Je pense que George est juste (Bonjour George! On se retrouve), le fichier est interprété comme Verilog (non SystemVerilog), et il ne comprend pas always_ff.

Sur le type de la valeur de sortie, je préfère l'utilisation de la logique dans SystemVerilog. Son effet est identique, mais il s'éloigne du «son reg déclaré», donc c'est un registre qui pense pouvoir attraper les gens

Aussi, la raison pour laquelle vous avez reçu ce message d'erreur particulier était que cela n'a pas été le cas. savoir ce que always_ff était, il a supposé que c'était le nom d'un module/interface/fonction.Un module pourrait avoir une carte de port qui pourrait commencer par un '.', et tout le reste aurait besoin d'une parenthèse ouverte

0

Un autre La variable count est assignée à partir d'un bloc procédural (always_ff), donc la variable count doit être déclarée en tant que type de variable, typiquement un type logique pour ce code SystemVerilog. ould include: sortie logique [7: 0] compte

Questions connexes