在许多嵌入式系统中,为了实现良好的人机界面,这就对系统的MCU和显示设备提出了更高的要求。若能用低速的MCU实现和PC机类似的显示效果,将会大幅度提高产品的附加值。目前,带有VGA接口和类VGA的显示设备随处可见,若能以此类设备作为各种嵌入式系统的显示器,也可提高各种嵌入式设备人机界面的通用性。本项目采用FPGA器件和带有VGA接口的显示器,实现适用于各种嵌入式系统的显示接口,使得低速的MCU不需要增加过多开销即可采用VGA接口设备作为显示器。
系统硬件结构图如图1所示: 图1系统硬件结构图
三、软件介绍 系统软件分为两个部分:MCU软件模块和FPGA软件模块。MCU软件模块主要负责将要显示数据传送给FPGA,主要实现的功能是在VGA显示器上打点(在指定的行坐标、列坐标出以某一指定的颜色显示一个点),在此功能的基础之上实现划线、矩形填充、显示图片的功能。FPGA模块主要负责接收MCU模块发送的数据,并将接收到的数据通过内部的写FIFO单元存入外接的SDRAM存储器中,然后再通过内部的读FIFO单元从SDRAM中将数据取出送到VGA数模转换模块,同时FPGA模块还要提供VGA显示所需要的HS、VS、SYNC等扫描信号。
1、FPGA软件模块介绍 FPGA模块的软件主要有以下几部分组成。 FPGA顶层模块主要定义了FPGA与外围的MCU、SDRAM、VGA数模转换的接口。各引脚的具体定义如表1和图1所示。 表1 [size=1em]方向 | [size=1em]名称 | [size=1em]描述 | [size=1em]Input | [size=1em]clk | [size=1em]输入时钟50M | [size=1em]Input | [size=1em]rst_n | [size=1em]异步复位,低有效 | [size=1em]Input | [size=1em]a0 | [size=1em]数据地址选择,低表示地址 | [size=1em]Input | [size=1em]we | [size=1em]写信号,上升沿有效 | [size=1em]Input | [size=1em]re | [size=1em]RE,读信号,下降沿有效 | [size=1em]Input | [size=1em]ce | [size=1em]片选,低有效 | [size=1em]input | [size=1em][15:0]data1616 | [size=1em]时序接口,数据线 | [size=1em]output | [size=1em]dclk | [size=1em]输出时钟40M,给VGA | [size=1em]output | [size=1em]hs_sig | [size=1em]列同步信号 | [size=1em]output | [size=1em]vs_sig | [size=1em]行同步信号 | [size=1em]output | [size=1em]red_sig[4:0] | [size=1em]红信号 | [size=1em]output | [size=1em]green_sig[5:0] | [size=1em]绿信号 | [size=1em]output | [size=1em]blue_sig[4:0] | [size=1em]蓝信号 | [size=1em]output | [size=1em]sdram_clk | [size=1em]SDRAM时钟信号 | [size=1em]output | [size=1em]sdram_cke | [size=1em]SDRAM时钟有效信号 | [size=1em]output | [size=1em]sdram_cs_n | [size=1em]SDRAM片选信号 | [size=1em]output | [size=1em]sdram_ras_n | [size=1em]SDRAM行地址选通脉冲 | [size=1em]output | [size=1em]sdram_cas_n | [size=1em]SDRAM列地址选通脉冲 | [size=1em]output | [size=1em]sdram_we_n | [size=1em]SDRAM写允许位 | [size=1em]output | [size=1em]sdram_ba[1:0] | [size=1em]SDRAM的L-Bank地址线 | [size=1em]output | [size=1em]sdram_addr[12:0] | [size=1em]SDRAM地址总线 | [size=1em]inout | [size=1em]sdram_data[15:0] | [size=1em]SDRAM数据总线 | [size=1em]output | [size=1em]sdram_udqm | [size=1em]SDRAM高字节屏蔽 | [size=1em]output | [size=1em]sdram_ldqm | [size=1em]SDRAM低字节屏蔽 |
图1 FPGA软件顶层模块
SDRAM读、写控制模块主要实现FPGA对SDRAM存储器的读写控制,该模块主要完成SDRAM的上电初始化以及定时刷新、读写控制等状态的变迁。该模块各引脚的具体定义如表2和图2所示。 表2 [size=1em]方向 | [size=1em]名称 | [size=1em]描述 | [size=1em]input | [size=1em] clk | [size=1em]系统时钟,100MHz | [size=1em]input | [size=1em] rst_n | [size=1em]复位信号,低电平有效 | [size=1em]input | [size=1em]sdram_wr_req | [size=1em]系统写SDRAM请求信号 | [size=1em]input | [size=1em]sdram_rd_req | [size=1em]系统读SDRAM请求信号 | [size=1em]output | [size=1em]sdram_wr_ack | [size=1em]系统写SDRAM响应信号 | [size=1em]output | [size=1em]sdram_rd_ack | [size=1em]系统读SDRAM响应信号 | [size=1em]input | [size=1em]sys_addr[21:0] | [size=1em]读写SDRAM时地址暂存器 | [size=1em]input | [size=1em]sys_data_in[15:0] | [size=1em]写SDRAM时数据暂存器 | [size=1em]output | [size=1em]sys_data_out[15:0] | [size=1em]读SDRAM时数据暂存器 | [size=1em]output | [size=1em]writing | [size=1em]SDRAM正写标志 | [size=1em]output | [size=1em]sdram_clk | [size=1em]SDRAM时钟信号 | [size=1em]output | [size=1em]sdram_cke | [size=1em]SDRAM时钟有效信号 | [size=1em]output | [size=1em]sdram_cs_n | [size=1em]SDRAM片选信号 | [size=1em]output | [size=1em]sdram_ras_n | [size=1em]SDRAM行地址选通脉冲 | [size=1em]output | [size=1em]sdram_cas_n | [size=1em]SDRAM列地址选通脉冲 | [size=1em]output | [size=1em]sdram_we_n | [size=1em]SDRAM写允许位 | [size=1em]output | [size=1em]sdram_ba[1:0] | [size=1em]SDRAM的L-Bank地址线 | [size=1em]output | [size=1em]sdram_addr[11:0] | [size=1em]SDRAM地址总线 | [size=1em]inout | [size=1em]sdram_data[15:0] | [size=1em]SDRAM数据总线 |
图2 SDRAM顶层模块
读、写FIFO模块采用系统的IP核实现,FIFO的容量为1K字单元(16位)。Wrf FIFO单元在wrreq为1时将MCU的数据存入wrf
FIFO,数据存入后,立即被写入SDRAM中。Rdf FIFO单元在rdreq为1时将数据从SDRAM中取出送给VGA控制模块。 图3 写FIFO模块
图4 读FIFO模块
PLL单元主要负责管理系统所需的各种时钟信号,其中主要有:inclk0为系统输入时钟(50MHZ)。c1、c2为SDRAM提供100MHZ的读、写时钟。c0、c3分别是为采样MCU数据和VGA时序扫描所提供的40MHZ时钟。 图5 PLL模块
VGA控制模块主要负责将从MCU接收到的数据送给wrf FIFO中,然后从rdf FIFO中取出要显示的数据,并产生VGA所需的行扫描、列扫描信号、同步信号、时钟信号,一并送给外围的VGA数模转换电路。该模块的各引脚的具体定义如表3和图6所示。 表3 [size=1em]方向 | [size=1em]名称 | [size=1em]描述 | [size=1em]input | [size=1em]clk_40m | [size=1em]输入时钟40M | [size=1em]input | [size=1em]clk_100m | [size=1em]输入时钟100M | [size=1em]input | [size=1em]rst_n | [size=1em]异步复位,低有效 | [size=1em]input | [size=1em]a0 | [size=1em]数据地址选择,低表示地址 | [size=1em]input | [size=1em]we | [size=1em]写信号,上升沿有效 | [size=1em]input | [size=1em]re | [size=1em]读信号,下降沿有效 | [size=1em]input | [size=1em]ce | [size=1em]片选,低有效 | [size=1em]input | [size=1em]rdf_q[15:0] | [size=1em]rdf读数据 | [size=1em]input | [size=1em]writing | [size=1em]正写SDRAM | [size=1em]input | [size=1em]sdram_rd_ack | [size=1em]读SDRAM应答 | [size=1em]input | [size=1em]data1616[15:0] | [size=1em]数据线 | [size=1em]output | [size=1em]wrf_din[15:0] | [size=1em]wrf写数据 | [size=1em]output | [size=1em]wrf_wrreq | [size=1em]wrf写使能 | [size=1em]output | [size=1em]wrf_aclr | [size=1em]wrf异步清零 | [size=1em]output | [size=1em][21:0]sys_addr | [size=1em]SDRAM地址 | [size=1em]output | [size=1em]rdf_rdreq | [size=1em]rdf读使能 | [size=1em]output | [size=1em]hs_sig | [size=1em]列同步信号 | [size=1em]output | [size=1em]vs_sig | [size=1em]行同步信号 | [size=1em]output | [size=1em]de | [size=1em]时序控制 | [size=1em]output | [size=1em]red_sig[4:0] | [size=1em]红信号 | [size=1em]output | [size=1em]green_sig[5:0] | [size=1em]绿信号 | [size=1em]output | [size=1em]blue_sig[4:0] | [size=1em]蓝信号 |
图6 VGA模块 2、系统的RTL图
|