Étape 2: Code de Verilog
Ouvrez votre logiciel Quartus II. Créez un nouveau projet et un nouveau fichier de verilog. Copiez le code suivant :
(metronew) module
entrée horloge, / / horloge interne 50MHz
entrée [17:0] dans, / / SW0-17
tapup d’entrée, / / KEY3
tapdown d’entrée, / / KEY2
entrée de prépositionnement, / / KEY0
sortie de spk, / / GPIO (haut-parleur)
sortie [7:0] led, / / LEDG0-7
sortie reg [0:6] hex0, hex10, hex100); //HEX0-2
/ * entier * /
counter1 entier ;
Integer counttap = 1 ;
bpm d’entier ;
Vitesse d’entier ;
/ * reg * /
État de reg [7:0] ;
/ * céder * /
Assign a conduit = Etat ;
assigner des spk = État [0] |state [7] ;
/ * toujours * /
toujours tapup, tapdown) commencent
hex0 = 7' b0000001 ;
Affiche le tempo sur afficheur 7 segments de commutateurs,
ensembles de bpm à donné tempo
if ([0] == 1) commencent
hex100 = 7' b0000001 ; 0
hex10 = 7' b0100000 ; 6
Vitesse = 60 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([1] == 1) commencent
hex100 = 7' b0000001 ; 0
hex10 = 7' b0001111 ; 7
Vitesse = 70 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([2] == 1) commencent
hex100 = 7' b0000001 ; 0
hex10 = 7' b0000000 ; 8
Vitesse = 80 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([3] == 1) commencent
hex100 = 7' b0000001 ; 0
hex10 = 7' b0001100 ; 9
Vitesse = 90 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([4] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0000001 ; 0
Vitesse = 100 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([5] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b1001111 ; 1
Vitesse = 110 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([6] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0010010 ; 2
Vitesse = 120 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([7] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0000110 ; 3
Vitesse = 130 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([8] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b1001100 ; 4
Vitesse = 140 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([9] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0100100 ; 5
Vitesse = 150 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([10] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0100000 ; 6
Vitesse = 160 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([11] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0001111 ; 7
Vitesse = 170 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([12] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0000000 ; 8
Vitesse = 180 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([13] == 1) commencent
hex100 = 7' b1001111 ; 1
hex10 = 7' b0001100 ; 9
Vitesse = 190 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if (dans [14] == 1) commencent
hex100 = 7' b0010010 ; 2
hex10 = 7' b0000001 ; 0
Vitesse = 200 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([15] == 1) commencent
hex100 = 7' b0010010 ; 2
hex10 = 7' b1001111 ; 1
Vitesse = 210 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([16] == 1) commencent
hex100 = 7' b0010010 ; 2
hex10 = 7' b0010010 ; 2
vitesse = 220 ;
BPM = 49999999/Vitesse * 120 ;
fin
else if ([17] == 1) commencent
hex100 = 7' b0010010 ; 2
hex10 = 7' b0000110 ; 3
Vitesse = 230 ;
BPM = 49999999/Vitesse * 120 ;
fin
sinon commencer
hex100 = 7' b0100100 ; s
hex10 = 7' b0110000 ; e
hex0 = 7' b1110001 ; l
Vitesse = 60 ;
BPM = (49999999) / ((counttap/49999999) * 32) * 160 ;
fin
fin
toujours @ (posedge compte à rebours) commencer
counter1 < = counter1 + 1 ;
augmente ou diminue le tempo à l’aide des touches
if(Reset == 0) commencer
counttap = 1 ;
fin
if(tapup == 0) commencer
counttap = counttap + 1 ;
fin
if(tapdown== 0) commencer
counttap = counttap - 1 ;
fin
LED s’allume en séquence
Si (counter1 < = 1/14 * bpm) commencer
État = 0 ;
État [0] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 2) commencer
État = 0 ;
État [1] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 3) commencent
État = 0 ;
d’État [2] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 4) commencer
État = 0 ;
État [3] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 5) commencer
État = 0 ;
d’État [4] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 6) commencer
État = 0 ;
d’État [5] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 7) commencer
État = 0 ;
d’État [6] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 8) commencer
État = 0 ;
d’État [7] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 9) commencent
État = 0 ;
d’État [6] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 10) commencer
État = 0 ;
d’État [5] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 11) commencer
État = 0 ;
d’État [4] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 12) commencer
État = 0 ;
État [3] = 1 ;
fin
ElseIf (counter1 < = bpm/14 * 13) commencer
État = 0 ;
d’État [2] = 1 ;
fin
ElseIf (counter1 < = bpm) commencer
État = 0 ;
État [1] = 1 ;
fin
réinitialise le counter1 quand il frappe 50 millions
ElseIf (counter1 == bpm) commencer / / 50M (2seconds)
État [0] = 0 ;
counter1 < = 0 ;
fin
sinon commencer
État [0] = 0 ;
counter1 < = 0 ;
fin
fin
endmodule