alright i think i have figured it out.
the sb_io_od port documentation in icecube2' technology library is clearer on how to setup the parameters, so in order for instance to use the pin as input, we need to do 3 things,
1- include the specific libraries.
2- instantiate the SB_IO_OD module
3- setup the proper parameters (can be figured out form the attached sb_io_od diagram from the technology library in icecube2 help)
it is quite a big file, i was using the signal straight from the input pin (PACKAGEPIN) elsewhere in my vhdl code, and that caused the placement hickup, once i changed that and replaced it by the corresponding signal from (DIN0), the placement proceeded correctly.
and thus, to use one of these 3 pins as input, the code to be inserted in the vhdl is the following:
-- first add the library references
library sb_ice40_components_syn;
use sb_ice40_components_syn.components.all;
--
-- .....
--
signal s_signal := std_logic := '0';
PIN39: SB_IO_OD
generic map ( NEG_TRIGGER => '0',
PIN_TYPE => "000001" ) -- check the diagram for the input type you want and set the 2 LSBs accordingly.
port map ( DOUT1 => open, -- leave open
DOUT0 => open, -- leave open
CLOCKENABLE => open, -- leave open
LATCHINPUTVALUE => '0', -- i do not want to latch the input.
INPUTCLK => open, -- leave open
DIN1 => open, -- leave open
DIN0 => s_signal, -- the internal signal to process and work with.
OUTPUTENABLE => '0', -- disable the output.
OUTPUTCLK => open,
PACKAGEPIN => TopLevelInputName);
but at any rate, this is not very documented online and this thread will maybe help someone in the future
thanks to the members who read and replied