mikrocontroller.net

Forum: FPGA, VHDL & Co. Syncron oder nicht syncron


Autor: Detlef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich bin absoluter Neuling im VHDL und würde gern was wissen:

process (Enable, Data)
  BEGIN
   if rising_edge(Enable) then
            if Data = '0' then
        Aktiv1 <= '0';
    elsif (Data = '1') then
    Aktiv1 <= '1';
       end if;
    end if;
end process;

Bei diesem FlipFlop wird die auf die steigende Flanke vom Enable 
geschalten.
Zählt das nur wenn ich "Data" auf '0' geschalten wird oder auch wenn 
dieser auf '1' geschalten wird.
Ich möchte gern das immer bei steigender Flanke die '0' oder '1' 
geschalten wird.

Vielen Dank

Detlef

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

Bewertung
0 lesenswert
nicht lesenswert
Vorab: das heißt synchron (von Chronos, der Gott der Zeit)

Ok, zur Sache.
Schöner formatiert sieht man das besser:
process (Enable, Data) BEGIN -- Data unnötig
   if rising_edge(Enable) then
       if (Data = '0') then
          Aktiv1 <= '0';
       elsif (Data = '1') then
          Aktiv1 <= '1';
       end if;
   end if;
end process;

Das könntest du auch so schreiben:
process (Enable) begin
   if rising_edge(Enable) then
      Aktiv1 <= Data;
   end if;
end process;
Erkennst du jetzt, was du machst?  ;-)

Ich habe ein wenig Bauchweh, wenn der Takt nicht CLK heißt. Denn dann 
könnte es gut sein, dass dieser Teil der Schaltung synchron zu 
Enable ist. Aber zum Rest der Schaltung ist das garantiert asynchron 
:-o

Autor: Detlef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Also ich möchte zu einem Output Enable Takt bei steigender Flanke eine 
hohe Adressleitung auf 0 oder 1 schalten.
Das muss aber immer erst bei steigender Flanke passieren damit der 
Prozessor nicht die falschen Daten bekommt wenn er sie übernimmt.

Viele Grüße

Detlef

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

Bewertung
0 lesenswert
nicht lesenswert
> zu einem Output Enable Takt bei steigender Flanke eine
> hohe Adressleitung auf 0 oder 1 schalten.
Dann schalte die hohe Adressleitung besser dort, wo das Enable-Signal 
erzeugt wird.

> Das muss aber immer erst bei steigender Flanke passieren damit der
> Prozessor nicht die falschen Daten bekommt wenn er sie übernimmt.
Ich verstehe das nicht ganz, hört sich aber ein wenig nach Murks und 
Gebastel an :-/

Autor: Detlef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Ob Murks hin oder her, ich mochte einfach nur 2 Datenstände in einem 
Steuergerät schalten.
Ich möchte halt das bei Umschalten der Datensätze nicht wärend der OE 
Low Phase die umschalten.

Gruß Detlef

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

Bewertung
0 lesenswert
nicht lesenswert
> Ich möchte halt das bei Umschalten der Datensätze nicht wärend der OE
> Low Phase die umschalten.
... die Adressen umschalten?

Worauf wird das Ganze implementiert (CPLD, FPGA)?
Was machst du sonst noch, wo werden die Adressen generieirt?
Warum hast du Bedenken, dass sich die Adressen umschalten könnten?

Wie gesagt:
Im Normalfall ist es so, dass du das System unter Kontrolle hast.

Du wirst sehr seltsame Fehlerbilder beobachten können, wenn du aus einem 
Steuersignal einen Takt generierst. Z.B. änderst du irgendwo anders was, 
der Placer schiebt auf dem FPGA ein paar Slices hin&her, und du hast ein 
anderes Timing auf den Adressleitungen...

Autor: Detlef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Stell Dir einfach vor, ein Steuergerät läuft und läuft und läuft und 
macht ganz normal seine Arbeit.
Nun möchte ich mit einen doppelt so großen Flash den originalen 
Datenstand überarbeiten und gegebenenfalls aktivieren.
Verbaut ist ein 29F200 und mit einen 29F400 kann ich also 2 Datenstände 
speichern und durch anlegen einer '1' an der höchten Adressleitung den 
Datenstand abrufen.
Nun möchte ich aber nicht einfach einen Schalter für die 5 Volt zum 
Anlegen an der höchsten Adressleitung nehmen sondern einen kleinen CPLD 
mit einen FlipFlop der bei Steigender Flanke von OE die '1' oder die '0' 
an die höchste Adressleitung ausgibt, damit es nicht passiert das in der 
Low Phase umgeschalten wird.

Gruß Detlef

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

Bewertung
0 lesenswert
nicht lesenswert
Dazu brauchst du kein CPLD ...
Da reicht ein Latch aus, das nur bei inaktiven CS und OE und WR die 
obere Adressleitung übernehmen kann.

Was dir allerdings bleibt, ist dass du mitten im Lesen eines 
Daten-Blocks umschalten kannst. Und so einen Teil der Daten aus dem 
"unteren" und einen Teil aus dem "oberen" Adressbereich zusammenmischst 
:-/

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.