Habe nur eine grundsätzliche Frage zur Synthese mit Xilinx ISE. Wenn ich
in meine Design eine FSM habe dann wird ja pro durchlauf des Process nur
ein State ausgeführt. Wird dies bei der Synthese für die
Taktgeschwindigkeit beachtet oder rechnet der die Laufzeiten aller
States zusammen?
MFG Gast
> Wird dies bei der Synthese für die Taktgeschwindigkeit beachtet
Ja.
> oder rechnet der die Laufzeiten aller States zusammen?
Es wird einfach die längste kombinatorische Verzögerung der
Weiterschaltbedingungen der Statemachine hergenommen und daraus die
maximale Taktfrequenz für diese FSM ermittelt.
Wenn die Weiterschaltbedingung vom Zustand 34 in den Zustand 35 bei
einer FSM mit z.B. 47 Zuständen langsam wäre, hätte es ja trotzdem
keinen Sinn, die FSM in den Zuständen 1-33 und 35-47 schnell takten zu
können, und nur im Zustand 35 langsam.
> Wenn ich in meine Design eine FSM habe dann wird ja pro durchlauf> des Process nur ein State ausgeführt.
Es werden zeitgleich alle States ausgeführt, weil für jeden state die
Logik + das Speicherglied (Flipflop) da ist. Allerdings ist nur 1 State
(bei One-Hot-Encoding z.B. nur 1 Flipflop) aktiv.
Also das Porblem des Thread wurde gelöst und zwar lag es an der
Verwendung von Variablen und deren gleichzeitiger schreib und
lesezugrif. Habe nun aber ein anderes Problem. Habe alles auf Signal
umgestellt wenn ich einen bestimmten SIgnal etwas zuweise braucht die
Synthese gleich ca 5 mal so lange und wenn ich diese Zweisung weglasse
gehts schneller. Bei der Zuweisung wird ein integer wert in ein Array
von integern geschrieben.
MFG Gast
Bekomme derzeit auch immer die folgende Info habe aber im Inet nichts
darüber gefunden. Vielleicht kann mir ja jemand sagen wich das
wegbekomme.
FlipFlop r.SwMatrix_7_0 has been replicated 1 time(s)
INFO:Xst:1843 - HDL ADVISOR - FlipFlop r.SwMatrix_7_0 connected to a
primary input has been replicated
Ebenfalls macht er mir aus einen Signal eine Statemachine die keine ist
Found finite state machine <FSM_0> for signal <r.activeBranchB>.
-----------------------------------------------------------------------
| States | 9
|
| Transitions | 337
|
| Inputs | 24
|
| Outputs | 9
|
| Clock | clk80 (rising_edge)
|
| Reset | reset_n (negative)
|
| Reset type | asynchronous
|
| Reset State | 1000
|
| Encoding | automatic
|
| Implementation | LUT
|
-----------------------------------------------------------------------
Danke im vorhinein für die Antworten
MFG Gast
Gast schrieb:
> Bei der Zuweisung wird ein integer wert in ein Array> von integern geschrieben.
Oh ihr Softwerker, wann werdet ihr endlich den Unterschied zwischen
einem FPGA und einem PC verstehen?
Ein FPGA hat im ersten Moment keinen Speicher. Ein Integer array wird im
FPGA aus einer Serie von Registern gebildet.
Eine Zuweisung darauf erfordert einen Multiplexer, der zwischen den
Registern umschaltet, je nach Größe des Arrays ist das dann ziemlich
aufwendig, da brauchst Du dich nicht wundern, dass die Synthese länger
braucht.
Eine Möglichkeit ein Array im FPGA abzubilden die Block RAMs und
manchmal verwendet der Compiler sie auch automatisch.
Wenn Du aber wirklich geholfen werden will, dann mußt Du schon auch
deinen Code zeigen, niemand kann erraten wie dein VHDL Programm aussieht
und wo die Probleme sind.
Hi
Danke für en Tipp mit den IntegerArray. Habe das Array mit Integer
werden durch ein Array mit Unsigned(2 downto 0) ersetzt was den Code
unlesbarer macht aber nichts an speed bei der synthese bringt.
Wahrscheinlich verstehst du eine for Schleife in VHDL falsch. Wenn du
das so beschreibst, wird alles in der For-Schleife 8 mal parallel im
FPGA abgebildet. Klar, dass das Synthesezeit braucht. Soweit ich das
sehe, hast du einen riesengroßen multiplexer beschrieben. In VHDL
beschreibt "for" lediglich, wieviel Mal das Konstrukt synthetisiert
werden soll, es beschreibt keinen sequenziellen Ablauf. VHDL ist
Hardware beschreiben, nicht programmieren. Ist schwer für Umsteiger aus
der SW-Ecke, aber da muss man durch. Immer im Hinterkopf haben: Es gibt
erst mal nur FlipFlops und Logik-Gatter (und paar spezielle Sachen wie
BlockRam, ClockManager usw.)
Außerdem ist deine Kombinatorische Verknüpfung unvollständig. Du musst
im else Zweig zwingend beschreiben, was mit den Signalen, die du im
if-zweig zuweist, passieren soll. Machst du das nicht, msust du dich auf
das Synthese Tool verlassen, ob das "safe implementation" hat. Aber ich
glaub, du musst noch viele Grundlagen lernen erst mal. ich glaube nicht,
dass du einen kombinatorischen multiplexer beschreiben wolltest....
Hi
Ja das habe ich eh schon überdacht das die For schleife eine Parallel
sache ist in der HW. Aber ich wundere mich warum sich die Synthese Zeit
locker verfünfacht wenn ich
Hi
Also das mit den nicht zuweisen aller signale in den If zweigen ist in
Ordnung. Ich lese immer nur vom signal r.xxx und scheibe in rin.xxx und
ganz am Anfang vom Proces wird rin <= r gemacht. Das ist aus den
ZweiPozessModell von Gaisler.
MFG Gast
> warum sich die Synthese Zeit locker verfünfacht wenn ich
Nur mal zur Definition: die Synthesezeit ist die Zeit, die die Software
auf dem PC braucht, um dein Design umzusetzen. Da ist es doch egal, wenn
das 5 mal so lange dauert ;-)
Wenn du allerdings die Laufzeit oder die maximale Taktfrequenz
meinst, dann solltest du dir mal ansehen, was das für ein abgedrehter
dynamisch umschaltbarer Mostermux ist:
Hi
Ja unter Synthesezeit verstehe ich auch die Zeit bis der PC mit der
Synthese fertig ist. Von der Frequenz her erreiche ich meine geforderten
80MHz sowohl mit als auch ohne den Statement.
MFG Gast
> Das ist aus den ZweiPozessModell von Gaisler.
Das man nicht ohne Nachdenken einfach so übernehmen sollte. Der
VHDL-Coding-Style vom Hr. Gaisler sagt mir zB. weniger zu. Er kommt auch
aus einer Ecke, in der FPGA/ASIC-Entwicklung prinzipbedingt stark
Schmerz- und
Formalismenbehaftet ist, nämlich Chips für Weltraum. Da wird noch nicht
mal mit Besenstiel im Hintern gecoded, sondern mit Titanstahl bis ins
Hirn. Es ist schon klar, dass man bei den potentiell riesigen
Geldverlusten so arbeiten muss, aber deswegen muss man das nicht
unbedingt auf alles übertragen ;)
> Ja unter Synthesezeit verstehe ich auch die Zeit bis der PC mit der> Synthese fertig ist.
Die Synthese ist nur der erste Schritt beim Erzeugen eines Bitfiles.
Nach der Synthese kommt der Mapper, dann kommt Place&Route, und dann
wird ein Bitstrom erzeugt. Dauert nur die Synthese länger oder ist es
eher P&R?
gast schrieb:
> also die Verfünfachung tritt bei der Synthese auf. Map, Place and route> usw dauert nicht wirklich länger.
Cool ;-)
>> Das ist aus den ZweiPozessModell von Gaisler.> Das man nicht ohne Nachdenken einfach so übernehmen sollte.
Richtig, z.B. bringt diese unnötige Vermischung von Signalen und
Variablen mehr Verwirrung als Gewinn. Die Beispiele in dem Dokument
http://www.gaisler.com/doc/vhdl2proc.pdf sind ja auch eigentlich
blödsinnig einfach. Und trotzdem fast schon unlesbar. Sinnvoll erscheint
mir allerdings die Kapselung von Ports in records.