首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年3月29日星期五
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
基于Avalon总线的键盘和VGA控制接口设计

Avalon Bus based Keyboard and VGA Control Interface Design

中船重工集团公司第709研究所产品研发部 张义伟



引言

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驱动程序。

图1 SOPC中的系统组成和结构(略)


系统的组成和结构

在SOPCBuilder中构造整个系统的连接,包括基本的SOPC系统和自定义外设。基本SOPC系统的核心是NiosII处理器Core,它还包含Avalon三态总线,以及挂在总线上的外部存储设备接口,包括SRAM(或SDRAM)控制接口及Flash控制接口;以及定时计数Timer和调试Jtag_Uart模块。而本课题设计的关键就是自定义的外设接口——基于Avalon总线协议的PS2接口和VGA控制接口。图1标识了系统的构成。


基于Avalon总线协议的PS2控制接口设计

PS2控制接口协议

PS2设备接口多用于当今的鼠标和键盘设计,它是由IBM 开发并最早出现在IBM 技术参考手册里。PS2 鼠标和键盘遵循双向同步串行协议,每次数据线上发送一位数据,时钟线上的脉冲就被读入。键盘/鼠标可以发送数据到主机,同样主机也可以发送数据到设备,但主机总是在总线上有优先权,它可以在任何时候抑制来自于键盘/鼠标的通讯,而只需把时钟拉低即可。

从键盘/鼠标发送到主机的数据,在时钟信号的下降沿被读取;从主机发送到键盘/鼠标的数据在上升沿被读取。不管通讯的方向怎样,键盘/鼠标总是产生时钟信号。如果主机要发送数据,它必须先告诉设备开始产生时钟信号。PS2设备最大的时钟频率是33kHz 而大多数设备工作在10-20kHz。设备到主机的通讯过程如图2所示:

图2 PS2设备到主机的通讯(略)

所有数据安排在字节中,每个字节为一帧,包含了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是否被按下,及发送的是通码或断码。


图3 小写“c”通码发送时序(略)


图4 大写“A”发送防真时序(略)

往键盘写数据:当你写数据到键盘控制器的输出缓冲区,控制器设置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行扫描、场扫描的时序。

图5 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,否则将无法正确显示画面。

图6 VGA时序的场同步波形图(略)

每一个垂直信号内,总共要包含480个水平信号(或者在不同分辨率时,会有不同数目的行信号)。64μs(15.764ms - 15.700ms)是vsync必需为0的时间。1.02ms是后置准备时间,0.35ms是前置准备时间,15.24ms是图像周期。每一个vsync就显示新的一帧。

图7 基于Avalon总线的VGA控制器结构图(略)

基于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,从而产生行同步时序。同理,对场也需通过一个计数器生成场时序。

图8 VGA行时序计数产生波形图(略)

在EP2C5T的板子上,要使用存储器,通常需要实时显示的都会使用on-chip memory(片内存储器),因为on-chip memory的双口结构可以同时对一块存储单元不同的地址进行读、写,同时,on-chip memory的速度极快,可以不经过外部总线工作,因此不会出现总线仲裁和延迟。但是因为实验板的on-chip memory较小,而设计中256色显存空间最少要 307.2Kbytes。因此,选择外部SRAM作为显存,并由imga_dma 产生的DMA控制从Avalon总线主动读取外部SRAM中的数据。

图9 中文字符串显示和英文字符显示(略)

一般在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系统。

《世界电子元器件》2007.8
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com