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 <= signal (bit_zaehler);
Ich hoffe das funktioniert so, leider habe ich jetzt nix zum Testen. Unter Templates im WebPack findest du übrigens auch Beispiele für solche Wandler.
Sven
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 produziert
Dann 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 <= sender;
fehlerpro: PROCESS ( fehlerhint, fehlertyp)
VARIABLE fehlertemp : BIT_VECTOR (0 to 7);
BEGIN IF fehlerhint = '1' AND (fehlertyp = 1234 ) THEN fehlertemp := ('0','0','0','0','0','0','0','1'); END IF; IF fehlerhint = '1' AND (fehlertyp = 5678 ) THEN fehlertemp := ('0','0','0','0','0','1','0','0'); END IF; fehlerueber <= fehlertemp; END PROCESS fehlerpro;
BEGIN x:= (sendebituebertr'length)-1; sendebituebertr := test(sendertemp);
IF (j/=8) THEN IF cs = '0' AND sendeid = '1' AND fehlerhint = '0' THEN IF ( rising_edge(clk)) THEN din <= sendebituebertr(x-j); j:= j + 1; ELSIF (clk'event and clk = '0') THEN din <= '0'; END IF; END IF; else j := 0;
END IF; y := fehlerueber'length;
IF cs = '0' AND fehlerhint = '1' THEN IF ( CLK'EVENT AND CLK ='1') THEN din <= fehlerueber((y-1)-i); i:= i + 1; ELSIF (cLK'EVENT AND CLK= '0') THEN din <= '0'; END IF; END IF;
END PROCESS ausgabe;
zentrale_fsm: BLOCK
BEGIN
nextzustand : PROCESS (config, fehlerhint, sendeid, zustand)
BEGIN CASE zustand IS WHEN ruhe => IF fehlerhint = '1' THEN folgezustand <= fehler; END IF; IF config = '1' THEN folgezustand <= configurat; ELSE folgezustand <= ruhe; END IF; IF ars = '1' THEN folgezustand <= ruhe; END IF; WHEN configurat => IF fehlerhint = '1' THEN folgezustand <= fehler; END IF; IF sendeid = '1' THEN folgezustand <= anzeige; ELSE folgezustand <= configurat; END IF; IF ars = '1' THEN folgezustand <= ruhe; END IF; WHEN anzeige => IF fehlerhint = '1' THEN folgezustand <= fehler; END IF; IF config = '1' AND sendeid = '0' THEN folgezustand <= configurat; END IF; IF config = '0' AND sendeid = '1' THEN folgezustand <= anzeige; ELSE folgezustand <= ruhe; END IF; IF ars = '1' THEN folgezustand <= ruhe; END IF; WHEN fehler => IF fehlerhint = '0' AND sendeid = '0' AND config = '0' THEN folgezustand <= ruhe; END IF; IF fehlerhint = '0' AND sendeid = '0' AND config = '1' THEN folgezustand <= configurat; END IF; IF fehlerhint = '0' AND sendeid = '1' AND config = '0' THEN folgezustand <= anzeige; ELSE folgezustand <= fehler; END IF; IF ars = '1' THEN folgezustand <= ruhe; END IF; END CASE; END PROCESS nextzustand; END BLOCK zentrale_fsm;
Moin zusammen, koennt ihr euch mal den quelltext anschauen und mir sagen warum count zwei nicht hochzaehlt und warum wenn ich zeichen mit zeichenkette vergleiche immer nix passiert.. Danke
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?