Encuentro este módulo para la adición de dos números de punto fijo. Manual de uso de este módulo: enlace
¿Cómo agregar -1.5 (o cualquier número real negativo) a 0.5 (cualquier número real)?
Mi problema es que: sé cómo representar números positivos en una representación de punto fijo. Pero no sé cómo representar -1.5 (o cualquier número real negativo), pero traté de tomar el complemento de 1.5 de 2 y se me dio como entrada, pero no está dando la salida adecuada.
Editar: lo intenté, lo que dijeron Wouter y el empresario, pero eso tampoco funciona.
Editar: Agregado Testbench del módulo.
module qadd(
input [N-1:0] a,
input [N-1:0] b,
output [N-1:0] c
);
//Parameterized values
parameter Q = 15;
parameter N = 32;
reg [N-1:0] res;
assign c = res;
always @(a,b)
begin
//both negative
if(a[N-1] == 1 && b[N-1] == 1) begin
//sign
res[N-1] = 1;
//whole
res[N-2:0] = a[N-2:0] + b[N-2:0];
end
//both positive
else if(a[N-1] == 0 && b[N-1] == 0) begin
//sign
res[N-1] = 0;
//whole
res[N-2:0] = a[N-2:0] + b[N-2:0];
end
//subtract a-b
else if(a[N-1] == 0 && b[N-1] == 1) begin
//sign
if(a[N-2:0] > b[N-2:0])
res[N-1] = 1;
else
res[N-1] = 0;
//whole
res[N-2:0] = a[N-2:0] - b[N-2:0];
end
//subtract b-a
else begin
//sign
if(a[N-2:0] < b[N-2:0])
res[N-1] = 1;
else
res[N-1] = 0;
//whole
res[N-2:0] = b[N-2:0] - a[N-2:0];
end
end
endmodule
// Banco de pruebas
module qadd_tf;
// Inputs
reg [32:0] a;
reg [32:0] b;
// Outputs
wire [32:0] c;
// Instantiate the Unit Under Test (UUT)
qadd #(16,33) uut (a, b, c);
initial begin
// Initialize Inputs
b[32]=1;
b[31:16]= 16'b00000000_00000001;
b[15:0] = 16'b10000000_00000000;
a[32]=0;
a[31:16]= 16'b00000000_00000000;
a[15:0] = 16'b10000000_00000000;
#100;
#100;
end
endmodule