"Höchstes" Bit finden

Gast #2606833
Lesenswert?

Hi,

ich mache gerade die zweiten Schritte in VHDL.

Ich versuche ein synthetisierbares Modul (für einen FPGA) zu basteln 
welches aus aus einem 64-Bit Wort die höchste besetzte Stelle ermittelt. 
Jetzt kann ich das natürlich mit einem floor(ld(X)) Algorithmus machen, 
oder ich gehe das ganze rein kombinatorisch an:
1
if ( x(63) = '1') then
2
  y <= 63;
3
elsif( x(62) ='1') then
4
  y <= 62;
5
...

Als Anfänger stellt sich mir jetzt die Frage: ist so eine lange Kette in 
der Realität noch sinnvoll? Ich kann mir natürlich denken, dass es von 
der Taktung und dem FPGA Modell abhängt. Was mich interessiert wäre, ob 
es so eine Art praktischen Richtwert gibt, ab wann man sich darüber 
Gedanken machen sollte, das Problem in mehreren Zyklen zu lösen. Oder 
reicht es, wenn der Logik-Simulator sein OK gibt? Habe leider weder 
Erfahrungswerte damit, noch die Hardware um es zu testen.
#2606840
Lesenswert?

@  Student (Gast)

>Ich versuche ein synthetisierbares Modul (für einen FPGA) zu basteln
>welches aus aus einem 64-Bit Wort die höchste besetzte Stelle ermittelt.

Priority Encoder.

>if ( x(63) = '1') then
>  y <= 63;
>elsif( x(62) ='1') then
>  y <= 62;

>Als Anfänger stellt sich mir jetzt die Frage: ist so eine lange Kette in
>der Realität noch sinnvoll?

Nein. Warum fragst du nicht das Bit direkt ab? Lässt sich recht einfach 
mit ne Schleife hinschreiben. Und dürfte deutlich besser und kleiner 
synthetisierbar sein.

>der Taktung und dem FPGA Modell abhängt. Was mich interessiert wäre, ob
>es so eine Art praktischen Richtwert gibt, ab wann man sich darüber
>Gedanken machen sollte, das Problem in mehreren Zyklen zu lösen.

Wenn du deine gewünschte Taktfrequenz nicht mehr erreichst.

> Oder
>reicht es, wenn der Logik-Simulator sein OK gibt?

Jain.

>Habe leider weder
>Erfahrungswerte damit, noch die Hardware um es zu testen.

Brauchst du nicht, deine Tools spucken dir die mögliche Taktfrequenz bei 
sauberen synchronen Designs aus.

MFg
Falk
Gast #2606844
Lesenswert?

Ach ja, y wird natürlich im Anschluss synchron weiter verarbeitet. Der 
Punkt ist also: reicht bekomme ich das Signal zuverlässig in einem Takt 
durch die ganzen Gatter? Und reicht das Modell mit den Delta-Zyklen um 
die Frage mit dem Simulator zu beantworten?
Moderator (Firma: Titel) Persönliche Seite #2606872
Lesenswert?

Student schrieb:
> bekomme ich das Signal zuverlässig in einem Takt durch die ganzen Gatter?
Ja, klappt problemlos.
Du musst nur den Takt ausreichend langsam machen...

> Oder reicht es, wenn der Logik-Simulator sein OK gibt?
Der Simulator wird dir keine Angabe zur Hardware machen. Der weiß ja gar 
nichts davon!

Ich mach das so:
http://www.lothar-miller.de/s9y/archives/55-Finde-das-MSB.html

> Als Anfänger stellt sich mir jetzt die Frage: ist so eine lange Kette
> in der Realität noch sinnvoll?
Du kannst auch 2 Flipflops dahinterschalten und "Register-Balancing" 
anknipsen, dann wird das Design zwar nicht schneller, du kannst es aber 
höher takten...
Aber auch ein Multiple Clock Constraint, das angibt: "dieser Pfad darf 3 
Takte brauchen", hilft evtl. weiter.
Gast #2607225
Lesenswert?

So herum wird natürlich ein Schuh daraus! Alles schon mal in der 
Vorlesung gehört, aber wenn man dann davor steht weiß man nichts mehr. 
;-) Vielen Dank für die Auffrischung!

Der Link hat mir auch weiter geholfen. Aber was meinst du mit 
"Register-Balancing"? (Google gibt nicht viel her?)

Ich denke ich werde das ganze Problem mal auf mehrere Takte aufteilen, 
dann kann ich ja praktisch ein Optimum suchen zwischen Anzahl der Takte 
und Länge. Außerdem wird es im Schnitt weniger Zeit benötigen als beim 
Multiple Clock Constraint.
Moderator (Firma: Titel) Persönliche Seite #2610911
Lesenswert?

Student schrieb:
> Aber was meinst du mit "Register-Balancing"?
http://www.google.de/search?q=xilinx+register+balancing
Gleich der erste gefundene Beitrag zeigt eigentlich alles:
http://www.xilinx.com/support/answers/40089.htm

> Außerdem wird es im Schnitt weniger Zeit benötigen als beim
> Multiple Clock Constraint.
Die Berechnung wird durch das Einfügen von Flipflops langsamer, weil 
ja für jedes Flipflop noch die zusätzlichen tsu und th eingehalten 
werden müssen. Aber: das Design kann schneller getaktet werden.

Häh? Langsamer und schneller gleichzeitig?

Richtig: schneller wird das ganze Design, weil weniger Kombinatorik 
zwischen 2 Flipflops sitzt. Und langsamer wird die Berechnung, weil 
mehrere Takte zur Berechnung nötig sind.

Ein globaler Gewinn an Geschwindigkeit (das Design) wird durch Abstriche 
von lokalen Teilen (die einzelne Berechnung) erreicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren