用于DMD动态选区的FPGA处理模块及其方法技术领域
本发明涉及一种DMD动态选区显示方法,特别涉及一种基于FPGA平台的DMD底层软
件动态选区显示方法。
背景技术
DMD(Digital Micromirror Device,数字微镜器件)通过控制镜片的±12°偏转达
到显示图像的目的。近年来DMD在单光子时间分辨成像光谱仪、压缩感知等领域得到广泛的
应用。在单光子时间分辨成像光谱仪等设备中,其数据存储单元中存储了大量的二值图像
信息(一般为100Gbps左右),在设备运行过程中,若无特殊要求,无需改变存储单元中的图
像。特别是相关设备运用于航天领域时,要求数据存储单元中的图像一次下载,永久保存。
在DMD显示图像时,需要用到局部选区显示功能。
现有的选区方案是通过上位机软件将已经选区处理后的图像存储到二值图像缓
存模块中,然后再在DMD上显示。上位机选区的缺陷是不能实时改变选区大小,DMD选区改变
时,重新下载二值图像数据,每次下载大量的图像数据需要消耗大量的时间,并且下载的图
像选区范围固定,只适用于某一阶段性的需要,导致了系统无法长期、稳定、高速运行,同时
还要为设备配备专用的数据传输模块,带来了设计上的麻烦。
发明内容
本发明是为了解决上述现有技术存在的不足之处,提出一种用于DMD动态选区的
FPGA处理模块及其方法,以期能根据用户需要实时改变DMD选区显示范围,实现DMD动态选
区显示功能,从而提高DMD的显示效率。
本发明为解决技术问题采用如下技术方案:
本发明一种用于DMD动态选区的FPGA处理模块,是应用于由PC机、RS232串口、二值
图像存储模块和DDC4100模块所组成的系统中;所述PC机通过所述RS232串口与所述FPGA处
理模块通信,所述FPGA处理模块与所述二值图像存储模块相连,用于读取所述二值图像存
储模块中存储的图像;所述FPGA处理模块与所述DDC4100模块相连,用于向所述DDC4100模
块输入图像;其特点是:所述FPGA处理模块包括:命令接收单元、选区控制单元、FIFO单元和
DMD显示单元;
所述命令接收单元在时钟周期的控制下,通过所述RS232串口接收所述PC机发送
的数据帧并进行识别,得到控制命令并发送给所述选区控制单元和所述DMD显示单元;所述
控制命令包括:写触发命令、选区有效命令、选区起点坐标(StartX,StartY)和选区终点坐
标(EndX,EndY);
所述选区控制单元在所述写触发命令的控制下,从所述二值图像存储模块中读取
一幅大小为m×n的二值图像;所述选区控制单元在所述选区有效命令的触发下,根据所述
选区起点坐标(StartX,StartY)和选区终点坐标(EndX,EndY)对所述二值图像进行选区处
理,得到处理后的二值图像,并输入所述FIFO单元;
所述FIFO单元对所述处理后的二值图像进行格式转换处理,得到大小为u×v的预
显示图像并向所述DMD显示单元发送数据容量rd_Count及数据dout;从而将所述预显示图
像输出给所述DMD显示单元;
所述DMD显示单元在所述写触发命令的触发下,读取所述预显示图像,并根据所述
DDC4100模块接口协议将图像逐行写入所述DDC4100模块,直到完成所述预显示图像的写入
操作后,所述DMD显示单元向所述DDC4100模块发送复位信号,并等待所述DDC4100模块中的
DMD设备完成所述预显示图像的显示。
本发明所述的FPGA处理模块的特点也在于,所述选区控制单元是按如下步骤对所
述二值图像进行选区处理:
步骤1、由所述选区起点坐标(StartX,StartY)和所述选区终点坐标(EndX,EndY)
构成选择区域;并保留所述选择区域内二值图像信息;
步骤2、对所述选择区域外的二值图像分别与“0”进行“与”操作,从而获得处理后
的二值图像。
本发明一种用于DMD动态选区的FPGA处理方法,是应用于由PC机、RS232串口、FPGA
处理模块、二值图像存储模块和DDC4100模块所组成的系统中,其特点是按如下步骤进行:
步骤1、在时钟周期的控制下,所述FPGA处理模块通过所述RS232串口接收所述PC
机发送的数据帧并进行识别,得到控制命令;所述控制命令包括:写触发命令、选区有效命
令、选区起点坐标(StartX,StartY)和选区终点坐标(EndX,EndY);由所述选区起点坐标
(StartX,StartY)和所述选区终点坐标(EndX,EndY)构成选择区域;
步骤2、在所述写触发命令的控制下,所述FPGA处理模块从所述二值图像存储模块
中读取一幅大小为m×n的二值图像;
步骤3、在所述选区有效命令的触发下,所述FPGA处理模块保留所述选择区域内二
值图像信息,并对所述选择区域外的二值图像分别与“0”进行“与”操作,实现选区处理,从
而获得处理后的二值图像;
步骤4、所述FPGA处理模块对所述处理后的二值图像进行格式转换处理,得到大小
为u×v的预显示图像,并确定数据容量rd_Count;
步骤5、在所述写触发命令的触发下,所述FPGA处理模块根据所述DDC4100模块接
口协议将所述预显示图像逐行写入所述DDC4100模块,直到完成所述预显示图像的写入操
作后,向所述DDC4100模块发送复位信号,并等待所述DDC4100模块中的DMD设备完成所述预
显示图像的显示,从而实现显示处理。
本发明所述的用于DMD动态选区的FPGA处理方法的特点也在于,所述步骤3中的选
区处理是按如下步骤进行:
步骤3.1、所述FPGA处理模进行复位RST操作;若复位完成,则执行步骤3.2;否则重
复执行步骤3.1;
步骤3.2、所述FPGA处理模块进行初始化IDLE操作,判断所述写触发命令和选区有
效命令是否有效,若两者都有效,则执行步骤3.3,并初始化行计数器countA=1;若所述写
触发命令有效,所述选区有效命令无效,则执行步骤3.6,并初始化行计数器countA=1,否
则继续执行步骤3.2;
步骤3.3、判断countA<StartX是否成立,若成立,则将所述二值图像中第countA
行的数据与“0”进行“与”操作后,将countA+1赋值给countA,将处理后的第countA行数据输
入所述FIFO单元;并返回步骤3.3;否则,执行步骤3.4;
步骤3.4、判断countA≤EndX是否成立,若成立,则保留所述二值图像中第countA
行的第StartY列至第EndY列的信息;将第countA行的第0列至第(StartY-1)列、以及第
countA行的第(EndY+1)列至第m列的二值图像分别与“0”进行“与”操作后,将countA+1赋值
给countA,处理后的第countA行数据输入所述FIFO单元;并返回步骤3.4;否则执行步骤
3.5;
步骤3.5、判断countA<n是否成立,若成立,则将所述二值图像中第countA行的数
据与“0”进行“与”操作后,将countA+1赋值给countA,处理后的第countA行数据输入所述
FIFO单元;并返回步骤3.5;否则,表示实现选区处理,返回步骤3.2,等待下一次选区处理;
步骤3.6、判断countA<n是否成立,若成立,则保留所述二值图像中第countA行的
信息,将第countA行数据输入所述FIFO单元,并将countA+1赋值给countA后,返回步骤3.6,
否则,表示实现选区处理,返回步骤3.2,等待下一次选区处理。
所述步骤5中的显示处理是按如下步骤进行:
步骤5.1、所述FPGA处理模进行复位RST操作;若复位完成,则执行步骤5.2;否则重
复执行步骤5.1;
步骤5.2、所述FPGA处理模进行初始化IDLE操作;并初始化行计数器conutB=0;判
断所述写触发命令是否有效,若有效,则执行步骤5.3;否则重复执行步骤5.2;
步骤5.3、判断数据容量rd_Count大于m/u是否成立,若成立,则执行步骤5.4;否
则,仍返回步骤5.3执行;
步骤5.4、所述FPGA处理模块向所述DDC4100模块写入一行数据,并将countB+1赋
值给countB,执行步骤5.5;
步骤5.5、所述FPGA处理模块判断countB≥n是否成立,若成立,则执行步骤5.6;否
则,执行步骤5.3;
步骤5.6、所述FPGA处理模块向所述DDC4100模块发送复位信号,并等待T个时钟周
期后,执行步骤5.7;
步骤5.7、所述FPGA处理模块检测所述DDC4100模块是否完成复位;若完成,则所述
DDC4100模块对所述预显示图像在自身DMD设备中进行显示,同时,所述FPGA处理返回步骤
5.2;否则,返回步骤5.7。
与已有现有技术相比,本发明的有益效果是:
1、本发明采用用于DMD动态选区的FPGA处理模块及其方法,利用PC机通过RS232串
口向FPGA模块发送控制命令,FPGA模块由命令接收单元、选区控制单元、FIFO单元和DMD显
示单元组成,负责从二值图像存储单元读取图像数据,根据命令接收单元的命令,对图像进
行选区处理,经FIFO单元转换格式,利用DMD显示单元处理,输入DDC4100模块,最终在DMD微
镜上显示选区处理后的图像,从而解决了现有技术中DMD模块无法实时动态选区的问题,提
高了DMD设备应用于单光子时间分辨成像光谱仪以及压缩感知等领域时的稳定、实时、高效
性;降低了设备因多次下载数据带来的功耗。
2、本发明采用用于DMD动态选区的FPGA处理模块及其方法,利用FPGA处理设备高
速、并行的特点,在时钟周期的控制下,根据PC机传送的控制命令,可以在微秒级的范围内
完成选区功能,解决了现在有方案中DMD选区时下载大量数据带来时间损耗的问题,相比于
上位机选区,极大的降低了选区时间,提高了DMD的显示效率。
3、本发明采用用于DMD动态选区的FPGA处理模块及其方法,利用上位机发送几个
简单的数据帧,通过命令接收模块接收、处理,可以按照用户需求,实时的改变DMD显示区域
的大小,解决了现有方案中DMD设备无法实时改变选区大小的缺点,提高了DMD设备的显示
模式及应用价值。
4、本发明采用用于DMD动态选区的FPGA处理模块及其方法,利用FPGA处理单元实
现DMD选区显示功能,图像只需要一次下载,解决了现有方案中多次下载图像,需要配备专
用的数据传输模块问题,降低了设计上的麻烦。
附图说明
图1为现有技术中系统结构图;
图2为本发明的FPGA处理流程图;
图3为本发明选区状态机的示意图;
图4为本发明FIFO处理模块的示意图;
图5为本发明DMD显示状态机的示意图。
具体实施方式
如图1所示,一种用于DMD动态选区的FPGA处理模块,是应用于由PC机、RS232串口、
二值图像存储模块和DDC4100模块所组成的系统中;PC机通过RS232串口与FPGA处理模块通
信,FPGA处理模块与二值图像存储模块相连,用于读取二值图像存储模块中存储的图像;
FPGA处理模块与DDC4100模块相连,用于向DDC4100模块输入图像;如图2所示,FPGA处理模
块包括:命令接收单元、选区控制单元、FIFO单元和DMD显示单元;
如图2所示,命令接收单元在时钟周期的控制下,通过RS232串口接收PC机发送的
数据帧并进行识别,得到控制命令并发送给选区控制单元和DMD显示单元;控制命令包括:
写触发命令、选区有效命令、选区起点坐标(StartX,StartY)和选区终点坐标(EndX,EndY),
其中StartX的值小于等于EndX,StartY的值小于等于EndY;RS232串口一次最多只能传输
8bits的数据,而控制命令的有效数据位最少为10bits,命令接收单元需要将两个长度为
8bits的串口数据,即cmdl[7:0],cmdh[7:0]组合成16bits数据命令,即cmd[15:0],并根据
利用数据的的最高三位,即cmd[15:13],判断命令类型;命令类型如下:
①cmd[15:13]=001,表示写触发命令,该命令最低位,即cmd[0]=1,表示写触发
命令有效,cmd[0]=0,表示写触发命令无效;该命令的其余12位,即cmd[12:1]无效;
②cmd[15:13]=010,表示选区有效命令,该命令最低位,即cmd[0]=1,表示选区
有效,cmd[0]=0,表示选区无效;该命令的其余12位,即cmd[12:1]无效;
③cmd[15:13]=011,表示起点横坐标标识,即StartX,该命令的低10位,即cmd[9:
0]表示选区起点横坐标的具体指,表示的坐标范围为[0,767],其余位,即cmd[12:10]无效;
④cmd[15:13]=100,表示起点纵坐标标识,即StartY,该命令的低10位,即cmd[9:
0]表示选区起点纵坐标的具体指,表示的坐标范围为[0,1023],其余位,即cmd[12:10]无
效;
⑤cmd[15:13]=101,表示终点横坐标标识,即EndX,该命令的低10位,即cmd[9:0]
表示选区终点横坐标的具体指,表示的坐标范围为[0,767],其余位,即cmd[12:10]无效;
⑥cmd[15:13]=100,表示终点纵坐标标识,即EndY,该命令的低10位,即cmd[9:0]
表示选区终点纵坐标的具体指,表示的坐标范围为[0,1023],其余位,即cmd[12:10]无效;
如图2所示,选区控制单元在写触发命令的控制下,从二值图像存储模块中读取一
幅大小为m×n的二值图像,其中m的取值固定为1024,n的取值固定为768;选区控制单元在
选区有效命令的触发下,根据选区起点坐标(StartX,StartY)和选区终点坐标(EndX,EndY)
对二值图像进行选区处理,得到处理后的二值图像,并输入FIFO单元;
如图3和图4所示,FIFO单元对处理后的二值图像进行格式转换处理,得到大小为u
×v的预显示图像并向DMD显示单元发送数据容量rd_Count及数据;从而将预显示图像输出
给DMD显示单元;具体的说,在选区有效命令的触发下,FPGA处理模块保留选择区域内二值
图像信息,并对选择区域外的二值图像分别与“0”进行“与”操作,实现选区处理,从而获得
处理后的二值图像;
如图4和图5所示,DMD显示单元在写触发命令的触发下,读取预显示图像,并根据
DDC4100模块接口协议将图像逐行写入DDC4100模块,直到完成预显示图像的写入操作后,
DMD显示单元向DDC4100模块发送复位信号,并等待DDC4100模块中的DMD设备完成预显示图
像的显示。
本实施例中,一种用于DMD动态选区的FPGA处理方法,是应用于由PC机、RS232串
口、FPGA处理模块、二值图像存储模块和DDC4100模块所组成的系统中,并按如下步骤进行:
步骤1、在时钟周期的控制下,FPGA处理模块通过RS232串口接收PC机发送的数据
帧并进行识别,得到控制命令;控制命令包括:写触发命令、选区有效命令、选区起点坐标
(StartX,StartY)和选区终点坐标(EndX,EndY);由选区起点坐标(StartX,StartY)和选区
终点坐标(EndX,EndY)构成选择区域;
步骤2、在写触发命令的控制下,FPGA处理模块从二值图像存储模块中读取一幅大
小为m×n的二值图像;
步骤3、在选区有效命令的触发下,FPGA处理模块保留选择区域内二值图像信息,
并对选择区域外的二值图像分别与“0”进行“与”操作,实现选区处理,从而获得处理后的二
值图像;选区处理单元有6个阶段组成,分别为:RST,IDLE,S1,S2,S3,S4,其中RST表示复位
阶段,IDLE表示初始化阶段,S1表示选区处理阶段一、S2表示选区处理阶段二、S3表示选区
处理阶段三、S4表示不进行选区处理阶段,各个阶段均在同一个时钟周期clk_W控制下工
作。各阶段之间按如下步骤进行:
步骤3.1、FPGA处理模进行复位RST操作,包括:选区起点坐标、选区终点坐标恢复
默认值,即(StartX,StartY)=(0,0),(EndX,EndY)=(767,1023),行计数器countA清零,写
触发命令、选区有效命令清零;若复位完成,则执行步骤3.2,进入IDLE阶段;否则重复执行
步骤3.1,停留在RST阶段;
步骤3.2、FPGA处理模块进行初始化IDLE操作,包括接受写触发命令、选区有效命
令、选区起点坐标和选区终点坐标,判断写触发命令和选区有效命令是否有效,若两者都有
效,则执行步骤3.3,进入S1阶段,并初始化行计数器countA=1;若写触发命令有效,选区有
效命令无需,执行步骤3.6,进入S4阶段,并初始化行计数器countA=1;否则继续执行步骤
3.2,停留在IDLE阶段;
具体实现方式如下:
写使能=1,选区命令=1,进入S1阶段,清除FIFO单元的复位信号,即将FIFO单元
中的rst赋值为0;并向FIFO单元输出写使能信号,即将FIFO单元中的wr_En赋值为1;
写使能=1,选区命令=0,进入S4阶段,清除FIFO单元的复位信号,即将FIFO单元
中的rst赋值为0;并向FIFO单元输出写使能信号,即将FIFO单元中的wr_En赋值为1;
写使能=0,选区命令=0或者1,停留在IDLE阶段,并对FIFO单元执行复位操作,即
将FIFO单元中的rst赋值为1,wr_En=0,rd_En=0;
步骤3.3、判断countA<StartX是否成立,若成立,则将二值图像中第countA行的
数据与“0”进行“与”操作后,将countA+1赋值给countA,将处理后的第countA行数据通过
din[1023:0]接口输入FIFO单元;并返回步骤3.3,继续停留在S1阶段;否则,执行步骤3.4,
进入S2阶段;S1阶段主要用于处理位于选区起点横坐标前的StartX行数据,将位于[0,
StartX)行的所有数据清除;
步骤3.4、判断countA≤EndX是否成立,若成立,则保留二值图像中第countA行的
第StartY列至第EndY列的信息;将第countA行的第0列至第(StartY-1)列、以及第countA行
的第(EndY+1)列至第m列的二值图像分别与“0”进行“与”操作后,将countA+1赋值给
countA,处理后的第countA行数据通过din[1023:0]接口输入FIFO单元;并返回步骤3.4,继
续停留在S2阶段;否则执行步骤3.5,进入S3阶段;S2阶段主要用于处理横坐标位于
[StartX,EndX]行内的数据,对于横坐标位于此区间的图像数据,保留纵坐标位于[StartY,
EndY]列的数据,清除纵坐标位于[0,StartY)或(EndY,1023]列的数据;
步骤3.5、判断countA<n是否成立,若成立,则将二值图像中第countA行的数据与
“0”进行“与”操作后,将countA+1赋值给countA,处理后的第countA行数据通过din[1023:
0]接口输入FIFO单元;并返回步骤3.5,继续停留在S3阶段;否则,表示实现选区处理,返回
步骤3.2,进入IDLE阶段,等待下一次选区处理;S3阶段主要用于处理位于选区终点横坐标
后的768-EndX行数据,将位于(EndX,767]行的所有数据清除;
步骤3.6、判断countA<n是否成立,若成立,则保留二值图像中第countA行的信
息,将第countA行数据通过din[1023:0]接口输入FIFO单元,并将countA+1赋值给countA
后,返回步骤3.6,继续停留在S4阶段;否则,表示实现选区处理,返回步骤3.2,进入IDLE阶
段,等待下一次选区处理。
步骤4、FPGA处理模块对处理后的二值图像进行格式转换处理,得到大小为u×v的
预显示图像,并确定数据容量rd_Count;
如图4所示,FIFO单元由6组输入信号:rst,clk_R,clk_W,wr_En,rd_En和din
[1023:0]以及4组输出信号:full,empty,rd_Count和dout[127:0]组成,其中:
rst表示复位信号,rst=1表示复位,rst=0表示复位完成;
clk_R表示读时钟周期,与显示单元时钟同步;
clk_W表示写时钟周期,与选区单元时钟同步;
wr_En表示写使能,wr_En=1表示写使能,wr_En=0表示无写使能;
rd_En表示读使能,rd_En=1表示写使能,rd_En=0表示无写使能;
din[1023:0]表示写入FIFO单元数据的格式,宽度为1024bits;
full表示FIFO内部空间是否已满,full=1表示内部空间已满,full=0表示内部
空间不满;
empty表示FIFO内部空间为空,empty=1表示内部空间为空,empty=0表示内部空
间不空;
rd_Count表示FIFO单元中缓存的数据个数;
dout[127:0]表示FIFO单元输出数据格式,宽度为128bits;
FIFO单元内部RAM空间不满,即full=0的情况下,在写使能wr_En和写时钟周期
clk_W的作用下,接收选区单元通过din[1023:0]数据接口传输过来的宽度为1024bits的图
像数据,将图像数据写入到FIFO单元的内部RAM单元中,并将图像数据转换为宽度为
128bits的预显示图像数据,用于dout[127:0]数据接口输出到显示单元中;转换后得到大
小为u×v的预显示图像,其中u的取值固定为128,v的取值固定为6144;FIFO单元告知DMD显
示单元,其内部缓存的数量容量rd_Count,在内部空间不空,即empty=0的情况下,在读时
钟周期clk_R和读使能rd_En控制下,利用dout[127:0]数据接口将预显示图像输入到显示
单元中;
如图5所示,步骤5、在写触发命令的触发下,FPGA处理模块根据DDC4100模块接口
协议将预显示图像逐行写入DDC4100模块,直到完成预显示图像的写入操作后,向DDC4100
模块发送复位信号,并等待DDC4100模块中的DMD设备完成预显示图像的显示,从而实现显
示处理。显示单元有7个阶段组成,分别为:RST,IDLE,S1,S2,S3,S4和S5,其中RST表示复位
阶段,IDLE表示初始化阶段,S1表示显示理阶段一、S2表示显示处理阶段二、S3表示显示处
理阶段三、S4表示复位处理阶段,S5表示等待阶段,各个阶段均在同一个时钟周期clk_R控
制下工作。DDC4100模块接口协议中包含以下信号可以简化为,行地址row_addr[9:0],表示
的范围为0到767,写入模式model,DMD复位模式rst0,写入数据data;显示模块内部需要两
个计数器:行计数器countB,列计数器countC;各阶段之间按如下步骤进行:
步骤5.1、FPGA处理模进行复位RST操作,包括复位行计数器countB=0、列计数器
countC=0,写入数据data=0,行地址row_addr=0,写入模式model=0和DMD复位模式rst0
=0;若复位完成,则执行步骤5.2,进入IDLE阶段;否则重复执行步骤5.1,继续停留在RST阶
段;
其中写入模式和DMD复位模式的具体操作操作如下:
model=0,rst0=0,写入一行,复位一次;
model=1,rst0=1,写完全部的768行,整体复位;
其他状态不考虑。
步骤5.2、FPGA处理模进行初始化IDLE操作,包括初始化行计数器countB=0,列计
数器countC=0,写入模式model=1,DMD复位模式rst0=1,写入数据data=0,行地址row_
addr=0;判断写使能命令是否有效,若有效,则执行步骤5.3,进入S1阶段;否则重复执行步
骤5.2,继续停留在IDLE阶段;
步骤5.3、判断FIFO单元的数据容量rd_Count大于m/u是否成立,即rdCount≥8是
否成立,若成立,则执行步骤5.4,进入S2阶段;否则,仍返回步骤5.3执行,继续停留在S1阶
段;该阶段主要是用于确保FIFO单元中是否有1024bits的图像数据;
步骤5.4、FPGA处理模块根据行地址row_addr指示的位置,将一行数据写入
DDC4100模块,并将countB+1赋值给countB,将row_addr+1赋值给row_addr,执行步骤5.5,
进入状态S3;在该阶段,写入一行数据过程中,需要设置一个列计数器countC,每写入一次
数据,将countC+1赋值给countC,当countC大于等于8时,表示写完一行数据,由于在S1阶段
已经做出判断是否有1024bits的数据,即一行数据,所以该阶段只需重复执行8次,即表示
写完一行数据;
步骤5.5、FPGA处理模块判断countB≥n是否成立,n=768,若成立,则执行步骤
5.6,进入S4阶段;否则,执行步骤5.3,继续停留在S3阶段;该阶段主要用于判断数据是否已
经全部写完,即countB是否大于768,同时对S2阶段中的countC赋值为0,用于下一阶段处
理;
步骤5.6、FPGA处理模块向DDC4100模块发送复位信号,并等待T个时钟周期后,执
行步骤5.7,进入S5阶段,一般情况下T的取值为16;
步骤5.7、FPGA处理模块检测DDC4100模块是否完成复位;若完成,则DDC4100模块
对预显示图像在自身DMD设备中进行显示,同时,FPGA处理返回步骤5.2,进入IDLE阶段;否
则,返回步骤5.7,继续停留在S5阶段;该阶段需要等该a×T个时钟周期,a为正整数,每隔T
个时钟周期,检测一次复位完成信号,若没有完成继续等待T个时钟周期。