diff --git a/examples/fp/fpcalc/fpcalc.c b/examples/fp/fpcalc/fpcalc.c index b8e180bf7..b29b4c8ef 100644 --- a/examples/fp/fpcalc/fpcalc.c +++ b/examples/fp/fpcalc/fpcalc.c @@ -128,7 +128,7 @@ void printF64(char *msg, float64_t f) { printf("_"); printf("%04x", (conv.v >> 32) & 0xFFFF); printf("_"); - printf("%04x", (conv.v >> 16)); + printf("%04x", (conv.v >> 16) & 0xFFFF); printf("_"); printf("%04x", (conv.v & 0xFFFF)); printf(" = %lg = %s: Biased Exp %d Fract 0x%lx\n", conv.d, sci, exp, fract); diff --git a/pipelined/src/fma/fma16_template.v b/pipelined/src/fma/fma16_template.v new file mode 100644 index 000000000..70d06a771 --- /dev/null +++ b/pipelined/src/fma/fma16_template.v @@ -0,0 +1,24 @@ +// fma16.sv +// David_Harris@hmc.edu 26 February 2022 +// 16-bit floating-point multiply-accumulate + +// Operation: general purpose multiply, add, fma, with optional negation +// If mul=1, p = x * y. Else p = x. +// If add=1, result = p + z. Else result = p. +// If negr or negz = 1, negate result or z to handle negations and subtractions +// fadd: mul = 0, add = 1, negr = negz = 0 +// fsub: mul = 0, add = 1, negr = 0, negz = 1 +// fmul: mul = 1, add = 0, negr = 0, negz = 0 +// fmadd: mul = 1, add = 1, negr = 0, negz = 0 +// fmsub: mul = 1, add = 1, negr = 0, negz = 1 +// fnmadd: mul = 1, add = 1, negr = 1, negz = 0 +// fnmsub: mul = 1, add = 1, negr = 1, negz = 1 + +module fma16( + input logic [15:0] x, y, z, + input logic mul, add, negr, negz, + input logic [1:0] roundmode, // 00: rz, 01: rne, 10: rp, 11: rn + output logic [15:0] result); + +endmodule +