Emulating a hardware signed multiplier
Børge Strand-Bergesen
borge.strand at gmail.com
Sun Oct 25 19:13:33 CET 2009
Pedro,
most elegant. Thank you!
Your predictions are right. I did a quick check. My FPGA interface
prefers capital-letter hex without preceding 0x. And that prints
beautifully. However, the %#016Zx drops "0x" at offset==0 and seems to
use two less characters at offset>0. I assume this is a printf issue.
The issue won't bother my application but I wouldn't mind knowing how
to make it print correctly.
Regards,
Borge
int main(void) {
mpz_t a, mask64, a_fpga;
int8_t offset;
mpz_init(a);
mpz_init_set_str(mask64, "FFFFFFFFFFFFFFFF", 16);
mpz_init(a_fpga);
for (offset=-10; offset<11; offset++) {
mpz_set_si(a, offset);
mpz_and(a_fpga, a, mask64);
gmp_printf("%3d, %016ZX, %#016Zx\n", offset, a_fpga, a_fpga); //
FPGA interface uses capital hex and no "0x"
}
/* Prints:
-10, FFFFFFFFFFFFFFF6, 0xfffffffffffffff6
-9, FFFFFFFFFFFFFFF7, 0xfffffffffffffff7
-8, FFFFFFFFFFFFFFF8, 0xfffffffffffffff8
-7, FFFFFFFFFFFFFFF9, 0xfffffffffffffff9
-6, FFFFFFFFFFFFFFFA, 0xfffffffffffffffa
-5, FFFFFFFFFFFFFFFB, 0xfffffffffffffffb
-4, FFFFFFFFFFFFFFFC, 0xfffffffffffffffc
-3, FFFFFFFFFFFFFFFD, 0xfffffffffffffffd
-2, FFFFFFFFFFFFFFFE, 0xfffffffffffffffe
-1, FFFFFFFFFFFFFFFF, 0xffffffffffffffff
0, 0000000000000000, 0000000000000000
1, 0000000000000001, 0x00000000000001
2, 0000000000000002, 0x00000000000002
3, 0000000000000003, 0x00000000000003
4, 0000000000000004, 0x00000000000004
5, 0000000000000005, 0x00000000000005
6, 0000000000000006, 0x00000000000006
7, 0000000000000007, 0x00000000000007
8, 0000000000000008, 0x00000000000008
9, 0000000000000009, 0x00000000000009
10, 000000000000000A, 0x0000000000000a
*/
}
More information about the gmp-discuss
mailing list