基于Avalon总线的键盘和VGA控制接口设计
扫描二维码
随时随地手机看文章
引言
SOPC(System On Programmable Chip,可编程的片上系统)是Altera公司提出的一种灵活、高效的SOC解决方案。它将处理器、存储器、I/O口等系统设计 需要的功能模块集成到一个可编程器件上,构成一个可编程的片上系统。SOPC是PLD和ASIC技术融合的结果,代表了半导体产业未来的发展方向。
Altera公司的Nios II核是目前最具代表性的软核嵌入式系统处理器,本文描述的SOPC系统以Altera NiosII为基础,利用SOPC Builder对Nios II及其外围系统进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足系统设计的需求。
设计课题的确立
本文所描述的SOPC系统需要完成以下功能:
1.利用PS2接口的键盘作为设计的信号输入和外部控制电路部分;
2.利用VGA显示接口作为设计的信号输出和显示电路部分;
3.嵌入处理器 + 应用软件。
根据以上要求,确立要完成本文设计的3个功能模型,分别是:兼容标准键盘的PS2控制接口逻辑;基于Avalon总线的VGA显示接口逻辑,以及NiosII嵌入式处理器和PS2/VGA驱动程序。
系统的组成和结构
在SOPCBuilder中构造整个系统的连接,包括基本的SOPC系统和自定义外设。基本SOPC系统的核心是NiosII处理器Core,它还包含Avalon三态总线,以及挂在总线上的外部存储设备接口,包括SRAM(或SDRAM)控制接口及Flash控制接口;以及定时计数Timer和调试Jtag_Uart模块。而本课题设计的关键就是自定义的外设接口——基于Avalon总线协议的PS2接口和VGA控制接口。
基于Avalon总线协议的PS2控制接口设计
PS2控制接口协议
PS2设备接口多用于当今的鼠标和键盘设计,它是由IBM 开发并最早出现在IBM 技术参考手册里。PS2 鼠标和键盘遵循双向同步串行协议,每次数据线上发送一位数据,时钟线上的脉冲就被读入。键盘/鼠标可以发送数据到主机,同样主机也可以发送数据到设备,但主机总是在总线上有优先权,它可以在任何时候抑制来自于键盘/鼠标的通讯,而只需把时钟拉低即可。
从键盘/鼠标发送到主机的数据,在时钟信号的下降沿被读取;从主机发送到键盘/鼠标的数据在上升沿被读取。不管通讯的方向怎样,键盘/鼠标总是产生时钟信号。如果主机要发送数据,它必须先告诉设备开始产生时钟信号。PS2设备最大的时钟频率是33kHz 而大多数设备工作在10-20kHz。设备到主机的通讯过程如图2所示:
所有数据安排在字节中,每个字节为一帧,包含了11/12 个位,这些位的含义如下:1个起始位,总是为0;8个数据位,低位在前;1个校验位,奇校验;1个停止位,总是为1;1个应答位,仅在主机对设备的通讯中出现。
键盘上包含了一个大型的按键矩阵,它们是由“键盘编码器”来监视的。监视哪些按键被按下或释放了,并在适当的时候传送到主机。而主板上包含了一个“键盘控制器”负责解码所有来自键盘的数据, 并告诉软件什么事件发生。在主机和键盘之间的通讯使用IBM 的协议,最初IBM 使用Intel8048 微处理器作为它的键盘编码器,而使用Intel8042 微控制器作为它的键盘控制器,这些现 已被兼容设备取代,并整合到主板的芯片组中。
键盘的处理器花费很多的时间来扫描或监视按键矩阵。如果它发现有键被按下、释放或按住,键盘将发送“扫描码”的信息包到计算机。扫描码有两种不同的类型:“通码”和“断码”。当一个键被按下或按住就发送通码;当一个键被释放就发送断码。每个按键被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以测定是哪个按键。
基于Avalon总线的键盘控制器的FPGA实现
基于Avalon总线的键盘控制器的实现,需模拟Intel8042的功能时序,完成键盘控制器的功能模型的建立,并完成其RTL代码。本键盘控制器,不仅完成8042对键盘扫描码的接收功能,还要把扫描码转换为处理器能够识别的ASCII码。
从键盘读数据:当从键盘收到有效的扫描码就把它放置在输入缓冲区,IBF(输入缓冲区满)标志被设置,产生IRQ1。如果中断是使能,IRQ1将激活键盘驱动程序,它指向0x09中断向量。驱动程序将从Avalon_PS2_BASE端口读取ASCII码。这个动作会释放IRQ1并复位IBF标志。接着ASCII被驱动程序处理。如下图3显示接收“c”通码的时序,经过11个PS2_CLK接收到“c”的扫描码为“0x21”,同时扫描码被转换为ASCII码,为“0x63”。图4,模拟了键盘发送一个大写“A”的数据传输时序,其过程为SHIFT通码(0x12),“A”通码(0x1c),“A”断码(0xf0,0x1c),SHIFT断码(0xf0,0x12)。此过程中加入了两个标识位,SHIFT标识(rx_shift_key_on)和断码标识(rx_released),用以显示SHIFT是否被按下,及发送的是通码或断码。
往键盘写数据:当你写数据到键盘控制器的输出缓冲区,控制器设置OBF(输出缓冲区满)标志并处理数据。控制器将发送这个数据到键盘并等待一个回应。如果键盘没有接收或在指定时间内没有回应,相应的超时标志就会被设置。
基于Avalon总线协议的VGA控制接口设计
VGA原理
VGA接口主要有五个信号线,分别为R、G、B、vsync(场同步)、hsync(行同步)信号。Red、Green、Blue 就是大家熟知的三原色,由RGB的电压差便可以产生出所有的颜色。如果R、G、B各用一个bit来控制,也就是只有0、1两种电压准位,则所能形成的颜色种类只有8种。若每一种颜色能用多个bit来分出不同准位的电压差,颜色就能多样化呈现。vsync和hsync用作显示器的同步信号,依据垂直与水平更新率的不同,不断送出固定频率的信号输出,此时就可以在屏幕上正确的显示色彩。
屏幕的显示方式,是从左边最上角的第一个像素开始,然后依次向右显示下一个像素,到显示完第一列的最后一个像素,就跳到第二列的第一个像素继续开始显示。一直到整个屏幕都显示完毕时,回到原点,如此能不断的刷新画面。对上述5个信号的时序驱动,VGA显示器要求严格遵循“VGA工业标准”,即640×480×60Hz模式。下图给出VGA行扫描、场扫描的时序。
这是每一行扫描所需的时间,3.77μs(29.88μs - 26.11μs)是hsync必需降为0的时间,1.89μs是后置准备时间,0.94μs是前置准备时间。而25.17μs则是像素显示时间,颜色的变化都要在这个时间内显示,在该时间域外,R、G、B三根信号线都一定置0,否则将无法正确显示画面。[!--empirenews.page--]
每一个垂直信号内,总共要包含480个水平信号(或者在不同分辨率时,会有不同数目的行信号)。64μs(15.764ms - 15.700ms)是vsync必需为0的时间。1.02ms是后置准备时间,0.35ms是前置准备时间,15.24ms是图像周期。每一个vsync就显示新的一帧。
基于Avalon总线的VGA控制器的实现
Avalon流模式外设的设计需要遵循Avalon总线规范。基于Avalon总线VGA控制器的硬件结构如图7所示,该控制器由4部分构成:vga_regster_bank:VGA寄存器控制模块;line_buffer:FIFO存储器,由Magawizard产生;vga_driver:vga时序发生器,产生行场信号,并从FIFO中读取像素信息产生RGB;imga_dma:DMA控制器,完成直接存储,从系统SRAM中读取数据传输到FIFO。
使用pixel_counter(像素计数器)生成行时序,计数器应每31.77μs完成一个周期,当VGA时钟选择在25MHz,则每行需31.77μs/(1/25MHz) = 794个时钟周期。而行同步信号保持为低状态要3.77μs,3.77*25 = 94;所以如图8所示,在A处像素计数值为0,B-94,C-140,D-781,E-794,然后复位到0,从而产生行同步时序。同理,对场也需通过一个计数器生成场时序。
在EP2C5T的板子上,要使用存储器,通常需要实时显示的都会使用on-chip memory(片内存储器),因为on-chip memory的双口结构可以同时对一块存储单元不同的地址进行读、写,同时,on-chip memory的速度极快,可以不经过外部总线工作,因此不会出现总线仲裁和延迟。但是因为实验板的on-chip memory较小,而设计中256色显存空间最少要 307.2Kbytes。因此,选择外部SRAM作为显存,并由imga_dma 产生的DMA控制从Avalon总线主动读取外部SRAM中的数据。
一般在Avalon总线上大多是从外设,其使用的方式是,一直等待chipselect的输入为1时,才读取总线上的数据,如果chipselect一直为0的狀态下,则从外设将不做响应。然而,跟一般从外设不一样的是VGA控制器中的imga_dma模块是一个主外设,它完成存储器到存储器的 DMA传输,它通过Avalon总线一端连接外部显存(SRAM),一端连接控制器的FIFO。然后控制器不断主动的去读取SRAM中的数据,并输出信号到RGB。
实验分析及结果展示
中文字符串显示:先建立中文字符串字库,利用键盘扩展键触发,Nios II软件捕捉到此键码,显示字符串。英文字符显示:键盘输入,由PS2协议模块捕捉到键盘输入的扫描码,转换成ASCII码,Nios II软件再根据ASCII码值在预先建立好的ASCII字库中寻址读取ASCII字库数据,并把字库数据写入到VGA显示存储器;然后VGA控制模块把显示存储器中的数据通过DMA方式发送到VGA,完成英文字符显示。
至此完成课题设计要求,利用PS2键盘输入、VGA显示、Nios II数据处理,构造了一个SOPC系统。