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. Nicholas Yunker
    August 9th, 2017 at 16:23 | #1

    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?

    • October 3rd, 2012 at 22:31 | #2


      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!


    • October 3rd, 2012 at 23:17 | #3

      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 πŸ˜€

    • October 4th, 2012 at 00:22 | #4

      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.

    • October 4th, 2012 at 07:24 | #5

      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 πŸ™‚



    • October 4th, 2012 at 08:30 | #6

      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?

    • Julien
      October 4th, 2012 at 08:34 | #7

      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!! πŸ™‚

    • October 4th, 2012 at 09:26 | #8

      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?

    • October 4th, 2012 at 11:07 | #9

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

    • October 4th, 2012 at 11:16 | #10

      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

    • October 4th, 2012 at 12:36 | #11

      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.

    • October 4th, 2012 at 12:51 | #12

      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 πŸ˜‰

    • October 9th, 2012 at 14:11 | #13

      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.

    • October 10th, 2012 at 20:43 | #14

      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

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

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

    • gruni
      October 28th, 2012 at 22:36 | #16

      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

    • November 4th, 2012 at 11:38 | #17

      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

    • November 4th, 2012 at 11:42 | #18

      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

    • gruni
      November 6th, 2012 at 20:37 | #19

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

    • Kevin Hua
      December 18th, 2012 at 17:13 | #20

      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.

    • December 23rd, 2012 at 20:55 | #21

      @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

    • Kevin Hua
      December 31st, 2012 at 20:53 | #22

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

    • Mac
      January 25th, 2013 at 19:19 | #23

      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? πŸ˜›

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

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

    • February 11th, 2013 at 08:38 | #25

      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.

    • February 20th, 2013 at 21:06 | #26

      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

    • Joerg
      March 12th, 2013 at 23:34 | #27

      Hi Thomas,
      have a look at that


      there is no need to discover the wheel again πŸ˜‰


    • March 13th, 2013 at 00:56 | #28

      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

    • July 21st, 2013 at 16:07 | #29

      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

    • July 25th, 2013 at 07:59 | #30

      @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

    • bound
      August 7th, 2013 at 14:51 | #31


      Is a source code and schematic available for this project ?


    • August 12th, 2013 at 19:27 | #32

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

    • August 12th, 2013 at 19:32 | #33

      Field-programmable gate array FPGA means @thomas

    • August 12th, 2013 at 22:29 | #34

      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 πŸ™‚

    • Electrons4me
      March 23rd, 2014 at 23:16 | #35

      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

    • thang
      April 16th, 2014 at 03:16 | #36

      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?

    • Madhu
      May 15th, 2014 at 15:10 | #37

      Hello Thomas,

      Any chance of releasing this project into the OSHW world?


    • May 23rd, 2014 at 20:20 | #38

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

      Regards Thomas

    • May 23rd, 2014 at 21:59 | #39

      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

    • Ali Yousuf
      December 28th, 2014 at 22:51 | #40

      Any chances of making it open source?

    • December 28th, 2014 at 23:36 | #41

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

    • January 6th, 2015 at 22:09 | #42

      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.

    • January 17th, 2015 at 22:54 | #43

      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

    • Seg
      January 22nd, 2015 at 10:27 | #44

      hi. where it can be bought on ebay or aliexpress?

    • February 3rd, 2015 at 14:23 | #45

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

    • pax
      June 27th, 2015 at 17:16 | #46

      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:

      other command that would be nice:
      blit(x,y,x2,y2,bmp_ptr,operation*) *and/or/xor/addx/etc..

      keep up the good work..

    • legacy
      July 9th, 2015 at 00:08 | #47

      can I sources ?

    • July 11th, 2015 at 22:21 | #48

      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. legacy
    September 28th, 2017 at 22:50 | #49

    2 years later: news ?

  3. October 10th, 2017 at 21:11 | #50

    No, unfortunately not. This project has still not been open sourced.

  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