Ali Alile schrieb:
> Ich hab mir diverse Beispiele angeschaut (Lothar Miller), die ich
> leider nicht ganz verstehe.
Übung macht den Meister...
Sieh dir am Anfang mal die "üblichen Verdächtigen" an, das "Hello World"
der Hardware: ein Lauflicht.
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Dort siehst du auch, wie ein Taktteiler als Komponente in das Lauflicht
eingebunden wird.
> Wie kann ich die drei Programmteile am besten verknüpfen?
> Auf was muss ich achten?
Dass du den dort oben erzeugten Takt clk9600 nicht als Takt, sonden als
Enable verwendest. Denn da halten wir es am besten wie der Highlander:
Es kann nur einen (Takt) geben.
> Hat mir jmd Tipps wie ich mich am besten einarbeiten kann oder
> Tutorials/Dokumentationen/Berichte zum lesen?
Kauf dir ein Buch (oder leih es dir aus):
VHDL-Synthese von Reichhardt&Schwarz...
Zu deinem Code:
1 | cnt <= cnt +1;
|
2 | clk_9600_k <= '0';
|
3 | if cnt = 5207 then
|
Besser wäre: erst abfragen und dann zählen
1 | clk_9600_k <= '0';
|
2 | if cnt < 5207 then
|
3 | cnt <= cnt +1;
|
4 | else
|
Die 5207 kannst du auch ausrechnen lassen: 50000000/9600
Dein clk9600 wird noch gar nicht angesteuert. Das hättest du aber in
einer Simulation gesehen. Das Signal clk_9600_k ist unnötig, und der cnt
sollte eingeschränkt werden, denn nur so kann die Simulation Denkfehler
aufdecken:
1 | entity bau_gen is
|
2 | port (
|
3 | reset : in STD_LOGIC;
|
4 | clock : in STD_LOGIC;
|
5 | clk_9600 : out STD_LOGIC
|
6 | );
|
7 | end bau_gen;
|
8 |
|
9 | architecture ar_bau_gen of bau_gen is
|
10 | signal cnt: integer range 0 to 50000000/9600-1;
|
11 | Begin
|
12 | process(clock)
|
13 | begin
|
14 | if rising_edge(clock) then
|
15 | if cnt < 50000000/9600-1 then
|
16 | cnt <= cnt +1;
|
17 | clk_9600 <= '0';
|
18 | else
|
19 | cnt <= 0;
|
20 | clk_9600 <= '1';
|
21 | end if;
|
22 | end if;
|
23 | end process;
|
24 |
|
25 | end ar_bau_gen;
|