Taktausgabe UART

OP #1447537
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ß
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1447548
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...
Moderator (Firma: Titel) Persönliche Seite #1447581
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren