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