Sophie G. schrieb:
> Jemand eine Idee wie ich das mit dem Zählumfang realisieren könnte?
Das ist jetzt natürlich mit 2 Zählern wieder umständlich. Also doch nur
1 Zähler:
1 | signal cnt : integer range 0 to 50 := 0;
|
2 |
|
3 | process begin
|
4 | wait until rising_edge(clk);
|
5 | if countup='1' then -- up
|
6 | if cnt=maxvalue then
|
7 | cnt <= 0;
|
8 | else
|
9 | cnt <= cnt+1;
|
10 | end if;
|
11 | else -- down
|
12 | if cnt=0 then
|
13 | cnt <= maxvalue;
|
14 | else
|
15 | cnt <= cnt+-1;
|
16 | end if;
|
17 | end if;
|
18 | end process;
|
Und dahinter die BCD-Umwandlung. Bis 50 geht das ja noch locker als
Tabelle/Arrray. Oder eben so irgendwie:
http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung...
Oder doch mit 2 Zählern und sich den Maximalwert BCD-codiert geben
lassen:
1 | signal zehner : integer range 0 to 9 := 0;
|
2 | signal einer : integer range 0 to 9 := 0;
|
3 |
|
4 | process begin
|
5 | wait until rising_edge(clk);
|
6 | if countup='1' then -- up
|
7 | if einer=maxeiner and zehner=maxzehner then
|
8 | zehner <= 0;
|
9 | einer <= 0;
|
10 | elsif einer=9 then
|
11 | einer <= 0;
|
12 | zehner <= zehner+1;
|
13 | else
|
14 | einer <= einer+1;
|
15 | end if;
|
16 | else -- down
|
17 | if einer=0 and zehner=0 then
|
18 | zehner <= maxzehner;
|
19 | einer <= maxeiner;
|
20 | elsif einer=0 then
|
21 | einer <= 9;
|
22 | zehner <= zehner-1;
|
23 | else
|
24 | einer <= einer-1;
|
25 | end if;
|
26 | end if;
|
27 | end process;
|
Oder den Max-Wert binär bekommen und dann nach BCD konvertieren, oder,
oder, oder...
Und mein Tipp: immer erst mal simulieren. Der Simulator ist der
FPGA-Debugger.