VHDL: Verwenden Sie die Länge einer Ganzzahl, um die Anzahl der ausgewählten Zeilen zu bestimmen

Ich versuche einen wiederverwendbaren Barrel Shifter zu erstellen. es nimmt ein Eingangsarray von Bits und verschiebt sie um eine bestimmte Anzahl von Positionen (bestimmt durch einen anderen Eingang). Ich möchte das Modul so parametrieren, dass es für jedes funktioniertn.

Die Anzahl der benötigten Auswahlleitungen wird durch festgelegtn -> d.h.SHIFT_CNT = log2(NUMBITS-1)+1 im Code unten. Es wird in meiner Organisation als schlecht angesehen (und ich denke insgesamt), Ports zu haben, von denen keine vorhanden sindstd_logic_vector oderstd_logicAlso habe ich astd_logic_vector für die Anzahl der ausgewählten Zeilen. Ich muss die Länge von anpassenstd_logic_vector basierend auf der Eingabe generisch. Gibt es eine Möglichkeit, dies zu tun, ohne ein zweites Generikum zu verwenden? Ich habe gesehendiese Post, aber es geht nicht um Generika.Diese post beseitigt die Generika vollständig oder verwendet den Protokollwert als das Generikum, was für zukünftige Benutzer nicht so intuitiv ist (und Probleme verursachen könnte, wenn dasINPUT ist keine Potenz von zwei).

Die Erklärung vonSHIFT_CNT unten ist definitiv falsch; Gibt es eine Möglichkeit, die Länge in der Entitätsdeklaration automatisch zu generieren, ohne eine zweite generische zu verwenden?

entity BarrelShifter is

generic ( NUMBITS : integer :=8);                                                   
Port    ( INPUT     : in   std_logic_vector (NUMBITS-1 downto 0);                
          OUTPUT    : out  std_logic_vector (NUMBITS-1 downto 0);                
          SHIFT_CNT : in   std_logic_vector ((NUMBITS-1)'length downto 0)                 
        );                                                               
end BarrelShifter;

Antworten auf die Frage(5)

Ihre Antwort auf die Frage