mikrocontroller.net

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


Autor: Andreas Sathle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.vh...

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.

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Sathle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Sathle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.