Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1209 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Problème de gestion de la liaison série RS232 en VHDL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de gestion de la liaison série RS232 en VHDL

n°1945543
Tom1919
Posté le 28-11-2009 à 12:05:43  profilanswer
 

Bonjour, j'ai un petit problème concernant l'utilisation de la liaison série en VHDL. Je vous explique : J'ai une matrice à LEDs qui est commandée par une carte (la DE2 de chez Altera). J'ai programmé le FPGA de la carte pour pouvoir par exemple allumer les LEDs une par une de droite à gauche ou de gauche à droite. Je souhaite pouvoir envoyer des trames (des mots) de mon PC au FPGA via la liaison série RS232 pour exécuter la partie du programme qui correspond. Par exemple si j'envoie le mot "GaD" je veux que le programme allume les LEDs de gauche à droite ou si j'envoie "DaG" je veux qu'il allume les LEDs de droite à gauche.
En m’aidant d’internet j’ai fait le petit programme suivant pour que le FPGA reçoivent le mot tel que je l’ai envoyé du PC. Le problème c’est que le programme ne fonctionne pas et je n’arrive pas à trouver mon erreur. Voici mon programme :
module Serie(CLOCK_27, RxD_data, UART_RXD);
input CLOCK_27;
input UART_RXD;
output RxD_data;
 
parameter ClkFrequency = 27000000;
parameter Baud = 14400;
parameter BaudGeneratorAccWidth = 1875;
parameter BaudGeneratorInc = ((Baud<<(BaudGeneratorAccWidth-4))+(ClkFrequency>>5))/(ClkFrequency>>4);
 
reg [1:0] RxD_cnt;
reg RxD_bit;
reg [BaudGeneratorAccWidth:0] BaudGeneratorAcc;
reg [1:0] RxD_sync;
reg [2:0] bit_spacing;
reg [3:0] state;
reg [7:0] RxD_data;
 
always @(posedge CLOCK_27)
  BaudGeneratorAcc <= BaudGeneratorAcc[BaudGeneratorAccWidth-1:0] + BaudGeneratorInc;
 
wire BaudTick = BaudGeneratorAcc[BaudGeneratorAccWidth];
 
 
always @(posedge CLOCK_27)  
 if(BaudTick)  
  RxD_sync <= {RxD_sync[0], UART_RXD};
   
 
 
always @(posedge CLOCK_27)
if(BaudTick)
begin
  if(RxD_sync[1] && RxD_cnt!=2'b11) RxD_cnt <= RxD_cnt + 1;
  else
  if(~RxD_sync[1] && RxD_cnt!=2'b00) RxD_cnt <= RxD_cnt - 1;
 
  if(RxD_cnt==2'b00) RxD_bit <= 0;
  else
  if(RxD_cnt==2'b11) RxD_bit <= 1;
end
 
 
 
always @(posedge CLOCK_27)
if(state==0)
  bit_spacing <= 0;
else
if(BaudTick)
  bit_spacing <= bit_spacing + 1;
 
wire next_bit = (bit_spacing==7);
 
always @(posedge CLOCK_27)
if(BaudTick)
case(state)
  4'b0000: if(~RxD_bit) state <= 4'b1000; // start bit found?
  4'b1000: if(next_bit) state <= 4'b1001; // bit 0
  4'b1001: if(next_bit) state <= 4'b1010; // bit 1
  4'b1010: if(next_bit) state <= 4'b1011; // bit 2
  4'b1011: if(next_bit) state <= 4'b1100; // bit 3
  4'b1100: if(next_bit) state <= 4'b1101; // bit 4
  4'b1101: if(next_bit) state <= 4'b1110; // bit 5
  4'b1110: if(next_bit) state <= 4'b1111; // bit 6
  4'b1111: if(next_bit) state <= 4'b0001; // bit 7
  4'b0001: if(next_bit) state <= 4'b0000; // stop bit
  default: state <= 4'b0000;
endcase
 
always @(posedge CLOCK_27)  
 if(BaudTick && next_bit && state[3])  
  RxD_data <= {RxD_bit, RxD_data[7:1]};
   
   
endmodule
 
 
 
 
CLOCK_27 est l’horloge de ma carte que je souhaite utilisé, UART_RXD est l’entrée de ma carte où arrive la trame envoyé par ma liaison série, et RxD_data doit contenir le mot que j’ai envoyé a partir de mon PC.
Voilà j’espère que j’ai été assez clair. Si quelqu’un peut m’aider, j’en serais ravi.
Merci.
A bientôt j’espère.  

mood
Publicité
Posté le 28-11-2009 à 12:05:43  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Problème de gestion de la liaison série RS232 en VHDL

 

Sujets relatifs
(resolu) Problème de positionnement d'un bouton CSSProblème activation javascript
Problème d'administration avec site professionnelProblème lien FTP
Problème requete SQL : double et différent[SAS] Problème SYMGET dans macro
Probleme requetePerl [Modification d'un programme existant] Probleme avec If
Probleme de config Apache avec FirebirdProblème de connexion avec le serveur MySQL
Plus de sujets relatifs à : Problème de gestion de la liaison série RS232 en VHDL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR