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);
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?