Étape 2: Composants du circuit
Concevoir les composants :
Afin de mettre en œuvre un synthétiseur sur la carte Nexys 2 FPGA, plusieurs éléments doivent être conçues. Commençant par les sorties, modules devront gérer la mise en marche de la LED et la sortie des fonctions d’onde carrées à l’orateur. Il faudra également modules debounce entrées et générer une impulsion d’horloge unique à partir d’un bouton. Enfin, les modules tels que compteurs, tongs et multiplexeurs seront nécessaires pour gérer la logique restante de stocker des notes et la lecture des séquences correctement.
La liste suivante contient une brève description de ce que fait chaque composant dans ce projet, comment chaque composant est utilisé et comment implémenter ces composants en VHDL :
Bouton Activer/désactiver : Dans le cas de la touche play/pause, nous voulons basculer entre deux États exactement une fois lorsque le bouton est enfoncé. Pour ce faire, nous utilisons une machine d’état fini (FSM). De cette façon, après la transition entre les États une fois, le circuit de bouton bascule ne permettra pas une autre transition d’état de se produire tant que le bouton a été libéré et puis appuie à nouveau sur. Un schéma représentant cette FSM est donné ci-dessus.
La machine d’état fini contient deux États pour chaque sortie possible. Commençant en haut du diagramme FSM, le circuit est dans l’état de pause. Dès que le bouton est enfoncé, le circuit est versés à l’état de jouer. Il restera dans ce premier État de jouer jusqu'à ce que le bouton est relâché. Maintenant, le circuit est encore à l’état de jouer, mais il est prêt pour le bouton à presser à nouveau faire la transition vers l’état de pause. De même, le circuit attendra une fois de plus le bouton être libéré avant qu’il soit prêt à passer à l’état de jouer.
Diviseur d’horloge : Le circuit diviseur d’horloge convertit simplement la fréquence de 50 MHz du Nexys 2 à une fréquence beaucoup plus faible. Cela sert à régler le BPM (battements par minute) du synthétiseur. Dans ce projet, nous utilisons un module VHDL, écrit par Bryan Mealy de California Polytechnic State University, San Luis Obispo.
Counter : Un compteur affiche simplement un nombre binaire. Lors de son entrée est élevée, cela augmente ce nombre par 1 sur le front montant d’horloge. Les compteurs utilisés dans ce circuit utilise T tongs pour stocker un numéro 3 bits. Chaque flip-flop représente un bit étant stocké. Le flip-flop, ce qui représente le bit le moins significatif fait alterner chaque fois que le compteur est censé pour augmenter. Les autres bascules vont basculer lorsque tous les bits en dessous d’eux sont égaux à un. Ce comportement sera également faire en sorte lorsque le compteur atteint la plus haute 111(binary) numéro, possible, il va retourner à zéro alors incrémenté suivant.
Dans ce projet, un compteur est utilisé pour suivre le rythme actuel afin que l’orateur sait quel ton de jouer, et donc la bonne LED peut être allumée. Un compteur est également utilisé pour suivre le ton actuel qui peut être entré par l’utilisateur.
Debouncer : Les boutons poussoirs sur la Nexys 2 FPGA board ne sont pas parfaits. Idéalement, lorsque vous appuyez sur les contacts seraient toucher une seule fois, puis rester ensemble jusqu'à ce que le bouton est relâché. En réalité, les contacts ont tendance à « rebondir » plusieurs fois, en ce que lorsque vous appuyez sur le bouton contacts viendra dans et hors de contact plusieurs fois avant de le coller. En ce qui concerne notre synthétiseur, cela pourrait conduire à un bouton play/pause qui passe entre les deux États plusieurs fois lorsque le bouton est enfoncé et n’est pas garanti pour atterrir sur la bonne paire. Pour contrer cela, un circuit debounce attendra pendant un certain laps de temps pour l’entrée à « s’installer ».
Dans ce projet, nous avons utilisé un module VHDL rédigé par Scott Larson de Digi-key, publié initialement sur le wiki de Digi-key EE.
Générateur d’impulsion : Les compteurs utilisés dans ce projet seront incrémenté avec une certaine fréquence d’horloge tant elles sont activées. Pour certaines fonctions, telles que l’incrémentation la fréquence lorsque vous appuyez sur le bouton pour changer le ton actuel, nous pourrions vouloir incrémenter un compteur qu’une seule fois à chaque pression de touche. Cela consiste à tirer une entrée et convertissant en une impulsion d’une durée de cycle d’horloge exactement. Le circuit de générateur d’impulsion se répétera. Quand son entrée va haut, sa production va élevée pour cycle d’horloge exactement. Ceci est accompli en garder la trace de l’entrée actuelle pour un front montant donné d’horloge, ainsi que l’entrée précédente pour le dernier front montant d’horloge. Dans le cas où l’intensité absorbée est élevée et l’entrée précédente est faible, le rendement est élevé. Dans le cas contraire, la sortie est faible. En VHDL, ceci est accompli en utilisant un modèle comportemental. Un bloc de processus vérifie les valeurs de valeur d’entrée incr et l' entrée précédente incr_prev sur le front montant de l’horloge. Si incr figure parmi de incr_prev est égale à zéro, la sortie q a la valeur on. Dans le cas contraire, q est définie à zéro. Enfin, incr_prev obtient la valeur de incr.
sseg_dec : Ce circuit prend un fichier binaire avec jusqu'à huit bits d’entrée et l’affiche comme un nombre décimal sur l’afficheur 7 segments de Nexys2. Dans ce projet, nous utilisons un module VHDL, écrit par Bryan Mealy de California Polytechnic State University, San Luis Obispo.
Carré générateur d’ondes : Ce composant génère un signal carré, basé sur une entrée de 3 bits. Il le fait en divisant le signal d’horloge d’entrée par un nombre spécifique d’atteindre la fréquence désirée. La sortie est alors activée ou désactivée selon cette fréquence. Il y a sept fréquences prédéterminées, issus de la gamme pentatonique, qui représente les notes de A4 à C6. Les fréquences pour ces tons vont de 440 Hz à 1046,5 Hz. Si l’entrée est 000(binary), aucun signal carré n’est joué.