基于Avalon总线的可配置LCD控制器IP核的设计
2012-01-03
目前在Altera SOPC Builder 下集成了包括UART、SPI、Ethernet、SDRAM、Flash、DMA等控制器的IP 核。此外,用户也可以根据系统的需要自己设计或者购买第三方厂商的IP 核通过Avalon 总线像搭积木一样方便地将这些IP 捆绑的系统上。但是在显示接口上,Altera公司只提供了一个16*2 的字符型LCD 控制器的IP 核,只能用来显示数字和英文字母。如用户需要图形显示(如MP4 和PDA)则需要外接专用控制芯片或自己设计IP 核,使用起来很不方便。因此我们设计一个基于Nios II 系统的可配置LCD 控制器的IP 核,本IP 核可以方便的通过Avalon 挂接到Nios II 的系统上。考虑到目前LCD 显示屏的实际需要,我们设计的LCD 显示控制IP 核具有以下主要功能:
·以Avalon 总线流传输模式提供接口;
·为LCD 屏提供扫描时序信号和显示数据;
·提供可以选择的分辨率,最大可以支持1024*768;
·可以通过软件配置显存的基地址和大小;
1. Avalon 总线规范
1.1 总线概述
Avalon 总线是Altera 公司为SOPC 系统开发的一种专用的内部连线技术,是一种理想的用于系统处理器和外设之间的内联总线。它是构建在Nios II 软核的基础上,由Altera 公司提供SOPC Builder 系统设计工具自动生成。
Avalon 总线支持多个主外设,任何一个主外设都可以直接进行存储器访问(DMA),而无须Nios II 处理器的干预。一般的系统总线(如AMBA 总线)都是采用主端总裁机制,而Avalon 采用DMA 从端仲裁机制,能够实现真正意义上的多模块DMA 并行传输,而不相互影响。
Avalon 总线允许多个主端口连接到总线模块,实现总线的的并发多主端口传输的功能,而总线模块不需要额外的特殊信号;当有多个主外设试图同时访问同一外设时,由Avalon总线模块内部的从端口仲裁逻辑来处理冲突,对于主端口来说,它并不会感到有另一个主端口也在争用该外设,而是简单的发现它的等待请求信号一直有效,直到目标外设从端口准备好来处理自己的请求。因此,多个主外设只要不是同时访问同一个从外设,即可同时进行总线传输。仲裁的详细信息被封装在总线内部,主外设和从外设的接口是一致的,与外设的数量无关。
1.2 Avalon 总线流传输模式
Avalon 规定了各种传输模式,这里只介绍本IP 核所使用的流传输模式。关于其他的总线模式读者可以Avalon 的总线规范。
流传输模式是在流模式主外设和流模式从外设之间建立一个开放的信道以供连续的数据传输。该信道使得只要存在有效数据,数据便能在主从端口对之间流动,主外设不必为了确定从端口是否可用而不断地访问从外设的寄存器。流传输模式使得主从端口之间的数据吞吐量达到最大,同时避免了从外设数据溢出。流传输模式最适合DMA 传输。一个只包含简单的流控制信号和一个计数器的DMA 控制器就可以用来在一个从外设和一个存储器之间连续地传输数据。
由于数据流是从Avalon 总线流向LCD 控制器,所以是流模式的从端口写传输。图1 显示了流模式从端口写传输的模型。
除了基本从端口传输中使用的信号外,流模式外设的接口中又引入了readyfordata、dataavailable 和 endofpacket 三个信号。流模式从端口就是指使用了一个或多个上述信号的从端口。readyfordata 有效表示外设准备好接受 Avalon 总线模块的写传输;dataavailable 有效表示能够为来自 Avalon 总线模块的读传输提供数据。Avalon 总线模块只在 readyfordata或 dataavailable 有效时才会发起传输行为。endofpacket 信号的含义取决于用户设计。
2. Avalone 流模式LCD 控制器IP 核设计
LCD 控制器按功能可划分为三个模块:接口模块,数据处理模块和时序产生模块。接口模块主要用来对系统进行配置,获取系统状态信息以及从内存读出将要显示的数据信息;数据处理模块根据系统的配置信息,对读入控制器的内存数据进行相应的处理,以符合用户设置的显示要求;时序产生模块产生显示时序信号,使得系统在不同的配置下都能产生与之相应的精确时序,以保证图象的正确显示。
在具体实现时,这三个部分又可以划分为不同的功能模块来完成系统的总体功能。整个模块包括配置寄存器接口模块、DMA 接口模块组成和异步FIFO 模块,时序产生部分由时序产生模块构成。
2.1 DMA 接口模块
一般情况下,LCD 显示需要进行大批量的数据传送。在标准 VGA(640×480 60Hz)模式下,每个像素点的扫描周期只有40ns。如此高速的数据传输,如果直接通过CPU 来操作,将会消耗大量的CPU 时间。为了提高CPU 的工作效率,我们在Nios II 下利用DMA(Direct Memory Access,直接存储器访问)来完成。利用DMA 控制器在LCD 控制器和显示存储器SDRAM 之间建立一条专用的DMA 传输通道,通过DMA 控制器自动的读去图象数据,不需要CPU 干预。
在DMA 传输时,首先需要由CPU 对DMA 进行初始化,设置显示存储器的基地址和长度以及LCD 控制器输入寄存器的地址,然后打开DMA 传输通道,使DMA 在没有CPU 干预的情况下直接从显示存储器读取显示数据传送到LCD控制的FIFO中。Nios II 可以在DMA暂停传输的期间操作SDRAM 中的显存,完成LCD 显示图像的更新。
DMA 接口采用Avalon 主设备端口来实现。
2.2 配置积存器接口模块
系统可以通过配置寄存器接口模块对LCD 显示控制器进行各种功能配置;LCD 控制器也可以通过接口模块向系统反馈所需的状态信息,从而实现对系统状态的检测和控制。通过针对不同种类的LCD 屏幕和不同的显示模式提供相应寄存器,可以保证对于各种LCD 显示屏的兼容。
2.3 异步FIFO 模块
由于总线接口模块和LCD 控制器工作在不同的时钟域,如果直接传送数据将会使电路进入亚稳态,无法正常工作。所以使用异步FIFO 做为接口在两个时钟之间传递数据。典型的异步FIFO 由异步双端口RAM 和控制逻辑构成。
2.4 LCD 时序产生模块
通过读取配置寄存器获得像素时钟,行周期,帧周期,同步头宽度以及时钟分频系数等信息后,LCD 时序产生模块产生LCD 显示需要的行同步信号、帧同步信号以及复合消隐信号。图7 描述了LCD 接口时序发生模块的接口信号
3. LCD 控制器IP 核的仿真调试与安装
3.1 LCD 控制器IP 核的仿真调试
本IP 核使用Verilog HDL 来编写,首先在Modelsim6.1 下先进行RTL 级的功能仿真,当所有功能都满足要求时,就可以使用综合工具综合后加入延时信息进行进行时序仿真。如果时序仿真也满足电路的设计要求,就可以当做一个NiosII 系统自定义的组件加到Nios II 系统中去。
3.2 LCD 控制器IP 核的安装
Avalon 流模式的 LCD 控制器需要安装到 SOPC Builder 中,以便将其加入到NiosII 系统中。
这里的LCD 控制器是一个典型的流模式自定义外设。启动DMA 传输后,DMA 控制器将批量数据送往LCD 控制器,因此也可将LCD 控制器看成 FIFO 类型的存储器外设。选择Avalon Components->Legacy Components->Interface to User Logic,加入LCD 控制器的IP 核。
3.3 实际测试效果图
实际测试是在Altera的DE2开发板上进行的。使用的LCD屏是夏普公司的800*600型号为LQ080V3DG01的TFT LCD屏,实际的显示效果图如图9所示
4. 总结
本文讨论了基于Avalon 总线流传输的配置LCD 显示控制器IP 核的设计,根据自顶向下的设计思想,将IP 核进行层次功能划分设计,并对IP 核的仿真验证,最后加入到Nios II系统中。该IP 核经测试效果良好。由于本IP 核是可配置的,具有很好的移植性,可以方便的应用以Nios II 为核心的各种需要图形显示的嵌入式系统中。