element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Programmable Logic
  • Challenges & Projects
  • Project14
  • Programmable Logic
  • More
  • Cancel
Programmable Logic
Blog PanelDriver: A FPGA based HDMI to FPD-Link converter
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Programmable Logic to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: avnrdf
  • Date Created: 5 Jul 2019 5:35 AM Date Created
  • Views 4453 views
  • Likes 5 likes
  • Comments 6 comments
  • programmablelogicch
  • hack
  • hdmi
  • zynq
  • xilinx
  • fpga
  • digilent
  • lcd screen
  • zybo
Related
Recommended

PanelDriver: A FPGA based HDMI to FPD-Link converter

avnrdf
avnrdf
5 Jul 2019

This month's Project14 | Build Projects that Use a Programmable Logic Device such as FPGA or CPLD! theme comes after almost a year since I first started working with FPGAs.

While the project at its current stage does not make use of the ARM core in the Zynq, I managed to make use of a lot of what I learnt in Path to Programmable.

 

My entry for this month's Project14 contest is an FPGA based HDMI to FPD-Link converter - a device that takes video from a HDMI source, decodes it, encodes it and sends it to a LCD panel over FPD-Link (commonly referred to as LVDS).

 

I completed this project around 4 months ago, but I decided to enter it into this month's contest for two reasons:

- it's a good example of a project that cannot be done using a microcontroller, and makes good use of FPGA capabilities.

- it's got the right mix of Project14 material: a little reverse engineering, pushing hardware to its limits, overcoming obstacles, a mix of hardware & software HDL and the right about of duct tape holding all of this together.

 

image

 

For those who want to dive into the details of how this was done, I've published 2 blog posts:

  • Driving a Laptop LCD using an FPGA is the first part which goes over the process of figuring out the LCD panel's connections, turning on the backlight, building the TMDS to LVDS conversion circuit, and most importantly, the FPGA gateware modules that generate a test pattern, convert RGB data into the format required by the panel and transmit it to the panel via the LVDS interface using the output SERDES blocks on the FPGA. While this didn't seem to complex at first, there were two major hurdles: generating a DC biased LVDS signal using the FPGA's single-ended I/O without using a dedicated CMOS to LVDS converter IC, and serializing the data stream at a rate that exceeded the clocking capabilities of the FPGA speed grade that I was using.
  • LCD panel + FPGA with an HDMI sink = External Display is the second part which details how the RGB test pattern was replaced with data from a HDMI source. I started with Digilent's DVI-to-RGB IP, which decodes the HDMI stream into RGB, and later made a couple of changes to it due to issues with having multiple clock domains, and replaced the default EDID with the EDID of the panel I was using so that the HDMI source can recognize the supported display modes and set the clocks & resolution appropriately. This post also describes how I debugged a color channel swap issue using the Vivado logic analyzer and solved some interference related video signal distortion using.. aluminium foil.

 

I've been using this as an external monitor for over 3 months, and it works pretty reliably (except for when it blanks out for a couple of seconds when a tubelight is turned on, which is probably due to the lack of shielding on the back).

 

There isn't much to see since it's just a panel displaying video, but here's a short demo as proof that it works:

 

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

 

The HDMI cable is connected to the 'sink' port towards the upper right of the Zybo Z7 (near the yellow 'HDMI Hot Plug Detect' LED. The microUSB cable powers the Zybo Z7, and the Zynq-7000 boots from a bootimage that is on a microSD card (so that I do not need to open Vivado to program the bitstream every time I turn on the PC) that's attached to the underside of the Zybo. The PS (ARM Cortex-A9) of the Zynq doesn't process the video stream since that's handled entirely by the PL (FPGA fabric), so it's configured to run everything (CPU, PLLs & DDR) at the lowest possible clocks to reduce the power consumption, and mainly the heat generated since I noticed that the tiny heatsink on the Zybo Z7 was getting warm. I also execute a wfi() instruction to put the ARM core to sleep.

4 differential pairs (covered in foil) carry the serialized signal from the PMOD connectors to the panel's LCD controller on its PCB via the perfboard which has pullup resistors connected to 1.5V (which converts TMDS to LVDS). I also taped the CFL inverter, voltage regulator (which generates 1.5V from 3.3V) and a power distribution PCB which has screw terminals to which I connect the 12V, 3.3V & ground from a power supply.

 

Additional features like a configurable overlay and ambient back-lighting using a WS2812 strip are a work in progress. They're taking a little more time than I expected since it requires figuring out how to use Xilinx IP, DMA engines, the AXI interconnect and the external DDR3 DRAM connected to the PS.

  • Sign in to reply

Top Comments

  • avnrdf
    avnrdf over 6 years ago in reply to DAB +2
    DAB, I've explained this in the 2 blog posts. The first post details the HDL for generating a FPD-Link video signal from a RGB source, and the second post contains details about the dvi2rgb IP core that…
  • three-phase
    three-phase over 6 years ago +1
    Excellent project, you must have but in some serious work to complete this. Kind regards.
  • jomoenginer
    jomoenginer over 6 years ago +1
    Congrats to avnrdf for winning the challenge and nice work for those who participated.
  • romanSlave
    romanSlave over 1 year ago

    Hello! I am most certainly intrigued and astonished by your work as I am currently in the process of constructing a project idea similar to yours described in this post. Although this is an older post, I would still be extremely thankful if you could share any insights, in case you continued working on this project. I am mostly interested if you managed to use the DMA for outputting video.

    Kind regards.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jomoenginer
    jomoenginer over 6 years ago in reply to avnrdf

    Yeah, but weren't those posts describing the build and HDL posted before the challenge started?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jomoenginer
    jomoenginer over 6 years ago

    Congrats to avnrdf for winning the challenge and nice work for those who participated.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • three-phase
    three-phase over 6 years ago

    Excellent project, you must have but in some serious work to complete this.

     

    Kind regards.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • avnrdf
    avnrdf over 6 years ago in reply to DAB

    DAB,

     

    I've explained this in the 2 blog posts.

    The first post details the HDL for generating a FPD-Link video signal from a RGB source, and the second post contains details about the dvi2rgb IP core that converts an incoming DVI signal to RGB (which in turn is fed to my RGB to FPD-Link core).

    The analog circuitry adds a DC bias to the signals from the FPGA in order to be compliant with what the LCD panel expects.

     

    Do let me know if you want any more details!

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • More
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube