Project 5 Display Controller and Character ROM

Introduction to Advanced Clocking Wizard and Character ROM

1811

Introduction

For this design, you will create a high resolution VGA controler and convert it to an HDMI video connection. Once you have a working digital display controller, you will set up memory used to show characters on your display.

Background

Read through the background materials provided to the right, they’ll help you configure the clocking wizard, HDMI IP core, and the Character ROM. They will also provide background information on VGA and the timings required for high resolutions.

Requirements

1. Create a VGA IP and connect it to the Real Digital’s HDMI IP to display solid square on the screen using HDMI

Develop a VGA display controller that syncs at 720p (1280x720@60Hz). To get the timing necessary for this resolution you will need to used the clocking wizard.

Once you have a working VGA controller, connect your system to the provided VGA-to-HDMI conversion IP. Your VGA controller will need some modification to provide signals required by the HDMI pcore.

2. Display a character on the screen using the provided char_rom.v file

Set up the provided character ROM and interface it to your video system. Display a character from the ROM via an HDMI connection.

3. Make the system software controlled

Connect your character display system to the Zynq PS. Write a program that can place a character at an arbitrary location on the display. Make sure to create an API for your IP.

A prototype for a function you should implement is given below.

void disp_char(uint32_t x, uint32_t y);

4. Use ascii characters and color functionality

Modify your hardware so it can display any ascii character, and in color. Use 8-bit color depth: 256 different values for the red, green, and blue values for each pixel. The character should show up in its color and not affect the background’s color. Write software to control the extra functionality, function prototypes and examples are provided below.

void set_bg_color(uint32_t color);
void set_char_color(uint32_t color);
void disp_char(char val,uint32_t x,uint32_t y);

//Examples of usage below

//set character color to red:0x0F,blue:0x0B,green:0x0C
set_char_color(0x0F0B0C);

//set character color to red:0x00,blue0xFF,gree0xAA
set_char_color(0x00FFAA);

//set the character to F in the upper left corner
disp_char('F',0,0);
//set character to f in the lower right corner (720p)
disp_char('F',1279,719);

Challenges

1. Reconfigurable Resolution at Runtime

Make the resolution output by your system configurable. From software you should be able to switch between at least 2 different resolutions.

This will involve dynamically changing the timing of your syncronization system, but also require reconfiguring the clock block’s output frequencies. If you configure the clock wizard for dynamic reconfig, The clock block should be acessible via AXI, and thus through software. You’ll need to figure out how to configure the block through software, information can be found in the clock wizard’s user guide provided by Xilinx.

Make modular and clean code to make changing resolution simple in your main program.

2. Display more than one character on the screen

Have more than a single character on the screen at once. These characters do not need to be software controlled.

3. Software controlled background color

Make the background color configurable through software, use 8-bit color depth.