For those forum members interested in the design some details here:
I used a small development board from the German firm Trenz, a Max1000. I had it available and I used it before. For me programming works using the Quartus graphical method patching modules in a schematic "board file". I am aware that this is not the preferred method but it works for the nuts and bolts guy (me). The setup has grown into several functions:
- A section to hard reset and then program the ST7701S controller of the display with the required initialisation command stream via a 9 bit serial connection. A ROM with these commands is programmed in the FPGA.
- A display controller generating the synchronisation signals and reading the pixel data out of a dual ported RAM containing one frame of display data, 16384 x 4 bits. The RAM addresses are organised such that horizontal and vertical are interchanged. This is needed because the display's long side is the vertical axis as seen by the ST7701 controller. One bit of the RAM content is displayed in a 3 x 3 area of pixels on the TFT to get the correct scaling for the required 320 x 97 dots of the original monochrome LCD. The TFT display is used in simple black / white mode.
- A signal decoder is interpreting the control and data signals coming from the CNT-90 MCU. Under control of this decoder the incoming 4 bits wide data bytes are written into the frame RAM.
- For testing a signals generator mimicking the original control signals was added. The test uses a data frame ROM with picture data extracted from the Logic Analyser file thanks to @Smile2016, Reply # 19 session6.zip. This data ROM is programmed in the FPGA.
- At the top 4 blanc lines are added and at the bottom the last dot line is repeated until the edge of the screen. This way the remaining dot lines are filled with the active frame placed in between.
The setup above was working so I removed the signals generator to free up some pins of the development board and adapted it for connecting the signals of the CNT-90.
After connecting to the CNT-90 it was noticeable that updates of the picture contents are visibly seen to build from left to right. So most likely the lcd controller stores the incoming data to one frame while displaying another. I think the LCDFRM signal that alternates between complete frame writes controls this proces. I have implemented this concept, with two frame RAMs, and indeed the resulting picture behaves more like the original LCD while refreshing the displayed data. Still some "buildup" is noticeable, the number area is probably erased before a new number is written. But this is also somewhat visible on the original LCD. The TFT's frame rate is about 60 / second while the original frame period is about 13 ms.
Attached is a Zip file of the Quartus project as it is now. You can find here also a top.pdf that gives a picture of the schematic assembly with some comments.
Interesting files:
cnt90qu3.qpf : the Quartus project file to open the project... for MAX10 10M08SAU169C89
top.bdf : the board file
trial0.mif : This is the memory initialization file for the ST7701S COG controller, for the init_rom.
test2.mif : This file contains a frame of 4 bit wide data for the test generator test_rom, not used here anymore.
Feel free to make suggestions to correct mistakes I made or misconceptions I have. And use whatever is fitting for you.
Have Fun, Morris
edit: corrected original frame period number