LVDS Display controller for microprocessors
We have had a couple of embedded projects for our customers where the requirement were large-screen LVDS displays. By large screen I mean sizes over 7″ and a resolution of 800×480 where the common SSD1963 LCD controller can’t be used as the frame buffer RAM is too small.
So now we have decided to make our own similar display controller board but for LVDS displays as they are much more inexpensive and common (used in TVs and PCs).
As LVDS is a differential signal standard we can’t just connect it directly to an MCU even though it supported the larger display resolutions. So as we already had to use some kind of converter in between we decided to go with an FPGA and embed a complete display controller solution into it.
The FPGA is connected to the LVDS display using an 8-bit differntial pair interface. Then it is connected to a 16-mbit ISSI SRAM for the framebuffer and finally to a 16-bit Host interface which is made compliant to the Motorola-8080 standard which is commonly seen in other TFT display controllers such as ILI9320, SSD2119 and SSD1963.
And as we both need a lot of pins (over 50 I/O pins) and a reasonable portion of available logic we decided to go with the 250K version of the Xilinx Spartan 3E device.
The standard Host interface we made makes it possible for any microcontroller or microprocessor to write to the display controller and thereby display graphics on these larger resolution displays.
Even a small and a bit slow Arduino will be able to display graphics on the display though it won’t be able to do full screen updates that fast.
But to make it a bit more featured and more comfortable to use with smaller microprocessors we have made some fast Clearings and write commands that doesn’t require a lot of write cycles from the Host microprocessor.
So currently the display controller supports the following commands:
- Set framebuffer writing pointer position (X,Y)
- Set framebuffer access region (X0,Y0,X1,Y0)
- Reset framebuffer access region
- Framebuffer writing – write pixels to pointer position
- Put pixel (X,Y,Color)
- Clear display (Color)
- Clear region (X0,Y0,X1,Y1,Color)
We have already planned to extend the command set to be able to set some timing parameters of the LVDS display used together with the resolution so the board will become more flexible as it can be used with many different displays.
To see the board in action connected to the FSMC (Flexible Static Memory Controller) bus of the STM32F4DISCOVERY board please watch the video below.
Finally we have a couple of close-up photos of the board components:
Our initial plan with this board was actually to embed it in a commercial product we are currently working on, as it required a larger display.
But if everything works out well and we get some good response on this work we might start a production of the display controller “evaluation” board itself so other people can start using some of their trashed Laptop LVDS displays with their Arduino or similar microprocessor.
Categories: Arduino, ARM, FPGA, Other Microprocessors
Has this board been turned into a product? Or has the FPGA code been made open source? Do you have a product like this that is capable of video play back?
Hi!
I can see this kind of thing very easily added to some of the students designs in our 4th year project course. The usual 16×2 LCD displays only provide so much functionality, and as you can guess, there’s usually a heap of dead laptops to harvest LCDs out of 😉
Keep up the good work!
Cheers,
M
Loving this already. I had asked about this on a forum and people usually say “NO” but i knew it was possible… Thanks for the work and i would gladly buy one 🙂
I repair laptops as well and tv…. i think this would be a awesome tool. If you every decide to make it open source… im sure you will be marked as a demigod in the electronics hobbiest world! (which is huge and growing)
BTW… my blog is atomsoft.wordpress.com 😀
It should be nice if you put a VGA/HDMI input on your board to convert old laptop LCD in a real monitor.
BTW this project is very nice to use in embedded boards.
Do you know if there are any plans for interfacing with any of the Retina Displays that are used in the latest Apple products? It would be great to be able to work with the 15.4″ Retina Display from the new MacBook Pro 🙂
http://www.ifixit.com/Teardown/MacBook-Pro-Retina-Display-Teardown/9493/1
Jason
Put the line command into the fpga please.
Better still, add a few basic geometry commands, line, circle, box, filled box, filled circle etc.
polygon with 3 points?
I’ve done a lot of work with drawing 3D on small micros and having the line command or poly command in the FPGA would be amazing.
Lastly, how about more ram and double buffered frame buffer?
Nice stuff, i got an old Bull laptop with a small LCD (around 7″ with 800×600 ou 640×480) and that could help me revive it!! 🙂
Oh, how about having “unused” ram store images/textures and have a command to blit those directly into the visible ram?
Any chance you could make a DVI input (HDMI compatible?) so we can use our Pi on it?
@Jason Lopez
I will let you all know if there is any chance of this making it into the Open Source world.
In my opinion this should of course be Open Source, as I’m also a very Open Source minded person. But I have some NDA’s, Copyrights and contracts to take care of first before I can release anything to the public.
@Pyrofer
We have thought about making some geometry commands but this will just add up in the FPGA logic making the state machine even more difficult to manage. As an FPGA itself has no math operations such as multiply, divide or sine we won’t make anything like a circle.
We have already made the filled box/rectangle with the Clear Region and we might also make a line command – but I guess that would beit then!
The double buffering feature has been evaluated but as one single frame requires 12Mbit of SRAM doubling it would require 24Mbit which would then exceed the 16Mbit onboard SRAM chip.
To solve this we would have to add an extra 8Mbit or 16Mbit SRAM chip on the board – and these chips are not inexpensive (~$20/each).
Furthermore we would also have to find another spare pin at the FPGA to connect the extra SRAM Address pin required – and if I remember correctly we don’t have any spare pins left!
So I guess this will not be an option currently.
For the DVI input the missing pins also answers this question. It would be a small task to do this DVI to LVDS conversion but it would require a larger FPGA chip so we would have more free pins available. And then we would have to go for a BGA version.
Regards Thomas
Looks like the spare sram for tilemap and blit option is still ok though?
In fact, you could turn the WHOLE display into tilemap instead of framebuffer. Maybe add a sprite engine too 🙂
I think that would be great for small micro controller projects, especially games.
Maybe have both as an option 🙂 I am not an FPGA guy so no idea on the limits you have with this chip.
@Pyrofer
In that case you could stick with the Gameduino instead as that is already a well working sprite engine and game development shield for the Arduino, generating a VGA signal.
The purpose of this board was not to be a sprite engine, but only a middle-man controller chip between an MCU and LVDS LCD displays.
Just like the ILI9320 doesn’t have a sprite engine either 😉
I would love to get my hands on one of these boards of yours. I am a pure hobbyist (and a not very skilled one at that) but I often sit and look longingly at the LCD panel that is all that remains of a laptop. I have been trying to find a way to drive it ever since. Brilliant work guys.
We will all let you know when the formally related stuff has been cleared, such as NDA, Copyrights, distribution rights etc.
But I would like to know what you guys would think of adding this project to Kickstarter to get it even faster on the hobby-market?
Do you think enough people would be interested in this board?
I have currently no idea about the pricing, though it will be sligtly more than $50 I guess, due to the components and manufacturing cost itself.
Best Regards
Thomas
Thomas, if you ever decide to sell it, or kickstart-it, I’ll be buying it …
regards from argentina, marianok
Hi!
I tried getting LVDS to work on an XC3S500E but I failed so far. The LVDS waveform looks ok on the scope but the LVDS receiver in the TFT panel doesn’t even produce an enable signal on its TTL output side.
Can you give me any clues on how to get LVDS running on that particular chip? Is the fact that the XC3S500E is only capable of LVDS_25 a problem? How did you manage that?
Really looking forward to some hints! Thanks
@Marianok
Dear Marianok.
Thanks for your support.
We would love to put this on Kickstarter, especially to see if the community is interested in such a controller solution for their uC.
The only unfortunate situation that we, situated in Denmark (Europe), are unable to start crowdfunding on Kickstarter as they use the Amazon Payment system which is unavailable to us.
But when I find a solution to that you should soon be seeing our project there.
Regards Thomas
@gruni
Hi Gruni.
I don’t know which code or module you are using for the LVDS transmitter. We are using the “serdes_4b_7to1_wrapper” which can be found in the Xilinx XAPP486 Parallel to serial block
But yes, you should be aware that LVDS is running 2.5V, so the I/O bank that you are using for the LVDS signals has to be powered from a 2.5V source.
At which voltage were you powering the LVDS I/O bank when you tested it?
Regards Thomas
@Thomas Jespersen
Thank you for your reply! Turned out that the panel i was using was faulty…
Wow, what an interesting project. Would this be able to drive phone displays, such as the 5″ HTC droid dna? I’ve been wanting to input hdmi into a high ppi device like that phone for a really long time.
@Kevin Hua
I haven’t been able to look into the display you refer to, except for it being a 1080p display.
You would have to find some more technical details about the display before I can say whether or not you would be able to connect it to this LVDS controller board.
First and foremost the display interface has to use the LVDS standard!
Regards Thomas
@Thomas Jespersen
I don’t think any datasheets are available yet, but given the phone, is it possible to reverse engineer it? I can’t confirm that this specific phone is using lvds, since disassembly pictures aren’t available either, but older phones used lvds. If you’re interested in helping, contact me at boogerlad at gmail dot com.
Cool!
I’m looking for a way to use my 24″intel imac white Monitor as a standalone monitor. I’m lookin everywhere for a DVI to LVDS converter tha works with it. could this be it? 😛
It would be awesome if this would end up as a dev board !
I hope you guys are still interested in building it!
@Mac
Sure you could use this board for that.
It would require some extra missing, changing the interface and FOGA code.
But the FPGA is more than capable of doing this kind of convertion, so it should definitely be possible.
HDMI to LVDS would also be possible, but this would require a new board layout though, due to the differential lines.
@Spikee
If we made it as a development platform and placed it on Kickstarter – would you then be interested?
If so, how much would you think a reasonable price would be, when taking both the expensive SRAM and FPGA into account?
Regards Thomas
Hi Thomas,
have a look at that
http://www.chalk-elec.com/?page_id=1280#!/~/product/category=3094846&id=8201426
there is no need to discover the wheel again 😉
Joerg
@Joerg
Hi Joerg.
I get your point indeed, even though that project is definitely not the same as ours, as we are able to generate the display signal ourself with the use of an FPGA.
The board you link to is simply a converter which I guess is using a Texas Instruments HDMI to LVDS converter chip.
But we would definitely be happy to test this board and compare it with ours, as there might be some great design considerations and aspects of it.
Kind regards
Thomas Jespersen
When we were studying on Electronics then we used LED display for any types of product. after circuit proficients then i can solved easily any types of faults. Usually i’m using online Electronics Components measurements calculator. Its very helpful for Electronics lover/Eng
http://goo.gl/EdTLPd
@Martin Rexum
Thank you Martin for your link. That is certainly a good calculator.
I will put your link in our Blogroll list.
Regards Thomas
Hi
Is a source code and schematic available for this project ?
Thanks
Thanks @Thomas Jespersen
Usually electronics calculator very useful while electronics research or doing circuit setup.
Field-programmable gate array FPGA means @thomas
@bound
No, unfortunately the schematics and VHDL code haven’t been released yet.
We are still evaluating the options and market opportunities in the board.
@Martin Rexum
Yes, I am totally aware of the FPGA definition 🙂
Hi Thomas J.,
I’m blown away by the excellent work you guys do! You deserve lots of compliments.
I’m very interested in purchasing one of your FPGA base board for driving LVDS displays. Can you please let me know if you have made a product from this project yet?
Also, I’m a Field Application Engineer working for a large Distributor of electronic components and I certainly can give you some ideas on how you could reduce the BOM cost of your Display controller.
Please let me know
Thanks!
how can i connect ADC AFE 5804 to FPGA Spartan 3E by LVDS interface? can you help me to code the vhdl program for it? thank you very much?
Hello Thomas,
Any chance of releasing this project into the OSHW world?
Thanks!
@Madhu
Hi Madhu.
We are planning a Kickstarter on this project which will release into the OSHW world if successfull.
Regards Thomas
@thang
We will hopefully soon be able to release the source code (VHDL) for this project and then you could eventually use this project as a reference.
But to connect and use LVDS displays with a Spartan 3E device you have to use the ?serdes_4b_7to1_wrapper? or similar, which can be found in the Xilinx XAPP486 Parallel to serial block
Regards Thomas
Any chances of making it open source?
@Ali Yousuf
I don’t think this will end up being open source but there is a high chance that we will put this on Kickstarter in the new year for embedded hobbyists, students and developers to buy and use in their own projects to include a larger display.
Thank you for your interest though.
I have been building something like @Joerg mentioned, but am now headed more in this direction. Great to see that it has been done, and looking forward to the challenges of building one myself. I’ll likely OSHW my designs, with the grace of my start-up.
@Matt
Hi Matt.
The board that @Joerg is mentioning and referring to isn’t that just a “simple” converter board able to convert either 24-bit parallel TFT LCD data or HDMI data into LVDS LCD data?
Our board takes in commands and stores pixel/color data into an onboard framebuffer, just as the FT800, SSD1963 or ILI9320 chip does.
Regards Thomas
hi. where it can be bought on ebay or aliexpress?
@Seg
The board and prototype is designed and manufactured by us and it is not yet for sale.
So unfortunately you can’t buy the board yet.
We will take your interest in consideration though.?
the plasma demo, is a good example of missing hardware accelleration, as it is normally done by having a static image with a rotating pallette.
more advanced plasma with vertical scrolling is normally done by moving the frammebuffer start /end? pointer, and im sure there is also a trick to doing the horisontal scrolling.
but i guess it should be possible to just update the fpga, to add 8bit pallete handling, maby even with 24bit colours.
other simple demos with rotating palette include; wormhole/tunnel/spinning-amiga-ball/etc..
another benifit from using an 8bit palette would be ram space for double buffering or vertex? scrolling.
additional commands:
setmode(rgb16_or_pal8)
setpallette(offset,r,g,b)
rotatepallete(left_or_right)
framestart(prt)
other command that would be nice:
getpallette(offset,r,g,b)
getpixel(x,y)
scanline(x,y,length,color)
blit(x,y,x2,y2,bmp_ptr,operation*) *and/or/xor/addx/etc..
keep up the good work..
can I sources ?
@legacy
Unfortunately no, as the design and VHDL source code has not yet been released as open source.
Thank you for your interest though.
Regards Thomas
2 years later: news ?
@legacy
No, unfortunately not. This project has still not been open sourced.