Hallo, In der Uni arbeiten wir mit einem Microblaze FPGA den ich leider zuhause nicht synthtisieren kann. Ich schreibe aber gerade zuhause an dem VHDL code und wollte fragen ob das von mir ausgedachte Verfahren möglich ist. In Modelsim gehts, aber das heißt ja nix. Ich hatte den Fall schon öfter das es in Modelsim geht die reale realisierung nich. Damit es nun funktioniert wollte/soll ich jeden Prozess als Moore Automat modelieren. Also was ich besonders fragen wollte ob das mit dem A0_internal<=A0 geht. Mir ist nämlich noch nich klar wie ich sauber von einem Prozess zum anderen ein Signal übergeben kann. Also der Code ist der folgende: clock: process(clk,reset) begin if reset='1' then zZustand<=Z0; A0<='0' elsif(clk'event and clk = '1') then A0<=A0_int; zZustand<=zZustand_folge; ... --Ablauf für MOORE-Automat Ablauf: process(cond1,zZustand) begin A0_internal<=A0 --Bei der Definition bin ich unsicher zZustand_folge<=Z0; case(zZustand)is when Z0=> A0_internal<='1'; if(cond1='1') then zZustand_folge<=Z1; end if; when Z1=> zZustand_folge<=Z2; --kann man das ohne Bedingung schreiben when Z2=> if(cond1='1') then zZustand_folge<=Z2; end if; ....
Flexbex schrieb: > when Z1=> > zZustand_folge<=Z2; --kann man das ohne Bedingung schreiben also diese Zeile funktioniert
Na um vielleicht das problem mehr zu konkretisieren. Ich suche ne moeglchkeit a0 in allen faellen einen wert zuzu weisen ohne a0 immer zu aenderng
> a0 in allen faellen einen wert zuzu weisen
In welchen allen Fällen?
Immer den gleichen Wert, oder jedesmal einen anderen?
Woher kommt der Wert?
Wozu die signale A0_internal und A0_int?
Was war nochmal das eigentliche Problem?
Hallo, Entschuldigung für meine sehr verkürzte Ausdrucksweise. Ich hatte es Gestern vom Handy aus geschickt und da ist schreiben auf Mikrocontroller sehr mühselig. Also mein Problem ist: Ich möchte in einem als Moore Automat gestallteten Prozess ein Signal verändern können. Dies möchte ich aber nur in bestimmten Zuständen tun in anderen soll das Signal unverändert bleiben. Mir ist bnicht klar wie ich ein Signal unverändert lassen kann. Oder kann ich ein Signal auch sich selbst zuweisen. Also so(ich weiss das Programm ist vielleicht sinnfrei mir ist aber keine bessere Abstraktion eingefallen): process(clk) clock event usw.... Zustand=zustand_folge... end process process(Zustand,E0) begin A0<=A0; --A0 soll A0 bleiben außer ein Teil des Prozesses ändert A0 case(zustanda) is when Z0 =>--A0 wird 00 A0<="00"; --A0 wird 0 zustand_folge<=z1 when Z1 =>--A0 behält den Wert ist zwar sinnfrei zustand_folge<=z2 when Z2 =>--A0 wird erhöht A0<=A0+1; if(E0='1') zustand_folge<=z0; else zustand_folge<=z1 end if; end process; process(A0) if(A0(1)='1') -- hier soll dann z.b. A0 abgefragt werden ... Besser beschrieben? lg felix
Flexbex schrieb:
1 | process(Zustand,E0) |
2 | begin
|
3 | A0<=A0; -- A0 soll A0 bleiben außer ein Teil des Prozesses ändert A0 |
4 | case(zustanda) is |
5 | when Z0 => --A0 wird 00 |
6 | A0<="00"; --A0 wird 0 |
7 | zustand_folge<=z1 |
8 | when Z1 => --A0 behält den Wert ist zwar sinnfrei |
9 | zustand_folge<=z2 |
10 | when Z2 => --A0 wird erhöht |
11 | A0<=A0+1; -->> (*) <<-- |
Ja, so stimmt das schon, nur hast du jetzt erst mal ein Latch gebaut. Denn wenn A0 den Wert behalten soll, aber kein Takt beteiligt ist, dann hast du ein Latch. Jetzt ist ein Latch an sich nichts Böses, weil aber der zustanda aus etlichen Flipflops besteht, wird das latch-enable aus Kombinatorik gebildet, und der Ausgang von Kombinatorik glitcht bei Änderungen am Eingang. Am Eingang sitzen die Zustandsflipflops und am Ausgang das latch-enable. Und jetzt rate mal, was das Latch tut, wenn da solche unbeabsichtigten Glitches auftreten? Richtig: es speichert irgendwas ab, was gerade am Eingang anliegt... Und noch was: (*) hier ist sie wieder: die legendäre kombinatorische Schleife... http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife Kurz: deinem Prozess fehlt ein Takt. http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html Das passiert gern wegen der Zwei-Prozess-Schreibweise: http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html
@Lothar Miller Wollte mich nur kurz bedanken. Deine Seite hat mir die Kenntnisse geliefert die mir meine VHDL Vorlesung nich gebracht hat. Hab das Problem mit deinem RAM gelöst. Es ist glaub ich wie in anderen Programmiersprachen man sollte sich erstmal Beispielprogramme durchlesen. Mein Problem war glaub ich das ich dachte das sich die Prozesse Synchronisieren wenn die Eingänge der sensitivitie Liste synchron zum Takt sind. Aber jetzt habe ich gesehen das viele der Programme den Clock mit drin haben. So jetzt aber genug des Lobes. frohe Weihnachten Felix
Flexbex schrieb: > Es ist glaub ich wie in anderen Programmiersprachen > man sollte sich erstmal Beispielprogramme durchlesen. Und vor allem: verstehen! > Wollte mich nur kurz bedanken. Keine Ursache, war eh' grad da... ;-)
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.