VHDL R/W Register erzeugen

Gast #4263757
Lesenswert?
• ▲
▼
Hallo,

ich möchte eine Schnittstelle/ein Register in VHDL definieren, das ich 
aus der HW sowohl Schreiben als auch Lesen kann. Die "andere" Seite soll 
auch beides können.
Wie realisiert man sowas?
Brauch ich da einen Treiber dazwischen, der beschreibt wer "Vorrang" hat 
wenn beide gleichzeitig schreiben?
Moderator (Firma: Titel) Persönliche Seite #4263805
Lesenswert?
• ▲
▼
vhdl-anfänger schrieb:
> Wie realisiert man sowas?
Mit einem DP-RAM. Das kann auch in LUTs abgenbildet werden.

> Brauch ich da einen Treiber dazwischen, der beschreibt wer "Vorrang" hat
> wenn beide gleichzeitig schreiben?
Wenn beide "gleichzeitig" schreiben, dann geht das sowieso schief. Aber 
viel schlimmer ist es, wenn sie asynchron ein paar ns versetzt 
schreiben...

> das ich aus der HW sowohl Schreiben als auch Lesen kann.
Wer sind die beiden "Teilnehmer"? Sind die synchron zueinander?
Gast #4263842
Lesenswert?
• ▲
▼
Lothar M. schrieb:
> vhdl-anfänger schrieb:
>> Wie realisiert man sowas?
> Mit einem DP-RAM. Das kann auch in LUTs abgenbildet werden.

Ok. hast du auf deiner Homepage etwas dazu?

Lothar M. schrieb:
>
>> Brauch ich da einen Treiber dazwischen, der beschreibt wer "Vorrang" hat
>> wenn beide gleichzeitig schreiben?
> Wenn beide "gleichzeitig" schreiben, dann geht das sowieso schief. Aber
> viel schlimmer ist es, wenn sie asynchron ein paar ns versetzt
> schreiben...
>
>> das ich aus der HW sowohl Schreiben als auch Lesen kann.
> Wer sind die beiden "Teilnehmer"? Sind die synchron zueinander?
beide Teilnehmer sind synchron zueinander.
Ich hab mir das so vorgestellt(bitte korrigiere mich wenn ich jetzt zu 
kompliziert denke):
Ich will zwischen 2 entitys symbolisieren, das etwas passiert ist.
Dazu setzt A) einen Port auf High. Wenn B den High-Pegel erkannt hat, 
setzt er ihn wieder zurück auf Low.
Moderator (Firma: Titel) Persönliche Seite #4263853
Lesenswert?
• ▲
▼
vhdl-anfänger schrieb:
> beide Teilnehmer sind synchron zueinander.
Wenn beide mit dem selben Takt laufen, dann ist das kein Problem...

> Ich will zwischen 2 entitys symbolisieren, das etwas passiert ist.
> Dazu setzt A) einen Port auf High. Wenn B den High-Pegel erkannt hat,
> setzt er ihn wieder zurück auf Low.
Das ist umständlich, denn dafür brauchst du einen inout Port im 
FPGA. dort gibt es sowas gar nicht, und deshalb muss der Synthesizer das 
aufwändig mit einem Multiplexer auflösen.

