Forum: FPGA, VHDL & Co. Taktausgabe UART


von Hans H. (hanshirsch)


Angehängte Dateien:

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ß

von Läubi .. (laeubi) Benutzerseite


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?

von Hans H. (hanshirsch)


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.

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


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:
1
  Port (          
2
         txclk          : out std_logic;
3
         taste_start    : in  STD_LOGIC;      -- Start �bertragung      
4
       :
5
       :
6
      if(txcnt < Quarz_Taktfrequenz/Baudrate) then            
7
       :
8
      end if;      
9
      if(txcnt < Quarz_Taktfrequenz/(2*Baudrate)) then            
10
         txclk <= '1';
11
      else
12
         txclk <= '0';
13
      end if;
Aber Achtung: der Takt ist nur während der Übertragung aktiv...

von Hans H. (hanshirsch)


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;

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


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
1
    if (CLK'event and CLK = '1') then
und nicht auch noch
1
    if rising_edge(CLK_tx) then...
2
    if rising_edge(CLK_rx) then...
3
    if rising_edge(CLK_1x) then...

Wenn du etwas mit 1/16 der Taktfrequenz machen willst, dann sieht das so 
aus:
1
signal cnt16 : integer range 0 to 15 := 0; 
2
signal clk_16tel : std_logic;  -- Enablesignal 
3
4
-- Herunterteilen des Boardtaktes
5
process (CLK)
6
begin
7
    if (CLK'event and CLK = '1') then -- es gibt nur diesen Takt
8
      if cnt16 < 15 then
9
         cnt16 <= cnt16+1;
10
         clk_16tel <= '0';
11
      else
12
         cnt16 <= 0;
13
         clk_16tel <= '1';  -- Enablesignal setzen
14
      end if;
15
    end if;
16
end process;
17
18
process (CLK)
19
begin
20
    if (CLK'event and CLK = '1') then -- es gibt nur diesen Takt
21
       if clk_16tel ='1' then -- Enablesignal verwenden
22
           :
23
       end if;
24
    end if;
25
end process;

von Hans H. (hanshirsch)


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?

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


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.

von Hans H. (hanshirsch)


Lesenswert?

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

von Duke Scarring (Gast)


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

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.