VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
paralleles Singal seriell ausgeben

Anfang   zurück   weiter   Ende
Seite: 1, 2
Autor Beitrag
code_HH
Neuling


Beiträge: 8

New PostErstellt: 03.08.04, 17:48  Betreff: paralleles Singal seriell ausgeben  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
witteks
Stammgast


Beiträge: 27
Ort: Cottbus

New PostErstellt: 03.08.04, 21:01  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden Website dieses Mitglieds aufrufen
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 04.08.04, 08:46  Betreff:  Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
code_HH
Neuling


Beiträge: 8

New PostErstellt: 04.08.04, 11:54  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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

Thx

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
witteks
Stammgast


Beiträge: 27
Ort: Cottbus

New PostErstellt: 04.08.04, 12:20  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

    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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden Website dieses Mitglieds aufrufen
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 06.08.04, 11:27  Betreff:  Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

Natürlich - war nur ein Tippfehler!

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
code_HH
Neuling


Beiträge: 8

New PostErstellt: 10.08.04, 16:59  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
witteks
Stammgast


Beiträge: 27
Ort: Cottbus

New PostErstellt: 13.08.04, 21:35  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden Website dieses Mitglieds aufrufen
code_HH
Neuling


Beiträge: 8

New PostErstellt: 16.08.04, 08:21  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
witteks
Stammgast


Beiträge: 27
Ort: Cottbus

New PostErstellt: 17.08.04, 20:19  Betreff: Re: paralleles Singal seriell ausgeben  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden Website dieses Mitglieds aufrufen
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite: 1, 2
Seite 1 von 2
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj