Forum: FPGA, VHDL & Co. CLOCK Modelsim vs Realität


von Plau S. (radih)


Angehängte Dateien:

Lesenswert?

Hi,

Ich schreibe eine Komponente für den H48C3-Achsen Beschleunigungssensor 
und habe folgende Frage:

Für das Clock verwende ich(weil es so leichter für mich scheint):

if (event 1)
clk<= '1' after 5 us, '0' after 15 us;

und das aus folgendem Grund:

wenn ich Befehle schicken soll, soll ich das Data-signal setzen und dann 
Clock erzeugen.

Wenn ich Signale empfange, soll ich sie auf der falling_edge abfragen.

Also zum Zeitpunkt des Events 1 setze ich Data-Signal
nach 5 us kommt die rising_edge und nach 15 us die falling_edge

im Modelsim sieht das Ganze sehr schön aus, aber die Daten die ich vom 
Sensor bekomme sind fragwürdig:

x,z-Achsen immer 0
y-Achse bei 12 Bit Messung 111111111111
vRef auch 111111111111


Kann es sein, dass in der Realität sachen wie after so und so viel 
nichts taugen oder liegt der Fehler irgendwo anders?
Vielleicht bin ich zu langsam, in der Datenblatt steht 1-2 Mhz.
Ich bin bei 50Khz, aber das sollte nicht das Problem sein, da das 
Minimumclock bei 10 khz liegt.

von Morin (Gast)


Lesenswert?

> Kann es sein, dass in der Realität sachen wie after so und so viel
> nichts taugen oder liegt der Fehler irgendwo anders?

Ja, "after ..." wird vom Synthesetool gelöscht bevor es überhaupt mit 
der Synthese losgeht.

von Mathi (Gast)


Lesenswert?

> clk<= '1' after 5 us, '0' after 15 us;

Das after ist nicht synthetisierbar. So kann man keinen Takt für ein 
reales Design erzeugen. Du musst vielmehr einen Takt aus Deinem 
Systemtakt generieren. Oder noch besser: Dein Design und der Sensor 
benutzen den gleichen Takt.

von Klaus F. (kfalser)


Lesenswert?

Bitte poste mehr von Deinem Code, sonst kann Dir keiner helfen.

Falls
clk<= '1' after 5 us, '0' after 15 us;
ein Teil deines FPGA oder CPLD programm ist, dann liegt dort der Fehler, 
weil man das "after" statement nicht synthetisieren kann.

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


Lesenswert?

> if (event 1)
>   clk<= '1' after 5 us, '0' after 15 us;
Das soll so in der Logik (FPGA/CPLD) abgebildet werden? Wie denn das?
Auf dieser Hardware gibt es keine einstellbaren Zeitglieder (auf jeden 
Fall nicht für das, was du hier vorhast).
Glaub es mir: du bist weiter vom Ziel entfernt, als du denkst ;-)

Zeig doch mal den kompletten Code.

Du hast offenbar irgendwie eine falsche Vorstellung von programmierbarer 
Hardware. Im Großen und ganzen ist es so:
Da gibt es einen Haufen Flip-Flops und ein paar logische Funktionen und 
Verdrahtung. Damit mußt du fertig werden. Wenn ein Pegel für eine 
definierte Zeit stabil sein soll, dann braucht es dazu ein Flip-Flop. 
Wenn du also deinen Takt 5 us low haben willst, und danach 15us high, 
dann brauchst du einen Takt, der dir das Weiterschalten (<<-Stichwort) 
zwischen diesen Zuständen (<<- Stichwort) erlaubt.

Du solltest dir erst mal die grundlegenden Grundlagen zum 
Hardware-Design anschauen (z.B. Jürgen Reichardt, Bernd Schwarz: 
VHDL-Synthese). Und dann langsam mit einer Blinkenden LED anfangen.

Dass der Simulator das richtig macht, ist nur deshalb so, weil in der 
Simulation viel mehr möglich ist, als in der Realität. Diese Zeile
> clk<= '1' after 5 us, '0' after 15 us;
wird der Synthesizer entweder komplett ignorieren, oder clk auf einen 
festen Wert setzen.

von Plau S. (radih)


Lesenswert?

Vielen Vielen Dank für die schnellen Antworten.

Es ist ja so, dass ich mich schon mit den grundlegenden Sachen des 
Hardwareprogrammierens auskenne(natürlich ist einer besser vertraut als 
der andere), ABER von so viel Denken vergisst man manchmal elementare 
Dinge wie das hier. Ansonsten habe ich schon Vorlesungen über die 
Flip-Flops gehört, nur habe ich nicht darüber nachgedacht, einfach 
losprogrammiert.:))))


Wenn ich das 'after' korriegiere, denke ich dass es dann funktionieren 
soll.

Weiteren Codeausschnitt habe ich nicht gepostet, weil ich schon vermutet 
habe, dass es an dem 'after' liegen wird.

Danke nochmals

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.