Cambio aritmético en verilog

0

Estoy revisando el libro Verilog HDL de Samir Palnitkar.

Veo que hay dos tipos de cambios, el normal y el aritmético.

Pero no pude entender la diferencia entre ellos.

Se dio que para a = 0, b = -10, la salida para c = a + (b > > > 3) es -2. Cómo es esto posible. ¿Cuál es la salida si usamos el desplazamiento normal?

    

1 respuesta

3

El desplazamiento a nivel de bit ocurre en un espacio finito, aunque los valores negativos en realidad requieren un espacio infinito para representarse con toda precisión.

Si cambiamos en un 0, no solo el valor, sino también el signo puede cambiar:

0b0110 (6)  -> 0b0011 (3)
0b1110 (-2) -> 0b0111 (7)

Esto se conoce como cambio lógico , ya que sigue estrictamente la definición lógica de "desplazamiento", es decir, moviendo los bits existentes una posición hacia el LSb.

Si cambiamos en el mismo valor que el MSb, cambiamos el valor pero conservamos el signo:

0b0110 (6)  -> 0b0011 (3)
0b1110 (-2) -> 0b1111 (-1)

Esto se conoce como cambio aritmético , ya que el valor se divide (aproximadamente) entre 2, independientemente del signo inicial.

    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas