Baudratengenerator in VHDL

Neue Frage »

Auf diesen Beitrag antworten »
deppensido Baudratengenerator in VHDL

Hallo,

ich versuche einen Baudratengenerator in VHDL zu beschreiben, welcher das
Signal Tick mit einer Frequenz von 9600Hz steuert. Dabei hat das clk Signal eine Frequenz von 50MHz. Daher habe ich ein Signal Counter deklariert, welcher das Signal tick auf 1 setzen soll, wenn Counter = 5208 gilt (50MHz / 9600Hz = 5208,33). Allerdings funktioniert es überhaupt nicht, wie die Simulation gezeigt hat. Im folgenden der Code. Ich hoffe mir kann jemand weiterhelfen, es bleibt nicht mehr allzu viel Zeit für die Aufgabe. Endziel soll ein UART-Transmitter werden, aber dazu muss erst mal der Baudratengenerator funktionieren.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
entity Baudratengenerator is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           tick : out  STD_LOGIC);
end Baudratengenerator;

architecture Behavioral of Baudratengenerator is
signal counter : integer;
begin
	P1: Process(clk, rst)
	begin
		if clk'event and clk = '1' then
			if rst = '1' then
				tick <= '0';
				counter <= 0;
			else
				counter <= counter + 1;
				if counter = 5208 then
					tick <= '1';
					counter <= 0;
				else 
					tick <= '0';
				end if;
			end if;
		end if;
	end Process;
end Behavioral;


bei rst = 1 soll alles resetted werden. Ich hoffe mir kann jemand weiterhelfen.

Grüße
 
Auf diesen Beitrag antworten »
eulerscheZahl

Beachte Zeile 11, ich habe dir den counter initialisiert.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
library ieee;
use ieee.std_logic_1164.all;

entity Baudratengenerator is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           tick : out  STD_LOGIC);
end Baudratengenerator;

architecture Behavioral of Baudratengenerator is
signal counter : integer := 0;
begin
	P1: Process(clk, rst)
	begin
		if clk'event and clk = '1' then
			if rst = '1' then
				tick <= '0';
				counter <= 0;
			else
				counter <= counter + 1;
				if counter = 5 then
					tick <= '1';
					counter <= 0;
				else 
					tick <= '0';
				end if;
			end if;
		end if;
	end Process;
end Behavioral;
Auf diesen Beitrag antworten »
deppensido

Hallo,

danke für die Verbesserung. Ich hatte versucht den Counter zu initialisieren, wusste aber nicht wie es geht. Ich bin allerdings davon ausgegangen, dass es egal sei, da ich dachte, dass der ohnehin vom System her Initial auf 0 gesetzt werden würde. Wäre der Baudratengenerator jetzt richtig?

Grüße
Auf diesen Beitrag antworten »
deppensido

warum hast du in Zeile 21 if counter = 5 anstelle 5208 benutzt? Oder hast du dich da vertan? Weil für eine Frequenz von 9600Hz bei 50MHz des Clock signals müsste man doch 50 Millionen durch 9600 teilen und man erhält dann 5208,33 weshalb da doch 5208 stehen müsste.

Grüße
 
Auf diesen Beitrag antworten »
eulerscheZahl

Ich habe das Wort "Baudratengenerator" heute zum ersten Mal gehört. Falls das soviel heißt, wie Frequenzgenerator, dann ist es jetzt richtig. Beachte aber, dass in [0..5208] 5209 Zahlen sind.

Zitat:
warum hast du in Zeile 21 if counter = 5 anstelle 5208 benutzt?

Ich wollte in meiner Simulation sehen, ob es dann funktioniert, das geht bei 5208 nicht so gut.
Auf diesen Beitrag antworten »
deppensido

hallo,

ja ich denke, dass heißt soviel wie Frequenzgenerator. Es soll in einem Takt von 9600Hz das Signal tick auf 1 gesetzt werden. Dieser wird später für den Transmitter benötigt. Es soll ja ein UART-Transmitter werden.
Ich werde dann 5208 lassen und zum testen gegebenenfalls mal auf 5 wechseln für die Counterabfrage.

Ansonsten vielen Dank für deine Hilfe, jetzt kann ich endlich mit dem Transmitter anfangen. smile

Grüße
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »