Ich möchte die Bits eines Vektors ODER miteinander verknüpfen. Angenommen, ich habe einen Vektor namens example(23 downto 0)
und ich möchte alle Bits in einen anderen Vektor ODER, gibt es eine Möglichkeit, dies zu tun, die nicht das Gehen beinhaltet example(0) or example(1) or ...example(23)
?
or_reduce
ist, was Sie wollen, und es ist verfügbar in std_logic_misc
. Unterstützt von A und X für FPGAs.
and_reduce
ist die andere nützliche.Verilog hat einen praktischen "Reduktionsoperator", der genau das tut, wonach Sie fragen: |example[23:0]
Er gibt das Ergebnis der ODER-Verknüpfung aller Bits des example
Vektors.
Leider hat VHDL diesen Operator nicht. Laut der FAQ zu comp.lang.vhdl
Es gibt keinen vordefinierten VHDL-Operator, um eine Reduktionsoperation an allen Bits eines Vektors durchzuführen (z. B. um alle Bits eines Vektors zu "odern"). Die Reduktionsoperatoren lassen sich jedoch leicht implementieren:
[Überspringen eines Beispiels, das keine 'X'- und 'Z'-Werte verarbeitet]
function or_reduce( V: std_logic_vector ) return std_ulogic is variable result: std_ulogic; begin for i in V'range loop if i = V'left then result := V(i); else result := result OR V(i); end if; exit when result = '1'; end loop; return result; end or_reduce; ... b <= or_reduce( b_vec );
David
Benutzer60166
or_result <= '0' when input=X"00000000" else '1';
Ändern Sie die Anzahl der Nullen, um sie an die Länge des betreffenden Vektors anzupassen.Möberg
Miguel Risco
result <= '0' when (example=(example'range=>'0')) else '1';