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


von Detlef (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Vorab: das heißt synchron (von Chronos, der Gott der Zeit)

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

Das könntest du auch so schreiben:
1
process (Enable) begin
2
   if rising_edge(Enable) then
3
      Aktiv1 <= Data;
4
   end if;
5
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

von Detlef (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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 :-/

von Detlef (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Detlef (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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 
:-/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.