Hallo ihr fleißigen Helfer.
Ich habe ein Problem, dass man in VHDL wahrscheinlich mit einer for
Schleife lösen kann. Ich weiß leider nicht wie. Der Code würde am besten
irgendwie so aussehen:
1
case(v.state)is
2
3
forjin0to7loop
4
5
whenj=>
6
7
ifj=7then
8
read_in(0,v);
9
else
10
read_in(j+1,v);
11
endif;
12
13
foriin0to7loop
14
nextwheni=j+1;
15
calculate(i,v);
16
endloop;
17
18
ifj=8then
19
v.state:=0;
20
else
21
v.state:=j+1;
22
endif;
23
24
endloop;
25
26
whenothers=>null;
27
28
endcase;
Man könnte das ganze einfach von Hand entrollen, dann sollte (verkürzt)
sowas bei rauskommen:
1
case(v.state)is
2
when0=>
3
read_in(1,v);
4
5
calculate(0,v);
6
calculate(2,v);
7
8
v.state:=1;
9
10
when1=>
11
read_in(2,v);
12
13
calculate(0,v);
14
calculate(1,v);
15
16
v.state:=2;
17
18
when2=>
19
read_in(0,v);
20
21
calculate(1,v);
22
calculate(2,v);
23
24
v.state:=0;
25
26
whenothers=>null;
27
28
endcase;
Wäre toll, wenn mir jemand helfen könnte.
(calculate() und read_in() sind paar kombinatorische Dinge)
Ne, hab eigentlich schon ein bisschen VHDL Erfahrung.
Nun habe ich aber ein Problem, was ich ziemlich generisch gestalten
will.
Und da dachte ich mir, bevor ich mir einen Wolf schreibe nutze ich doch
mal die Möglichkeiten von VHDL.
Ich hoffe die Synthese weiß meine Sprachkentnisse zu schätzen :D
nfet schrieb:>> Ich hoffe die Synthese weiß meine Sprachkentnisse zu schätzen :D
Wird sie nicht tun.
Die for loop baut parallele Hardware und keine FSM
Ja, das ganze soll ja auch parallele Hardware sein, es ist die
Parallelisierung der non-restoring Division.
Und ja, das ganze ist Gaisler style.
Das Problem dabei ist, dass da auch states in der FSM dazukommen, wenn
man einen längeren Quotienten hat. Ich werde die Synthese also Montag
einfach mal testen müssen.
nfet schrieb:> Ne, hab eigentlich schon ein bisschen VHDL Erfahrung.
Na wenn du das sagst ;-)
nfet schrieb:> Ich hoffe die Synthese weiß meine Sprachkentnisse zu schätzen :D
Wenn es dir vollkommen egal ist, dass deine "Statemachine", wenn man das
so nennen mag, ganz ohne Register auskommt.
nfet schrieb:> Das Problem dabei ist, dass da auch states in der FSM dazukommen,
Ich sehe bisher gar keinen einzigen State.
Versuche mir gerade vorszustellen, was die arme Syntehse daraus basteln
könnte. Aber in meinem innteren Auge sehe ich viel Kombinatorik,
rückgekopplete Kombinatorik mit asynchronen Latches und lauter solche
Schweinereien.
Aber da du ja sagst, dass du VHDL-Erfahrung hast, dann weisst du ja
auch, was du tust. :-)
Schlumpf schrieb:> Aber in meinem innteren Auge sehe ich viel Kombinatorik,> rückgekopplete Kombinatorik mit asynchronen Latches und lauter solche> Schweinereien.
Das er lauter sequenzielle Statements benutzt, gehe ich mal davon aus,
dass der Code innerhalb eines getakteten Prozesses steht.
Aber ein potentieller Gewinner for nen "Obfuscated VHDL Contest" ist er
trotzdem... ;-)
Da Dieter schrieb:> Das er lauter sequenzielle Statements benutzt, gehe ich mal davon aus,> dass der Code innerhalb eines getakteten Prozesses steht.
Könnte natürlich sein.
Da Dieter schrieb:> Aber ein potentieller Gewinner for nen "Obfuscated VHDL Contest" ist er> trotzdem... ;-)
Na wenn er selber dabei blickt, was er tut, ist es ja gut. Aber der arme
Tropf, der irgendwann mal in seinem Code was verstehen soll, tut mir
jetzt schon leid ;-)
nfet schrieb:> Ne, hab eigentlich schon ein bisschen VHDL Erfahrung.
Und dann das:
nfet schrieb:> ich habe das exit statement gefunden :D
Dazu exzessive Verwendung von Variablen und Funktionen.
Ich denke, du solltest tatsächlich mal deinem Synthesizer aufs Register
schauen, und kontrollieren, was da rauskommt.
BTW: wenn du mit Altera arbeitest, dann schreib doch einfach a/b und der
Synthesizer klatscht dir einen kombinatorischen Divider vor den Latz...