mercredi 18 juillet 2007

Réalisation d'un transcodeur binaire-BCD 8 bit :

Afin d'exploiter pleinement les deux afficheurs 7-segments de la carte de développement FPGA, j'ai besoin d'un décodeur binaire-BCD 8 bit. Couplé à un convertisseur "BCD to 7seg" du type 74248, il me permettra d'afficher des nombres décimaux allant de 00 à 99 en utilisant les deux digits.

Dans un premier temps j'ai cherché bloc tout-fait mais la bibliothèque max-plus d'Altera n'offre que des convertisseurs acceptant des binaires sur 5 bit (par exemple le 74185).

L'idéal était donc de le créer mon propre bloc et l'ajouter dans le design. En BCD les 4 bits de poids faible codent les unitées etque les 4 bits de poids fort codent les unités. L'algorithme à suivre pour réaliser la conversion est donc assez simple :

- convertir le nombre binaire entrant en entier,
- faire la division euclidienne par 10,
- convertir le reste et le résultat en binaire sur 4 bits,
- sortir le résultat d'un coté et le reste de l'autre.

En fait pour simplifier le code VHDL du bloc, on va réaliser une table de comparaison à l'aide d'une structure du type "case" :

case (nb_binaire) is
when "00000000"=>
nb_BCD1 <= "0000"; nb_BCD2 <= "0000"; when "00000001"=>
nb_BCD1 <= "0001"; nb_BCD2 <= "0000";

.....

Le code est très répétitif il peut donc être généré en partie par Matlab à l'aide du script suivant :

FileID = fopen('transcodeur.vhdl','w');
x=0;
for i=0:100
resultat=floor(x./10);
reste=mod(x,10);
fprintf(FileID, 'when "%s"=> \n\t nb_BCD1 <= "%s"; \n',dec2bin(x,8), dec2bin(reste,4));
fprintf(FileID, '\t nb_BCD2 <= "%s"; \n\n',dec2bin(resultat,4));
x=x+1;
end

fclose(FileID);





Une fois le code généré on crée un nouveau bloc (.bsf) dans Quartus et on l'ajoute au design existant (ici le bloc transcodeur.vhdl est ajouté dans le bloc dédié à l'affichage).

jeudi 12 juillet 2007

Utilisation des DACs de la carte de developpement STRATIX DSP



Le projet : Réaliser un banc de test mémoire permettant de mesurer différentes caractéristiques d'une mémoire (tension minmale d'alimentation, consommation, temps d'accès, etc...). Le système est implémenté sur une carte de développement FPGA : "STRATIX DSP DevKit ALTERA".

Le carte de dévelopemmet STRATIX DSP dispose de deux convertisseurs numériques analogiques. Pour les utiliser, il faut connecter les sorties du FPGA aux entrée logiques du convertisseur et également lui communiquer une horloge. Pour démarrer, nous allons réaliser un bloc commandé par les switchs DIP qui permet d'envoyer différents vecteurs sur les entrées de commande des CNAs :



Le combinaison des 4 switch d'entrée va nous permettre de choisir le vecteur de commande appliqué sur les broches du DAC.

Les pins correspondant aux différentes broches du DAC sont données dans la datasheet de la carte dans le rubrique "D/A Converters" (PIN_A21..PIN_B19) :





Il suffit donc de connecter les sorties du schéma bloc aux pins adéquates à l'aide de l' "Assignement Editor" (cf prise en main de QuartusII ). Pour communiquer le signal d'horloge, plusieurs solutions sont possibles : utiliser une PLL interne, récupérer le signal de l'oscillateur présent sur le carte (80 Mhz) et le transmettre à la broche de l'horloge du DAC (pour D/A1, PIN_AE15), [Remarque : il est parfois possible de cabler directement sur la carte l'oscillateur sur la broche d'horloge du convertisseur à l'aide des cavaliers. Ce n'est pas le cas pour les DAC sur cette carte.] Dans notre cas, une horloge interne (dérivée de l'ocsillateur externe) est déjà présente dans le système. On connectera donc cette horloge à la broche "clk" du DAC.

Commande d'une alimentation par DAC08C

