Hallo,
ich brauche für eine Transformation (FPGA Bildverarbeitung) ein
Popcount, welches aus einem 80-bit-Array die Einsen zählt und als Stream
ausgibt (II=1). Ich verpacke das ganze in AXI4-Streams (Input: 80-bit,
Output 7-bit).
Mein bisheriger Ansatz bestand aus dem folgenden Snippet:
1 | for idx in 0 to FILTER_WIDTH*FILTER_HEIGHT-1 loop
|
2 | if in_data_i(idx) then
|
3 | v.count := v.count + 1;
|
4 | end if;
|
5 | end loop;
|
Dies ist zwar ein sehr einfacher Ansatz, führt für mich jedoch logisch
zu einem unanständig komplexen kaskadierten Addierer, ohne die LUTs
richtig auszureizen. Habt ihr eine andere Idee? Falls Pipelining
notwendig, wäre das auch kein Problem (sollte aber möglichst generisch
erfolgen können, um flexibel zu bleiben). Gibt es eine Lösung, die LUTs
zu verwenden, und möglichst wenig kombinatorische Pfade zu erhalten
(Ziel: 300 MHz auf Cyclone 10 GX).
Viele Grüße,
der zopf