Envoi de données 8 bits en série

Uygar Uçar

Envoi de données 8 bits en série


J’essaie d’envoyer des données parallèles 8 bits en série. Lorsque Send vaut 1, il devrait commencer à envoyer des données. Il est illustré dans la figure ci-dessous. entrez la description de l'image ici

 module transmitter ( Clk ,  Send ,  PDin ,  SCout ,  SDout ); input Clk ,  Send ; input [ 7 : 0 ]  PDin ; wire reg [ 7 : 0 ]  PD ; assign PD [ 7 : 0 ]=  PDin [ 7 : 0 ]; output SCout ; output reg SDout ; always @( posedge Clk ) PD [ 7 : 1 ]   <=  PD [ 6 : 0 ]; assign SCout =  Clk ; always @( posedge SCout ) 
     if ( Send ==   1 'b1 ) SDout <=   1 'b1 ; 
     else SDout <=  PDin [ 7 ]; endmodule 

Ici,

 wire reg [ 7 : 0 ]  PD ; 

cela jette une erreur.

Erreur (10170): erreur de syntaxe Verilog HDL à transmetteur.v (4) près du texte « reg »; attend un identifiant (« reg » est un mot clé réservé), ou « [« , ou « signé », ou « non signé »

Je n’ai pas utilisé PD et j’avais déjà déplacé PDin dans toujours bloc, cependant, il a dit que PDin ne peut pas être à la fois entrée et reg. Par conséquent, j’ai mis à jour le code comme ci-dessus.

Tom Carpenter

wire reg [7:0] PD; Vous ne pouvez pas avoir un signal qui est à la fois un wire et un reg . Au cas où vous vous demandez comment trouver cela, j’ai regardé la ligne (4) pour la lecture de texte reg , comme indiqué par le message d’erreur – cela vous dit que reg est inattendu (aka non autorisé) à ce stade.

Tom Carpenter

assign PD[7:0]= PDin[7:0]; Vous ne pouvez pas attribuer un reg aide d’une instruction d’ assign .

Tom Carpenter

Pour plus de lisibilité, toutes vos instructions if , else et always doivent avoir begin et end . Tout comme en C où vous avez { et } .

Tom Carpenter

Si vous souhaitez effectuer une action (par exemple, l’envoi de bits de données) et un événement (par exemple, un signal qui monte), créez une machine à états.

Tony EE rocketscientist

Pour la communication série asynchrone Start = « 0 et » hi pour RS-232

Réponses


 Tom Carpenter

Voyons d’abord le message d’erreur.

Erreur (10170): erreur de syntaxe Verilog HDL à transmetteur.v (4) près du texte « reg » ; attend un identifiant (« reg » est un mot clé réservé), ou « [« , ou « signé », ou « non signé »

Sur ou près de la ligne 4, il y a une erreur – près d’un morceau de texte qui lit « reg ».

Sur la ligne 4, nous avons le wire reg [7:0] PD; – Je repère le texte « reg ».

Après le mot clé wire, vous devez soit donner un identifiant (le nom d’un fil), soit un [ (dans le cas d’un fil multi-bits), ou spécifier si le fil est signed ou unsigned (par défaut). Au lieu de cela, vous avez utilisé un mot-clé réservé reg .

Vous ne pouvez pas avoir un signal qui est à la fois un fil et un reg.


Ensuite, en supposant que vous avez l’intention que PD soit un reg , la ligne assign PD[7:0]= PDin[7:0]; est également une erreur – vous ne pouvez pas attribuer un reg à l’aide d’une instruction assign. Si vous vouliez que PD soit un wire , vous ne pouvez pas l’utiliser plus tard dans le bloc Always.

Je n’ai pas utilisé PD

Oui, vous l’avez utilisé comme cible à la fois d’une assignation procédurale et d’une assignation continue. Vous l’avez donc utilisé. Et d’une manière qui n’est pas autorisée (voir ci-dessus).


En troisième point, pour plus de lisibilité, toutes vos instructions if , else et always doivent avoir un mot-clé begin et end . Vous utilisez begin / end de la même manière que vous utiliseriez { / } en C. Cela peut sembler fastidieux, mais c’est une bonne pratique et vous fera gagner du temps à long terme.


Enfin, si vous souhaitez effectuer une action (par exemple, envoyer des bits de données) et un événement (par exemple, un signal qui monte), vous devriez envisager de créer une machine à états pour contrôler le flux. N’oubliez pas que tout ce que vous décrivez avec Verilog est matériel (d’où HDL), donc si vous voulez effectuer une séquence d’actions, vous avez besoin d’une construction matérielle qui le fait – une machine d’état en est un exemple.

 

#), #de, #en, bits, données), Envoi, série

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *