Hello,
Depuis quelques jours je réfléchi à un projet : une carte graphique en mode texte pour Arduino (ou autre µC).
Il y a la solution de la facilité : faire ça sur FPGA, mais j'ai envie de faire ça avec des "composants basiques" (portes logiques et quelques CI plus évolués type FIFO ou ROM).
Ça devrait me permettre d'apprendre un peu l'électronique et surement de repérer quelques trucs à faire (ou à ne pas faire) pour plus tard quand je bosserai sur FPGA.
Je vais utiliser une sortie VGA avec une résolution de 640x480, en utilisant une police monospaced de taille 8x15. Ça me donne 32 lignes de 80 caractères, soit 2560 caractères à l'écran.
J'utilise des couleurs 8 bits (R3 G3 B2).
Chaque caractère fait donc 120 bits et est codé sur 7 bits (128 caractères différents possibles, code ASCII) -> avec 2Ko de ROM je peux stocker ma font.
Le fonctionnement basique serait :
10 IOs :
* (sortie) sync_signal : indique qu'une frame commence au front montant : on peut commencer à envoyer les données de la frame suivante
* (entrée) char_clk : indique que data_00 ~ data_07 sont valides lors d'un front montant
* (entrée) data_00 : caractère ou couleur / lsb
* ...
* (entrée) data_07 : caractère ou couleur / msb (0 pour caractère)
Niveau communication, je vois ça comme ça :
7680 cycles d'horloge par frame, avec 60 frame/seconde ça donne 460.8kHz : c'est facilement atteignable avec un Arduino.
Et niveau logique, quelque chose du genre (une bonne partie reste à faire, mais j'espère que l'idée principale est compréhensible).
(les 3.125 MHz viennent du fait qu'on lit 8 octets tous les 8 cycles : 25 MHz / 8)
Ça vous semble fonctionnel ?
Vu le nombre de CI existants, il y a des références à préférer ? Certaines qui sont connues pour fonctionner à ces fréquences (jusqu'a 25 MHz) ?
La série 74HC (7400HC ?) semble correspondre pour les portes logiques / compteurs / probablement mux aussi.
Par contre niveau DCFIFO / ROM / bascules D (ou SRAM (dual ported), vu que 1920 bascules D ... ça prend trop de place ) je trouve pas dans la série 74HC, ça éxiste ? Une autre série à me conseiller ?
(C'est trop tôt pour ça ?)
Sinon, en attendant de finir la logique, je commence à simuler ça sur LTspice, et je commence par le commencement : générer une horloge.
Je suis arrivé à 2 schémas qui semblent marcher (du moins en simulation), l'un des deux est-il préférable ? (La fréquence est pour l'instant assez aléatoire, je me bat pour faire osciller le truc, régler la fréquence viendra après).
http://i.imgur.com/7krbzN4.png
http://i.imgur.com/djPXmFa.png
Partager