This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
resources:fpga:xilinx:fmc:fmc-imageon [02 Jul 2012 19:05] – [Running Demo (SDK) Program] rejeesh kutty | resources:fpga:xilinx:fmc:fmc-imageon [20 Dec 2023 12:02] (current) – Add obsolesce notice Stefan-Robert Raus | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== FMC-IMAGEON Xilinx | + | ====== FMC-IMAGEON Xilinx Reference Design ====== |
+ | <note warning> | ||
+ | Support for the fmc-imageon is discontinued starting with 2022_r2 Kuiper Linux release and it will not be supported in future releases. Last Kuiper Linux release that contains pre-build files is 2021_r2. Check this [[: | ||
+ | </ | ||
+ | |||
===== Introduction ===== | ===== Introduction ===== | ||
- | The [[http://www.em.avnet.com/ | + | The [[https://products.avnet.com/shop/en/ema/kits-and-tools/development-kits/aes-fmc-imageon-v2000c-g-3074457345623596557/ |
+ | |||
+ | ===== Supported Devices ===== | ||
+ | |||
+ | * [[https:// | ||
- | **HW Platform(s): | + | ===== Supported Carriers ===== |
- | **System:** Microblaze, AXI, UART | + | |
- | ===== Quick Start Guide ===== | + | * [[http:// |
- | The bit file provided combines the FPGA bit file and the SDK elf files. It may be used for a quick check on the system. All you need is the hardware and a PC running a UART terminal, a HDMI display device and the programmer (IMPACT). You will need sdk/xmd to run the demo program. | ||
==== Required Hardware ==== | ==== Required Hardware ==== | ||
- | * ML605 and FMC-IMAGEON boards. | + | * One of the supported carrier |
* HDMI Monitor (should be capable of supporting 1080p and/or 720p for the demo files). | * HDMI Monitor (should be capable of supporting 1080p and/or 720p for the demo files). | ||
==== Required Software ==== | ==== Required Software ==== | ||
- | * Xilinx ISE 14.1 (Programmer (IMPACT) is sufficient for the demo and is available | + | * We upgrade |
* A UART terminal (Tera Term/ | * A UART terminal (Tera Term/ | ||
- | |||
- | ==== Bit file ==== | ||
- | |||
- | The default setup and contents allows three different demos on the board. | ||
- | |||
- | |Test pattern (1080p) | ||
- | |Test pattern (720p) | ||
- | |Demo Image (1080p) | ||
- | |||
- | |||
- | |||
- | ==== Running Demo (SDK) Program ==== | ||
- | |||
- | To begin make the following connections (see image below): | ||
- | |||
- | * Connect the IMAGEON card to the FMC HPC connector in ML605 (The design uses HPC, but card is FMC LPC compatible). | ||
- | * Connect an HDMI cable between FMC-IMAGEON board HDMI out and the HDMI monitor. If you are running the bit files to verify the interfaces connect a cable from HDMI out to HDMI in (no monitor required). | ||
- | * Connect two USB cables from the PC to the //JTAG// and //UART// USB connectors on ML605. | ||
- | * Connect power to ML605 and the HDMI monitor. | ||
- | |||
- | After the hardware setup, turn the power on to the ML605 and the HDMI monitor. | ||
- | |||
- | {{.: | ||
- | |||
- | The instructions here use xmd command line, running inside the sw directory. You can also use SDK GUI to program and run the elf files. Set the UART terminal to **57600** baud rate. If programming was successful, you should be seeing messages appear on the terminal as shown below. In all the three setups, press ' | ||
- | |||
- | |Test Pattern (1080p) |Test Pattern (720p) |DEMO Image (1080p) | | ||
- | |Loopback Mode |Loopback Mode |Monitor Mode | | ||
- | |Program the device. | ||
- | |fpga -f cf_adv7x11.bit |fpga -f cf_adv7x11_720p.bit | ||
- | |::: |::: | ||
- | |::: |::: | ||
- | |::: |::: |dow cf_adv7x11_demo.elf | ||
- | |::: |::: | ||
- | |{{.: | ||
- | |{{.: | ||
- | |||
- | There should not be any errors reported by TPM. If you have not connected the loopback cable, the receive side will have errors. | ||
===== Using the reference design ===== | ===== Using the reference design ===== | ||
Line 64: | Line 32: | ||
==== Functional description ==== | ==== Functional description ==== | ||
- | |{{.:cf_adv7x11_bd.jpg?200|Block Diagram}} | + | === Xilinx block diagram === |
+ | {{resources:fpga: | ||
- | The reference design consists of two independent pcore modules. | + | === FMC-IMAGEON block diagram === |
+ | {{resources: | ||
- | The video part consists of a Xilinx VDMA interface and the ADV7511/ | + | The reference design |
- | ==== Video Transmit (VDMA to HDMI) ==== | + | The video part consists of an AXI DMAC interface and the ADV7511/ |
- | In the transmit direction, the VDMA streams frame data to this core. The internal buffers of this pcore are small (1k) and do NOT buffer any frames as such. Additional resources may cause loss of synchronization due to DDR bandwidth requirements. The video core is capable of supporting any formats through a set of parameter registers (given below). The pixel clock is generated internal to the device and must be configured for the correct pixel frequency. It also allows a programmable color pattern for debug purposes. A zero to one transition on the enable bits trigger the corresponding action for HDMI enable and color pattern enable. | + | ==== Video Transmit (DMA to HDMI) ==== |
+ | |||
+ | In the transmit direction, the DMA streams frame data to this core. The internal buffers of this IP are small (1k) and do NOT buffer any frames as such. Additional resources may cause loss of synchronization due to DDR bandwidth requirements. The video core is capable of supporting any formats through a set of parameter registers (given below). The pixel clock is generated internal to the device and must be configured for the correct pixel frequency. It also allows a programmable color pattern for debug purposes. A zero to one transition on the enable bits trigger the corresponding action for HDMI enable and color pattern enable. | ||
The reference design defaults to the 1080p video mode. Users may change the video settings by programming the video size registers. The core requires a corresponding pixel clock to generate the video. This clock must be generated externally. | The reference design defaults to the 1080p video mode. Users may change the video settings by programming the video size registers. The core requires a corresponding pixel clock to generate the video. This clock must be generated externally. | ||
Line 82: | Line 54: | ||
A color pattern register provides a quick check of any RGB values on the monitor. If enabled, the register data is used as the pixel data for the entire frame. | A color pattern register provides a quick check of any RGB values on the monitor. If enabled, the register data is used as the pixel data for the entire frame. | ||
- | ==== Video Receive (HDMI to VDMA) ==== | + | ==== Video Receive (HDMI to DMA) ==== |
- | In the receive direction, the HDMI data is first decoded and the synchronization signals are generated. The core then streams video data to VDMA. The internal buffers of this pcore are small (1k) and do NOT buffer any frames as such. Additional resources may cause loss of synchronization due to DDR bandwidth requirements. The video core is capable of supporting any formats through a set of parameter registers (given below). The core runs at the pixel clock from ADV7611. | + | In the receive direction, the HDMI data is first decoded and the synchronization signals are generated. The core then streams video data to DMA. The internal buffers of this IP are small (1k) and do NOT buffer any frames as such. Additional resources may cause loss of synchronization due to DDR bandwidth requirements. The video core is capable of supporting any formats through a set of parameter registers (given below). The core runs at the pixel clock from ADV7611. |
- | The core decodes the active video size from the received data and compares it against an expected video size. If they do not match, the core will NOT stream data to VDMA to avoid possible lock up conditions in the VDMA core due to byte length mismatches. Also, the reference design performs color space conversion (YCbCr to RGB) and up sampling (422 to 444). If bypassed, the lower 16bits of DDR data is passed to the VDMA interface as it is. | + | The core decodes the active video size from the received data and compares it against an expected video size. If they do not match, the core will NOT stream data to DMA to avoid possible lock up conditions in the DMA core due to byte length mismatches. Also, the reference design performs color space conversion (YCbCr to RGB) and up sampling (422 to 444). If bypassed, the lower 16bits of DDR data is passed to the DMA interface as it is. |
Test pattern generators and monitors are provided at each interface and clock domain boundaries. The default configuration is in loop back mode with the HDMI interface acting as a direct pass through. | Test pattern generators and monitors are provided at each interface and clock domain boundaries. The default configuration is in loop back mode with the HDMI interface acting as a direct pass through. | ||
Line 92: | Line 64: | ||
==== Audio ==== | ==== Audio ==== | ||
- | The audio part consists of a Xilinx DMA interface and the ADV7511 spdif audio interface. The audio clock is derived from the bus clock. A programmable register (see below) controls the division factor. The audio data is read from the DDR as two 16bit words for the left and right channels. It is then transmitted on the SPDIF frame. The sample frequency and format may be controlled using the registers below. The reference design defaults to 48KHz. | + | The audio part consists of an AXI DMAC interface and the ADV7511 spdif audio interface. The audio clock is derived from the bus clock. A programmable register (see below) controls the division factor. The audio data is read from the DDR as two 16bit words for the left and right channels. It is then transmitted on the SPDIF frame. The sample frequency and format may be controlled using the registers below. The reference design defaults to 48KHz. |
==== Registers ==== | ==== Registers ==== | ||
- | Please refer to the regmap.txt file inside the pcores. | + | {{page>: |
+ | |||
+ | {{page>: | ||
+ | |||
+ | {{page>: | ||
==== Audio Registers (axi_spdif_tx) ==== | ==== Audio Registers (axi_spdif_tx) ==== | ||
Line 111: | Line 87: | ||
| | 0 | 0 | audio | Data format is non-audio (0x1) or audio (0x0) (RO). | | | | 0 | 0 | audio | Data format is non-audio (0x1) or audio (0x0) (RO). | | ||
| 1. For AXI-Lite byte addresses, multiply by 4. ||||| | | 1. For AXI-Lite byte addresses, multiply by 4. ||||| | ||
- | |||
- | ===== Downloads | + | ===== Using the ADV7511 Transmitter Library |
- | {{.:cf_adv7x11.tar.gz|ML605 Reference Design Source Code}}\\ | + | The transmitter library is a collection of APIs that provide a consistent interface to ADV7511. |
+ | The library is a software layer that sits between the application and the TX hardware. The library is intended to serve two purposes: | ||
+ | * Provide the application with a set of APIs that can be used to configure HDMI TX hardware without the need for low-level register access. This makes the application portable across different revisions of the hardware and even across different hardware modules. | ||
+ | * Provide basic services to aid the application in controlling the TX module, such as interrupt service routine, HDCP high-level control and status information. | ||
- | ===== Notes ===== | + | The Demo project uses the ADV7511 Transmitter Library. |
+ | The project is an example of how to: | ||
+ | * Initialize the ADV7511 High-Definition Multimedia Interface (HDMI®) transmitter. | ||
+ | * Check current AVR operating mode and depending on this result set the AV mute state. | ||
+ | * Display an image and play a sound. | ||
- | The following Xilinx | + | The project contains 2 components: the Demo project |
- | | + | ==== Software Setup ==== |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/ImageXlib_utils.vhd | + | The **ADV7511 Transmitter Library Demo** contains a folder called |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/ | + | These are the steps that need to be followed to recreate the software project: |
- | | + | * Copy the //**SDK_Workspace**// folder on your PC. Make sure that the path where it is stored does not contain any spaces. |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/ | + | * Copy the library file to the //**SDK_Workspace/sw/lib**// folder. |
- | | + | {{: |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/ | + | * Copy the library headers to the //**SDK_Workspace/sw/inc**// folder. |
- | | + | {{: |
- | * axi_hdmi_16b_es_v1_00_a/ | + | * Copy the ADV7511 Transmitter Library Demo files to the //**SDK_Workspace/sw/src**// folder. |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/Xil_RGB2YCrCb.vhd | + | {{: |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/Xil_YCrCb2RGB.vhd | + | * Open the Xilinx SDK. When the SDK starts it asks for a to provide a folder where to store the workspace. Any folder can be provided. |
- | * axi_hdmi_16b_es_v1_00_a/hdl/vhdl/csc_rgb_to_ycrcb422.vhd | + | * In the SDK select the //**File-> |
- | | + | {{: |
- | + | * In the //Import// window select the //**General-> | |
- | To use the reference design as it is, you must obtain these files from Xilinx. | + | {{: |
- | + | * In the //Import Projects// window select | |
- | ===== Tar file contents ===== | + | {{: |
- | + | | |
- | The tar file contains, in most cases, | + | {{: |
- | + | ||
- | | license.txt | ADI license & copyright information. | | + | |
- | | system.mhs | + | |
- | | system.xmp | + | |
- | | data/ | UCF file and/or DDR MIG project files. | | + | |
- | | docs/ | Documentation files (Please note that this wiki page is the documentation for the reference design). | | + | |
- | | sw/ | Software (Xilinx SDK) & bit file(s). | | + | |
- | | cf_lib/edk/pcores/ | Reference design core file(s) (Xilinx EDK). | | + | |
+ | ===== Downloads ===== | ||
- | ===== More information ===== | + | **HDL Reference Designs:** |
- | * [[ez>community/fpga|Ask questions about the FPGA reference design]] | + | {{page>resources/fpga/ |
+ | **ADV7511 Transmitter Library Demo Software** | ||
+ | <WRAP round download 80%> | ||
+ | \\ | ||
+ | * **ADV7511 Transmitter Library: ** https:// | ||
+ | * **ADV7511 Transmitter Library Demo files: ** https:// | ||
+ | </ | ||
+ | {{page> | ||