Stap 2: Verilog Code
Open uw Quartus II software. Maak een nieuw project en een nieuw verilog-bestand. Kopieer in de volgende code:
module metronew)
input klok, / / 50MHz interne klok
input [17:0], / / SW0-17
invoer tapup, / / KEY3
invoer tapdown, / / KEY2
ingang terugstellen, / / sleutel0
spk, uitgang / / GPIO (speaker)
uitgang [7:0] led, / / LEDG0-7
uitgang reg [0:6] hex0, hex10, hex100); //HEX0-2
/ * getal * /
integer counter1;
integer counttap = 1;
geheel getal bpm;
geheel getal snelheid;
/ * reg * /
reg [7:0] staat;
/ * toewijzen * /
toewijzen geleid = staat;
toewijzen van spk = staat [0] |state [7];
/ * altijd * /
altijd tapup, tapdown) beginnen
hex0 = 7' b0000001;
Hiermee geeft u weer tempo op zeven segment display van switches,
sets bpm aan gegeven tempo
Als (in [0] == 1) beginnen
hex100 = 7' b0000001; 0
hex10 = 7' b0100000; 6
snelheid = 60;
BPM = 49999999/snelheid * 120;
einde
anders als (in [1] == 1) beginnen
hex100 = 7' b0000001; 0
hex10 = 7' b0001111; 7
snelheid = 70;
BPM = 49999999/snelheid * 120;
einde
anders als (in [2] == 1) beginnen
hex100 = 7' b0000001; 0
hex10 = 7' b0000000; 8
snelheid = 80;
BPM = 49999999/snelheid * 120;
einde
anders als (in [3] == 1) beginnen
hex100 = 7' b0000001; 0
hex10 = 7' b0001100; 9
snelheid = 90;
BPM = 49999999/snelheid * 120;
einde
anders als (in [4] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0000001; 0
snelheid = 100;
BPM = 49999999/snelheid * 120;
einde
anders als (in [5] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b1001111; 1
snelheid = 110;
BPM = 49999999/snelheid * 120;
einde
anders als (in [6] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0010010; 2
snelheid = 120;
BPM = 49999999/snelheid * 120;
einde
anders als (in [7] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0000110; 3
snelheid = 130;
BPM = 49999999/snelheid * 120;
einde
anders als (in [8] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b1001100; 4
snelheid = 140;
BPM = 49999999/snelheid * 120;
einde
anders als (in [9] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0100100; 5
snelheid = 150;
BPM = 49999999/snelheid * 120;
einde
anders als (in [10] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0100000; 6
snelheid = 160;
BPM = 49999999/snelheid * 120;
einde
anders als (in [11] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0001111; 7
snelheid = 170;
BPM = 49999999/snelheid * 120;
einde
anders als (in [12] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0000000; 8
snelheid = 180;
BPM = 49999999/snelheid * 120;
einde
anders als (in [13] == 1) beginnen
hex100 = 7' b1001111; 1
hex10 = 7' b0001100; 9
snelheid = 190;
BPM = 49999999/snelheid * 120;
einde
anders als (in [14] == 1) beginnen
hex100 = 7' b0010010; 2
hex10 = 7' b0000001; 0
snelheid = 200;
BPM = 49999999/snelheid * 120;
einde
anders als (in [15] == 1) beginnen
hex100 = 7' b0010010; 2
hex10 = 7' b1001111; 1
snelheid = 210;
BPM = 49999999/snelheid * 120;
einde
anders als (in [16] == 1) beginnen
hex100 = 7' b0010010; 2
hex10 = 7' b0010010; 2
snelheid = 220;
BPM = 49999999/snelheid * 120;
einde
anders als (in [17] == 1) beginnen
hex100 = 7' b0010010; 2
hex10 = 7' b0000110; 3
snelheid = 230;
BPM = 49999999/snelheid * 120;
einde
anders beginnen
hex100 = 7' b0100100; s
hex10 = 7' b0110000; e
hex0 = 7' b1110001; l
snelheid = 60;
BPM = (49999999) / ((counttap/49999999) * 32) * 160;
einde
einde
altijd @ (posedge klok) beginnen
counter1 < = counter1 + 1;
Hiermee vergroot of verkleint tempo met toetsen
if(reset == 0) beginnen
counttap = 1;
einde
if(tapup == 0) beginnen
counttap = counttap + 1;
einde
if(tapdown== 0) beginnen
counttap = counttap - 1;
einde
Hiermee schakelt u LEDs in volgorde
Als (counter1 < = bpm/14 * 1) beginnen
staat = 0;
staat [0] = 1;
einde
else if (counter1 < = bpm/14 * 2) beginnen
staat = 0;
staat [1] = 1;
einde
else if (counter1 < = bpm/14 * 3) beginnen
staat = 0;
staat [2] = 1;
einde
else if (counter1 < = bpm/14 * 4) beginnen
staat = 0;
verklaren [3] = 1;
einde
else if (counter1 < = bpm/14 * 5) beginnen
staat = 0;
staat [4] = 1;
einde
else if (counter1 < = bpm/14 * 6) beginnen
staat = 0;
[5] staat = 1;
einde
else if (counter1 < = bpm/14 * 7) beginnen
staat = 0;
[6] staat = 1;
einde
else if (counter1 < = bpm/14 * 8) beginnen
staat = 0;
[7] staat = 1;
einde
else if (counter1 < = bpm/14 * 9) beginnen
staat = 0;
[6] staat = 1;
einde
else if (counter1 < = bpm/14 * 10) beginnen
staat = 0;
[5] staat = 1;
einde
else if (counter1 < = bpm/14 * 11) beginnen
staat = 0;
staat [4] = 1;
einde
else if (counter1 < = bpm/14 * 12) beginnen
staat = 0;
verklaren [3] = 1;
einde
else if (counter1 < = bpm/14 * 13) beginnen
staat = 0;
staat [2] = 1;
einde
else if (counter1 < = bpm) beginnen
staat = 0;
staat [1] = 1;
einde
counter1 wordt opnieuw ingesteld als het hits 50 miljoen
else if (counter1 == bpm) beginnen / / 50M (2seconden)
staat [0] = 0;
counter1 < = 0;
einde
anders beginnen
staat [0] = 0;
counter1 < = 0;
einde
einde
endmodule