6565 - Radiant: How to move a FF (register ) to IOB pins or move IOB to an internal register FF?

6565 - Radiant: How to move a FF (register ) to IOB pins or move IOB to an internal register FF?

Description:
The user can use the synthesis attribute syn_useioff to perform the two conditions: moving Register (FF) to IOB pins or move IOB to an internal Register (FF).

Solution:
Verilog example:
module test (a, b, clk, rst, d) /* synthesis syn_useioff = 1 */;
VHDL example:
architecture archtest of test is
signal temp : std_logic;
signal temp1 : std_logic;   
signal temp2 : std_logic;
signal temp3 : std_logic;
attribute syn_useioff : boolean;
attribute syn_useioff of archtest : architecture is true;
The user can check the map report under "IO (PIO) Attributes" to check if it is properly applied.
On the otherhand, the user can also check the physical viewer to know if it is properly applied.
If "syn_useioff = 1" is applied, it implements the register to IOB or packed into the IO.
If "syn_useioff = 0" is applied, it implements the register to LUTS.



Notes for syn_useioff = 1:
  • When applied globally, the synthesis tool packs all input, output, and I/O registers into I/O pad cells.
  • When applied to a register, the synthesis tool packs the register into the pad cell; 
  • When applied to a port, it packs all registers attached to the port into the pad cell.
  • The register packing into IO is only done during synthesis and not on post-synthesis.
  • Avoid using syn_keep attribute since it will stop the register packing into the IO.