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