ASCII de conversion d'Entier en Verilog
J'ai une séquence de caractères ASCII qui arrivent de manière séquentielle à partir d'un UART. Je veux convertir du code ASCII à l'représenté entiers. Par exemple, je reçois 123
qui est { 8'h31, 8'h32, 8'h33 }
et je veux le convertir en 8'h7B
. Quelqu'un peut-il fournir de l'aide?
Pour chaque personnage, il faut soustraire le ascii pour
0
( qui est " h30), puis le multiplier par le lieu ( 1,10,100, etc) et l'ajouter à un accumulateur.OriginalL'auteur LogicalUnit | 2012-06-11
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous posez sur synthesizable RTL pour convertir une séquence d'ASCII caractères codés sur un nombre correspondant. Si oui, il y a généralement deux façons de faire cela de manière séquentielle traiter le flux et convertir chaque entrée dans un fichier binaire, plusieurs valeur accumulée par dix, et ajouter le nombre actuel. Cependant, cette méthode est très lente. Si vous avez tous de l'entrée à portée de main, vous pouvez tout simplement utiliser une table de recherche pour convertir l'entrée de la "corde" dans un nombre binaire. Ci-dessous est un exemple que j'ai esquissé quelques temps en arrière:
Vous pouvez trouver plus de détails (synthesizable) des implémentations pour les deux méthodes avec un banc d'essai, les formes d'onde et même quelques exemples de logiciel dans mon ASCII de l'Horreur, de la Chaîne de Conversion en Binaire article.
Espère que cela aide. Bonne Chance!
OriginalL'auteur
Si votre compilateur prend en charge SystemVerilog, vous pouvez utiliser la fonction atoi:
Sinon, vous devez écrire votre propre fonction atoi à l'aide d'une méthode similaire à Ross suggestion.
OriginalL'auteur Ari
Voici un petit exemple de code:
Tout d'abord, un exemple pour créer un octet tableau dynamique à partir d'une chaîne.
La dynamique de tableau d'octets contient le CODE ASCII numéro de la représentation de chaque personnage.
L'avantage est que la dynamique tableau d'octets peut être randomisés mais chaînes ne peuvent pas être randomisés.
(créé en faisant par exemple
).
Voici l'exemple pour convertir le tableau dynamique d'octets de retour dans une chaîne concaténée.
Vous avez peut-être utilisé le précédent tableau dynamique à être en partie randomisés (avec contraintes) à l'intérieur d'un xfer ou modifiée dans post_randomize.
Si vous souhaitez plus d'informations sur les chaînes je vous recommande de lire l'article 3.7 du SystemVerilog 3.1 un Manuel de Référence de Langage (LRM) Accellera les Extensions de Verilog.
C'est sur la chaîne des types de données et d'expliquer les méthodes utilisées avec les types de données chaîne.
Vous pouvez également trouver des informations en vertu de l'article 6.16 de la Norme SystemVerilog—Matériel Unifiée de la Conception, la Spécification et la Vérification de la Langue/IEEE Std 1800™-2012. Sans doute, l'explication plus détaillée que dans la GRJ.
Salut Ray, vous pointez à la norme IEEE SV document standard. Je faisais allusion à la LRM de Accelera. J'ai mis à jour mon post pour préciser à la fois des références. Merci
OriginalL'auteur Joniale