论文部分内容阅读
【摘要】为了设计一款全彩画图仪,采用PS2鼠标作为输入,VGA显示器作为输出,SDRAM作为存储设备,FPGA作为核心器件,使用Verilog语言对外围硬件驱动以及内部控制算法进行硬件描述。采用了Altera公司的Cyclone2系列器件EP2C8Q208C8进行配置和验证,结果证明了设计的正确性。该系统适用于便携式画图板的设计。
【关键词】FPGA;Verilog;全彩画图仪;Bresenham算法
1.引言
随着社会科技的发展以及环保的需求,现在各行各业逐渐向无纸化时代进军,如办公无纸化,无纸实训室等等。所以现在美术专业的学生,小孩子的涂鸦学画画等,都转向了无纸环保的电子画图板。而现在市场上电子画图板都是在电脑上安装画图软件来实现的,而电脑不仅昂贵,而且笨重不易携带,基于这种考虑,设计了基于FPGA的全彩绘图仪。该设计弥补了电脑画图仪的缺陷,而且由于是纯硬件设计,所以响应快,稳定性高。使用时只要接上鼠标和带VGA的显示器就可以工作了。
2.设计方案
2.1 系统总体设计
本设计采用PS2鼠标作为输入,输出分辨率为800*600,刷新率为60Hz的24位真彩色VGA显示。
如图1所示,系统的硬件结构主要由四个部分组成:PS2鼠标、VGA显示器、SDR SDRAM以及FPGA。其中FPGA内部Verilog编程分为五个部分:控制程序模块、PS2鼠标接口模块、VGA显示模块、SDRAM控制模块、直线算法模块。
2.2 系统功能
在控制程序模块协调下,各个模块之间进行数据和控制信号的交互:当PS2鼠标接口检测到鼠标位移时,控制程序将记录鼠标指针位置,并通过VGA显示模块改变当前鼠标指针位置;当检测到鼠标位移的同时鼠标左键处于按下的状态时,控制程序将每次位移的起点坐标和终点坐标传输到直线算法模块进行Bresenham直线算法模拟,并将作为输出的直线模拟坐标集合通过SDRAM控制模块写入SDRAM相应的位置;控制程序同时不断读取SDRAM内存储的显示数据,通过VGA显示模块进行实时显示。
3.模块功能
3.1 PS2鼠标接口模块
3.1.1 PS2鼠标接口模块功能
该模块的功能是根据PS2协议对PS2接口进行控制,以实现对PS2鼠标的配置与操作。
该模块通过对鼠标发送命令和接受命令,首先对鼠标初始化,之后采集鼠标每一次操作(移动,左键和右键操作),并转化为需要的格式作为该模块的输出。
3.1.2 PS2鼠标控制原理[1]
PS2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟线)同步,并通过Data(数据线)交换数据。一般两设备间传输数据的最大时钟频率是33KHz,大多数PS2设备工作在10-20KHz。本设计将时钟频率设置为10KHz。
设备和主机的通讯如图2、3所示。
标准的PS/2鼠标支持下面的输入:X(左右)位移、Y(上下)位移、左键、中键和右键。鼠标以一个固定的频率读取这些输入并更新不同的计数器,然后标记出反映的移动和按键状态。
标准的PS/2鼠标发送位移和按键信息给主机采用如图4的3字节数据包格式。
3.2 VGA显示模块
3.2.1 VGA显示模块功能
该模块的功能是通过控制VGA视频DA芯片ADV7123对VGA显示器进行驱动显示,显示分辨率为800*600,刷新率为60Hz,显示内容为SDRAM中存储的显示数据和鼠标指针位置数据。改变SDRAM的内容便能改变屏幕上显示的内容,从而实现实时显示。
3.2.2 VGA显示原理[2]
通过对VGA显示基本工作原理的分析可知,要实现VGA显示,关键是如何实现VGA时序。VGA时序图如图5、6所示,它分为行数据时序和帧数据时序。
由时序图可知,要显示一帧完整的数据,需要产生同步信号SYNC和对应的数据信号。同步信号包括行同步信号HSYNC和场同步信号VSYNC,该信号可根据常见刷新率时序表(图7)确定;对应的数据信号从SDRAM模块中的FIFO中读取。
3.3 SDRAM控制模块
3.3.1 SDRAM控制模块功能
该模块的功能是根据设计需求,参照SDRAM的控制时序,对SDRAM进行读写控制,并将数据输出到一个FIFO,以便VGA显示模块实时读取数据。
3.3.2 SDRAM控制原理[3,4]
由SDRAM的数据手册可知,SDRAM在正常工作前需要进行初始化,步骤如下:1)延时200ns;2)预充电;3)刷新2次;4)设置模式寄存器;5)进入工作状态。每一个操作都需要严格按照时序图的要求对相应信号进行操作。SDRAM提供了多种工作模式,主机需要通过设置模式寄存器来告诉SDRAM所选择的工作模式。寄存器配置如图8所示。
其中RFU表示预留,W.B.L表示写突发长度,TM表示测试模式,CAS Latency表示行列读写延迟,BT表示突发模式,Burst Length表示突发长度。由于本设计采用突发长度为8的BRSW模式(突发读,单字节写),所以寄存器配置为13’b0001000110011。
3.4 直线算法模块
由于鼠标输出数据的特性,鼠标在屏幕上画出来的实际上是一个个的点,当鼠标稍微移动得快一点就不能画出线条。如果要做到画线条,就需要对鼠标输出数据做线性化处理,运用Bresenham直线算法[5]进行点阵直线模拟。
实现Bresenham直线算法的步骤如下:
1)判断输入两个点坐标数据D1(x1,y1)和D2(x2,y2)的位置关系以及坐标差(dx,dy);
2)比较dx与dy的大小;
3)令比较参量p=2*dy-dx;
4)根据D1和D2的位置关系以及之前dx与dy的大小关系,将(x1±dx,y1±dy)作为一个输出;
5)如果dx=0,则跳至步骤7,否则跳至步骤6;
6)如果p<0,则p=p+2*dy,x=x-1,否则p=p+2*dy-2dx,x=x-1,y=y-1,跳至步骤3;
7)算法完成。
4.测试结果
本设计采用了ABC_PN学习板进行测试。该学习板包含本系统所需所有器件,使用的FPGA是Altera公司的Cyclone2系列器件EP2C8Q208C8,包含8256个逻辑单元,完全满足本系统的资源需求。
图9为系统的RTL级视图。经测试,PS2鼠标正常工作,VGA显示器正确显示图像输出,证明了设计的正确性。
5.结束语
以上介绍了一种基于FPGA的全彩画图仪,由Verilog语言设计。目前设计的资源利用率较低,有很大的扩展空间;设计采用的是模块化设计的思想,所以方便更改和移植,可根据不同的需要进行输入输出接口和算法设计,从而满足各种需求。
参考文献
[1]PS/2技术参考[EB/OL].www.datasheetmax.com,2002.
[2]VGA驱动及实现[EB/OL].www.oshbbs.com,2009.
[3]K4S643232C datasheet[EB/OL].Samsung,1999.
[4]王艳春.基于FPGA的SDRAM的控制器实现与性能分析[J].电子测试,2010,12:44-46.
[5]贾运宁.Bresenham直线光栅化算法的硬件实现方法研究[J].信息技术,2008,9:231-233.
作者简介:车驰(1988—),男,四川人,硕士研究生,现就读于重庆大学物理学院,主要研究方向:基于FPGA的光学工程。
【关键词】FPGA;Verilog;全彩画图仪;Bresenham算法
1.引言
随着社会科技的发展以及环保的需求,现在各行各业逐渐向无纸化时代进军,如办公无纸化,无纸实训室等等。所以现在美术专业的学生,小孩子的涂鸦学画画等,都转向了无纸环保的电子画图板。而现在市场上电子画图板都是在电脑上安装画图软件来实现的,而电脑不仅昂贵,而且笨重不易携带,基于这种考虑,设计了基于FPGA的全彩绘图仪。该设计弥补了电脑画图仪的缺陷,而且由于是纯硬件设计,所以响应快,稳定性高。使用时只要接上鼠标和带VGA的显示器就可以工作了。
2.设计方案
2.1 系统总体设计
本设计采用PS2鼠标作为输入,输出分辨率为800*600,刷新率为60Hz的24位真彩色VGA显示。
如图1所示,系统的硬件结构主要由四个部分组成:PS2鼠标、VGA显示器、SDR SDRAM以及FPGA。其中FPGA内部Verilog编程分为五个部分:控制程序模块、PS2鼠标接口模块、VGA显示模块、SDRAM控制模块、直线算法模块。
2.2 系统功能
在控制程序模块协调下,各个模块之间进行数据和控制信号的交互:当PS2鼠标接口检测到鼠标位移时,控制程序将记录鼠标指针位置,并通过VGA显示模块改变当前鼠标指针位置;当检测到鼠标位移的同时鼠标左键处于按下的状态时,控制程序将每次位移的起点坐标和终点坐标传输到直线算法模块进行Bresenham直线算法模拟,并将作为输出的直线模拟坐标集合通过SDRAM控制模块写入SDRAM相应的位置;控制程序同时不断读取SDRAM内存储的显示数据,通过VGA显示模块进行实时显示。
3.模块功能
3.1 PS2鼠标接口模块
3.1.1 PS2鼠标接口模块功能
该模块的功能是根据PS2协议对PS2接口进行控制,以实现对PS2鼠标的配置与操作。
该模块通过对鼠标发送命令和接受命令,首先对鼠标初始化,之后采集鼠标每一次操作(移动,左键和右键操作),并转化为需要的格式作为该模块的输出。
3.1.2 PS2鼠标控制原理[1]
PS2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟线)同步,并通过Data(数据线)交换数据。一般两设备间传输数据的最大时钟频率是33KHz,大多数PS2设备工作在10-20KHz。本设计将时钟频率设置为10KHz。
设备和主机的通讯如图2、3所示。
标准的PS/2鼠标支持下面的输入:X(左右)位移、Y(上下)位移、左键、中键和右键。鼠标以一个固定的频率读取这些输入并更新不同的计数器,然后标记出反映的移动和按键状态。
标准的PS/2鼠标发送位移和按键信息给主机采用如图4的3字节数据包格式。
3.2 VGA显示模块
3.2.1 VGA显示模块功能
该模块的功能是通过控制VGA视频DA芯片ADV7123对VGA显示器进行驱动显示,显示分辨率为800*600,刷新率为60Hz,显示内容为SDRAM中存储的显示数据和鼠标指针位置数据。改变SDRAM的内容便能改变屏幕上显示的内容,从而实现实时显示。
3.2.2 VGA显示原理[2]
通过对VGA显示基本工作原理的分析可知,要实现VGA显示,关键是如何实现VGA时序。VGA时序图如图5、6所示,它分为行数据时序和帧数据时序。
由时序图可知,要显示一帧完整的数据,需要产生同步信号SYNC和对应的数据信号。同步信号包括行同步信号HSYNC和场同步信号VSYNC,该信号可根据常见刷新率时序表(图7)确定;对应的数据信号从SDRAM模块中的FIFO中读取。
3.3 SDRAM控制模块
3.3.1 SDRAM控制模块功能
该模块的功能是根据设计需求,参照SDRAM的控制时序,对SDRAM进行读写控制,并将数据输出到一个FIFO,以便VGA显示模块实时读取数据。
3.3.2 SDRAM控制原理[3,4]
由SDRAM的数据手册可知,SDRAM在正常工作前需要进行初始化,步骤如下:1)延时200ns;2)预充电;3)刷新2次;4)设置模式寄存器;5)进入工作状态。每一个操作都需要严格按照时序图的要求对相应信号进行操作。SDRAM提供了多种工作模式,主机需要通过设置模式寄存器来告诉SDRAM所选择的工作模式。寄存器配置如图8所示。
其中RFU表示预留,W.B.L表示写突发长度,TM表示测试模式,CAS Latency表示行列读写延迟,BT表示突发模式,Burst Length表示突发长度。由于本设计采用突发长度为8的BRSW模式(突发读,单字节写),所以寄存器配置为13’b0001000110011。
3.4 直线算法模块
由于鼠标输出数据的特性,鼠标在屏幕上画出来的实际上是一个个的点,当鼠标稍微移动得快一点就不能画出线条。如果要做到画线条,就需要对鼠标输出数据做线性化处理,运用Bresenham直线算法[5]进行点阵直线模拟。
实现Bresenham直线算法的步骤如下:
1)判断输入两个点坐标数据D1(x1,y1)和D2(x2,y2)的位置关系以及坐标差(dx,dy);
2)比较dx与dy的大小;
3)令比较参量p=2*dy-dx;
4)根据D1和D2的位置关系以及之前dx与dy的大小关系,将(x1±dx,y1±dy)作为一个输出;
5)如果dx=0,则跳至步骤7,否则跳至步骤6;
6)如果p<0,则p=p+2*dy,x=x-1,否则p=p+2*dy-2dx,x=x-1,y=y-1,跳至步骤3;
7)算法完成。
4.测试结果
本设计采用了ABC_PN学习板进行测试。该学习板包含本系统所需所有器件,使用的FPGA是Altera公司的Cyclone2系列器件EP2C8Q208C8,包含8256个逻辑单元,完全满足本系统的资源需求。
图9为系统的RTL级视图。经测试,PS2鼠标正常工作,VGA显示器正确显示图像输出,证明了设计的正确性。
5.结束语
以上介绍了一种基于FPGA的全彩画图仪,由Verilog语言设计。目前设计的资源利用率较低,有很大的扩展空间;设计采用的是模块化设计的思想,所以方便更改和移植,可根据不同的需要进行输入输出接口和算法设计,从而满足各种需求。
参考文献
[1]PS/2技术参考[EB/OL].www.datasheetmax.com,2002.
[2]VGA驱动及实现[EB/OL].www.oshbbs.com,2009.
[3]K4S643232C datasheet[EB/OL].Samsung,1999.
[4]王艳春.基于FPGA的SDRAM的控制器实现与性能分析[J].电子测试,2010,12:44-46.
[5]贾运宁.Bresenham直线光栅化算法的硬件实现方法研究[J].信息技术,2008,9:231-233.
作者简介:车驰(1988—),男,四川人,硕士研究生,现就读于重庆大学物理学院,主要研究方向:基于FPGA的光学工程。