VHDL-Forum - Anfänger

paralleles Singal seriell ausgeben

paralleles Singal seriell ausgeben

Hallo zusammen,
ich versuche einen Bit Vektor seriell auszugeben, komischerweise übernimmt mein Ausgangssignal nur einen Wert und gibt den dauerhaft aus. Woran könnte das liegen, könnt Ihr mir vielleicht helfen?

Danke

Re: paralleles Singal seriell ausgeben

Gib das Signal in einem mit Clock getakteten Prozess aus.
Sowas in der Art

signal : bit_vector (5 downto 0); --(vielleicht besser std_logic_vector)
signal : ausgang bit;

process (clk)
var bit_zaehler : integer;
begin
if rising_edge(clk) then
if bit_zaehler /= 5 then
bit_zaehler := bit_zaehler + 1;
else
bit_zaehler := 0;
end if;
end if
end process;

ausgang

Re: paralleles Singal seriell ausgeben

Wenn man :

if (bit_zaehler = 0) then
bit_zaehler := 0;
else
bit_zaehler := bit_zaehler + 1;

schreibt wird weniger logik auf dem Chip produziert.


Gruesse,


Michael

Re: paralleles Singal seriell ausgeben

Ich danke Euch, werde das gleich mal testen und Euch über meine Erfolge auf dem Laufenden halten..

Thx

Re: paralleles Singal seriell ausgeben

Zitat: Dr. Faustus
Wenn man :

if (bit_zaehler = 0) then
bit_zaehler := 0;
else
bit_zaehler := bit_zaehler + 1;

schreibt wird weniger logik auf dem Chip produziertDann aber eher so:

if (bit_zaehler = 5) then
bit_zaehler := 0;
else
bit_zaehler := bit_zaehler + 1;
end if;

Gruß Sven

Re: paralleles Singal seriell ausgeben

Natürlich - war nur ein Tippfehler!

Re: paralleles Singal seriell ausgeben

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;


ENTITY led_config IS
PORT (ars : IN STD_LOGIC;
clk : IN STD_LOGIC;
config : IN STD_LOGIC;
cs : IN BIT;
fehlerhint : IN STD_LOGIC;
fehlertyp : in INTEGER;
sendeid : IN BIT;
sender : IN string;
din : OUT BIT);

END led_config;

ARCHITECTURE rtl OF led_config IS

TYPE zustaende IS (anzeige, configurat, fehler, ruhe);
SIGNAL zustand, folgezustand :zustaende;
SIGNAL fehlerueber : BIT_VECTOR( 0 to 7 );
SIGNAL sendertemp : string(1 to 4);

FUNCTION TEST (zeichenkette : string(1 TO 4)) RETURN bit_vector IS
variable i,y,count,l, count1, count2 : integer;
variable zeichen : string(1 to 79):= ('0', '1', '2', '3', '4', '5', '6', '7','8', '9', ':', ';', '', '?','@', 'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M', 'N', 'O','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', '[', '\', ']', '^', '_','`', 'a', 'b', 'c', 'd', 'e', 'f', 'g','h', 'i', 'j', 'k', 'l', 'm', 'n', 'o','p', 'q', 'r', 's', 't', 'u', 'v', 'w','x', 'y', 'z', '{', '|', '}', '~');
variable a : integer:= 0;
variable senderbit : bit_vector(0 to 7);
variable sender1 : natural := 0;
variable sendebitueber : bit_vector(0 to 7);

BEGIN
i := 1;y:=1; l:= 0;
a := 1;
count:= 0;
count1 := 1;
count2 := 1;
l:= zeichenkette'length;
FOR i IN 1 TO l LOOP
FOR y IN 1 TO 79 LOOP
IF (zeichenkette(count1)= zeichen(count2)) THEN
count := (48+count2);
IF ((count rem 2)= 0) THEN senderbit(0) := '0';
ELSE
senderbit(0) := '1';
sender1 := count/2;
END IF;
WHILE (sender1 /= 0) LOOP
IF((sender1 rem 2) = 0) then senderbit(a) := '0' ;
ELSE
senderbit(a) := '1';
sender1 := sender1 -1;
END IF;
sender1 := (sender1/ 2);
a:= a+1;
END LOOP;
sendebitueber := senderbit;
RETURN sendebitueber;
count2 := count2+1;
ELSE
sendebitueber := ('0','1','0','1','1','0','0','0');
RETURN sendebitueber;
count2 := count2+1;
END IF;
END LOOP;
count1 := count1+1;
END LOOP;
END FUNCTION test;

BEGIN
sendertemp

Re: paralleles Singal seriell ausgeben

Hallo code_HH!

Ich habe mal versucht in deinen Code hereinzukommen. Leider ist das sehr schwer in kurzer Zeit, weil überhaupt keine Kommentare vorhanden sind.
Soll das ganze mal in Realität umgesetzt werden?
Mit welchem Programm hast du das geschrieben, weil ich mit dem WebPack viele Syntaxfehler erhalte.

Sven

Re: paralleles Singal seriell ausgeben

Moin, also ich habe das Programm mit dem XEMACS Editor geschrieben und mit vsim semuliert, ich erhalte keine Fehler mehr, es treten nur bei der Simulation Fehler im Signalverlauf auf.

Ich habe bereits selbst festgestellt, dass die Umsetzung in Hardware zu 90% nicht möglich ist, bin gerade dabei das gesamte Programm zu ändern. Danke für Deine Mühe...

Werde ich über meine Erfolge, Misserfolge auf dem laufenden halten.

Gruss Steffen

Re: paralleles Singal seriell ausgeben

Hallo Steffen!

Wenn du schon das ganze neu programmierst, dann versuche alles synchron von einem clk zu takten. Das wird eindeutig besser von den Synthesetools unterstützt und du handelst dir nicht so viele Probleme ein. Das Ganze gilt natürlich nicht, wenn du unbedingt asynchron arbeiten wolltest!
Was mich noch interessiert: Weil ich noch nicht so viel in deiner Funktion 'gekramt' habe, würde mich interessieren, was für ein Bitvektor dort abhängig vom Zeichen zurückgegeben wird. Kannst du das mit kurzen Worten erklären?

Sven