Verilog signé / non signé échantillons et les premières
En supposant que j'ai un registre reg [15:0] my_reg
, qui contient 16 bits signé exemple:
Comment puis-je convertir l'échantillon signé non signé?
J'ai lu cet article de Wikipédia, et je suis conscient de l'2 bits complément pour les nombres signés, mais comment dois-je effectuer cette conversion en Verilog efficacement?
(Je ne sais pas si my_reg
est positif ou negatve, et elle change à chaque cycle d'horloge = je reçois un nouvel échantillon sur chaque positive de l'horloge de bord).
Le but ultime (pour ajouter un peu de contexte) est de mettre en œuvre un numérique FPGA intégré de contrôle automatique de gain (AGC).
EDIT: comme l'a suggéré, j'ai divisé les deux questions dans deux différents postes. Voir l'autre ici
pas exactement, comme je veux être en mesure de différence de valeurs positives et négatives. Je pense que, en valeur absolue, ne va pas aider. Dire que j'ai des valeurs de -10 à 10, je veux juste une carte à 0 à 20.
OriginalL'auteur titus.andronicus | 2014-06-11
Vous devez vous connecter pour publier un commentaire.
En Verilog reg contient des données binaires, signé unsigned sont juste une question d'interprétation. Les valeurs des bits restent les mêmes, la soustraction et l'addition sont toujours effectuées à l'aide de complément à deux.
Par exemple, nous pouvons regarder les 4 bits de la valeur et de voir comment les chiffres peuvent être interprétés:
Je pense que vous voulez calibrer ces numéros sur le positif de l'échelle, -8 devient 0, 0 devient 8, 7 devient 15. Cela serait fait par ajoutant 1 à l'ESM position. Dans nos 4 bits exemple:
Il y a quelques questions étroitement liées:
1. Verilog: comment prendre la valeur absolue.
2. Verilog Construction de Complément à Deux de Comparaison.
Si votre registre vraiment ne contiennent des informations signées puis sémantiquement vous devez définir comme :
De la valeur absolue:
Si vous n'avez pas besoin d'absolu, mais voulez juste utiliser le numéro de lecteur quelque chose, c'est valide il suffit de connecter signé pour un entier non signé, c'est à dire:
Cela va copier les valeurs des bits,
my_reg_unsigned
peut être interprété comme signé à l'aide de$signed(my_reg_unsigned)
< <= >= >
viennent à l'esprit. Vous avez déjà dit l'addition et la soustraction de rester le même. Qu'en est multiplicateurs? Et est unaire-
même permis sur unsigned fils/registres?tous les travaux naturellement sur unsigned et des nombres signés. unaire ~ effectue un peu sage inverser (complément) , c'est à dire ne se soucie pas de signe. Unaire - effectue un complément à deux inverser +1, il ne se soucie pas de l'signé ness de l'entrée. Les seules fonctions qui viennent à l'esprit sont des comparaisons > >= <= < la multiplication et la diviser
OriginalL'auteur Morgan