Fragen zum Datentyp boolean

#1446485
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:
1
architecture arch_led of led is
2
  signal EN : boolean := false;
3
begin
4
  process  
5
  begin  
6
    if rising_edge(clk) then
7
      if EN = true then      
8
        EN<= false;
9
      end if;
10
    end if;
11
      wait for 1000 ms;
12
  end process;
13

14
  process
15
  begin
16
    if rising_edge(clk) then
17
     if EN = false then
18
      EN <= true;
19
     end if;  
20
    end if;
21
    wait for 1000 ms;
22
  end process;
23

24
  with EN select
25
    led <= '1' when true;
26
    led <= '0' when false; 
27
...

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
Moderator (Firma: Titel) Persönliche Seite #1446514
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:
1
  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.
Moderator (Firma: Titel) Persönliche Seite #1446520
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
(Firma: abaxor engineering) #1446701
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
Gast #1446884
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren