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.
> 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.
> 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.
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.