Étape 5: Sortie - Contrôleur HDMI partie 2
Assez de théorie, permet d’obtenir à notre projet. Alors que dans le contrôleur VGA, nous partîmes avec une horloge de 148,5 MHz, ici nous allons devoir fournir 10 fois cette fréquence parce que nous voulons transmettre 8 bits pour chaque couleur et en utilisant le 8 b/10 b, ce qui se traduit par 10 bits par pixel et 10 * 148,5 MHz = 1 485 MHz. C’est une fréquence énorme qui ne peut être obtenue sur le plateau de Zybo. Heureusement, nous avons obtenu quelques trucs dans notre sac. Nous pouvons gérer 5 * 148,5 MHz = 742,5 MHz et nous allons utiliser une adresse IP OSERDES (sérialiseur) pour transmettre les données à la fois sur le bord de fronts montants et descendants de l’horloge de 742,5 Mhz, alors nous aurons effectivement des données transmises à 1485 MHz. Vivado nous donnera des avertissements de synchronisation et vous pouvez toujours opter pour une résolution inférieure avec une horloge plus petite, mais depuis ça marche , nous avons vraiment il ne me dérange pas pour l’instant (les avertissements sont liées au fait que les tampons d’horloge ne supportent pas officiellement les fréquences supérieure à 464MHz).
Donc ce que nous devons faire, c’est pour coder les données de notre sortie de contrôleur VGA au format 8 b/10 b et puis de le sérialiser comme mentionné ci-dessus. Nous aurons également besoin d’ajouter un autre MMCM au projet pour générer l’horloge 742,5 MHz pour la sérialisation.
J’ai joint ci-dessous les fichiers vhdl pour le codeur et le sérialiseur. Vous devez tout d’abord coder les couches RVB et puis feuilleton eux.
Exemple pour le canal rouge :
TMDS_encoder_RED : TMDS_encoder
carte de port (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits) ;
Serialiser_RED : Serialiser10_1
carte de port (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit) ;
L’entrée « c » de le TMDS_encoder est « 00 » pour rouge et vert et « vsync & hsync » bleu (cela fait partie de la spécification de DVI http://goo.gl/hhh8Ge ).