Forum: FPGA, VHDL & Co. Gateway "verschluckt" Pulse


von Steffen H. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe zwei Eingangssignale Data0 + Data1, die ich bei gedrücktem 
Taster einfach kopieren und als Ausgangssignal wieder ausgeben möchte. 
Die Eingangsignale laufen synchron zu einem Taktsignal (ca. 100 MHz, 
stabiler Pegel bei steigender Flanke).

Mein Design sieht im Kern wie folgt aus:
1
OUT_DATA0 <= '0' when (IN_BTN_TEST = '1') else IN_DATA0;
2
OUT_DATA1 <= '0' when (IN_BTN_TEST = '1') else IN_DATA1;

Meine Constraints im Kern so:
1
# LVDS interface
2
NET "IN_CLK_P" LOC = D10 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";
3
NET "IN_DATA0_P" LOC = A13 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";
4
NET "IN_DATA1_P" LOC = B14 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";
5
NET "OUT_CLK_P" LOC = B6 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";
6
NET "OUT_DATA0_P" LOC = A4 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";
7
NET "OUT_DATA1_P" LOC = C5 | IOSTANDARD = LVDS_25 | DIFF_TERM = "TRUE";

Wenn ich mit Chipscope messe, stelle ich leider fest, dass einzelne 
Pulse verschluckt werden. Siehe Anhang.

Was mache ich falsch? Kann mir bitte jemand helfen?

Grüße
Steffen

von Gustl, der Echte! (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

ich verstehe nicht wieso du

  attribute box_type: string;
  attribute box_type of IBUFDS: component is "black_box";
  attribute box_type of IBUFGDS: component is "black_box";
  attribute box_type of OBUFDS: component is "black_box";
  attribute keep: string;
  attribute keep of IN_CLK: signal is "true";

aber nicht

--library UNISIM;
--use UNISIM.VComponents.all;

nutzt. IBUFDS, IBUFGDS, OBUFDS und noch viele Weitere sind dort 
definiert.

Ausserdem sind OUT_CLK und IN_CLK nicht verbunden.

Ich habe die .vhd mal so geschrieben wie ich das machen würde und durch 
Vivado geschickt. ISE habe ich nicht. Das hat wunderbar gebaut und 
sollte genau so funktionieren.

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


Lesenswert?

Steffen H. schrieb:
> Wenn ich mit Chipscope messe
Wenn ich da so diese kurzen Peaks so ansehe: mit welchem Takt läuft dein 
Chipscope? Und woraus wird das getaktet?

Was kannst du mit einem externen Oszilloskop an den FPGA-Pins messen?

von Duke Scarring (Gast)


Lesenswert?

Steffen H. schrieb:
> bei gedrücktem
> Taster einfach kopieren
Ist denn Dein Taster auch einsynchronisiert und entprellt?

von Gustl B. (gustl_b)


Lesenswert?

Lothar M. schrieb:
> mit welchem Takt läuft dein Chipscope? Und woraus wird das getaktet?

Sehr gut!
Und was sagt die Simulation?

Duke Scarring schrieb:
> Ist denn Dein Taster auch einsynchronisiert und entprellt?

Im Screenshot ist der dauerhaft low. Könnten natürlich kurze high Pulse 
drinnen sein die das Chipscope nicht anzeigt.

von Steffen H. (Gast)


Angehängte Dateien:

Lesenswert?

Gustl, der Echte! schrieb:
> ich verstehe nicht wieso du
> [...]
> aber nicht
>
> --library UNISIM;
> --use UNISIM.VComponents.all;
>
> nutzt.

Anfängerfehler! Danke für den Hinweis, es funktioniert wunderbar.

Gustl, der Echte! schrieb:
> Ausserdem sind OUT_CLK und IN_CLK nicht verbunden.

Ebenfalls korrigiert, aber die Pulse werden weiter verschluckt.

Gustl, der Echte! schrieb:
> Ich habe die .vhd mal so geschrieben wie ich das machen würde und durch
> Vivado geschickt. ISE habe ich nicht. Das hat wunderbar gebaut und
> sollte genau so funktionieren.

Das ist nett, danke! Leider funktioniert es auch damit nicht. Es treten 
weiterhin sporadisch Pulse am Ausgang auf, wo am Eingang keine gemessen 
werden. Meine RTL sieht übrigens nun genauso aus, siehe Anhang.

.


Lothar M. schrieb:
> Wenn ich da so diese kurzen Peaks so ansehe: mit welchem Takt läuft dein
> Chipscope? Und woraus wird das getaktet?

Der Takteingang ist mit IN_CLK verbunden. Siehe Anhang. IN_CLK ist der 
Bustakt (ca. 100 MHz). Data 0 und Data 1 sind stabil auf der steigenden 
Flanke.

Lothar M. schrieb:
> Was kannst du mit einem externen Oszilloskop an den FPGA-Pins messen?

Mein Oszilloskop ist leider zu langsam. Außerdem habe ich leider keinen 
Differenztastkopf bzw. zu wenig Kanäle für Einzelmessungen. Heißt: Ich 
kann keine Messung durchführen :-(


.


Gustl B. schrieb:
> Duke Scarring schrieb:
>> Ist denn Dein Taster auch einsynchronisiert und entprellt?
>
> Im Screenshot ist der dauerhaft low. Könnten natürlich kurze high Pulse
> drinnen sein die das Chipscope nicht anzeigt.

Der Taster ist nur dafür da, dass die Verbindung IN -> OUT nicht 
wegoptimiert wird. Der Eingang ist hardwareseitig offen und per 
Constraint auf "PULLDOWN" gesetzt.


Gustl B. schrieb:
> Sehr gut!
> Und was sagt die Simulation?

Meinst Du die Simulation von Chipscope? Kann ich Chipscope simulieren?!

von Steffen H. (Gast)


Lesenswert?

Eine Sache hatte ich noch erwähnt, um die Diskussion nicht in die 
falsche Richtung zu lenken: ISE wirft Warnungen, auch solche, die auf 
Probleme mit dem Takt hinweisen. Allerdings darf ich, soweit ich es im 
Netz gelesen habe, diese Warnungen ignorieren.

Hier die Liste aller Warnungen:
1
WARNING:ConstraintSystem:56 - Constraint <TIMESPEC TS_J_CLK = PERIOD "J_CLK"
2
   30000.000000000 pS HIGH 50.000000000 %;>: Unable to find an active 'TNM' or
3
   'TimeGrp' constraint named 'J_CLK'.
4
5
WARNING:ConstraintSystem:56 - Constraint <TIMESPEC TS_U_TO_J = FROM "U_CLK" TO
6
   "J_CLK" 15000.000000000 pS;>: Unable to find an active 'TimeGrp' or 'TNM' or
7
   'TPSync' constraint named 'J_CLK'.
8
9
WARNING:ConstraintSystem:56 - Constraint <TIMESPEC TS_J_TO_D = FROM "J_CLK" TO
10
   "D_CLK" TIG;>: Unable to find an active 'TimeGrp' or 'TNM' or 'TPSync'
11
   constraint named 'J_CLK'.
12
13
WARNING:ConstraintSystem:56 - Constraint <TIMESPEC TS_D_TO_J = FROM "D_CLK" TO
14
   "J_CLK" TIG;>: Unable to find an active 'TimeGrp' or 'TNM' or 'TPSync'
15
   constraint named 'J_CLK'.
16
17
WARNING:PhysDesignRules:372 - Gated clock. Clock net icon_control0<13> is
18
   sourced by a combinatorial pin. This is not good design practice. Use the CE
19
   pin to control the loading of data into the flip-flop.
20
21
WARNING:Place:414 - The input design contains local clock signal(s). To get a better result, we recommend users run map
22
   with the "-timing" option set before starting the placement.
23
24
WARNING:Route:455 - CLK Net:IN_CLK may have excessive skew because 
25
      4 CLK pins and 1 NON_CLK pins failed to route using a CLK template.
26
27
WARNING:Route:455 - CLK Net:icon_control0<13> may have excessive skew because 
28
      1 CLK pins and 3 NON_CLK pins failed to route using a CLK template.
29
30
WARNING:PhysDesignRules:372 - Gated clock. Clock net icon_control0<13> is
31
   sourced by a combinatorial pin. This is not good design practice. Use the CE
32
   pin to control the loading of data into the flip-flop.

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


Lesenswert?

Steffen H. schrieb:
> Leider funktioniert es auch damit nicht.
Irgendwie schon klar, weil das SIM un UNISIM darauf hindeutet, dass das 
Bibliotheken für die SIMulation sind. Du willst aber gar nicht 
simulieren.

> ISE wirft Warnungen, auch solche, die auf Probleme mit dem Takt hinweisen.
Dein Design hat eigetnlich keinen Takt. Deshalb deuten diese Warnungen 
eher auf ein Problem mit dem Chipscope Takt hin.

> Außerdem habe ich leider keinen Differenztastkopf bzw. zu wenig Kanäle
> für Einzelmessungen. Heißt: Ich kann keine Messung durchführen :-(
Dir ist aber schon klar, dass du so ein LVDS-Signal auch unipolar 
ansehen und messen kannst.

> Mein Oszilloskop ist leider zu langsam.
In Zahlen? Man kann auch mit einem Oszilloskop mit einer analogen 
Bandbreite von 50MHz erkennen, ob die Impulse durchgehen.

BTW: ich würde da erstmal ein besser definiertes Eingangssignal 
reingeben. Eines, das z.B. 10 Takte lang stabil ist. Und dann mal 
schauen, was dabei herauskommt.

> Der Takteingang ist mit IN_CLK verbunden.
Lass mal auf diesen Takt einen Zähler laufen und schau, ob der sauber 
hochzählt, nicht dass der Takt noch dumm tut.

von Steffen H. (Gast)


Lesenswert?

Lothar M. schrieb:
> Dein Design hat eigetnlich keinen Takt. Deshalb deuten diese Warnungen
> eher auf ein Problem mit dem Chipscope Takt hin.

Darauf wollte ich hinaus: wenn ich die Chipscope Instanz wegnehme, 
fallen sämtliche Warnungen weg.


Lothar M. schrieb:
> In Zahlen? Man kann auch mit einem Oszilloskop mit einer analogen
> Bandbreite von 50MHz erkennen, ob die Impulse durchgehen.

HP54200A -> 2 Kanal DSO mit 200MHz Abtastrate. Das geht schon irgendwie, 
aber wirklich Klarheit bekomme ich nicht. Es sind halt Pegeländerungen 
von 350 mV für 10 ns.

Ich hatte es auch erfolglos mit einem LVDS Pegelwandler im fliegenden 
Aufbau probiert. Also ohne da Aufwand reinzustecken (zeitlich und 
finanziell) bekomme ich die externe Hardware nicht ausgemessen.


Lothar M. schrieb:
> BTW: ich würde da erstmal ein besser definiertes Eingangssignal
> reingeben. Eines, das z.B. 10 Takte lang stabil ist. Und dann mal
> schauen, was dabei herauskommt.

Nachdem das Signal den IBuf passiert hat, ist es doch in der FPGA Logik 
angekommen. Wie kann es sein, dass Chipscope am Eingang keine Pulse 
findet, aber am Ausgang schon? Kann das denn wirklich von "außen" 
kommen?

Anders formuliert: Gibt es überhaupt eine bestimmte Signalform, die 
Chipscope veranlasst, soetwas auszugeben? Denn wenn nicht, liegt der 
Fehler ausschließlich innerhalb meines FPGA-Designs.

Einen Funktionsgenerator besitze ich übrigens leider nicht.


Lothar M. schrieb:
> Lass mal auf diesen Takt einen Zähler laufen und schau, ob der sauber
> hochzählt, nicht dass der Takt noch dumm tut.

Prima, das probiere ich aus!

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


Lesenswert?

Steffen H. schrieb:
> HP54200A
Du hast aber viel Platz auf dem Schreibtisch...

> das probiere ich aus!
Und dann toggle mit dem Takt einen Ausgangspin einfach immmer nach 8 
oder 16 Bit und mach ein "Augendiagramm" auf deinem Oszi (Trigger auf 
Flanke, Nachleuchtzeit auf ewig).
Wenn der Takt ordentlich ist, siehst du da nur 1 Kurve, die nicht 
"ausfranst".

von Steffen H. (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang die Chipscope Messung mit dem vorgeschlagenem Zähler. Was 
hältst Du / was haltet ihr davon?

.

Lothar M. schrieb:
> Und dann toggle mit dem Takt einen Ausgangspin einfach immmer nach 8
> oder 16 Bit und mach ein "Augendiagramm" auf deinem Oszi (Trigger auf
> Flanke, Nachleuchtzeit auf ewig).

Mein HP54200 kann leider kein Augendiagramm darstellen. Es ist ein DSO 
aus Mitte der 80er Jahre.

Lothar M. schrieb:
> Du hast aber viel Platz auf dem Schreibtisch...

Wie mans nimmt: Jetzt nicht mehr ;-)

von Gustl B. (gustl_b)


Lesenswert?

Steffen H. schrieb:
> Meinst Du die Simulation von Chipscope? Kann ich Chipscope simulieren?!

Nein, die VHDL Simulation. Du schreibst eine Testbench in VHDL in der du 
deine vorhandene Beschreibung instantiierst. Und das simulierst du dann 
mit Modelsim oder iSim von ISE.

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


Lesenswert?

Steffen H. schrieb:
> Im Anhang die Chipscope Messung mit dem vorgeschlagenem Zähler. Was
> hältst Du / was haltet ihr davon?
Wer misst misst Mist.
Das sieht für mich so aus, als ob der Zähler schnurgerade durchläuft und 
sich das Chipscope verstoplert.

Steffen H. schrieb:
> Mein HP54200 kann leider kein Augendiagramm darstellen.
Trigger auf steigende oder fallende Flanke und dann Nachleuchtdauer auf 
"ewig".

Wenn das dann so aussieht, dann jittert da nichts:
1
    _________________                 ________
2
   |                 |               |
3
   |                 |               |
4
   |                 |               |
5
   |                 |               |
6
___|                 |_______________|
7
   ^
8
   T

Wenn es aber so aussieht, dann passt was mit dem Zähler nicht:
1
    ________________                    _______
2
   |                |||            |||||    
3
   |                |||            |||||    
4
   |                |||            |||||    
5
   |                |||            |||||    
6
   |                |||            |||||    
7
___|                |||____________|||||
8
   ^
9
   T

: Bearbeitet durch Moderator
von Steffen H. (Gast)


Lesenswert?

Gustl B. schrieb:
> Nein, die VHDL Simulation. Du schreibst eine Testbench in VHDL in der du
> deine vorhandene Beschreibung instantiierst. Und das simulierst du dann
> mit Modelsim oder iSim von ISE.

In der Simulation werden keine Pulse verschluckt. Dort funktioniert 
alles einwandfrei.

Lothar M. schrieb:
> Trigger auf steigende oder fallende Flanke und dann Nachleuchtdauer auf
> "ewig".

Danke für die Beschreibung. Leider kann ich bei meinem Oszilloskop keine 
Nachleuchtdauer einstellen. Es kann leider auch nicht mehrere Sample 
übereinander legen, was ja sonst den gleichen Effekt hätte.


Ich bin ratlos, was ich nun tun soll. Ich möchte sehr gerne mit 
Chipscope messen, aber ich muss der Messung vertrauen können. Sonst 
nützt es mir nichts.

Macht es Sinn, auf eine andere Version von Chipscope zu wechseln?

von Duke Scarring (Gast)


Lesenswert?

Steffen H. schrieb:
> In der Simulation werden keine Pulse verschluckt. Dort funktioniert
> alles einwandfrei.
Wenn die Simulation anders ist, als die Realität, dann fehl noch was im 
Simulationsmodell.

> Leider kann ich bei meinem Oszilloskop keine
> Nachleuchtdauer einstellen. Es kann leider auch nicht mehrere Sample
> übereinander legen, was ja sonst den gleichen Effekt hätte.
Bei manchen Jitter-Messungen hilft es, den Triggerzeitpunkt weit vor die 
eigentliche Darstellung zu legen.

> Ich möchte sehr gerne mit
> Chipscope messen, aber ich muss der Messung vertrauen können. Sonst
> nützt es mir nichts.
>
> Macht es Sinn, auf eine andere Version von Chipscope zu wechseln?
Nein. Chipscope ist ausentwicklet. Da gibt es nach meiner Erfahrung 
keine signifikaten Vesionsunterschiede.

Ich würde mir noch mal ganz genau die Pinzuordnung anschauen. Nicht das 
Du um einen Pin daneben liegst und der Eingang nur durch die 
Koppelkapazität angeregt wird.

> Ich bin ratlos, was ich nun tun soll.
Vereinfache das Design weiter, um weitere Ursachen auszuschließen.

Duke

von Holger (Gast)


Lesenswert?

Steffen H. schrieb:
> Meine Constraints im Kern so:

Hast du die Clock Constraints auch auf 100 MHz ??? .

BuffG -- Buf Buf .... .....
Das muss mal so intern getrimmt werden.
Die Hardware & die Simu sind nicht gleich.

Such dir ein RefDesign das geht und mit 100 MHz geht.
Und analysiere das genau. Clock Constraints

Viel Erfolg.

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.