BiPhaseMark, clk und halbe Periode

#1047839
Lesenswert?

Hallo,

für die BPM Kodierung benötigt man bei einem Datensignal einen 
Zustandswechsel auf der fallenden Taktflanke.
Wenn ich allerdings so etwas aufbaue (also ein:
1
if (CLK'event and CLK='1') then [...]
gefolgt von einem
1
elsif (CLK'event and CLK='0') then [...]

bekomme ich Fehlermeldungen (asynchronous load...)bei der Synthese.

Hat jemand Hinweise, wie es richtig umzusetzen ist?
#1047843
Lesenswert?

@ Manuel Neumann (wight)

>für die BPM Kodierung benötigt man bei einem Datensignal einen
>Zustandswechsel auf der fallenden Taktflanke.

Naja, diese Formulierung und Denkweise ist verbreitet, aber sehr 
unglücklich gewählt.

>bekomme ich Fehlermeldungen (asynchronous load...)bei der Synthese.

Weil ein synchroner Prozess nur auf EINE Flanke reagieren kann.

>Hat jemand Hinweise, wie es richtig umzusetzen ist?

Ganz einfach, man generiert den Datenstrom mit dem doppelten Takt.

MFG
Falk
#1047858
Lesenswert?

Falk Brunner wrote:
> @ Manuel Neumann (wight)
>
>>für die BPM Kodierung benötigt man bei einem Datensignal einen
>>Zustandswechsel auf der fallenden Taktflanke.
>
> Naja, diese Formulierung und Denkweise ist verbreitet, aber sehr
> unglücklich gewählt.
>
Und wie lautet sie korrekter?

>>bekomme ich Fehlermeldungen (asynchronous load...)bei der Synthese.
>
> Weil ein synchroner Prozess nur auf EINE Flanke reagieren kann.
>
>>Hat jemand Hinweise, wie es richtig umzusetzen ist?
>
> Ganz einfach, man generiert den Datenstrom mit dem doppelten Takt.
>
> MFG
> Falk

Genau das habe ich gemacht. Puh, ich dachte schon, ich hätte etwas ganz 
elementares übersehen.
Moderator (Firma: Titel) Persönliche Seite #1047938
Lesenswert?

> Und die erhöhte Bitrate ...
Wie hoch soll die denn überhaupt sein?
Was willst du denn machen?

Sowas wie
1
   process (clk) begin
2
      if rising_edge(clk) then
3
         :
4
      elsif falling_edge(clk) then
5
         :
6
      end if;
7
   end process;
geht mit FFs im FPGA nicht. Die haben nur 1 Takteingang, und der kann 
nur auf entweder die steigende oder die fallende Flanke reagieren.
Moderator (Firma: Titel) Persönliche Seite #1048095
Lesenswert?

Manuel Neumann wrote:
> Den wollte ich dann eben je nach Dateneingang doppelt oder halb so
> schnell ausgeben.
Meine Frage zielte auf einen Absolutwert ab, z.B. 10kBit/s oder 
100MBit/s ;-)

Wenn die Geschwindigkeit eher langsam ist, könntest du mit einem sehr 
viel höher getakteten FPGA das Ganze einsynchronisieren und so 
weiterverarbeiten.

Wenn die Geschwindigkeit hoch ist, mußt du aus dem Bitstrom erst mal 
einen Takt extrahieren. Spannend dürfte dann aber werden, wenn der 
Bitstrom nicht kontinuierlich kommt.
#1048125
Lesenswert?

Lothar Miller wrote:
> Manuel Neumann wrote:
>> Den wollte ich dann eben je nach Dateneingang doppelt oder halb so
>> schnell ausgeben.
> Meine Frage zielte auf einen Absolutwert ab, z.B. 10kBit/s oder
> 100MBit/s ;-)
>
Die erste Fassung soll mit 40 MHz arbeiten, da BPM bitorientiert ist, 
sind wir also bei 40Mbit/s.



> Wenn die Geschwindigkeit eher langsam ist, könntest du mit einem sehr
> viel höher getakteten FPGA das Ganze einsynchronisieren und so
> weiterverarbeiten.
>
> Wenn die Geschwindigkeit hoch ist, mußt du aus dem Bitstrom erst mal
> einen Takt extrahieren. Spannend dürfte dann aber werden, wenn der
> Bitstrom nicht kontinuierlich kommt.

Gibt es denn einen Trick, mit dem ich die Ausgangsclock doppelt so 
schnell laufen lassen kann? Eine zusätzliche Clock und ein eigener 
Prozess vielleicht (VHDL)?
#1048244
Lesenswert?

@ Manuel Neumann (wight)

>Gibt es denn einen Trick, mit dem ich die Ausgangsclock doppelt so
>schnell laufen lassen kann? Eine zusätzliche Clock und ein eigener
>Prozess vielleicht (VHDL)?

In VHDL direkt nicht, in den modernen FPGAs schon. Sog. DDDR-Register, 
Dual Datarate Register. Die können Daten auf der steigenden und 
fallenden Flanke ausgeben. Dazu haben sie zwei Daten- und Takteingänge.

MFG
Falk
#1054569
Lesenswert?

Ok, encoder und decoder funktionieren in Simulation, aber leider nur 
fast in Hardware.

Z. Zt. taste ich den kodierten Datenstrom mit dreifacher Frequenz ab und 
ein Synchronisationssignal zeigt, dass das syncpattern gefunden wird.
Aber der dekodierte Datenstrom sieht nicht so aus, wie er soll sondern 
springt immer noch von in kurzen Peaks nach 1, auch wenn eine 0 als 
Originaldatum anliegt.

Liegt das an Phasenungleichheiten?

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