Hallo,
entweder es is schon zu spät oder ich werde bekloppt.
Habe bis jetz meines Erachtens immer so eine StateMachine kodiert, die
auch immer funktionierte.
Mein Problem ist folgendes:
Das busy-signal wird richtig gesetzt, aber der state wird nicht sofort
gewechselt. z.b Zeitpunkt 50ms müsste state in work gehen und nicht erst
bei 70ms...
Was übersehe ich da gerade?
Gruß
Chris
Chris schrieb:
Ohne zeiten für den takt oder simu-waveform fällt es schwer denn problem
zu versetehen. Mit fällt nur auf das tmp_busy ungetaktet ist und state
getaktet (so wie es sein soll). Daraus folgt das sich zuers tmp_busy
ändert und dann state zu WORK wechselt. Vielleicht liegt das problem
auch an dem taktteiler, 50 Milisekunden sind nicht gerade typisch für
einen takt. Taktet deine statemachine wirklich im kHz - Bereich ?!.
MfG,
> Hallo,> entweder es is schon zu spät oder ich werde bekloppt.> Habe bis jetz meines Erachtens immer so eine StateMachine kodiert, die> auch immer funktionierte.> Mein Problem ist folgendes:> Das busy-signal wird richtig gesetzt, aber der state wird nicht sofort> gewechselt. z.b Zeitpunkt 50ms müsste state in work gehen und nicht erst> bei 70ms...
Leonard Lebewohl schrieb:> Mit fällt nur auf das tmp_busy ungetaktet ist und state getaktet (so> wie es sein soll).
Mir fällt auf, dass in der Sensitivliste des kombinatorischen Prozesses
fast alle nötigen Signale (dat_i, a und wd) fehlen...
Chris schrieb:> Das busy-signal wird richtig gesetzt, aber der state wird nicht sofort> gewechselt.
Ja nun, das busy Signal ist ja auch kombinatorisch, der State getaktet.
Wie sieht das denn mit dem Zeitbezug zwischen state_next und (tmp_)busy
aus? Kommen die gelichzeitig?
Was ist das für eine angehängte Datei namens "plot"? Mach doch einfach
Screenshots im png oder gif Format...
Hallo,
sorry die plot datei stellt die simulations datei dar. irgendwie hatte
die keine endung.... sollte jetzt klappen.
Ist das nicht egal mit welchem takt ich das takte? zur einfachen und
schnelleren simulation habe ich einfach 20 ms als periode angenommen,
hier meine testbench:
Chris schrieb:> komisch, state_next macht genau das was ich haben will???
Herzlichen Glühstrumpf, du hast das entdeckt, was man "synchrones
Design" nennt: nach der Taktflanke herrscht Hektik im FPGA, bis alle
signale durch die Kombinatorik gelaufen sind. Und rechtzeitig vor dem
nächsten Takt muss alles ruhig sein, damit die Flipflops korrekte Daten
übernehmen können.
Ich empfehle dir, dass du mal das buch "VHDL Synthese" von
Reichardt&Schwarz genauer anschaust...
Hallo,
stimmt schon hab mir das heute morgen nochmal angeguckt und eigentlich
ziemlich logisch, dass das so nicht klappen kann. habe jetzt eine
asynchrone version implementiert, wobei ich mir jetzt unsicher bin ob
man sowas macht. in unserem praktikum wurden wir geimpft bloß alles
immer synchron zu implementieren, alles andere sei böse :(
vielleicht könnt ihr mir ja eine beurteilung zu meinem jetztigen entwurf
geben.
Aufgabenstellung: (handelt sich um enen mips proc mit wishbone
anbindung)
ich soll einen master für einen wishbone slave programmieren, wie man
vielleicht aus den signalen erkennen kann.
Lösung:
dafür habe ich jetzt ein data_memory als art top-level erstellt das die
signale: clk,rst,cmd,wd,a von der pipeline erhält und als ausgabe rd und
busy ausgibt.
intern werden dann diese signale an den wishbone-master weitergegeben,
was ich jetzt asynchron programmiert habe.
Sollte man sowas so lösen? oder ist das garnicht gut? das asynchrone
macht mich etwas verrückt
siehe meine beiden files unten
Ich meine, ich hätte dazu schon mal was geschrieben...
Das hier ghet natürlich nicht, denn das wäre eine komplett asynchrone
Statemachine. Sowas ist im echten Leben nicht beherrschbar:
1
process(cmd,ack_i,rst,a)
2
begin
3
:
4
ifrst='1'then
5
state<=IDLE;
6
else
7
casestateis
8
whenIDLE=>
9
:
10
state<=WORK;
Mein Tipp immer noch: besorg dir das angesprochene Buch.
Sooooo, hab das Buch noch ergattern können, zwar nur ne Version von 2000
aber ich denke seitdem sollte sich bei so grundlegenden Sachen wohl
nichts getan haben. Hab auch noch paar Quellcodes im Inet durchforstet
und komme jetzt auf folgende Lösung für einen Wishbone-Master in VHDL:
Wir sollten über einen Bootram testen und wenn ich mich nicht ganz irre
scheint alles in der Simulation zupassen :) Hoffentlich klappt dann auch
die Synthese
Vielen Dank Lothar, irgendwie stand ich gestern Nacht, heute morgen aufm
Schlauch :D
Was meintest du mit den tmp_* Signalen? Hab das jetzt auch ausgebessert
soweit wie ich konnte. Sieht das vernünftig aus?
Chris schrieb:> Was meintest du mit den tmp_* Signalen?
Ich meinte, dass sie in der Sensitivliste des kombinatorischen Prozesses
fehlten und deshalb die Simulation nicht zur Realität gepasst hätte...
> Wir sollten über einen Bootram testen und wenn ich mich nicht ganz irre> scheint alles in der Simulation zupassen :)
Bei der letzten Version sieht das gut aus, die Sensitivlisten passen.
> Hoffentlich klappt dann auch die Synthese
Viel Erfolg... ;-)
Hi,
ich muss zugeben, dass in zwei prozesse aufzuteilen hab ich gesehen und
fand dies sehr zugänglich. gelehrt wurde uns das so aber nicht muss ich
sagen. wobei was wird schon gelehrt, hier fpga+board, vhdl kann man hier
nachlesen macht doch mal...