|
Subject |
Author |
Datum |
|
Re: paralleles Singal seriell ausgeben
So habe es hinbekommen, fuer die die es interessiert, hier der Quelltext.
ausgabe:
PROCESS (CLK,zeichenkette)
VARIABLE sendebitueber : BIT_VECTOR (0 TO 15);
VARIABLE j,x,y,i : NATURAL:= 0;
VARIABLE zeichen : STRING (1 TO 4);
VARIABLE z : INTEGER:=1;
begin
IF (z/=5) THEN
sendebitueber := test(zeichenkette,z);
IF (j /= 16) THEN
IF(clk'event AND CLK ='1') THEN
cs <= '0';
END IF;
IF cs = '0' AND sendeid = '1' AND fehlerhint = '0' THEN
IF(clk'event AND CLK ='1') THEN
din <= sendebitueber(j);
j := j+1;
END IF;
END IF;
ELSE
z := z+1;
j := 0;
cs <= '1';
END IF;
END IF;
Gruss Steffen
|
code_HH |
2004-09-02, 01:26 PM CET |
|
Re: paralleles Singal seriell ausgeben
Der String wird innerhalb eines Systems übergeben, aber die Vorgabe ist eben, dass ich den String direkt verarbeiten soll...
Der Prozess wird eigentlich aktiviert, aber werde das nochmal genau ergründen und Dir dann von meinem Erfolg oder Misserfolg berichten..
Gruss Steffen
|
code_HH |
2004-08-30, 12:09 PM CET |
|
Re: paralleles Singal seriell ausgeben
also theoretisch funktioniert mein prog jetzt, habe aber um es endgueltig simulieren zu koennen ein prob...
in meiner testbench definiere ich ein Signal vom typ string ("Hall") moechte dies in meinem Programm aber an ein Signal uebergeben, dieses signal ist auch vom typ string nimmt aber nie den wert von dem testbench signal an, woranb liegt das...
MfG Steffen
|
code_HH |
2004-08-19, 01:17 PM CET |
|
Re: paralleles Singal seriell ausgeben
Moin,
also ich bekomme ein ascii-Zeichensatz uebergeben und moechte jedes Element dieses Zeichensatzes in einen entsprechenden Bitvektor konvertieren, damit ich diesen Bitvektor seriell ausgeben kann...das ist so mein primaeres Ziel, der Rest drumherrum ist spielrei...
Gruss Steffen
|
code_HH |
2004-08-19, 09:28 AM CET |
|
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
|
code_HH |
2004-08-16, 08:21 AM CET |
|
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 <= 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
|
code_HH |
2004-08-10, 04:59 PM CET |
|
Re: paralleles Singal seriell ausgeben
Ich danke Euch, werde das gleich mal testen und Euch über meine Erfolge auf dem Laufenden halten..
Thx :)
|
code_HH |
2004-08-04, 11:54 AM CET |
|
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
|
code_HH |
2004-08-03, 05:48 PM CET |
|
|
|