Morgen,
Unsere Aufgabe bestand es einen Inkrement Zählen einzubauen (FPGA) der
nach drücken einer Taster um eins rauf gezählt wird (7-Segment DEZ).
Funktioniert schon.
Ich war für die Top entity verantwortlich und mein Freund für den
debouncer(entprellen der taste).
:Debouncer
1 | ButtonSync: process(CLK)
|
2 | begin
|
3 | if (CLK' event and CLK = '1')then
|
4 | bsync0 <= not Button_in;
|
5 | bsync1 <= bsync0;
|
6 | end if;
|
7 | end process ButtonSync;
|
8 |
|
9 | SampleGen: process (CLK)
|
10 | begin
|
11 | if (CLK' event and CLK ='1') then
|
12 | if (sample_counter = sample_count_max_c)then
|
13 | sample_counter <= 0;
|
14 | sample_pulse <= '1';
|
15 | else
|
16 | sample_counter <= sample_counter +1;
|
17 | sample_pulse <= '0';
|
18 | end if;
|
19 | end if;
|
20 | end process SampleGen;
|
21 |
|
22 |
|
23 | Debouncer: process(CLK)
|
24 | begin
|
25 |
|
26 | if(CLK'event and CLK = '1')then
|
27 | if(bsync1 = '0') then
|
28 | debounce_counter<= 0;
|
29 | BUTTON_out <= '0';
|
30 | elsif(sample_pulse = '1') then
|
31 | if(debounce_counter = debounce_count_max_c)then
|
32 | BUTTON_out<='1';
|
33 | else
|
34 | debounce_counter <= debounce_counter +1;
|
35 | end if;
|
36 | end if;
|
37 | end if;
|
38 |
|
39 | end process Debouncer;
|
Das 2 und 3 Prozess ist logisch für mich und zwar wir bei dem einen
Prozess wird "clk" geteilt mit einmen Zähler realisiert und beim
letzten wird ein Zähler rauf gezählt> bestimmten treshold>BUTTON auf 1
gesetzt
Der 1 Prozess verstehe ich nicht , als ich meinen Freund gefragt habe ,
meinte er nur , dass die Daten die vom Taster kommen asynchron sind und
es zur einer Setup/Hold time Verletzung kommen würde und deshalb
verbindet er die zwei Signalen mit einem flip flop.
Könntet ihr mir da vielleicht weiterhelfen ?
Falls jemand den Debouncer benötigt könnt ihr mich ruhig Fragen
Danke im Voraus, wenn jemand da weiterhelfen kann.