14_TP9_NCO megaf - Document sans nom

Transcription

14_TP9_NCO megaf - Document sans nom
Etude d’un oscillateur à contrôle numérique, partie 2 :
synthèse par une « méga-fonction » de Quartus II
Quartus propose un certain nombre d’ « IP » (Intellectual Properties) réalisant des fonctions évoluées
(filtres numériques, microcontrôleurs etc..) désignées sous le nom de « MegaCore functions »
Après avoir synthétisé un oscillateur numérique contrôlé à partir d’additionneur et registre lors de la
séance précédente, nous allons maintenant utiliser une IP synthétisant la globalité du composant.
Ces IP ne sont cependant accessibles que sous certaines conditions de licence ; il est donc
nécessaire de vérifier ce point avant toute chose, on consultera pour cela l’annexe 1
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 :
Denis Rabasté
1/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
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 ;
il est possible d’agrandir une zone en dessinant dessus un carré avec la souris (bouton gauche
enfoncé) et de revenir à la pleine échelle par un clic droit.
La phase 2 n’a d’intérêt que pour des simulations particulières, passer directement à la génération de
la fonction :
Denis Rabasté
2/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
La génération de la fonction prend quelques secondes, cliquer ensuite sur « Exit », puis « Yes » puis
« OK ».
Placer ensuite le symbole créé dans la page, puis compléter les entrées sorties :
NCO
phi_inc[7..0]
clk
reset
clk_en
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUT
VCC
phi_inc_i[7..0]
clk
reset_n
clken
fsin_o[9..0]
out_valid
OUTPUT
OUTPUT
fsin[9..0]
out_valid
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… » :
Denis Rabasté
3/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
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.
Parameter Value
Type
N
10
Signed Integer
CP2_BD
NCO
lpm_constant0
2
inst2
8
VCC
phi_inc_i[7..0]
clk
reset_n
clken
CLOCK_50
Clk
DIN[n-1..0]
fsin_o[9..0]
out_valid
DOUT[n-1..0]
inst7
inst
OUTPUT
LEDG[8]
OUTPUT
VGA_CLOCK
OUTPUT
VGA_SYNC
OUTPUT
VGA_BLANK
PIN_Y12
INPUT
VCC
CLOCK_50
PIN_N2
VCC
PIN_B8
OUTPUT
VGA_R[9..0]
PIN_C8
PIN_F10
PIN_G10
PIN_D9
PIN_C9
PIN_A8
PIN_H11
PIN_H12
PIN_F11
PIN_E10
PIN_B7
PIN_D6
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
Files » dans l’onglet « Types de fichiers » du navigateur.
L’assignation se fait alors simplement par « Assignments / Import Assignments » en précisant la
localisation de DE2_pins_assignments.csv.
On pourra également, afin d’éviter que les DELs inutilisées ne s’allument, préciser que les entréessorties non utilisées du FPGA doivent être misent en haute impédances par :
Denis Rabasté
4/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
« Assignments / Settings / Device / Device and Pins Options / Unused Pins »
« Reserve All Unused Pin : As Input Tristated ».
puis
Proposer et tester un programme synthétisant le convertisseur CP2/BD, puis compiler le projet
complet. En cas de difficultés, une solution possible est donnée en annexe, ainsi que dans le
répertoire ressource.
Programmer ensuite le circuit cible ; on vérifie bien à l’oscilloscope (borne 1 en haut à droite, du
connecteur VGA) que la sinusoïde a une fréquence de 390 kHz, soit phi_inc . fclk/28 = 2 x 50 MHz/ 28
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.
Denis Rabasté
5/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
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).
1
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
generic (N : integer :=10);
port
(
Clk
DIN
DOUT
end CP2_BD;
Denis Rabasté
: in std_logic ;
: in std_logic_vector (N-1 downto 0);
: out std_logic_vector (N-1 downto 0));
6/7
IUFM Aix-Marseille
Mégafonction sous Quartus II
architecture arch of CP2_BD is
-- la conversion CP2 vers BD consiste à inverser le MSB
begin
process (Clk)
begin
if (Clk'event and Clk = '1') then
DOUT(N-2 downto 0)<=DIN(N-2 downto 0);
DOUT(N-1)<= not DIN(N-1);
end if;
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 ».
Denis Rabasté
7/7
IUFM Aix-Marseille