¿Soporta la modulación de modelos la aritmética derecha en verilog?

1

Estoy usando ModelSim PE Student Edition, y estoy tratando de escribir un módulo que cambie la aritmética correcta. Después de buscar en línea y consultar un libro de texto Verilog, encontré que para cambiar la aritmética derecha puedo usar "> > >" operador. Sin embargo, cuando intento hacerlo y simular el módulo, solo hace un cambio regular, es decir, si el msb es un 1, no copia los 1's en los lugares desplazados, en lugar de eso, está poniendo 0's. A continuación se muestra una muestra de lo que estoy haciendo.

module shifter(
input [31:0] shamt,
output reg [31:0] result
);

reg[31:0] temp;

always@(*)begin
   temp=32'hfff00fff;
   result[31:0]=temp[31:0]>>>shamt[4:0];
end

endmodule
    
pregunta DSP_Student

1 respuesta

4

Sí, sin embargo, debe hacer que temp sea un valor con signo y no especifique el rango al usar el cambio aritmético. La especificación del rango en el cambio aritmético arroja un valor sin signo.

reg signed [31:0] temp;

always @* begin
   temp = 32'hfff00fff;
  result[31:0] = temp >>> shamt[4:0];
end

Alternativamente, puede incluirlo como firmado con $signed

reg [31:0] temp;

always @* begin
   temp = 32'hfff00fff;
  result[31:0] = $signed(temp[31:0]) >>> shamt[4:0];
end

Ejemplo (s) de trabajo aquí

    
respondido por el Greg

Lea otras preguntas en las etiquetas