pluto_hdl_adi/docs/library/axi_hdmi_tx/index.rst

212 lines
7.5 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

.. _axi_hdmi_tx:
AXI HDMI TX
===============================================================================
.. hdl-component-diagram::
The :git-hdl:`AXI HDMI TX <library/axi_hdmi_tx>` IP core can be used to interface
the :adi:`ADV7511` and :adi:`ADV7123` devices using an FPGA.
Features
-------------------------------------------------------------------------------
* AXI based configuration
* Supports multiple resolution (max 1080p)
* Video transmission on 36/24/16 bits or 8 bits RGB
* Supports embedded sync (16bit data)
* YCbCr or RGB color space output
* Data clipping (min. and max. for each chroma/color value)
* Supports Xilinx 7 Series and Ultrascale devices.
* Supports Altera 5 Series SoC
Files
--------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
* - Name
- Description
* - :git-hdl:`library/axi_hdmi_tx/axi_hdmi_tx.v`
- Verilog source for the peripheral.
.. _axi_hdmi_tx block-diagram:
Block Diagram
--------------------------------------------------------------------------------
.. image:: block_diagram.svg
:alt: AXI HDMI TX block diagram
:align: center
Configuration Parameters
-------------------------------------------------------------------------------
.. hdl-parameters::
* - ID
- Core ID should be unique for each axi_hdmi_tx IP in the system.
* - FPGA_TECHNOLOGY
- Used to select the FPGA Technolgy; beyond the "Choices/Range" listed, also
supports Altera 5 series (101) devices.
* - CR_CB_N
- | Used in the chroma subsampling process, selecting which of the red or blue
| data components will be transmitted first in-between green samples. 1 = red, 0 = blue
* - INTERFACE
- | Interface type towards the 7511. Available options: 16_BIT, 24_BIT, 36_BIT,
| 16_BIT_EMBEDDED_SYNC, VGA_INTERFACE
* - OUT_CLK_POLARITY
- 0 = Launch on rising edge, 1 = Launch on falling edge.
Interfaces
-------------------------------------------------------------------------------
.. hdl-interfaces::
* - reference_clk
- Pixel clock, generated by an axi_clkgen IP core (axi_hdmi_clkgen in
reference design.
* - hdmi_out_clk
- Output clock.
* - s_axis
- DMA AXIS interface (vdma).
* - hdmi_16_hsync
- Horizontal sync signal.
* - hdmi_16_vsync
- Vertical sync signal.
* - hdmi_16_data_e
- Data enable signal.
* - hdmi_16_data
- HDMI data.
* - hdmi_16_es_data
- HDMI embedded sync data.
* - hdmi_24_hsync
- Horizontal sync signal.
* - hdmi_24_vsync
- Vertical sync signal.
* - hdmi_24_data_e
- Data enable signal.
* - hdmi_24_data
- HDMI data.
* - hdmi_36_hsync
- Horizontal sync signal.
* - hdmi_36_vsync
- Vertical sync signal.
* - hdmi_36_data_e
- Data enable signal.
* - hdmi_36_data
- HDMI data.
* - vga_out_clk
- Output clock.
* - vga_hsync
- Horizontal sync signal.
* - vga_vsync
- Vertical sync signal.
* - vga_red
- VGA red data.
* - vga_green
- VGA green data.
* - vga_blue
- VGA red data.
Detailed description
-------------------------------------------------------------------------------
The top module (**axi_hdmi_tx**), instantiates:
* axi_hdmi_tx_core module
* axi_hdmi_tx_vdma module
* the HDMI TX register map
* the AXI handling interface
In **axi_hdmi_tx_core** module the video information is manipulated by passing
through several processing blocks (see :ref:`axi_hdmi_tx block-diagram`):
* **CSC (Color Space Converter)** converts the video information from RGB color
space to YCbCr color space. If RGB is the desired output color space the CSC
block can be bypassed by setting to 1 the value of CSC_BYPASS register.
* **Data Clipping** bloc gives the possibility of limiting the minimum and
maximum color range values. This block is controlled by FULL_RANGE, CLIPP_MAX
and CLIPP_MIN registers.
* **Chroma subsampling** block as its name suggests, samples the video
information to obtain a video information that requires less bandwidth and
has a minimum impact on the video quality experienced by human eyes.
* **Embedded Sync** module interleaves the video synchronization signals with
the video information, obtaining a more compact transmission path.
* **Sync Signals** block is responsible for generating the video synchronization
signals for video resolutions written in HDMI interface Control register.
The **axi_hdmi_tx_vdma** module ensures the clock domain crossing circuit
between the video source, typically a :ref:`axi_dmac` core and the
**axi_hdmi_core**, which works at different clock speeds depending on the
required resolution.
Register Map
-------------------------------------------------------------------------------
.. hdl-regmap::
:name: HDMI_TX
Design considerations
-------------------------------------------------------------------------------
Additional IPs needed:
* :ref:`axi_dmac`
* :ref:`axi_clkgen`
* :git-hdl:`library/axi_spdif_tx`
:ref:`axi_dmac` provides a high-bandwidth direct memory access for the video stream.
The core is configured as follows:
.. code:: tcl
ad_ip_instance axi_dmac axi_hdmi_dma
ad_ip_parameter axi_hdmi_dma CONFIG.DMA_TYPE_SRC 0
ad_ip_parameter axi_hdmi_dma CONFIG.DMA_TYPE_DEST 1
ad_ip_parameter axi_hdmi_dma CONFIG.CYCLIC true
ad_ip_parameter axi_hdmi_dma CONFIG.DMA_2D_TRANSFER true
ad_ip_parameter axi_hdmi_dma CONFIG.DMA_DATA_WIDTH_DEST 64
The audio path is separated from the video path, for audio **axi_spdif_tx** core
(:git-hdl:`axi_spdif_tx <library/axi_spdif_tx>`) is needed to transmit the audio
information to the ADV7511 device.
The whole system needs to be controlled by a processor (ARM or a soft core) that
can programs the registers.
``axi_clkgen`` generates the clock frequency required for the desired resolution
(pixel clock), the frequency is software configurable
(:git-no-OS:`Example adv7511_zc706 no-Os software <projects/adv7511>`).
Examples for different data width configurations
-------------------------------------------------------------------------------
The :adi:`ADV7511 <media/en/technical-documentation/user-guides/ADV7511_Hardware_Users_Guide.pdf>`
can accept video data from as few as eight pins (either YCbCr 4:2:2 double data
rate [DDR] or YCbCr 4:2:2 with 2x pixel clock) to as many as 36 pins (RGB 4:4:4
or YCbCr 4:4:4). In addition it can accept HSYNC, VSYNC and DE (Data Enable)
The **axi_hdmi_tx** core support the following video input connections:
* 36 bits with HSYNC, VSYNC and DE (:git-hdl:`hdl_2017_r1:projects/adv7511/vc707` development board)
* 24 bits with HSYNC, VSYNC and DE (:git-hdl:`projects/adv7511/zc706` development board)
* 16 bits with HSYNC, VSYNC and DE (:git-hdl:`projects/adv7511/zed`)
* 16 bits with embedded SYNC (TX interface of the :git-hdl:`IMAGEON <projects/imageon>` board)
Software support
-------------------------------------------------------------------------------
The core can be controlled by no-Os or Linux
* :dokuwiki:`Linux Driver <resources/tools-software/linux-drivers/drm/adv7511>`
* :dokuwiki:`Reference design with no-OS example <resources/fpga/xilinx/kc705/adv7511>`
* :git-no-OS:`projects/adv7511`
References
-------------------------------------------------------------------------------
* :git-hdl:`library/axi_hdmi_tx`
* :dokuwiki:`Zynq & Altera SoC Quick Start Guide <resources/tools-software/linux-software/kuiper-linux>`
* :dokuwiki:`FMC-IMAGEON Xilinx Reference Design <resources/fpga/xilinx/fmc/fmc-imageon>`
* :dokuwiki:`ADV7511 Xilinx Evaluation Boards Reference Design <resources/fpga/xilinx/kc705/adv7511>`