Le projet : Réaliser un banc de test mémoire permettant de mesurer différentes caractéristiques d'une mémoire (tension minmale d'alimentation, consommation, temps d'accès, etc...). Le système est implémenté sur une carte de développement FPGA : "STRATIX DSP DevKit ALTERA".

Afin de sérialiser les tests, on se doit d'automatiser l'alimentation de la mémoire et commander la tension par l'intermédiare du système embarqué sur le FPGA.





La solution retenue consiste à commander des convertisseurs numériques/analogiques. Dans un premier temps j'ai cherché à utiliser un composant externe à la carte de developpement FPGA (un DAC 08C) en connectant des sorties logique aux entrées de contrôle (B1 à B8).
La carte dispose déjà de convertisseurs numériques/analogiques mais ce montage pourrait être retenu dans le cas ou l'on souhaiterait réaliser une carte de développement et se passer des périphériques présent sur la carte de développement ALTERA

Le shéma utlisé est le suivant :


Ce montage permet d'obtenir une tension de référence, mais il ne permet pas de fournir une centaine de mA et d'alimenter directement la mémoire. On doit amplifier le courant de sortie et effectuer une adaptation d'impédance. Pour cela on peut utiliser un montage à base d'un AOP ou de transistors NPN.


.

vendredi 6 juillet 2007

Exploitation d'un flux XML avec OpenLaszlo

OpenLaszlo est un superbe outil qui vous permet de générer des applications AJAX en Flash ou DHTML à partir d'une grammaire particulière assez simple d'accès basée sur XML (chaque code est encadré par "canvas" "/canvas" et est enregisté dans un fichier ".lzx". Les fichiers .lzx exécutés par le server (Tomcat/OpenLaszlo) sont visualisable par n'importe quel navigateur web compatible Flash ou DHTML.
RSS et ATOM sont des technologies que j'utilise tous les jours via Netvibes, mais que je ne connais pas en détail. Je vais donc esseyer de réaliser un mini-lecteur de flux RSS (très rudimentaire dans un premier temps) à l'aide de OpnLsz. Première étape préciser à OpnLsz quel fichier on utilise (ici le flux atom du blog de Freddy Mini, qui travaille chez... Netvibes !! ;) ) :

"
dataset name="flux" src="emini_blog.xml"/ " la balise " dataset .../ "

permet d'assoncier un "name" et un chemin "src". Ici le ficher est en local sur le serveur mais on peut imaginer mettre une adresse http://www.etc.. Ensuite on organise les données de façon sommaire : En précisant OpnLszo va directement sérialiser l'affichage des items. Inutile de faire de boucle "for". On récupère ici les informations portant sur :
- la date de publication,
- le titre,
- le contenu du post.


Le résultat obtenu mérite d'être remis en forme. On peut commencer par mettre l'ensemble dans un fenêtre à l'aide des balise " window " et " /window ". L'imbrication des " view " permttra d'afficher le résultat proprement en évitant les problèmes de superposition des éléments (les éléments déclarés les derniers sont au dessus et réciproquement).



<code>
<canvas>
<dataset name="flux"
request="true" type="http"
src="http://feeds.feedburner.com/emini_blog"/>
<view id="main">
<window id="content" width="950" height="450" x="10" y="10" resizable="true" title="Flux">
<view>
<simplelayout axis="y"/>
<view datapath="flux:/feed/entry">
<simplelayout axis="y"/>
<text datapath="published/text()" width="900"/>
<text datapath="title/text()" fontstyle="bold" fontsize="15" width="900"/>
<text datapath="content/text()" multiline="true" width="900" fontsize="12"/>
<text> <br></br> </text>
<text> <br></br> </text>
</view>
</view>
<scrollbar axis="y"/>
</window>
</view>
</canvas>
</code>







Pour lire un flux en ligne, il suffit de modifier le " dataset " : La grammaire XML de OpenLaszlo est assez intutive et elle permet d'avancer assez rapidement même en tatonnant. Le résultat obtenu est biensûr très sommaire (il faudrait au moins ajouter la sauvegardes des flux et la mise automatique et la comptibilité RSS dont la grammaire est différente de RSS) mais c'est une bonne base de départ. Tous les scripts peuvent être testés en ligne ici.

Mise à jour : c'est vraiement galère d'afficher du code dans blogspot. Le code de Laslo a été converti là : http://www.stanford.edu/~bsuter/js/convert.html .