Moin an alle,
ich habe hier folgenden Code. Kurz zur Erklärung es soll eine AES
Verschlüsselungsimplementation sein, d.h. ich habe meine ganzen Module
und je nach Runde werden bestimmte ausgeführt (dies ist keine optimierte
oder sonst was Version wurde komplett von 0 geschrieben als Aufgabe).
Was möchte ich erreichen? Es geht darum, dass ich im Endeffekt die Takte
pro Runde herausfinden möchte und dann je nach Runde sagen kann, nach X
Takten wird in die nächste gewechselt. Das wollte ich mit zwei Zähler
Signalen realisieren. Warum auch immer kann ich sie nicht verändern und
sie funktionieren überhaupt nicht!! Hier der Code:
Also es geht eigentlich um den P1 Prozess der ist auch eigentlich
fehlerfrei (habe ihn schon ausgelagert in eine einzelne Datei und da
zählt er auch), d.h. irgendwo müsste hier in der gesamt Datei der Fehler
liegen....
Cannibal F. schrieb:> Also die Signale Cycles und Clocks bleiben andauernd auf U für undefined> was ja der Standardwert für std_logic ist
Sag dem Simulator, dass P1 auf aReset reagieren soll (aReset in die
Sensitivity-Liste des Prozesses aufnehmen).
BTW: Ein Signal "aReset" (also asynchron) zu nennen und dann synchron zu
verwenden ist eine gute Möglichkeit sich selbst und potentielle
Code-Reviewer zu verwirren.
Gruß,
Burkhard
Ich weiß! Ich benutze es ja woanders als asynchronen deswegen ja auch
das Kommentar :D Aber ich will ihn ja synchron haben, ich habe auch mal
ganz am Anfang nach dem begin nebenläufig Cycles und Clocks auf 0
gesetzt und selbst das geht nicht sie waren beide weiterhin Undefined,
also
Cycles <= (others => '0');
z.B.
Du vermischt da soweiso auf undurchschaubare Art die Ein- und die
Zwei-Prozessschreibweise von Prozessen:
http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html
Wenn du die Einprozesschreibweise haben willst, dann ist nur der CLK im
der Sensitivliste (wenn überhaupt:
http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html)
So wie du es gerade hast, fängst du dir in 0,nichts einen vollkommen
unnötigen Takt Latency ein.
Zum Thema 'U': das bedeutet 'uninitialized' und damit gleichzeitig, dass
niemals ein anderer Wert auf das Signal zugewiesen wurde. Lass doch mal
die Waveform deiner Simu sehen...
Okay das nehme ich gerne aus der Sensetivity Liste raus, ich dachte nur
das alle Signale die auf der rechten Seite zum Zuweisen stehen auch da
reingehören.
Hier ist der Screenshot der Wave man sieht genau das eine steigende
Taktflanke und der Reset gesetzt sind.
http://i.imgur.com/ou0EfbO.png
Übrigens stimmt, bei dem FSM Prozess sollte ja gar kein CLK auftauchen
(also so haben wir es sonst immer gemacht). Aber wie gesagt das ist ein
"Projekt" und dort sollen wir den AES von 0 programmieren und die Logik
war halt, wenn man sieht das sich die Module nichts mehr ändern, kann
man ja genau sagen wie viel Takte benötigt werden. In der Hauptrunde
brauche ich 9 Durchgänge, deswegen wird da Cycles immer erst hochgezählt
wenn Clocks die Anzahl der Takte erreicht. Ich glaube das diese Zeile
auch eine komb. Schleife erzeugt...
Cannibal F. schrieb:> Okay das nehme ich gerne aus der Sensetivity Liste raus, ich dachte nur> das alle Signale die auf der rechten Seite zum Zuweisen stehen auch da> reingehören.
In die Sensitivliste gehören alle Signale, die eine Neuberechnung des
Prozesses im Simulator nötig machen. Dem Synthesizer ist die
Sensitivliste schnurzegal, bestenfalls meldet er noch mit einer
Info/Warning: "Hör mal, deine Sensitivliste ist falsch. Die Simulation
wird nicht zur Realität passen."
Cannibal F. schrieb:
Mal abgesehen davon, dass beim "Cycles = to_unsigned(n, Clocks'length)"
das "Clocks" natürlich falsch ist, nimm doch für "Clocks" und "Cycles"
einfach einen integer (mit "range"). Dann liest sich das gleich viel
natürlichsprachlicher:
1
ifClocks=10andCycles=nthen
Wenn du eine überarbeitete Version hast, dann poste die doch einfach als
Anhang mit Endung *.vhd (oder *.vhdl) hier. Und am besten deine
Testbench mit dazu.
Cannibal F. schrieb:> Hier ist der Screenshot der Wave man sieht genau
Du kannst im Simulator übrigens ganz leicht auch in einzelne
Submodule/Komponenten hineinschauen. Da gibt es einen Projektbaum, wo du
diese Submodule als Äste aufklappen und dann deren Signale in die
Waveform aufnehmen kannst. Dann siehst du eher, warum da nichts
passiert und was eigentlich los ist...
Jo ich habe alles selbst gelöst bitte schließen und löschen. Habe mich
mit einem Kommilitonen unterhalten und den FSM Prozess sauberer gemacht
und eben besonders die Zuweisungen weggelassen interne Reset Signale
gesetzt und so den FSM viel viel kleiner und dünner gemacht. Aktuell
verwende ich auch einfach Binäre Werte für Clock usw. also aktuell passt
alles habe es geschafft :)
Cannibal F. schrieb:> Jo ich habe alles selbst gelöst
Und das ist jetzt geheim? Ein Forum lebt davon, dass der Eine dem
Anderen hilft. Es wäre doch für Alle anderen, die mal ein ähnliches
Problem haben, schön zu sehen, wie das schon mal gelöst wurde...
> Aktuell verwende ich auch einfach Binäre Werte für Clock usw.
Du arbeitest mit Flags anstelle von Zählern?
> bitte schließen und löschen.
Gelöscht wird hier nur, wenn Beleidigungen kursieren. Denn sonst wäre
eine Suchfunktion in "alten" Threads nutzlos.
LOL d.h. ich habe dich gebeten meinen hier geposteten Code zu löschen,
weil das auch mein Wissen ist. Es ist ja gar kein Angriff, aber hier
hatte ich eh nicht richtige Ratschläge bekommen. Und bin durch damit,
also kann man es entfernen, weil das hier keine Hilfe für mich war. Also
nehmt ihn doch einfach bitte runter ^^
Na das haben wir ja gern. Für seine Hausaufgaben die Foren anschmeissen,
und dann soll alles weg, weil es auch Dozenten geben könnte, die
mitlesen?
Cannibal F. schrieb:> hatte ich eh nicht richtige Ratschläge bekommen. Und bin durch damit,
Genau die hattest Du bekommen. Wenn Du das anders siehst, hast Du nix
dabei gelernt.
Lothar M. schrieb:>> bitte schließen und löschen.> Gelöscht wird hier nur, wenn Beleidigungen kursieren. Denn sonst wäre> eine Suchfunktion in "alten" Threads nutzlos.
Die kleine Bosheit muss ich noch loswerden: Vielleicht sieht der TO
seinen Code inzwischen als Beleidigung an?
Cannibal F. schrieb:> LOL d.h. ich habe dich gebeten meinen hier geposteten Code zu löschen,> weil das auch mein Wissen ist.
Du solltest in Zukunft bei "Verträgen", die du (auch implizit) eingehst,
vorher die Vertragsbedingungen lesen:
1
Nutzungsrecht an Beiträgen
2
Mit dem Erstellen eines Beitrags erteilt der Autor dem Betreiber des Forums
3
ein einfaches, zeitlich und räumlich unbeschränktes und unentgeltliches
4
Recht, den Beitrag im Rahmen des Forums zu nutzen. Das Nutzungsrecht bleibt
5
auch nach Kündigung der Mitgliedschaft bestehen.
Aus:
https://www.mikrocontroller.net/articles/Hilfe:Forum_Nutzungsbedingungen> aber hier hatte ich eh nicht richtige Ratschläge bekommen.
Oh doch. Du weißt es vielleicht nur nicht (zu würdigen). Das kann was
mit einer gewissen "Alles-für-lau" Mentalität zu tun haben.
> Und bin durch damit, also kann man es entfernen, weil das hier keine> Hilfe für mich war. Also nehmt ihn doch einfach bitte runter ^^
Es ist zwar nutzlos, weil dein Code schon lange von den Suchmaschinen in
den Cache genommen wurde, aber weil es dir so wichtig ist werde den
allergrößten Teil davon aus deinem Post löschen. Nur das, was ich
sowieso zitiert habe, lasse ich stehen.
Gerne kläre ich euch auf, jetzt wo was gelöscht wurde. Ja genau also ich
ahne schon das mal ein Dozent das Lesen könnte. Ich war halt
verzweifelt, weil das mit den Zählern nicht ging. Gerne erkläre ich euch
auch wie ich die Zähler anbekommen habe, ich bin mir sicher dass es
einen besseren Weg gibt, aber keiner wollte funktionieren....
Also ich konnte ums verrecken nicht die Zähler initialisieren und
deswegen haben sie nicht hochgezählt, das erreiche ich gerade nur in dem
ich am Anfang als Default Wert Clear Signale auf 1 setze und damit die
Zähler Signale auf 0 zwinge, dann am Anfang in jedem Zustand setze ich
die Clear Signale auf 0 und sie fangen an zu zählen. Das kann eigentlich
aber nicht sein, weil in einem anderen Code hatten wir ähnliche Code
Bauteile (nur in einem anderen Kontext) und dort war das Clear Signal
Default auf 0 und der Zähler ging trotzdem.... Ich will mit dem Code
keinen Schönheitswettebewerb gewinnen, sondern er soll auf jeden Fall
funktionieren und das tut er nun.
Das war ja auch kein Angriff gegen euch dass ihr mir nicht geholfen
habt, ihr hattet es ja versucht nur wollte ich eben sagen, dass es für
MICH zum Code Verbessern keine Hilfe war, und ich deswegen es hier
weghaben wollte. Weil wenn ihr mir wirklich hier und da das gezeigt
hättet, dann könnte ich das ja nicht sagen. Aber der Kommentar mit dem
asynchr. Reset oder mit Wave aufklappen darauf bin ich schon lange
selbst gekommen und es dann halt U da..... Sonst hätte ich euch die
Infos ja nicht mitteilen können.
Cannibal F. schrieb:> das erreiche ich gerade nur in dem ich am Anfang als Default Wert Clear> Signale auf 1 setze und damit die Zähler Signale auf 0 zwinge, dann am> Anfang in jedem Zustand setze ich die Clear Signale auf 0 und sie fangen> an zu zählen. Das kann eigentlich aber nicht sein
Korrekt. Denn du musst einfach mal einen Schritt nach hinten machen:
woraus besteht so ein Zähler?
Aus Flipflops und Weiterschaltlogik. Die Flipflops im FPGA werden beim
Laden des FPGAs auf einen Startwert gesetzt, die reale Hardware wird
also , wenn du nichts weiter angibst, sowieso immer bei "00000"
loslaufen.
Nur deine Simulation tut das nicht. Deshalb ist also eigentlich die
Simulation FALSCH und damit wertlos, weil sie nicht der echten Hardware
entspricht. Oder andersrum: wenn schon der Start nicht klappt, warum
sollte die Simulation hinterher stimmen?
Du musst dir also einfach mal vergegenwärtigen, welche deiner Signale
letztlich Flipflops sein werden, und diesen Signalen dann einen
Initialwert zuweisen.
Genau das ist mir klar und deswegen läuft ja ein Reset Signal zu Beginn
des Programms und das hatte nie die FlipFlops initialisiert, das hatte
mich ja gewundert. Extern ausgelagert nur als Zähler ging das in einer
vhd mit dem Reset als Eingangssignal, aber in dem hier stehenden Code
ging das nicht kein Plan woran das lag. Auf jeden Fall geht es jetzt ja.