Electronics > Projects, Designs, and Technical Stuff
Need to build On-screen display for VGA
isso:
I need to build an On-screen display module that will sit in between of a graphics adapter and monitor with VGA input and will modify the RGB video stream by inserting simple graphics or characters. Target resolutions are up to 1920x1080. Are there any specialized ICs for this purpose? I found STV9937 which seems to fit the job, however it's discontinued. Or any other ideas how to implement this using general purpose FPGA or MCU? Thanks
Berni:
For 1080p it will be indeed difficult to find purpose built chips for the job, but it is a pretty easy task for a FPGA.
The FPGA just has to look at the Hsync and Vsync signals to determine what location on the screen is being drawn at. When it wants to draw something at that location you can have a digital output pin flip a fast analog MUX chip to disconnect the original video stream and instead connect the output to the FPGA pins where you generate the color you want to show. You can get 8 available colors in the OSD text by just using 3 digital pins each driving its own color, or if you add a simple 3 bit R2R DAC cirucit to the pins you can push that to 512 colors.
Pretty ideal task for a FPGA really.
isso:
Thanks for fast response Berni,
I have no experience with FPGA, so maybe a dumb question, but would the solution that you described require very fast RAM where the OSD data would need to be stored?
Berni:
Well expect a significant learning curve in programing FPGAs then, but it is a useful skill to have in your toolbox, so if you are not on a tight deadline its worth giving it a shot.
The fastest RAM is the one inside the FPGA itself and its way way faster than needed for 1080p video. As for if you need external RAM is mostly a question of how much RAM you need. Reasonably priced FPGAs tend to have about 10 to 300 KB of built in RAM. So if you want to overlay a picture into the video that is 1920x1080 in 24bit color you will need external RAM to hold it as that's about 6MB. But if you quadruple each pixel(use 1/4 the resolution of 1080p for the OSD) that brings it down to 389KB, if you settle for 256 colors that brings it down to 128KB.
But FPGAs also have a significant amount of processing power available so you can actually generate the OSD image on the fly as needed. This means that the FPGA can hold a array of ASCII text and process it into a OSD image as its being drawn from a font array. This brings the memory requirement to 20KB for a 100x200 field of text and about 32KB to hold a reasonably high resolution bitmap font. This might make it fit into a even smaller and cheaper FPGA and if the text is being updated by an outside MCU it saves it a lot of work because it can just spit a string at it rather than drawing text by flipping individual pixels in the FPGAs memory. Pretty much all computers from the 80s used this trick because it was easy to do and it saved them a lot of RAM and CPU power to get things on a screen.
isso:
Thanks a lot, that's very useful information.
One more question: do you think any MCU could handle the same task? I realize it would require a very fast MCU, however maybe with some tricks (like those you described) and additional ICs the requirement can be lowered?
Navigation
[0] Message Index
[#] Next page
Go to full version