mikrocontroller.net

Forum: FPGA, VHDL & Co. Fragen zum Datentyp boolean


Autor: Andi Z. (duderino65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe eine frage zum boolean datentyp in vhdl.
mir ist aufgefallen dass ich diesen datentyp in 2 oder evtl auch in 
mehreren prozessen ändern kann. (natürlich nicht gleichzeitig)

ich habe es mit einem std_logic typ versucht wobei der compiler ja schon 
schreit. beim boolean typ gibt es keine meldung.
lieg ich da richtig, dass ich bool'sche typen in mehreren prozessen 
ändern kann? also wie ne art semaphore?!

ich habe das auch durch ein bsp-programm ausprobiert und möchte da doch 
noch eure meinung hören.

verwende den MachXO von lattice und habe ispLEVER 7.2

hier mal das bsp-programm:
architecture arch_led of led is
  signal EN : boolean := false;
begin
  process  
  begin  
    if rising_edge(clk) then
      if EN = true then      
        EN<= false;
      end if;
    end if;
      wait for 1000 ms;
  end process;

  process
  begin
    if rising_edge(clk) then
     if EN = false then
      EN <= true;
     end if;  
    end if;
    wait for 1000 ms;
  end process;

  with EN select
    led <= '1' when true;
    led <= '0' when false; 
...

nach dem routing oder vllt noch davor meldet der compiler
       logical net 'clk' has no load
somit kann ich dann das signal auch nicht einem clk-pin des MachXO 
zuweisen. woran liegt das denn? daran dass ich keine sensitivity-list 
verwende??

mfg

andi

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
std_logic kann nur von einem (in Zahlen 1) Prozess getrieben werden. 
Deine Beschreibung wird in einem "multiple source" Fehler resultieren.

Mit boolean wirst du das bestenfalls noch simuliert bekommen. Bei der 
Erzeugung von Hardware wirst du dann aber den selben Fehler erhalten.

Viel schlimmer ist das:
  wait for 1000 ms; 
Sowas wird der Synthesizer einfach ignorieren. Zeiten können nicht 
synthetisiert werden. Um eine Zeit zu reaslisieren, brauchst du einen 
Zähler.

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dieses konstrukt ist doch durch das "wait for ..." eh nicht 
synthetisierbar. und ja, bei einer rising_edge abfrage muss das signal 
eigentlich auch in der sensitivity-list stehen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> liegt das daran dass ich keine sensitivity-list verwende??
Das kann durchaus die Ursache für deinen fehlenden clock sein.

> dass ich keine sensitivity-list verwende??
Das bedeutet, dass zudem deine Simulation falsch sein wird.

Du hast ziemlich grundlegende Probleme mit dieser Beschreibung, der 
clock ist das Kleinste davon  :-o

Autor: Andi Z. (duderino65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke.

gibt es den eine möglichkeit sowas wie semaphoren in vhdl zu realisieren 
ausser das ganze mit case-states zu machen?? also dass mein 2.prozess 
erst beginnt wenn er die erlaubnis des 1. prozesses bekommt.

mfg andi

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du setzt ein Enable Signal im ersten Prozess, und wenn der 2. Prozess 
gestartet wurde, nimmst du im ersten Prozess das Enable wieder weg. Das 
läuft umgangssprachlich unter "Handshake"...

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei deinem Beispiel fehlt zwar die Deklaration der Entity, trotzdem 
würde ich sagen, dass du kein Ausgangssignal treibst, zumindest hängt 
von EN kein Ausgangssignal ab. Darum ist keine Logik in deinem MACHX0, 
es wird alles weg optimiert. Somit wird das Clk-Signal nicht genutzt.

Tom

Autor: Andi Z. (duderino65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja ich treibe eigentlich eine led die ja am port angeschlossen ist. 
diese kann ich ja auch zuweisen. das war ja auch nur ein beispiel womit 
ich das mit dem boolean datentyp testen konnte.

mfg

andi

Autor: nixda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

signals mit unresolved typen (zb. _ulogic) koennen nur einen treiber 
haben, d.h. die koennen nur aus einem process oder parallel logic 
getrieben werden. resolved types koennen aus beliebig vielen quellen 
getrieben werden, vhdl/simulator uebernehmen fuer dich die driver 
resolution (sodass 0+1->X, und Z+1->1,... wird)

boolean ist definiert in std standard und muesste unresolved sein.

'semaphore' ist etwas anderes, resolved/unresolved sind statische 
eigenschaften.

regards/mfg

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das war ja auch nur ein beispiel womit
> ich das mit dem boolean datentyp testen konnte.
Wie schon gesagt: es liegt nicht am boolean :-/

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.