一种基于MCU+FPGA的LED大屏幕控制系统的设计
该模块采用VHDL有限状态机来实现,整个控制分为4个状态,其状态转换图如图5所示。其工作过程如下:系统开机进入初始状态ST0,单片机的写入使能端E为低电平,单片机从EEPROM中读取数据并把数据写入到SRAM1,同时FPGA读取SRAM2中的数据;当单片机数据写完一屏数据后E变为高电平,当FPGA从SRAM2中读完数据、结束信号READ_END为低电平时,进入ST1状态。
在ST1状态下,若没有新的数据写入则E保持高电平,FPGA读取SRAM1的数据,为静态显示;只有当单片机的读入控制信号E为低电平且READ_END为低电平时,进入ST2状态。在ST2状态下,单片机把数据写入SRAM2,同时FPGA读取SRAM1的数据,单片机数据写完后E变为高电平,当FPGA一屏数据读完后READ_END为低电平,进入ST3状态。在ST3状态下,如果没有新数据写入E为高电平,FPGA读取SRAM2中的数据。当单片机有新的数据写入时E变为低电平,当FPGA一屏数据读完后READ_END为低电平时,重新进入ST0状态。通过这种周而复始的交替工作完成数据的写入与读取,其端口程序如下:
ENTITY WRITEREAD_SEL IS
PORT(
REST:IN STD_LOGIC;
CLK:IN STD_LOGIC;
E:IN STD_LOGIC; 勃驳テ机写入标记
WR:IN STD_LOGIC;勃驳テ机写控制信号
ADDR_WR:IN STD_LOGIC_VECTOR(15 DOWNTO 0);勃驳テ机写地址信号
ADDR_RD:IN STD_LOGIC_VECTOR(15 DOWNTO 0);勃捕恋刂沸藕
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);勃驳テ机写入数据
READ_END:IN STD_LOGIC;勃捕烈黄潦据结束标记
D1,D2:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);勃SRAM数据
AD1,AD2:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);勃SRAM地址
WR1,WR2:OUT STD_LOGIC;勃SRAM的写控制信号
OE1,OE2:OUT STD_LOGIC; 勃SRAM的读控制信号
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));勃彩涑鍪据
END ENTITY WRITEREAD_SEL;
3.3 读地址发生器
读地址发生器主要产生外部缓存器SRAM1(SRAM2)的读地址信号,使系统能正确地从存储器中读取相应的显示数据。其地址最高位为0,其余地址分别为行地址(hang[30])、列地址(lie[60])、分区地址(qu[30])15位有效地址信号。在16个脉冲周期内读出在SRAM1(SRAM2)中的16字节数据,其部分VHDL源程序如下:
ENTITY addressIS
PORT(
RDCLK:IN STD_LOGIC;勃捕恋刂肥敝有藕
CLR,ADDR_EN:IN STD_LOGIC;勃睬辶慵笆鼓芸刂菩藕
READ_END:OUT STD_LOGIC;勃惨黄潦据读完信号
ADDR_RD:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));勃膊生的读地址信号
END ENTITY address;
评论