Forum: FPGA, VHDL & Co. Empfänger - Sender


von Jürgen S. (rifay)


Lesenswert?

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ß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.