1 Description du projet
Afin de tester la mégafonction NCO, nous allons implanter un oscillateur numérique le plus simple possible au sein de notre projet.
Ouvrir un nouveau projet avec les méthodes habituelles, pour le circuit cible de la carte DE2, le FPGA EP35F672C6 par « File » « New Project Wizard… » :
Ouvrir une feuille de description graphique au sein de ce projet, par « File » « New… » : Insérer un nouveau symbole (clic droit dans la feuille puis « Insert… » « Symbol ») :
Rechercher la Mégafonction « NCOv9.1 », la sélectionner et donner un nom à l’instance que nous allons créer :
La fenêtre suivante s’ouvre alors au bout de quelques secondes :
Une documentation, sous forme pdf est accessible, ainsi que différentes phases de paramétrage.
Ouvrons la phase 1 (Step 1) :
Imposons une architecture en ROM (tous les angles sont stockés en mémoire) avec 28 (Angular Resolution) mots de 10 bits en sortie (Magnitude Précision), le calcul de l’adresse se faisant aussi sur 8 bits (Phase Accumulator Précision).
La relation de la fréquence de sortie est donnée, comme nous l’avons vu lors de la séance précédente, par :
Fo=phi_inc . fclk/28
où phi_inc est appelé dans cette description « incrément de phase » et fclk la fréquence d’horloge.
Imposer pour l’instant une seule sortie et pas d’entrée de modulation :
Le chronogramme et spectrogramme de cette fenêtre évoluent avec la configuration des paramètres ;
inst
Effectuer une analyse et synthèse par « Start Analysis & Synthesis ».
2 La simulation
Ouvrir un nouveau fichier de chronogrammes pour la simulation par « File » « New… » :
Placer les entrées sorties par la méthode habituelle, imposer une simulation sur 20 µs avec un pas de 20 ns.
Imposer une incrémentation de phi_inc tous les 2 µs par exemple.
Les amplitudes du signal de sortie en ROM étant codées en complément à 2,imposer une représentation décimale signée pour fsin (sélectionner le chronogramme puis « Properties »).
On obtient alors le chronogramme suivant, sur lequel on vérifie bien que si l’incrément de phase vaut 1, la fréquence de sortie vaut environ 200 kHz (195,3 exactement), puis le double pour un incrément de 2 etc…
3 Modification du paramétrage de la mégafonction
Lorsque l’on doit modifier le paramétrage de la Mégafonction (nombre de bits, de sorties etc…), on accède aux paramétrages par un double clic sur le composant ; il faut ensuite mettre à jour le symbole dans le fichier graphique : clic droit dans la page puis « Update Symbol or Blocks… » :
Penser ensuite à ajuster les dimensions des bus d’entrée et sortie si nécessaire.
4 Programmation du circuit cible de la carte DE2
Afin de tester le projet et de visualiser le signal à l’oscilloscope, nous allons envoyer les sorties vers le triple convertisseur numérique analogique vidéo ADV7123 intégré sur la carte DE2. On trouvera dans les annexes de la séance précédente une description succincte de ce circuit (documentation complète dans les documents ressources), ainsi que le brochage de l’implantation sur la carte.
PIN_B7 VGA_SYNC
OUT PUT
PIN_D6 VGA_BLANK OUT PUT
PIN_B8 VGA_CLOCK OUT PUT
PIN_C8 PIN_F10 PIN_G10 PIN_D9 PIN_C9 PIN_A8 PIN_H11 PIN_H12 PIN_F11 PIN_E10
VGA_R[9..0]
OUT PUT phi_inc_i[7..0]
clk reset_n clken
fsin_o[9..0]
out_valid NCO
inst VCC 28
lpm_constant0
inst2
VCC
N 10 Signed Integer Parameter Value Type
Clk DIN[n-1..0]
DOUT[n-1..0]
CP2_BD
inst7
CLOCK_50 INPUTVCC PIN_N2
LEDG[8]
OUT PUT
PIN_Y12 CLOCK_50
La sortie de la ROM étant en complément à 2 et l’entrée du CNA nécessitant du binaire décalé, une conversion est réalisée le bloc « CP2_BD » écrit en VHDL
La sortie du convertisseur est envoyée sur l’entrée numérique de la « voie rouge » du convertisseur numérique analogique vidéo, la sortie « VGA_R » du CNA étant disponible sur la borne 1 du connecteur VGA de la carte DE2 (voir annexes) ;
Le CNA nécessite un signal d’horloge pour fonctionner (utilisation de l’horloge à 50 MHz de la carte DE2), ainsi que la mise aux niveaux logique 1 de ses entrées « VGA_blank » et « VGA_sync ».
La sortie « Out_valid » du NCO est envoyée sur la DEL verte se trouvant entre les afficheurs 7 segments.
L’entré « phi_inc » est imposée à la valeur 2 (fréquence de sortie Fo=phi_inc . fclk/28
= 2 x 50 MHz/ 28 soit 390 kHz), par le symbole « lpp_constant » de la bibliothèque
« ‘megafuctions \ gates »).
Afin de simplifier l’assignation de broche, on utilisera les noms donnés par le constructeur de la carte, définit dans le fichier DE2_pins_assignments.csv présent dans les documents ressources (ou sur le CD de la carte DE2). Ce fichier peut s’ouvrir dans Quartus par « Open / File… » en précisant « All
pour une amplitude crête à crête de 1,36 V, ce qui correspond à l’amplitude de courant maximale en sortie de CNA ADV7123 de 18,67 mA dans la résistance de 75 Ω qui charge la sortie.
4.1 Modulateur numérique
En vous inspirant des projets synthétisés lors de la première partie, proposer un montage permettant de mettre en œuvre une modulation à déplacement de fréquence, puis à déplacement de phase, puis à déplacement d’amplitude.
Annexe 1 : vérification de la licence
Ouvrir Quartus II et vérifier par « Tools » puis « Licence Setup… » que l’accès aux « MégaCore functions » est possible :
- la clé matérielle doit avoir été placée dans le port parallèle ou USB selon le type de clé ; - le fichier licence doit avoir été déclaré (1) ;
- les « MegaCore functions » sont alors disponibles (2).
La licence des Mégafonctions est libre le temps du prototypage : le FPGA programmé fonctionne tant qu’il est relié à l’ordinateur de programmation et une heure en étant déconnecté.
Annexe 2 : réalisation du convertisseur complément à 2 binaire décalé
Pour réaliser cette opération, il suffit simplement d’inverser le bit de poids fort :
library ieee;
use ieee.std_logic_1164.all;
-- ce programme permet de passer de DIN codé en complément à 2 -- à DOUT codé en binaire décalé
entity CP2_BD is
1
2
end process;
END arch;
Les simulations suivantes montrent la conversion pour des nombre négatifs en DIN, puis positifs, puis pour une représentation analogique :
Le format (« radix » accessible par clic droit puis propriétés) de DIN doit être « signed decimal » et celui de DOUT « unsigned decimal ».