I finally figured this out... and it was nothing wrong with the VHDL which works perfectly. The problem was exactly as suggested by Martin Thompson's comment, a pin-out problem.
Although I checked the UCF file pin connections many times, I was only checking the correct pin labels - not that they were all present and I had missed the MemOE pin, which of course is essential for this to work at all.
Some notes:
- The Xilinx tool chain doesn't provide any warning messages for an unconnected output pin as in this case.
- Reading from the MemDB was appearing to provide consistent but incorrect data depending on what mode I set the flash chip to. In read array mode, it always returned 0xFF in the low byte. In read identifier, 0x86. Totally meaningless data but the consistency fooled me into thinking I had the correct pinouts.
Lesson learned.
Since the display includes the Ilitek ILI9320 controller, then your interface requirements are much lower, as the microcontroller no longer has to interface directly with the TFT and instead only talks to the controller chip via a simple interface: either SPI, which takes six wires: RS, CS, CLK, MOSI, MISO and RESET. Or you can use an 8080-compatible parallel interface which takes 13 wires: an 8-bit data bus, and RS, CS, WR, RD and RESET. (There are options to use larger data-buses, up to 18 bits, but I don't recommend that for a low end microcontroller.)
There are two optional interfaces in which the microcontroller generates all of the clock signals (VSYNC, HSYNC and DOTCLK); you don't want to do that since it would require a high-end controller.
So just about any microcontroller will do, however you need to have enough flash memory to hold whatever static items you want to display; for example if you are going to be displaying text then you will need to allocate arrays to store bitmaps for whatever fonts you will use. Even a small font can take 60KB.
One of the advantages of this controller is that includes 172,800 bytes of RAM, which is enough to store 320*240*18 bits. However it is not double-buffered, meaning that when you write to the RAM, it will immediately show up on the screen, and if you updating a lot of the screen, it will be noticeable.
Best Answer
The answers for all of your questions will depend of what you wanna do.
As you said, you are a newbie, so I suggest you use the biggest microcontroller and just try to do the project. After this you can visualize how much code you use and then scale it according to what was used.