Serialisieren von 64 32 Bit words

Gast #3070802
Lesenswert?

Hallo!

Ich bekommen ein 256 bit breites Signal, das in 64 32 Bit Words 
unterteilt und eines nach dem anderen gesendet werden soll.
Nun gibt es da zwei Herangehensweisen:
1. Ich konnte ein Shift-Register mit den 64 Words füllen und dann eines 
nach dem anderen heraus shiften.
2. Ich könnte einen Counter laufen lassen und dann den jeweiligen Teil 
aus dem Signal demuxen.
Prinzipiell funktioniert ja beides. Aber was wäre auf einem Xilinx 
Virtex-6 schneller?

Vielen Dank im Voraus!
Sawtooth
Gast #3071124
Lesenswert?

Ich finde es erschreckend das Leute die wenig Ahnung von FPGAs haben 
einen Virtex 6 verwenden :-)

Dieser Baustein ist doch so extrem teuer. Er verwendet sicherlich nicht 
mal 1% der LUT und FFs.

Wieso nimmst Du denn keinen Spartan 6 oder ARTIX7 die sind doch viel 
günstiger und erledigen dies sicherlich auch.

Wie hoch muss denn die Übertragungsrate sein.
Gast #3071608
Lesenswert?

@supachris:
Nein, das Signal wird intern noch verarbeitet, bevor es raus geht. Aber 
ein FIFO dazwischen zu schalten ist eine gute Idee, da ich nicht 
kontinuierlich senden muss. Danke für den Denkanstoß! :-)

@Sebastian:
> Dieser Baustein ist doch so extrem teuer. Er verwendet sicherlich nicht
> mal 1% der LUT und FFs.

Mal schauen, was map so meint:

Slice Logic Utilization:
  Number of Slice Registers:                16,060 out of 301,440    5%
    Number used as Flip Flops:              16,059
    Number used as Latches:                      1
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:                0
  Number of Slice LUTs:                     17,866 out of 150,720   11%
    Number used as logic:                   16,138 out of 150,720   10%
      Number using O6 output only:          13,057
      Number using O5 output only:           1,443
      Number using O5 and O6:                1,638
      Number used as ROM:                        0
    Number used as Memory:                       0 out of  58,400    0%
    Number used exclusively as route-thrus:  1,728
      Number with same-slice register load:  1,609
      Number with same-slice carry load:       119
      Number with other load:                    0


> Wieso nimmst Du denn keinen Spartan 6 oder ARTIX7 die sind doch viel
> günstiger und erledigen dies sicherlich auch.

Weil die kein radiation hardened Äquivalent haben.

> Wie hoch muss denn die Übertragungsrate sein.

1 GBit/s. Allerdings nicht kontinuierlich.
Gast #3071667
Lesenswert?

Kann jemand noch etwas zu folgendem (vielleicht auftretendem) Problem
sagen: Ich habe irgendwo im Kopf, dass es eine Limitierung gibt,
wie viele Bits zugleich im FPGA schalten können. Gibt es so etwas?
Würde man jetzt ein riesiges Schieberegister erstellen (ohne explizite
HW-Unterstützung wie SERDES), 2048 lang, dass bei jedem Takt 2048 Bit
umlädt, würde dies funktionieren?
#3071683
Lesenswert?

Fragender schrieb:
> Würde man jetzt ein riesiges Schieberegister erstellen (ohne explizite
> HW-Unterstützung wie SERDES), 2048 lang, dass bei jedem Takt 2048 Bit
> umlädt, würde dies funktionieren?

Problemlos, vorausgesetzt dein Power-Konzept (Stromversorgung, 
Abblockung etc.) ist einigermassen seriös gebaut.

Falls das nicht ginge, würde es kaum Sinn machen, reisige FPGA's mit 
vielen BRAM und DSP-Blocks, usw. herzustellen...
Gast #3071980
Lesenswert?

@lkmiller:
>>> Wie hoch muss denn die Übertragungsrate sein.
>> 1 GBit/s. Allerdings nicht kontinuierlich.
> Und wieviel effektiv?

Das kann man nicht sagen. Die Daten werden vom FPGA immer dann 
herausgegeben, wenn sie angefordert werden. Das ist aber auch nicht 
wichtig. Wichtig ist nur, dass dies mit einer bestimmten Geschwindigkeit 
getan werden muss (125 MB/s). Daher auch die Frage, ob das mit einem 
Schieberegister oder einem Demuxer effizienter geht. :-)

@Fragender:
> Kann jemand noch etwas zu folgendem (vielleicht auftretendem) Problem
> sagen: Ich habe irgendwo im Kopf, dass es eine Limitierung gibt,
> wie viele Bits zugleich im FPGA schalten können. Gibt es so etwas?
> Würde man jetzt ein riesiges Schieberegister erstellen (ohne explizite
> HW-Unterstützung wie SERDES), 2048 lang, dass bei jedem Takt 2048 Bit
> umlädt, würde dies funktionieren?

Klar ist das möglich. Das habe ich ja oben schon als eine der beiden 
Möglichkeiten geschrieben. Ich habe das jetzt auch mal implementiert, da 
ich vermutet habe, dass hier weniger zeitraubende Logic gebraucht wird 
als bei einem Demuxer. Das ist auch im Prinzip richtig, allerdings geht 
dafür recht viel fürs Routing drauf (0.744ns logic, 7.208ns route). Bei 
Zeiten versuche ich das auch mal mit einem Demuxer, aber viel Hoffnung, 
dass es schneller ist, habe ich nicht. ;-)
Gast #3071992
Lesenswert?

>Bei Zeiten versuche ich das auch mal mit einem Demuxer, aber viel Hoffnung,
>dass es schneller ist, habe ich nicht. ;-)

Das hat mir Hoffen nichts zu tun. Probier einfach beides aus, schau Dir 
an was dabei herauskommt, und lerne daraus.

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