Hallo, ich möchte über ein Interface auf etwas zugreifen. Das Timing ist im Anhang. Wie man dort sieht, kommt das AddACK in dem gleichen Zyklus, wie das AddReq. Da ich die Ansteuerung in einer StateMachine machen wollte, welche auf die positive Taktflake triggert, bekomme ich das AddACK nicht mit. Gibt es eine möglichkeit das AddACK Signal denoch zu erfassen, oder bleibt mir nix anderes übrig, als meine Taktfrequenz der StateMachine zu verdoppeln? Danke für Hilfe MfG matzunami
> AddrACK ist eine Antwort auf AddrREQ. Dieses Signal wird offenbar mit dem steigenden Takt gesetzt, und irgendeine Kombinatorik antwortet darauf mit dem AddrACK. Du kannst auf dieses Signal dann sowieso erst mit der folgenden Taktflanke reagieren. EDIT: > das ganze soll in VHDL realisiert werden Was denn überhaupt?
Das AddrREQ wird von mir gesetzt, und das AddrACK kommt in dem selben Taktzyklus, doch wird bei der nächsten steigenden Flanke wider abgeschalten. D.h. wenn ich bis zur nächsten steigenden Flanke warte ist AddrACK nicht mehr da.
> D.h. wenn ich bis zur nächsten steigenden Flanke warte ist > AddrACK nicht mehr da. Wenn ich das Timing-Diagramm ansehe, dann ist das stabil bis zum nächsten Takt. Und erst dann wird durch das Vorhandensein von AddrACK das Signal AddrREQ zurückgesetzt. EDIT Zum Verständnis: Bei so einem Timing-Diagramm interessiert immer, was vor dem Takt anliegt. Dieser Zustand ergibt bei der Taktflanke dann den nächsten.
hm.. nagut, bei mir siehts so aus als fällt AddrACK genau zur steigenden flanke wider ab, dass musst ja dann doch noch ein wenig länger anbleiben... ich wert mal so tun als ist AddrACK mit der steigenden Flanke auswertbar und schauen obs geht danke für die schnelle antwort
Willst du dir jetzt doch das NPI antun? Wie gesagt, der MPMC setzt das Signal mit der steigenden Flanke und nimmt es mit der nächsten wieder weg, wenn das ACK vor der Flanke kam. So wie ich das verstehe, kannst du das ACK auch synchron setzen, dann muss der MPMC eben noch einen Takt warten, bis er das REQ wieder wegnehmen darf. Dazu ist das ACK ja da.....
:) ja ich werd mir das jetzt doch an tun... bei deinem letzten post hast du, glaub ich was verwechselt... das AddrREQ setzt ich mit der steigenden Flanke und nehm es auch wider bei der nächstn steigenden flanke weg, wenn das AddrACK zwischenzeitlich kam.
Achso, du setzt das REQ und der MPMC setzt daraufhin das ACK? Naja, ist ja egal, bleibt das gleiche. Dann musst du das REQ solange halten, bis der das ACK gegeben hat. Das ganze kann doch synchron zur steigenden Flanke passieren, also kannst du deine State Machine nutzen....wo ist denn jetzt das Problem?
das problem ist: AddrACK: "Valid for one cycle of MPMC_Clk0." Das heißt bei mir das wenn ich das Signal teste (in etwa so) if (AddrACK = '1') then state <= next_state; end if; das AddrACK nicht mehr da ist, weil es mit der steigenden flanke wider vom MPMC weggenommen wird
Achso. Das ist aber immer so. Man setzt ein Signal mit der steigenden Flanke und nimmt es mit der nächsten wieder weg. Mit der Flanke, mit der es weggenommen wird, wird es ins nächste FlipFlop übernommen. Das ist ja noch ein paar hundert ps nach der Flnake da. Innerhalb eines FPGA geht das problemlos, weil die FF am gleichen Taktnetz hängen. Wenn das Signal den FPGA verlassen soll, muss man halt aufpassen, dass man mit den Laufzeiten hinkommt. Du kannst es also so übernehmen:
1 | if rising_edge(MPMC_CLK0) then |
2 | if (AddrACK = '1') then |
3 | state <= next_state; |
4 | end if; |
5 | end if; |
Wie Lothar schon schrieb: wichtig ist, was vor der Flanke anliegt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.