Make sure that in the Synthesis options the "Add I/O Buffers" option is enabled.
"Add I/O Buffers" option tells XST to add or not add IBUF/OBUF/IOBUF on the top level ports. By default, it is enabled, but maybe you somehow disabled it?
You need I/O buffers on the top level ports.
Only when you are synthesizing a submodule or a module which is going to be used as a submodule of another design, you need to disable this option because I/O Buffer should be in the top level.
When it is disabled, the tool won't do a pin assignment because you don't have pads in your design.