problème de VHDL[resolu, merci à tous !]

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

christian
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 08 mai 2007 14:14

problème de VHDL[resolu, merci à tous !]

Message par christian »

Bonjour à tous :o
Je préfère prévenir: j'ai eu droit cette année à une courte initiation au VHDL (en gros, on nous a dit qu'il y avait entity, architecture et CASE WHEN ELSE etc :lol: )
Alors excusez moi si mes questions vous semblent ridicules :oops:

Voici mon problème: écrire un programme simulant le fonctionnement d'une bascule D, ça ne me pose aucun problème. Mais là, j'ai 8 bascules qui se suivent. Je vous mets le lien vers ce montage.
http://img214.imageshack.us/img214/9850 ... iresv1.png

Je dois écrire un programme VHDL permettant de simuler ce circuit. Alors j'ai tout de suite pensé à regrouper les différentes entrées D et Q dans des vecteurs d et q. (des vecteurs de bits quoi)
Et là, premier souci: comment faire pour prendre par exemple le cinquième élément du vecteur d? Car je veux manipuler des bits, pas des vecteurs...
On me dit d'utiliser la commande sll.
Je me dis que c'est cette commande qui va servir donc j'ai fait des recherches et sur un programme VHDL, j'ai trouvé cette syntaxe:

sll(arg1, arg2) où arg1 est un vecteur de arg2 un entier.

Alors si je dis sll(d,5), est-ce que ça veut bien dire que je prends le 5ème élément du vecteur d?
Je préfère demander parce qu'en même temps, ça parle de décalage et j'ai absolument rien compris... :oops:

Ensuite, j'ai d'autres questions:

1) avec une bascule, il n'y a aucune ambiguité: D est une entrée, Q une sortie.
Mais là, j'ai des doutes parce que l'on calcule bien les D suivants dans le montage ci dessus, non? Donc on ne peut pas dire que les D soient des bits d'entrée...
(si je commence à douter sur entity, je suis mal barré :oops: ). Je dois quand même dire que d sera un "in bit_vector(8 down to 0)" ? ça me semble bizarre...donc si quelqu'un peut m'éclairer :)

2) vous avez vu qu'au dessus des bascules, il y a 3 portes XNOR. Et je dois utiliser leurs 3 sorties. Je dois définir dans l'architecture des SIGNAL ou je dois le mettre dans entity (en tant que out bit dans ce cas :) ) ?

3) Est-ce qu'il existe un logiciel où je pourrais écrire mes programmes VHDL pour voir si ils marchent? (ça pourrait me servir pour mon prochain stage...)


S'il vous plait, aidez moi ! Je vous en supplie :cry:
Dernière modification par christian le 11 mai 2007 19:02, modifié 1 fois.

wqa

Message par wqa »

Salut,

pour acceder a un bit d'un vecteur, par exemple si t'as :

signal d : std_logic_vector(7 downto 0);

Tu fais :
d(3)

pour avoir le bit 3, ou d(0) pr le bit 0, etc...

C'est bien ça ta question?

wqa

Message par wqa »

Ha ouais.
En fait faut que tu fasses un seul vecteur, et à chaque front montant d'horloge tu fais un décalage à gauche ( ta commande ssl, mais verifie dans quel sens ca fait).
puis à chaque front montant d'horloge tu recuperes comme je t'ai dit les bits qui t'interesse (pour rentrer ds tes xor, ou pour sortir).
Donc si ssl fait un decalage à gauche, ta sortie sera le bit de poid fort.

christian
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 08 mai 2007 14:14

Message par christian »

merci pour ces réponses :)
Alors pour les d(5) et cie, j'y avais pas du tout pensé alors que c'est tout bête :oops:

Donc le sll est bien un décalage...
Mais dans ce cas, j'ai du mal à comprendre la logique :oops:
Imaginons que dans l'entity, j'ai défini d, q etc... (d'ailleurs, j'ai toujours du mal à comprendre si le vecteur d est une entrée, sachant que certains éléments de d sont "calculés" dans le programme...)

dans l'architecture, je fais un process:
PROCESS (CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
d<=sll(d,1);
q<=sll(q,1);
--en supposant que c'est du décalage à droite
q(0)<=d(0);
--ensuite, le calcul de s1, s2, s3 (les 3 sorties des XNOR)


Alors mes problèmes:
--> déjà, s3 correspond à l'entrée de la première bascule alors comment puis-je faire pour écrire l'affectation (idéalement, d(0)<=s3) sachant que je décale d à chaque fois?
Idem pour s1 et s2: sans le moindre décalage, je me sers de q(3), q(4), q(5) et q(7) (qui est aussi la sortie). Mais qu'en est-il après un décalage d'un rang vers la droite de q? ça a bien changé, non? Ce sera q(2), q(3), q(4), q(6).
Donc il faut aussi changer les éléments du vecteur qui interviennent dans les XNOR. Est-ce qu'il faut que je définisse à part un d1 et un q1 auxquels j'aurai appliqué un décalage à gauche pour retomber sur les bons indices? Ou il y a beaucoup plus simple?


--> A chaque front montant du CLK, on ne fait qu'un seul calcul de recopiage de l'entrée de la bascule vers sa sortie? Supposons qu'on a déjà eu deux fronts montants, donc la sortie de la deuxième bascule est déterminée.
Le programme permet quand même de travailler avec la sortie de la quatrième bascule quand même? Parce qu'on l'a toujours pas calculée :?


Merci de répondre à ces questions existentielles (enfin elles m'empêchent de dormir :cry: )



EDIT: problème résolu :o
Merci à toi wqa :-D

zodiac

Message par zodiac »

salut
tu px stp poster la solution j'ai le meme prob
j'ai un octet et je vx l'envoyer bit par bit a chaque frant d'horloge merci !

Répondre