Das man mir helfen will, hört sich doch mal richtig gut an.
Eine richtige Aufgabe ist es allerdings nicht, mehr so eine Art
praktische Übung, an dem was man so liest. Ich denke nur nachlesen nützt
nicht viel, wenn man davon nichts praktisch ausprobiert.
1.Schritt:
Wie ganz oben beschrieben - Ich möchte einfach das enable auswerten.
2.Schritt:
Wenn das enable-Signal auf high geht, soll ein Zähler hochgezählt
werden. Da wohl häufig Zeiten, bzw. zeitliche Signale erzeugt werden
müssen, denke ich das ein Zähler bis 1000 das sinnvollste wäre
(Umrechnungsfaktoren der Zeiteinheiten)
3.Schritt/Erweiterung:
Besser erst nach dem zweiten Schritt
Da ich nun weiß das ich mit dem nicht unmittelbarem Folgen auf das
enable-Signal leben muß, sieht mein erster Wurf (zum 2.Schritt) so aus:
1 | LIBRARY ieee;
|
2 | USE ieee.std_logic_1164.all;
|
3 | USE ieee.std_logic_unsigned.all;
|
4 |
|
5 | ENTITY clkgen IS
|
6 |
|
7 | GENERIC ( CONSTANT length_s : natural := 999
|
8 | );
|
9 |
|
10 | PORT ( reset : IN std_logic;
|
11 | enable : IN std_logic;
|
12 | clkin_ms : IN std_logic;
|
13 | clkout : OUT std_logic
|
14 | );
|
15 | END ENTITY clkgen;
|
16 |
|
17 |
|
18 | ARCHITECTURE beh1 OF clkgen IS
|
19 |
|
20 | SIGNAL count_1ms : integer range 0 to length_s;
|
21 | SIGNAL clk : std_logic;
|
22 | BEGIN
|
23 | sig_gen : PROCESS (reset, clkin_ms, enable)
|
24 |
|
25 | BEGIN
|
26 | IF reset = '0' THEN
|
27 | count_1ms <= 0;
|
28 | clk <= '0';
|
29 | ELSIF (clkin_ms'event AND clkin_ms = '1') THEN
|
30 | IF enable = '1' THEN
|
31 | IF count_1ms = 999 THEN
|
32 | count_1ms <= 0 ;
|
33 | clk <= '1';
|
34 | ELSE
|
35 | count_1ms <= count_1ms + 1;
|
36 | clk <= '0';
|
37 | END IF;
|
38 | END IF;
|
39 | END IF;
|
40 |
|
41 | END PROCESS sig_gen;
|
42 | clkout <= clk;
|
43 | END ARCHITECTURE beh1;
|
Frage dazu:
Passt das soweit?
Empfiehlt es sich, einen eigenen Prozess fürs Zählen und einen eigenen
für die Zählerauswertung zu definieren?
Muß ich für den Fall dass enable=0 ist, ebenfalls eine Aussage treffen?