Hallo. Nachdem ich meinen Baudgen programmiert habe, möchte ich mich dem Sender und Empfänger stellen. Ich hab mir diverse Beispiele angeschaut (Lothar Miller), die ich leider nicht ganz verstehe. Hat mir jmd Tipps wie ich mich am besten einarbeiten kann oder Tutorials/Dokumentationen/Berichte zum lesen? Wie kann ich die drei Programmteile am besten verknüpfen? Auf was muss ich achten? library ieee; use ieee.std_logic_1164.ALL; entity bau_gen is port ( reset : in STD_LOGIC; clock : in STD_LOGIC; clk_9600 : out STD_LOGIC ); end bau_gen; architecture ar_bau_gen of bau_gen is signal clk_9600_k: STD_LOGIC; signal cnt: integer; Begin process(clock) begin if rising_edge(clock) then cnt <= cnt +1; clk_9600_k <= '0'; if cnt = 5207 then cnt <= 0; clk_9600_k <= '1'; end if; end if; end process; end ar_bau_gen; Danke Gruß
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; |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.