Home > Arduino, ARM, FPGA, Other Microprocessors > LVDS Display controller for microprocessors

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.

LVDS Display Controller V1.0


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:

The Xilinx Spartan 3E 250K FPGA used


16-Mbit SRAM for framebuffering


Voltage regulators for the FPGA


On board SPI flash for the FPGA configuration file


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 Tags:
  1. October 3rd, 2012 at 22:31 | #1

    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 16x2 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

  2. October 3rd, 2012 at 23:17 | #2

    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 :D

  3. October 4th, 2012 at 00:22 | #3

    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.

  4. October 4th, 2012 at 07:24 | #4

    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

  5. October 4th, 2012 at 08:30 | #5

    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?

  6. Julien
    October 4th, 2012 at 08:34 | #6

    Nice stuff, i got an old Bull laptop with a small LCD (around 7″ with 800x600 ou 640x480) and that could help me revive it!! :)

  7. October 4th, 2012 at 09:26 | #7

    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?

  8. October 4th, 2012 at 11:07 | #8

    @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.

  9. October 4th, 2012 at 11:16 | #9

    @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

  10. October 4th, 2012 at 12:36 | #10

    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.

  11. October 4th, 2012 at 12:51 | #11

    @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 ;)

  12. October 9th, 2012 at 14:11 | #12

    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.

  13. October 10th, 2012 at 20:43 | #13

    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

  14. Marianok
    October 26th, 2012 at 14:45 | #14

    Thomas, if you ever decide to sell it, or kickstart-it, I’ll be buying it …
    regards from argentina, marianok

  15. gruni
    October 28th, 2012 at 22:36 | #15

    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

  16. November 4th, 2012 at 11:38 | #16

    @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

  17. November 4th, 2012 at 11:42 | #17

    @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

  18. gruni
    November 6th, 2012 at 20:37 | #18

    @Thomas Jespersen
    Thank you for your reply! Turned out that the panel i was using was faulty…

  19. Kevin Hua
    December 18th, 2012 at 17:13 | #19

    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.

  20. December 23rd, 2012 at 20:55 | #20

    @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

  21. Kevin Hua
    December 31st, 2012 at 20:53 | #21

    @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.

  22. Mac
    January 25th, 2013 at 19:19 | #22

    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? :P

  23. Spikee
    February 5th, 2013 at 23:25 | #23

    It would be awesome if this would end up as a dev board !
    I hope you guys are still interested in building it!

  24. February 11th, 2013 at 08:38 | #24

    @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.

  25. February 20th, 2013 at 21:06 | #25

    @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

  26. Joerg
    March 12th, 2013 at 23:34 | #26

    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

  27. March 13th, 2013 at 00:56 | #27

    @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

  28. July 21st, 2013 at 16:07 | #28

    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

  29. July 25th, 2013 at 07:59 | #29

    @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

  30. bound
    August 7th, 2013 at 14:51 | #30

    Hi

    Is a source code and schematic available for this project ?

    Thanks

  31. August 12th, 2013 at 19:27 | #31

    Thanks @Thomas Jespersen
    Usually electronics calculator very useful while electronics research or doing circuit setup.

  32. August 12th, 2013 at 19:32 | #32

    Field-programmable gate array FPGA means @thomas

  33. August 12th, 2013 at 22:29 | #33

    @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 :-)

  34. Electrons4me
    March 23rd, 2014 at 23:16 | #34

    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!

  35. thang
    April 16th, 2014 at 03:16 | #35

    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

  36. Madhu
    May 15th, 2014 at 15:10 | #36

    Hello Thomas,

    Any chance of releasing this project into the OSHW world?

    Thanks!

  37. May 23rd, 2014 at 20:20 | #37

    @Madhu
    Hi Madhu.
    We are planning a Kickstarter on this project which will release into the OSHW world if successfull.

    Regards Thomas

  38. May 23rd, 2014 at 21:59 | #38

    @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

  1. October 3rd, 2012 at 22:03 | #1
  2. October 3rd, 2012 at 22:45 | #2
  3. October 4th, 2012 at 00:07 | #3
  4. October 4th, 2012 at 11:03 | #4
  5. October 4th, 2012 at 12:55 | #5
  6. February 21st, 2013 at 13:35 | #6