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_logic
Also 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;