In the data sheet and GUI for the Multiplier v8.0 Core, I see a port called A_SIGNED which should allow me to manually switch between signed and unsigned data on port A. However, no matter what I try in the core GUI, I cannot utilize this port. Why?
This functionality was removed from the core late in the release, and there was not time to remove it from the documentation. It will not be present in future versions of the core GUI and documentation. If you need to switch between signed and unsigned data, you can use the method detailed here to work around this issue:
1. Make the A port 1 bit wider than the A operand you need in the GUI.
(NOTE: Please note that if you want to target an 18x18 multiplier, using this feature requires the multiplier to be 19x18, which will use a lot more logic and dedicated multipliers. The recommendation would be to do a 17x17-bit multiplier and increase the input to 18x17, to better utilize the dedicated resources.)
2. Generate the core.
3. Create (infer) an AND gate in your code (a single LUT), and AND the MSB of your input operand with the sign control signal (call it a_signed).
4. When a_signed is driven HIGH, the data on port A is signed; when it is driven LOW, it is treated as unsigned. This is exactly how the core used to perform this function. (The A operand is stretched by 1 bit internally.)