Forum: FPGA, VHDL & Co. resolution function für string


von Andreas Sathle (Gast)


Lesenswert?

Hallo,

ich habe folgendes problem:

ich will auf einen string signal von zwei verschiedenen processen
zugreifen.

habe folgendes in inet zu dem thema gefunden.

http://mikro.e-technik.uni-ulm.de/vhdl/anl-deut.vhd/html/node28.html

werde aber daraus nicht viel schlauer.

Gibt es eine fertige resolution funktion für string signale zum
download?

Bzw. kann mir jemand ein paar tipps geben wie ich die selbst schreiben
kann, da ich aber ein noob in sachen VHDL-programmierung bin, bitte
etwas ausführlicher.

Danke und Gruß
Andreas.

von Zennehoy (Gast)


Lesenswert?

Was verstehst du denn unter "string signal"?
Wenn du es nur lesen musst, dann mach das einfach. Sonst wirst du einen
Multiplexer einbauen muessen (angenommen das Signal ist in deinem FPGA
intern enthalten). Manche FPGA's unterstuetzen auch interne
Tri-State-Buffers, aber nicht viele.
Zen

von Andreas Sathle (Gast)


Lesenswert?

nein, lesen klapt ohne problemme, allerdings den signal zu überschreiben
funktioniert nicht.

ENTITY Programm IS PORT
    (
....
       STRING_OUT     : out string(6 downto 1) --ausgabe von texten
....
    );
END ENTITY Programm;

jetzt versuche ich von zwei verschiedenen processen über diesen out-pin
texte auszugeben.

Was meinst du mit Tri-State-Buffer? Wie gesagt ich bin ein absoluter
anfänger, könntest du das bitte etwas genauer erklären.

Grüße
Andreas

von Zennehoy (Gast)


Lesenswert?

Hmm, ich wusste gar nicht, das string ueberhaupt ein VHDL typ ist...
Was willst du denn extern (also ausserhalb deiner Entity) mit diesem
String anfangen?

Ein grosser Fehler den Anfaenger sehr hauefig machen ist das ganze als
Programm und nicht als Hardware zu sehen. Du schreibst hier kein
Programm das sequentiel von einem Kontroller durchgearbeitet wird. Du
beschreibst die Struktur einer "Platine"!

Man sollte eigentlich immer mit einer Zeichnung anfangen, wie das ganze
als Hardware aussehen soll - und zwar am Anfang mit einzelnen Registern
und Gattern, so als ob du die Schaltung auf einer Platine mit einzelnen
ICs zusammen loeten wuerdest. Dann kann man diese Zeichnung per VHDL
beschreiben, um sie auf einen FPGA zu bringen.
Bei komplizierteren Designs zeichnet man natuerlich nicht mehr einzelne
Register, aber auch hier sollte man sich das System erst einmal
zeichnen. Dabei hat man dann nicht nur einzelne Register und Gatter,
sondern auch schon kompliziertere Bloecke die von sich aus wieder aus
Registern und Gattern bestehen, und so weiter.

Es sollte auch klar sein, das es in einer Hardware so etwas wie einen
String eigentlich nicht geben kann... es gibt schliesslich nur einzelne
"bits" die eine '1' oder '0' darstellen koennen. Du kannst zwar
viele bits (pro Character 8 bits) als "String" definieren, im grunde
sind es aber immer noch nur '1'-en und '0'-en.

Also noch mal die Frage, was du mit diesen Strings ueberhaupt machen
moechtest?

Zurueck zu deinem Problem, wie man zwei Treiber fuer ein Signal
hinkriegt:
Du musst halt zusehen, dass immer nur ein Process auf einmal den string
beschreiben kann. Die ordentliche Methode dies zu machen ist mit einem
Multiplexer. Das sieht im grunde so aus: beide deiner Prozesse
generieren ihr eigenes Signal. Dann wird in einem weiteren Prozess
ausgewaehlt, welches dieser beiden Signale nun an dein Ausgangsignal
angeschlossen wird.
Es gibt diverse Methoden dies in VHDL zu beschreiben, zum beispiel ein
Multiplexer mit Eingaengen A und B von denen je nach dem Wert von S
einer zum Ausgang Y geleitet wird (Schau dir mal die Funktionsweise von
einem Multiplexer (Mux, zb. 74LS151) in einem Datenblatt an wenn das
unverstaendlich war):

architecture...
signal A,B,Y,S:    std_logic;
...
begin
...
-- 1. Variante:
S <= A when (S='0') else B;
-- 2. Variante:
process(A,B,S) begin
  if(S='0') then
    Y <= A;
  else
    Y <= B;
  end if;
end process;
...
end architecture;

Hoffentlich hilft dir das weiter, sonst lass uns mal wissen wofuer du
die strings brauchst!
Zen

von Andreas Sathle (Gast)


Lesenswert?

Hallo Zen,

Wie du schon sagtest: Ich komme aus der Softwareentwicklung und habe
das wirklich wie ein Programm runter geschrieben.

Allerdings habe ich dann bei der Synthese meine ersten Probleme
bekommen...mit denen ich immer noch zu kämpfen habe.

Dazu kommt noch das ich in FPGA - Entwicklung ein absoluter Anfänger
bin und für Beseitigung von meisten Fehlern/Warnungen sehr sehr lange
brauche.

Falls du wissen willst was ich mit dem String vorhabe, hier sind die
VHDL Dateien:

http://www.mikrocontroller.net/forum/read-9-198112.html#new

Der String wird vom "Programm" an den "Wrapper" übergeben und dort
verarbeitet.

Ich versuche deine Idee mit dem Multiplexer umzusetzen...mal sehen was
daraus wird.

Auf jeden Fall danke für die Hilfe.

Grüße
Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.