wieder mal das bad description ding -.-

Gast #837750
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:
1
process( oe,sw) begin
2
  
3
  if rising_edge(oe) then
4
    if sw='1' then
5
      OUT_RST <= OUTPUT_ARRAY;
6
      OUT_CUP <= (others => '0');
7
    else 
8
      OUT_RST <= (others => '0');
9
      OUT_CUP <= OUTPUT_ARRAY;
10
    end if;
11
  end if;
12
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:
1
process( oe,sw) begin
2
  
3
  if oe = '1' and oe'event then
4
    if sw='1' then
5
      OUT_RST <= OUTPUT_ARRAY;
6
      OUT_CUP <= (others => '0');
7
    else 
8
      OUT_RST <= (others => '0');
9
      OUT_CUP <= OUTPUT_ARRAY;
10
    end if;
11
  else  
12
    OUT_RST <= (others => '0');
13
    OUT_CUP <= (others => '0');
14
  end if;
15
  
16
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
Gast
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:
1
process( oe,sw) begin
2
  
3
  if oe = '1' then
4
    if sw='1' then
5
       OUT_RST <= OUTPUT_ARRAY;
6
       OUT_CUP <= (others => '0');
7
    else 
8
       OUT_RST <= (others => '0');
9
       OUT_CUP <= OUTPUT_ARRAY;
10
    end if;
11
  else  
12
    OUT_RST <= (others => '0');
13
    OUT_CUP <= (others => '0');
14
  end if;
15
  
16
end process;
Gast
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!
Gast
Der Unterschied besteht im Zeitpunkt.
Wenn Du rising_edge/event machst, dann wird genau der Zeitpunkt der 
Flanke etwas gemacht.
1
  ___
2
__| |__
3
  ^
4
 hier

Wenn Du = '1' sagst, dann wird etwas gemacht wenn das Signal den Wert 
'1'.
1
  ___
2
__| |__
3
   ^
4
  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:
1
process(foo)
2
begin
3
 if(rising_edge(foo))then
4
   if(bar = '1')then
5
     mach was...
6
   else
7
     mach was anderes... 
8
   end if;
9
end process;
Gast
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.