Étape 5: Étape 5: créer le module supérieur
Suivez l’étape 4 pour ajouter un module supérieur. Ensuite, nous devons définir entrées et sorties qui se connectent à l’environnement extérieur. L’entrée seule est l’horloge de Basys 3. Il existe trois types de sortie, enable_Dx, cx et dp. L’enable_Dx est le pouvoir de chaque chiffre d’affichage 7 segments. Il y a 4 total dans Basys 3. Cependant, nous avons seulement besoin de 3. La cx est la connexion du segment. Dans chaque chiffre, il y a sept segments de ca au cg. Le dp est la virgule à l’écran. Nous n’avez pas besoin d’utiliser des dp dans le projet.
Entrée :
CLK / / master clock pour Basys 3
Sorties :
enable_D1, / / droite la plupart des chiffres
enable_D2
enable_D3,
enable_D4, / / gauche la plupart chiffre
ca, cb, cc, cd, ce, cf, cg / / segment de connexions
DP / / décimal
Nous devons également les variables suivantes pour instancier le diviseur d’horloge et de contrôler à quelle vitesse le chiffre est sur et en dehors. Elles sont toutes variables nets.
clkout1 ; signal interne pour la sortie d’horloge divisée
clkout2 ; signal interne pour la sortie d’horloge divisée
clkOut ; signal interne pour la sortie d’horloge divisée
Q0, Q1, Q2 ; signal interne pour la sortie du compteur
fil n, o, p ; signal interne pour contrôler la mise sous / hors de 3 chiffres
Ensuite, nous utilisons la fonction level porte au contrôle sur et hors le chiffre. Le chiffre est anode commune. La broche FPGA pour obtenir le chiffre est connectée en sortie, alors qu’une constante 3,3 v est fournie comme entrée dans la LED. Pour activer les chiffres, nous avons besoin piloter l’axe faible (peu actif). Vous trouverez les détails à Basys 3 Manuel de référence. Nous n’utilisons jamais laissé la plupart chiffre enable_D4, donc nous assigner à constant 1' b1. Ensuite, nous utilisons les et et pas porte fonction pour faire le chiffre sous et hors tension basée sur la clk générée à partir de clkdivider
assigner enable_D4 = 1' b1 ; désactiver la gauche de la plupart des chiffres qui est D4
et U1 (n, clkout2, clkout1) ; permet d’allumer ou d’éteindre le chiffre, alors que seulement un chiffre sur à la fois et porte
et U2 (o, clkout2, ~ clkout1) ; permet d’allumer ou d’éteindre le chiffre, alors que seulement un chiffre sur à la fois et porte
et U3 (p, ~ clkout2, clkout1) ; permet d’allumer ou d’éteindre le chiffre, alors que seulement un chiffre sur à la fois et porte
pas (enable_D1, n) ; n = clkout2 & clkout1, enable_D1 est faible (on) lorsque les deux clkout2 et clkout1 est élevée
pas (enable_D2, o) ; o = clkout2 & ~ clkout1, enable_D2 est faible (on) lorsque clkouut2 est élevée et clkcout1 est faible
pas (enable_D3, p) ; p = ~ clkout2 & clkout1, enable_D3 est faible (on) lorsque clkout2 est faible, et clkout1 est élevé
Après cela, nous décidons de la logique pour le segment de sept dans chaque chiffre. Idem qu’enable_Dx, cx est actif signal faible. Nous devons donc, pour mettre en marche le segment, de conduire le FPGA à faible. Voici les tables de vérité pour le Qx (Q0 Q1, Q2) et ca-cg (voir tableaux)
De la table de vérité, nous pouvons avoir la conclusion suivante
CB et cc sont toujours 0
CG est toujours 1
ca, cd, ce et des FC ont toujours le même résultat
valeur de ca est évaluée par Qx
Par conséquent, nous pouvons avoir l’affectation suivante. Pour, cb-cg, c’est assez stragightforward. Pour ca, nous utilisons nid coniditional opérateur pour évaluer l’enable_Dx pour décider de la sortie de l’autorité de certification. Si enable_D1 est activé, ce qui signifie la gauche la plupart chiffre (Q0) est allumé, de la table de vérité, ca sera Q0. Dans le cas contraire, nous devons évaluer l’autre condition (enable_D2 est). Si enable_D2 est activé, puis ca est égal à T2 et ainsi de suite.
assigner ca = (enable_D1 == 0) ? Q0 : ((enable_D2==0) ? Q1 : ((enable_D3==0) ? Q2:1'b1)) ; Utilisez l’opérateur conditionnel
assigner des cb = 1' b0 ; CB est toujours sur
assigner des cc = 1' b0 ; CC est toujours sur
assigner des cd = ca ; sortie du CD est la même que ca
attribuer ce = ca ; ce rendement est le même que ca
assigner des FC = ca ; CF sortie est la même que ca
assigner des cg = 1' b1 ; comme nous avons seulement besoin d’avoir zéro ou un, donc cg est large de tous les temps
assigner des dp = 1' b1 ; désactiver le point décimal
Enfin, nous avons besoin d’instancier le module de compteur et clkdivider.
Vous pouvez trouver le code avec des commentaires dans le fichier projet.