Autor |
Beitrag |
code_HH
Neuling
Beiträge: 8
|
Erstellt: 03.08.04, 17:48 Betreff: paralleles Singal seriell ausgeben
drucken
Thema drucken weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
witteks
Stammgast
Beiträge: 27 Ort: Cottbus
|
Erstellt: 03.08.04, 21:01 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
Dr. Faustus
Administrator
Beiträge: 107 Ort: Aßling
|
Erstellt: 04.08.04, 08:46 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
code_HH
Neuling
Beiträge: 8
|
Erstellt: 04.08.04, 11:54 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
Ich danke Euch, werde das gleich mal testen und Euch über meine Erfolge auf dem Laufenden halten..
Thx
|
|
nach oben |
|
|
witteks
Stammgast
Beiträge: 27 Ort: Cottbus
|
Erstellt: 04.08.04, 12:20 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
Dr. Faustus
Administrator
Beiträge: 107 Ort: Aßling
|
Erstellt: 06.08.04, 11:27 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
Natürlich - war nur ein Tippfehler!
|
|
nach oben |
|
|
code_HH
Neuling
Beiträge: 8
|
Erstellt: 10.08.04, 16:59 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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 <= 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;
ausgabe: PROCESS (clk,sendertemp) variable sendebituebertr : bit_vector (0 to 7); variable j,x,y,i : natural:= 0; 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
|
|
nach oben |
|
|
witteks
Stammgast
Beiträge: 27 Ort: Cottbus
|
Erstellt: 13.08.04, 21:35 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
code_HH
Neuling
Beiträge: 8
|
Erstellt: 16.08.04, 08:21 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
witteks
Stammgast
Beiträge: 27 Ort: Cottbus
|
Erstellt: 17.08.04, 20:19 Betreff: Re: paralleles Singal seriell ausgeben
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|