Altera styrelsen Metronome (2 / 6 steg)
Steg 2: Verilog kod
Öppna programvaran Quartus II. skapa ett nytt projekt och en ny verilog fil. Kopiera följande kod:
modul metronew)
ingång klocka, / / 50MHz intern klocka
input [17:0] i, / / SW0-17
ingång tapup, / / KEY3
ingång tapdown, / / KEY2
Mata in reset, / / KEY0
utgång spk, / / GPIO (högtalare)
utgång [7:0] led, / / LEDG0-7
produktionen reg [0:6] hex0, hex10, hex100), //HEX0-2
/ * heltal * /
heltal counter1;
heltal counttap = 1;
heltal bpm;
heltal hastighet;
/ * reg * /
REG [7:0] staten.
/ * tilldela * /
tilldela ledde = staten.
tilldela spk = staten [0] |state [7].
/ * alltid * /
alltid tapup, tapdown) börjar
hex0 = 7' b0000001;
Visar tempo på sju segment display från växlar,
uppsättningar bpm att med tanke på tempo
om (i [0] == 1) börjar
hex100 = 7' b0000001; 0
hex10 = 7' b0100000; 6
hastighet = 60.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [1] == 1) börjar
hex100 = 7' b0000001; 0
hex10 = 7' b0001111; 7
hastighet = 70.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [2] == 1) börjar
hex100 = 7' b0000001; 0
hex10 = 7' b0000000; 8
hastighet = 80.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [3] == 1) börjar
hex100 = 7' b0000001; 0
hex10 = 7' b0001100; 9
hastighet = 90.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [4] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0000001; 0
hastighet = 100;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [5] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b1001111; 1
hastighet = 110.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [6] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0010010; 2
hastighet = 120;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [7] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0000110; 3
hastighet = 130;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [8] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b1001100; 4
hastighet = 140;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [9] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0100100; 5
hastighet = 150;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [10] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0100000; 6
hastighet = 160;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [11] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0001111; 7
hastighet = 170;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [12] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0000000; 8
hastighet = 180;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [13] == 1) börjar
hex100 = 7' b1001111; 1
hex10 = 7' b0001100; 9
hastighet = 190;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [14] == 1) börjar
hex100 = 7' b0010010; 2
hex10 = 7' b0000001; 0
hastighet = 200.
BPM = 49999999/hastighet * 120;
slutet
annat om (i [15] == 1) börjar
hex100 = 7' b0010010; 2
hex10 = 7' b1001111; 1
hastighet = 210;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [16] == 1) börjar
hex100 = 7' b0010010; 2
hex10 = 7' b0010010; 2
hastighet = 220;
BPM = 49999999/hastighet * 120;
slutet
annat om (i [17] == 1) börjar
hex100 = 7' b0010010; 2
hex10 = 7' b0000110; 3
hastighet = 230;
BPM = 49999999/hastighet * 120;
slutet
annars börja
hex100 = 7' b0100100; s
hex10 = 7' b0110000; e
hex0 = 7' b1110001; l
hastighet = 60.
BPM = (49999999) / ((counttap/49999999) * 32) * 160;
slutet
slutet
Börja alltid @ (posedge klocka)
counter1 < = counter1 + 1.
ökar eller minskar tempo med hjälp av knapparna
IF(reset == 0) börjar
counttap = 1;
slutet
IF(tapup == 0) börjar
counttap = counttap + 1.
slutet
IF(tapdown== 0) börjar
counttap = counttap - 1;
slutet
tänds lysdioderna i sekvens
om (counter1 < = bpm/14 * 1) börjar
State = 0;
staten [0] = 1;
slutet
annars om (counter1 < = bpm/14 * 2) börjar
State = 0;
tillstånd [1] = 1;
slutet
annars om (counter1 < = bpm/14 * 3) börjar
State = 0;
statligt [2] = 1;
slutet
annars om (counter1 < = bpm/14 * 4) börjar
State = 0;
statligt [3] = 1;
slutet
annars om (counter1 < = bpm/14 * 5) börjar
State = 0;
statligt [4] = 1;
slutet
annars om (counter1 < = bpm/14 * 6) börjar
State = 0;
statligt [5] = 1;
slutet
annars om (counter1 < = bpm/14 * 7) börjar
State = 0;
statligt [6] = 1;
slutet
annars om (counter1 < = bpm/14 * 8) börjar
State = 0;
statligt [7] = 1;
slutet
annars om (counter1 < = bpm/14 * 9) börjar
State = 0;
statligt [6] = 1;
slutet
annars om (counter1 < = bpm/14 * 10) börjar
State = 0;
statligt [5] = 1;
slutet
annars om (counter1 < = bpm/14 * 11) börjar
State = 0;
statligt [4] = 1;
slutet
annars om (counter1 < = bpm/14 * 12) börjar
State = 0;
statligt [3] = 1;
slutet
annars om (counter1 < = bpm/14 * 13) börjar
State = 0;
statligt [2] = 1;
slutet
annars om (counter1 < = bpm) börjar
State = 0;
tillstånd [1] = 1;
slutet
återställer counter1 när den träffar 50 miljoner
annat if (counter1 == bpm) börja / / 50M (2seconds)
staten [0] = 0;
counter1 < = 0;
slutet
annars börja
staten [0] = 0;
counter1 < = 0;
slutet
slutet
endmodule