Timing Probleme

Gast #1336938
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #1336961
Lesenswert?
• ▲
▼
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.
Moderator (Firma: Titel) Persönliche Seite #1336965
Lesenswert?
• ▲
▼
> 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.
Gast #1336970
Lesenswert?
• ▲
▼
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
#1337134
Lesenswert?
• ▲
▼
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.....
Gast #1337789
Lesenswert?
• ▲
▼
:) 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.
#1337838
Lesenswert?
• ▲
▼
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?
Gast #1337862
Lesenswert?
• ▲
▼
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
#1337894
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren