Para extender '1' a un vector de longitud específica, normalmente usaría la sintaxis (0 => '1', others => 0)
.
por ejemplo:
mysignal <= "010" and (0 => '1', mysignal'left downto mysignal'right+1 => '0');
Esto especifica que el bit 0 es '1' y el resto es cero, lo que produce "001"
Otra forma es concatenar el vector con ceros. Normalmente hago una señal ficticia llamada zeros
de la siguiente manera:
signal zeros : std_logic_vector(31 downto 0) -- or unsigned if you prefer
...
zeros <= (others => '0');
Entonces es solo una cuestión de concatenar el vector de ceros con cualquier otro vector que desees. Los símbolos &
es el operador de concatenación en VHDL:
newsignal <= zeros(newsignal'left downto newsignal'right+1) & '1';
Si desea concatenar otra señal, entonces es aún más fácil:
newsignal <= zeors(newsignal'left downto oldsignal'left+1) & oldsignal;
Esto extiende oldsignal
a cualquier longitud newsignal
. No funcionará si newsignal
tiene la misma longitud o es menor que oldsignal
. "010" se convierte en "000010", por ejemplo.
Nota: la adición del vector de ceros ficticios no cambia el tamaño de su diseño de ninguna manera, las herramientas lo optimizarán en cualquier caso y lo sustituirá por todos los ceros. Simplemente me resulta mucho más fácil escribir zeros
y seleccionar el rango que quiero. naturalmente, debe asegurarse de que su vector de ceros sea tan largo como su señal más larga. Encuentro que 32 bits funcionan en la mayoría de los casos.