ID:14633 Can't connect TRI or OPNDRN primitive "<name>" to pin "<name>" because primitive is already connected to bidirectional pin "<name>"

CAUSE: The specified OPNDRN primitive is connected to the two specified pins, one of which is bidirectional. However, if the TRI or OPNDRN primitive drives a bidirectional pin, the primitive can drive other primitives, and not other pins. This error may also occur in VHDL if an OUTPUT primitive is declared as INOUT. This is sometimes done to overcome the problem that OUTPUT primitives cannot be used in expressions in VHDL. For example:
entity test3 is
	Port ( 
           clk : in std_logic;
	   out_a: inout std_logic ;
           out_b: out std_logic ;
           data_in : in std_logic
	);
end test3;
architecture test_arch of test3 is
begin
	process (clk)
	begin
		if rising_edge(clk) then
			out_a <= data_in;
		end if;
	end process;
	out_b <= out_a;
end test_arch;

            
In this example, out_a is really an OUTPUT, but is declared as INOUT because it is used in the expression out_b <= out_a.
ACTION: Modify the design so that the TRI or OPNDRN primitive does not drive a bidirectional pin and another pin simultaneously. If you declared an OUTPUT primitive as INOUT in VHDL, introduce an internal signal to store the value of the output pin and use that signal in expressions. Then the INOUT primitive can be changed into an OUTPUT. For example:
entity test3 is
    Port ( 
           clk : in std_logic;
	   out_a: out std_logic ;
           out_b: out std_logic ;
           data_in : in std_logic
	);
end test3;
architecture test_arch of test3 is
signal tmp: std_logic;
begin
	process (clk)
	begin
		if rising_edge(clk) then
			tmp <= data_in;
		end if;
	end process;
	out_a <= tmp;
	out_b <= tmp;
end test_arch;