www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Taktausgabe UART


Autor: Hans Hirsch (hanshirsch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte von folgender UART-Ausgabe ein Signal vom heruntergeteilten 
UART-Takt ausgeben, mit dem gesendet wird.
Der heruntergeteilte Takt muss ein symmetrisches Rechteck sein, das ich 
weiterverarbeiten möchte. Was wäre der richtige Ansatz?

Gruß

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans Hirsch schrieb:
> Der heruntergeteilte Takt muss ein symmetrisches Rechteck sein, das ich
> weiterverarbeiten möchte.
Ein Rechteck ist immer symetrisch ;)
Meinst du ein Tastverhältnis von 1:1?
Wieso bauchst du das den wenn du das Sognal danach weiterverarbeitest?

Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Meinst du ein Tastverhältnis von 1:1?
Ja!

> Wieso bauchst du das den wenn du das Sognal danach weiterverarbeitest?
Ich brauche den Takt von der UART-Ausgabe um mit ihm einen weiteren 
Process ansteuern zu können.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Der heruntergeteilte Takt muss ein symmetrisches Rechteck sein, das ich
>> weiterverarbeiten möchte. Was wäre der richtige Ansatz?
> Ich brauche den Takt von der UART-Ausgabe um mit ihm einen weiteren
> Process ansteuern zu können.
Der richtige Ansatz wäre, es nicht so zu machen...
Der richtige Ansatz ist, nur 1 Takt im ganzen Design zu haben.
Alles Andere wird über Clock-Enable-Signale gesteuert, die jeweils nur 1 
Taktzyklus lang aktiv sind.

Aber trotzdem:
  Port (          
         txclk          : out std_logic;
         taste_start    : in  STD_LOGIC;      -- Start �bertragung      
       :
       :
      if(txcnt < Quarz_Taktfrequenz/Baudrate) then            
       :
      end if;      
      if(txcnt < Quarz_Taktfrequenz/(2*Baudrate)) then            
         txclk <= '1';
      else
         txclk <= '0';
      end if;
Aber Achtung: der Takt ist nur während der Übertragung aktiv...

Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre so eine Teilung des Taktes sinnvoller?

..
clk_1x <= clk_div(3);


-- Herunterteilen des Boardtaktes

process (CLK, clk_div)
begin

  --if rst = '1' then
    --clk_div = '0000';
    if (CLK'event and CLK = '1') then
      clk_div <= clk_div + "0001";
    end if;
end process;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wäre so eine Teilung des Taktes sinnvoller?
Für Anfänger muss gelten: Es gibt nur 1 Takt im ganzen Design.

Es gibt also nur
    if (CLK'event and CLK = '1') then 
und nicht auch noch
    if rising_edge(CLK_tx) then...
    if rising_edge(CLK_rx) then...
    if rising_edge(CLK_1x) then...

Wenn du etwas mit 1/16 der Taktfrequenz machen willst, dann sieht das so 
aus:
signal cnt16 : integer range 0 to 15 := 0; 
signal clk_16tel : std_logic;  -- Enablesignal 

-- Herunterteilen des Boardtaktes
process (CLK)
begin
    if (CLK'event and CLK = '1') then -- es gibt nur diesen Takt
      if cnt16 < 15 then
         cnt16 <= cnt16+1;
         clk_16tel <= '0';
      else
         cnt16 <= 0;
         clk_16tel <= '1';  -- Enablesignal setzen
      end if;
    end if;
end process;

process (CLK)
begin
    if (CLK'event and CLK = '1') then -- es gibt nur diesen Takt
       if clk_16tel ='1' then -- Enablesignal verwenden
           :
       end if;
    end if;
end process;

Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Version ist wesentlich überschaubarer. Nur weiß ich jetzt nicht 
genau, wie es diese Teilung auf mein Problem("Test.vhd") anwende. Wie 
mache ich die Ausgabe der UART über diesen Taktungsprozess?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie mache ich die Ausgabe der UART über diesen Taktungsprozess?
Ja nun, dazu brauchst du einen anderen Sender, denn in dem oben 
geposteten wird dieses Enable-Signal über den Zähler txcnt erzeugt.

Autor: Hans Hirsch (hanshirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, ich habe jetzt ein enable-Signal. Aber wenn ich aus dem 
enablesignal einen Rechteck erzeugen will???

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans Hirsch:
> ...wenn ich aus dem enablesignal einen Rechteck erzeugen will???
Dann togglest Du damit ein Bit-Register und gibst den Wert aus...


Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.