www.mikrocontroller.net

Forum: FPGA, VHDL & Co. wieder mal das bad description ding -.-


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey ihrs,
bin neu in sachen vhdl und bin wie viele auf das bad descritpion ding 
gestoßen, habe mir auhc einige per suchfunktion gezeigte threads 
durchgelesen, die aber nicht ganz mein problem lösen:
process( oe,sw) begin
  
  if rising_edge(oe) then
    if sw='1' then
      OUT_RST <= OUTPUT_ARRAY;
      OUT_CUP <= (others => '0');
    else 
      OUT_RST <= (others => '0');
      OUT_CUP <= OUTPUT_ARRAY;
    end if;
  end if;
end process;
mag funktionieren, aber mein ziel ist es, wenn days signal oe wieder 
fällt (falling edge) bzw low ist, dass dann sowohl OUT_RST als auch 
OUT_CUP dann beide den zustand (others => '0') einnehmen also 
vollständig gecleared werden:
process( oe,sw) begin
  
  if oe = '1' and oe'event then
    if sw='1' then
      OUT_RST <= OUTPUT_ARRAY;
      OUT_CUP <= (others => '0');
    else 
      OUT_RST <= (others => '0');
      OUT_CUP <= OUTPUT_ARRAY;
    end if;
  else  
    OUT_RST <= (others => '0');
    OUT_CUP <= (others => '0');
  end if;
  
end process;
und da kommt dann der fehler.
ich scheine vhdl noch nciht ganz begriffen zu haben (wohl nicht mal im 
ansatz) deswegen bitte ich euch mir zu helfen!!
danke!
gruß Hannes

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute das OE soll ein Output enable sein. So wie Du es jetzt 
beschrieben hast, ist es ein Takt.
Wenn ich Dich richtig verstanden habe, willst Du wenn OE = '1' ist die 
Ausgänge schalten, ansonsten sollen die 0 sein.
Das machst Du kombinatorisch:
process( oe,sw) begin
  
  if oe = '1' then
    if sw='1' then
       OUT_RST <= OUTPUT_ARRAY;
       OUT_CUP <= (others => '0');
    else 
       OUT_RST <= (others => '0');
       OUT_CUP <= OUTPUT_ARRAY;
    end if;
  else  
    OUT_RST <= (others => '0');
    OUT_CUP <= (others => '0');
  end if;
  
end process;

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey super, es funktioniert!
also er gibt noch ne warnung aus dass er ein signal in der sensivity 
list vermisst, obwohl beide signale aufgelistet sind, don't care.

aber nochm,al zur der clock sache:
wenn ich also clock'event bzw rising edge mache, dann kann ich 
synchronisieren, aber warum kann ich das nicht mit logik verknüpfen?
welcher unterschied bestünde, wenn ich beim synchronisieren anstatt 
foo'event einfach foo= '1' mache?
THX 4 HELP!

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Unterschied besteht im Zeitpunkt.
Wenn Du rising_edge/event machst, dann wird genau der Zeitpunkt der 
Flanke etwas gemacht.
  ___
__| |__
  ^
 hier

Wenn Du = '1' sagst, dann wird etwas gemacht wenn das Signal den Wert 
'1'.
  ___
__| |__
   ^
  hier

(vereinfacht)

Du siehst es handelt sich um zwei ganz verschiedene Dinge. Beim ersten 
die steigende Flanke und beim Zweiten ein konkreter Wert. Der konkrete 
Wert liegt länger an.
In einem FPGA kann man die Flipflops entweder mit Flankenerkennung 
(steigend ODER fallend) oder Levelerkennung konfigurieren. Es sind keine 
Kombinationen bei einem FF möglich.

> wenn ich also clock'event bzw rising edge mache, dann kann ich
> synchronisieren, aber warum kann ich das nicht mit logik verknüpfen?

Du kannst das verknüpfen. Immer in dieser Form:
process(foo)
begin
 if(rising_edge(foo))then
   if(bar = '1')then
     mach was...
   else
     mach was anderes... 
   end if;
end process;

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, das Signal das fehlt ist das OUTPUT_ARRAY. In einen 
kombinatorischen Prozess müssen alle abgefragten Signale in die 
sensitivity-list. In einem getakteten Prozess nur Clk (und Reset).

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.