Sinnvoller ist ein traditionelles Handshake mit einer Hin- und einer 
Rückleitung:
1. A setzt ein "Anfordern"-Signal.
2. B erkennt die Anforderung und setzt das "Erkannt"-Signal
3. A sieht das "Erkannt"-Signal und deaktiviert sein "Anfordern"-Signal
4. B sieht, dass das "Anfordern" Signal inaktiv ist und setzt das 
"Erkannt"-Signal inaktiv
Gast #4263860
Lesenswert?
• ▲
▼
Lothar M. schrieb:
> vhdl-anfänger schrieb:
>> beide Teilnehmer sind synchron zueinander.
> Wenn beide mit dem selben Takt laufen, dann ist das kein Problem...
>
>> Ich will zwischen 2 entitys symbolisieren, das etwas passiert ist.
>> Dazu setzt A) einen Port auf High. Wenn B den High-Pegel erkannt hat,
>> setzt er ihn wieder zurück auf Low.
> Das ist umständlich, denn dafür brauchst du einen inout Port im
> FPGA. dort gibt es sowas gar nicht, und deshalb muss der Synthesizer das
> aufwändig mit einem Multiplexer auflösen.
>
> Sinnvoller ist ein traditionelles Handshake mit einer Hin- und einer
> Rückleitung:
> 1. A setzt ein "Anfordern"-Signal.
> 2. B erkennt die Anforderung und setzt das "Erkannt"-Signal
> 3. A sieht das "Erkannt"-Signal und deaktiviert sein "Anfordern"-Signal
> 4. B sieht, dass das "Anfordern" Signal inaktiv ist und setzt das
> "Erkannt"-Signal inaktiv

Danke. Bei mir ist es zwar eine leicht andere Situation, aber es lässt 
sich mappen. Danke schonmal.

Trotzdem würd mich interessieren wie man das mit einem "DP-RAM" umsetzt. 
Also doch inout-Port und Tri-State Treiber dazwischen?
#4263869
Lesenswert?
• ▲
▼
nein, der DP-Ram hat 2 Ports. Und jeder Port hat auch einen Dateneingang 
und einen Datenausgang.
Nur die Addressleitungen sind nur einmal pro Port vorhanden.

Durch beide Ports können Daten gelesen und/oder geschrieben werden. Das 
genaue Verhalten bei Konfliktsituationen kann man aus der Doku lesen und 
zum Teil im VHDL Code beeinflussen.
Gast #4264114
Lesenswert?
• ▲
▼
> Und trotzdem darf man sich nicht wundern, wenn was eigenartiges
> passiert, wenn von beiden Ports "quasi gleichzeitig" geschrieben wird
Wenn auf unterschiedliche Adressen geschrieben wird ist das doch OK.
Was passiert wenn auf den gleichen Bereich geschrieben wird ist 
unterschiedlich, da gibt es DP-RAMs die einen Port bevorzugen und am 
andren Port einen Busy melden usw.
Moderator (Firma: Titel) Persönliche Seite #4264377
Lesenswert?
• ▲
▼
uwe schrieb:
> Wenn auf unterschiedliche Adressen geschrieben wird ist das doch OK.
Es ist ein einziges Statusbit. Das hat sicher von beiden Seiten die 
selbe Adresse...

> Was passiert wenn auf den gleichen Bereich geschrieben wird ist
> unterschiedlich, da gibt es DP-RAMs die einen Port bevorzugen und am
> andren Port einen Busy melden usw.
Hilft alles nichts, wenn die Zugriffe asynchron sind. Da gibt es dann 
auf jeden Fall irgendwo eine Setup/Hold Verletzung, wenn nicht irgendwie 
einsynchronisiert wird.
Gast #4265275
Lesenswert?
• ▲
▼
clockReg:process(clk)
begin
  if rising_edge(clk) then
     reg_out <= reg_in;
  end if;
end process clockReg;


reg_in <= inA when (weA='1') else inB  when (weB='1') else reg_out;

oder

reg_in <= inB when (weB='1') else inA  when (weA='1') else reg_out;

oder

regin <=  inA when (weA='1' and weB='0') else inB  when (weA='0' and 
weB='1') else reg_out;
writeError <= weA and weB;

In den ersten beiden Fällen hat A bzw. B write-priority. Im letzten Fall 
wird der Schreibzugriff ignoriert, wenn beide gleichztig schreiben und 
ein error-Signal gesetzt. Welche Semantik geeigent ist, musst Du eben 
entscheiden.

Tristates brauchst Du nicht, bei moderen (Xilinx-)FPGAs gibts die auch 
nur noch in den IO-Ports und nicht mehr in der Logik.

Welche Hardware willst Du überhaupt verwenden? Oder brauchst Du 
vielleicht nur ein Simulationsmodell?

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