本發(fā)明涉及一種DMD動(dòng)態(tài)選區(qū)顯示方法,特別涉及一種基于FPGA平臺(tái)的DMD底層軟件動(dòng)態(tài)選區(qū)顯示方法。
背景技術(shù):
DMD(Digital Micromirror Device,數(shù)字微鏡器件)通過(guò)控制鏡片的±12°偏轉(zhuǎn)達(dá)到顯示圖像的目的。近年來(lái)DMD在單光子時(shí)間分辨成像光譜儀、壓縮感知等領(lǐng)域得到廣泛的應(yīng)用。在單光子時(shí)間分辨成像光譜儀等設(shè)備中,其數(shù)據(jù)存儲(chǔ)單元中存儲(chǔ)了大量的二值圖像信息(一般為100Gbps左右),在設(shè)備運(yùn)行過(guò)程中,若無(wú)特殊要求,無(wú)需改變存儲(chǔ)單元中的圖像。特別是相關(guān)設(shè)備運(yùn)用于航天領(lǐng)域時(shí),要求數(shù)據(jù)存儲(chǔ)單元中的圖像一次下載,永久保存。在DMD顯示圖像時(shí),需要用到局部選區(qū)顯示功能。
現(xiàn)有的選區(qū)方案是通過(guò)上位機(jī)軟件將已經(jīng)選區(qū)處理后的圖像存儲(chǔ)到二值圖像緩存模塊中,然后再在DMD上顯示。上位機(jī)選區(qū)的缺陷是不能實(shí)時(shí)改變選區(qū)大小,DMD選區(qū)改變時(shí),重新下載二值圖像數(shù)據(jù),每次下載大量的圖像數(shù)據(jù)需要消耗大量的時(shí)間,并且下載的圖像選區(qū)范圍固定,只適用于某一階段性的需要,導(dǎo)致了系統(tǒng)無(wú)法長(zhǎng)期、穩(wěn)定、高速運(yùn)行,同時(shí)還要為設(shè)備配備專用的數(shù)據(jù)傳輸模塊,帶來(lái)了設(shè)計(jì)上的麻煩。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明是為了解決上述現(xiàn)有技術(shù)存在的不足之處,提出一種用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊及其方法,以期能根據(jù)用戶需要實(shí)時(shí)改變DMD選區(qū)顯示范圍,實(shí)現(xiàn)DMD動(dòng)態(tài)選區(qū)顯示功能,從而提高DMD的顯示效率。
本發(fā)明為解決技術(shù)問(wèn)題采用如下技術(shù)方案:
本發(fā)明一種用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊,是應(yīng)用于由PC機(jī)、RS232串口、二值圖像存儲(chǔ)模塊和DDC4100模塊所組成的系統(tǒng)中;所述PC機(jī)通過(guò)所述RS232串口與所述FPGA處理模塊通信,所述FPGA處理模塊與所述二值圖像存儲(chǔ)模塊相連,用于讀取所述二值圖像存儲(chǔ)模塊中存儲(chǔ)的圖像;所述FPGA處理模塊與所述DDC4100模塊相連,用于向所述DDC4100模塊輸入圖像;其特點(diǎn)是:所述FPGA處理模塊包括:命令接收單元、選區(qū)控制單元、FIFO單元和DMD顯示單元;
所述命令接收單元在時(shí)鐘周期的控制下,通過(guò)所述RS232串口接收所述PC機(jī)發(fā)送的數(shù)據(jù)幀并進(jìn)行識(shí)別,得到控制命令并發(fā)送給所述選區(qū)控制單元和所述DMD顯示單元;所述控制命令包括:寫(xiě)觸發(fā)命令、選區(qū)有效命令、選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY);
所述選區(qū)控制單元在所述寫(xiě)觸發(fā)命令的控制下,從所述二值圖像存儲(chǔ)模塊中讀取一幅大小為m×n的二值圖像;所述選區(qū)控制單元在所述選區(qū)有效命令的觸發(fā)下,根據(jù)所述選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY)對(duì)所述二值圖像進(jìn)行選區(qū)處理,得到處理后的二值圖像,并輸入所述FIFO單元;
所述FIFO單元對(duì)所述處理后的二值圖像進(jìn)行格式轉(zhuǎn)換處理,得到大小為u×v的預(yù)顯示圖像并向所述DMD顯示單元發(fā)送數(shù)據(jù)容量rd_Count及數(shù)據(jù)dout;從而將所述預(yù)顯示圖像輸出給所述DMD顯示單元;
所述DMD顯示單元在所述寫(xiě)觸發(fā)命令的觸發(fā)下,讀取所述預(yù)顯示圖像,并根據(jù)所述DDC4100模塊接口協(xié)議將圖像逐行寫(xiě)入所述DDC4100模塊,直到完成所述預(yù)顯示圖像的寫(xiě)入操作后,所述DMD顯示單元向所述DDC4100模塊發(fā)送復(fù)位信號(hào),并等待所述DDC4100模塊中的DMD設(shè)備完成所述預(yù)顯示圖像的顯示。
本發(fā)明所述的FPGA處理模塊的特點(diǎn)也在于,所述選區(qū)控制單元是按如下步驟對(duì)所述二值圖像進(jìn)行選區(qū)處理:
步驟1、由所述選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和所述選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY)構(gòu)成選擇區(qū)域;并保留所述選擇區(qū)域內(nèi)二值圖像信息;
步驟2、對(duì)所述選擇區(qū)域外的二值圖像分別與“0”進(jìn)行“與”操作,從而獲得處理后的二值圖像。
本發(fā)明一種用于DMD動(dòng)態(tài)選區(qū)的FPGA處理方法,是應(yīng)用于由PC機(jī)、RS232串口、FPGA處理模塊、二值圖像存儲(chǔ)模塊和DDC4100模塊所組成的系統(tǒng)中,其特點(diǎn)是按如下步驟進(jìn)行:
步驟1、在時(shí)鐘周期的控制下,所述FPGA處理模塊通過(guò)所述RS232串口接收所述PC機(jī)發(fā)送的數(shù)據(jù)幀并進(jìn)行識(shí)別,得到控制命令;所述控制命令包括:寫(xiě)觸發(fā)命令、選區(qū)有效命令、選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY);由所述選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和所述選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY)構(gòu)成選擇區(qū)域;
步驟2、在所述寫(xiě)觸發(fā)命令的控制下,所述FPGA處理模塊從所述二值圖像存儲(chǔ)模塊中讀取一幅大小為m×n的二值圖像;
步驟3、在所述選區(qū)有效命令的觸發(fā)下,所述FPGA處理模塊保留所述選擇區(qū)域內(nèi)二值圖像信息,并對(duì)所述選擇區(qū)域外的二值圖像分別與“0”進(jìn)行“與”操作,實(shí)現(xiàn)選區(qū)處理,從而獲得處理后的二值圖像;
步驟4、所述FPGA處理模塊對(duì)所述處理后的二值圖像進(jìn)行格式轉(zhuǎn)換處理,得到大小為u×v的預(yù)顯示圖像,并確定數(shù)據(jù)容量rd_Count;
步驟5、在所述寫(xiě)觸發(fā)命令的觸發(fā)下,所述FPGA處理模塊根據(jù)所述DDC4100模塊接口協(xié)議將所述預(yù)顯示圖像逐行寫(xiě)入所述DDC4100模塊,直到完成所述預(yù)顯示圖像的寫(xiě)入操作后,向所述DDC4100模塊發(fā)送復(fù)位信號(hào),并等待所述DDC4100模塊中的DMD設(shè)備完成所述預(yù)顯示圖像的顯示,從而實(shí)現(xiàn)顯示處理。
本發(fā)明所述的用于DMD動(dòng)態(tài)選區(qū)的FPGA處理方法的特點(diǎn)也在于,所述步驟3中的選區(qū)處理是按如下步驟進(jìn)行:
步驟3.1、所述FPGA處理模進(jìn)行復(fù)位RST操作;若復(fù)位完成,則執(zhí)行步驟3.2;否則重復(fù)執(zhí)行步驟3.1;
步驟3.2、所述FPGA處理模塊進(jìn)行初始化IDLE操作,判斷所述寫(xiě)觸發(fā)命令和選區(qū)有效命令是否有效,若兩者都有效,則執(zhí)行步驟3.3,并初始化行計(jì)數(shù)器countA=1;若所述寫(xiě)觸發(fā)命令有效,所述選區(qū)有效命令無(wú)效,則執(zhí)行步驟3.6,并初始化行計(jì)數(shù)器countA=1,否則繼續(xù)執(zhí)行步驟3.2;
步驟3.3、判斷countA<StartX是否成立,若成立,則將所述二值圖像中第countA行的數(shù)據(jù)與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,將處理后的第countA行數(shù)據(jù)輸入所述FIFO單元;并返回步驟3.3;否則,執(zhí)行步驟3.4;
步驟3.4、判斷countA≤EndX是否成立,若成立,則保留所述二值圖像中第countA行的第StartY列至第EndY列的信息;將第countA行的第0列至第(StartY-1)列、以及第countA行的第(EndY+1)列至第m列的二值圖像分別與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,處理后的第countA行數(shù)據(jù)輸入所述FIFO單元;并返回步驟3.4;否則執(zhí)行步驟3.5;
步驟3.5、判斷countA<n是否成立,若成立,則將所述二值圖像中第countA行的數(shù)據(jù)與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,處理后的第countA行數(shù)據(jù)輸入所述FIFO單元;并返回步驟3.5;否則,表示實(shí)現(xiàn)選區(qū)處理,返回步驟3.2,等待下一次選區(qū)處理;
步驟3.6、判斷countA<n是否成立,若成立,則保留所述二值圖像中第countA行的信息,將第countA行數(shù)據(jù)輸入所述FIFO單元,并將countA+1賦值給countA后,返回步驟3.6,否則,表示實(shí)現(xiàn)選區(qū)處理,返回步驟3.2,等待下一次選區(qū)處理。
所述步驟5中的顯示處理是按如下步驟進(jìn)行:
步驟5.1、所述FPGA處理模進(jìn)行復(fù)位RST操作;若復(fù)位完成,則執(zhí)行步驟5.2;否則重復(fù)執(zhí)行步驟5.1;
步驟5.2、所述FPGA處理模進(jìn)行初始化IDLE操作;并初始化行計(jì)數(shù)器conutB=0;判斷所述寫(xiě)觸發(fā)命令是否有效,若有效,則執(zhí)行步驟5.3;否則重復(fù)執(zhí)行步驟5.2;
步驟5.3、判斷數(shù)據(jù)容量rd_Count大于m/u是否成立,若成立,則執(zhí)行步驟5.4;否則,仍返回步驟5.3執(zhí)行;
步驟5.4、所述FPGA處理模塊向所述DDC4100模塊寫(xiě)入一行數(shù)據(jù),并將countB+1賦值給countB,執(zhí)行步驟5.5;
步驟5.5、所述FPGA處理模塊判斷countB≥n是否成立,若成立,則執(zhí)行步驟5.6;否則,執(zhí)行步驟5.3;
步驟5.6、所述FPGA處理模塊向所述DDC4100模塊發(fā)送復(fù)位信號(hào),并等待T個(gè)時(shí)鐘周期后,執(zhí)行步驟5.7;
步驟5.7、所述FPGA處理模塊檢測(cè)所述DDC4100模塊是否完成復(fù)位;若完成,則所述DDC4100模塊對(duì)所述預(yù)顯示圖像在自身DMD設(shè)備中進(jìn)行顯示,同時(shí),所述FPGA處理返回步驟5.2;否則,返回步驟5.7。
與已有現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
1、本發(fā)明采用用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊及其方法,利用PC機(jī)通過(guò)RS232串口向FPGA模塊發(fā)送控制命令,F(xiàn)PGA模塊由命令接收單元、選區(qū)控制單元、FIFO單元和DMD顯示單元組成,負(fù)責(zé)從二值圖像存儲(chǔ)單元讀取圖像數(shù)據(jù),根據(jù)命令接收單元的命令,對(duì)圖像進(jìn)行選區(qū)處理,經(jīng)FIFO單元轉(zhuǎn)換格式,利用DMD顯示單元處理,輸入DDC4100模塊,最終在DMD微鏡上顯示選區(qū)處理后的圖像,從而解決了現(xiàn)有技術(shù)中DMD模塊無(wú)法實(shí)時(shí)動(dòng)態(tài)選區(qū)的問(wèn)題,提高了DMD設(shè)備應(yīng)用于單光子時(shí)間分辨成像光譜儀以及壓縮感知等領(lǐng)域時(shí)的穩(wěn)定、實(shí)時(shí)、高效性;降低了設(shè)備因多次下載數(shù)據(jù)帶來(lái)的功耗。
2、本發(fā)明采用用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊及其方法,利用FPGA處理設(shè)備高速、并行的特點(diǎn),在時(shí)鐘周期的控制下,根據(jù)PC機(jī)傳送的控制命令,可以在微秒級(jí)的范圍內(nèi)完成選區(qū)功能,解決了現(xiàn)在有方案中DMD選區(qū)時(shí)下載大量數(shù)據(jù)帶來(lái)時(shí)間損耗的問(wèn)題,相比于上位機(jī)選區(qū),極大的降低了選區(qū)時(shí)間,提高了DMD的顯示效率。
3、本發(fā)明采用用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊及其方法,利用上位機(jī)發(fā)送幾個(gè)簡(jiǎn)單的數(shù)據(jù)幀,通過(guò)命令接收模塊接收、處理,可以按照用戶需求,實(shí)時(shí)的改變DMD顯示區(qū)域的大小,解決了現(xiàn)有方案中DMD設(shè)備無(wú)法實(shí)時(shí)改變選區(qū)大小的缺點(diǎn),提高了DMD設(shè)備的顯示模式及應(yīng)用價(jià)值。
4、本發(fā)明采用用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊及其方法,利用FPGA處理單元實(shí)現(xiàn)DMD選區(qū)顯示功能,圖像只需要一次下載,解決了現(xiàn)有方案中多次下載圖像,需要配備專用的數(shù)據(jù)傳輸模塊問(wèn)題,降低了設(shè)計(jì)上的麻煩。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)中系統(tǒng)結(jié)構(gòu)圖;
圖2為本發(fā)明的FPGA處理流程圖;
圖3為本發(fā)明選區(qū)狀態(tài)機(jī)的示意圖;
圖4為本發(fā)明FIFO處理模塊的示意圖;
圖5為本發(fā)明DMD顯示狀態(tài)機(jī)的示意圖。
具體實(shí)施方式
如圖1所示,一種用于DMD動(dòng)態(tài)選區(qū)的FPGA處理模塊,是應(yīng)用于由PC機(jī)、RS232串口、二值圖像存儲(chǔ)模塊和DDC4100模塊所組成的系統(tǒng)中;PC機(jī)通過(guò)RS232串口與FPGA處理模塊通信,F(xiàn)PGA處理模塊與二值圖像存儲(chǔ)模塊相連,用于讀取二值圖像存儲(chǔ)模塊中存儲(chǔ)的圖像;FPGA處理模塊與DDC4100模塊相連,用于向DDC4100模塊輸入圖像;如圖2所示,F(xiàn)PGA處理模塊包括:命令接收單元、選區(qū)控制單元、FIFO單元和DMD顯示單元;
如圖2所示,命令接收單元在時(shí)鐘周期的控制下,通過(guò)RS232串口接收PC機(jī)發(fā)送的數(shù)據(jù)幀并進(jìn)行識(shí)別,得到控制命令并發(fā)送給選區(qū)控制單元和DMD顯示單元;控制命令包括:寫(xiě)觸發(fā)命令、選區(qū)有效命令、選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY),其中StartX的值小于等于EndX,StartY的值小于等于EndY;RS232串口一次最多只能傳輸8bits的數(shù)據(jù),而控制命令的有效數(shù)據(jù)位最少為10bits,命令接收單元需要將兩個(gè)長(zhǎng)度為8bits的串口數(shù)據(jù),即cmdl[7:0],cmdh[7:0]組合成16bits數(shù)據(jù)命令,即cmd[15:0],并根據(jù)利用數(shù)據(jù)的的最高三位,即cmd[15:13],判斷命令類型;命令類型如下:
①cmd[15:13]=001,表示寫(xiě)觸發(fā)命令,該命令最低位,即cmd[0]=1,表示寫(xiě)觸發(fā)命令有效,cmd[0]=0,表示寫(xiě)觸發(fā)命令無(wú)效;該命令的其余12位,即cmd[12:1]無(wú)效;
②cmd[15:13]=010,表示選區(qū)有效命令,該命令最低位,即cmd[0]=1,表示選區(qū)有效,cmd[0]=0,表示選區(qū)無(wú)效;該命令的其余12位,即cmd[12:1]無(wú)效;
③cmd[15:13]=011,表示起點(diǎn)橫坐標(biāo)標(biāo)識(shí),即StartX,該命令的低10位,即cmd[9:0]表示選區(qū)起點(diǎn)橫坐標(biāo)的具體指,表示的坐標(biāo)范圍為[0,767],其余位,即cmd[12:10]無(wú)效;
④cmd[15:13]=100,表示起點(diǎn)縱坐標(biāo)標(biāo)識(shí),即StartY,該命令的低10位,即cmd[9:0]表示選區(qū)起點(diǎn)縱坐標(biāo)的具體指,表示的坐標(biāo)范圍為[0,1023],其余位,即cmd[12:10]無(wú)效;
⑤cmd[15:13]=101,表示終點(diǎn)橫坐標(biāo)標(biāo)識(shí),即EndX,該命令的低10位,即cmd[9:0]表示選區(qū)終點(diǎn)橫坐標(biāo)的具體指,表示的坐標(biāo)范圍為[0,767],其余位,即cmd[12:10]無(wú)效;
⑥cmd[15:13]=100,表示終點(diǎn)縱坐標(biāo)標(biāo)識(shí),即EndY,該命令的低10位,即cmd[9:0]表示選區(qū)終點(diǎn)縱坐標(biāo)的具體指,表示的坐標(biāo)范圍為[0,1023],其余位,即cmd[12:10]無(wú)效;
如圖2所示,選區(qū)控制單元在寫(xiě)觸發(fā)命令的控制下,從二值圖像存儲(chǔ)模塊中讀取一幅大小為m×n的二值圖像,其中m的取值固定為1024,n的取值固定為768;選區(qū)控制單元在選區(qū)有效命令的觸發(fā)下,根據(jù)選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY)對(duì)二值圖像進(jìn)行選區(qū)處理,得到處理后的二值圖像,并輸入FIFO單元;
如圖3和圖4所示,F(xiàn)IFO單元對(duì)處理后的二值圖像進(jìn)行格式轉(zhuǎn)換處理,得到大小為u×v的預(yù)顯示圖像并向DMD顯示單元發(fā)送數(shù)據(jù)容量rd_Count及數(shù)據(jù);從而將預(yù)顯示圖像輸出給DMD顯示單元;具體的說(shuō),在選區(qū)有效命令的觸發(fā)下,F(xiàn)PGA處理模塊保留選擇區(qū)域內(nèi)二值圖像信息,并對(duì)選擇區(qū)域外的二值圖像分別與“0”進(jìn)行“與”操作,實(shí)現(xiàn)選區(qū)處理,從而獲得處理后的二值圖像;
如圖4和圖5所示,DMD顯示單元在寫(xiě)觸發(fā)命令的觸發(fā)下,讀取預(yù)顯示圖像,并根據(jù)DDC4100模塊接口協(xié)議將圖像逐行寫(xiě)入DDC4100模塊,直到完成預(yù)顯示圖像的寫(xiě)入操作后,DMD顯示單元向DDC4100模塊發(fā)送復(fù)位信號(hào),并等待DDC4100模塊中的DMD設(shè)備完成預(yù)顯示圖像的顯示。
本實(shí)施例中,一種用于DMD動(dòng)態(tài)選區(qū)的FPGA處理方法,是應(yīng)用于由PC機(jī)、RS232串口、FPGA處理模塊、二值圖像存儲(chǔ)模塊和DDC4100模塊所組成的系統(tǒng)中,并按如下步驟進(jìn)行:
步驟1、在時(shí)鐘周期的控制下,F(xiàn)PGA處理模塊通過(guò)RS232串口接收PC機(jī)發(fā)送的數(shù)據(jù)幀并進(jìn)行識(shí)別,得到控制命令;控制命令包括:寫(xiě)觸發(fā)命令、選區(qū)有效命令、選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY);由選區(qū)起點(diǎn)坐標(biāo)(StartX,StartY)和選區(qū)終點(diǎn)坐標(biāo)(EndX,EndY)構(gòu)成選擇區(qū)域;
步驟2、在寫(xiě)觸發(fā)命令的控制下,F(xiàn)PGA處理模塊從二值圖像存儲(chǔ)模塊中讀取一幅大小為m×n的二值圖像;
步驟3、在選區(qū)有效命令的觸發(fā)下,F(xiàn)PGA處理模塊保留選擇區(qū)域內(nèi)二值圖像信息,并對(duì)選擇區(qū)域外的二值圖像分別與“0”進(jìn)行“與”操作,實(shí)現(xiàn)選區(qū)處理,從而獲得處理后的二值圖像;選區(qū)處理單元有6個(gè)階段組成,分別為:RST,IDLE,S1,S2,S3,S4,其中RST表示復(fù)位階段,IDLE表示初始化階段,S1表示選區(qū)處理階段一、S2表示選區(qū)處理階段二、S3表示選區(qū)處理階段三、S4表示不進(jìn)行選區(qū)處理階段,各個(gè)階段均在同一個(gè)時(shí)鐘周期clk_W控制下工作。各階段之間按如下步驟進(jìn)行:
步驟3.1、FPGA處理模進(jìn)行復(fù)位RST操作,包括:選區(qū)起點(diǎn)坐標(biāo)、選區(qū)終點(diǎn)坐標(biāo)恢復(fù)默認(rèn)值,即(StartX,StartY)=(0,0),(EndX,EndY)=(767,1023),行計(jì)數(shù)器countA清零,寫(xiě)觸發(fā)命令、選區(qū)有效命令清零;若復(fù)位完成,則執(zhí)行步驟3.2,進(jìn)入IDLE階段;否則重復(fù)執(zhí)行步驟3.1,停留在RST階段;
步驟3.2、FPGA處理模塊進(jìn)行初始化IDLE操作,包括接受寫(xiě)觸發(fā)命令、選區(qū)有效命令、選區(qū)起點(diǎn)坐標(biāo)和選區(qū)終點(diǎn)坐標(biāo),判斷寫(xiě)觸發(fā)命令和選區(qū)有效命令是否有效,若兩者都有效,則執(zhí)行步驟3.3,進(jìn)入S1階段,并初始化行計(jì)數(shù)器countA=1;若寫(xiě)觸發(fā)命令有效,選區(qū)有效命令無(wú)需,執(zhí)行步驟3.6,進(jìn)入S4階段,并初始化行計(jì)數(shù)器countA=1;否則繼續(xù)執(zhí)行步驟3.2,停留在IDLE階段;
具體實(shí)現(xiàn)方式如下:
寫(xiě)使能=1,選區(qū)命令=1,進(jìn)入S1階段,清除FIFO單元的復(fù)位信號(hào),即將FIFO單元中的rst賦值為0;并向FIFO單元輸出寫(xiě)使能信號(hào),即將FIFO單元中的wr_En賦值為1;
寫(xiě)使能=1,選區(qū)命令=0,進(jìn)入S4階段,清除FIFO單元的復(fù)位信號(hào),即將FIFO單元中的rst賦值為0;并向FIFO單元輸出寫(xiě)使能信號(hào),即將FIFO單元中的wr_En賦值為1;
寫(xiě)使能=0,選區(qū)命令=0或者1,停留在IDLE階段,并對(duì)FIFO單元執(zhí)行復(fù)位操作,即將FIFO單元中的rst賦值為1,wr_En=0,rd_En=0;
步驟3.3、判斷countA<StartX是否成立,若成立,則將二值圖像中第countA行的數(shù)據(jù)與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,將處理后的第countA行數(shù)據(jù)通過(guò)din[1023:0]接口輸入FIFO單元;并返回步驟3.3,繼續(xù)停留在S1階段;否則,執(zhí)行步驟3.4,進(jìn)入S2階段;S1階段主要用于處理位于選區(qū)起點(diǎn)橫坐標(biāo)前的StartX行數(shù)據(jù),將位于[0,StartX)行的所有數(shù)據(jù)清除;
步驟3.4、判斷countA≤EndX是否成立,若成立,則保留二值圖像中第countA行的第StartY列至第EndY列的信息;將第countA行的第0列至第(StartY-1)列、以及第countA行的第(EndY+1)列至第m列的二值圖像分別與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,處理后的第countA行數(shù)據(jù)通過(guò)din[1023:0]接口輸入FIFO單元;并返回步驟3.4,繼續(xù)停留在S2階段;否則執(zhí)行步驟3.5,進(jìn)入S3階段;S2階段主要用于處理橫坐標(biāo)位于[StartX,EndX]行內(nèi)的數(shù)據(jù),對(duì)于橫坐標(biāo)位于此區(qū)間的圖像數(shù)據(jù),保留縱坐標(biāo)位于[StartY,EndY]列的數(shù)據(jù),清除縱坐標(biāo)位于[0,StartY)或(EndY,1023]列的數(shù)據(jù);
步驟3.5、判斷countA<n是否成立,若成立,則將二值圖像中第countA行的數(shù)據(jù)與“0”進(jìn)行“與”操作后,將countA+1賦值給countA,處理后的第countA行數(shù)據(jù)通過(guò)din[1023:0]接口輸入FIFO單元;并返回步驟3.5,繼續(xù)停留在S3階段;否則,表示實(shí)現(xiàn)選區(qū)處理,返回步驟3.2,進(jìn)入IDLE階段,等待下一次選區(qū)處理;S3階段主要用于處理位于選區(qū)終點(diǎn)橫坐標(biāo)后的768-EndX行數(shù)據(jù),將位于(EndX,767]行的所有數(shù)據(jù)清除;
步驟3.6、判斷countA<n是否成立,若成立,則保留二值圖像中第countA行的信息,將第countA行數(shù)據(jù)通過(guò)din[1023:0]接口輸入FIFO單元,并將countA+1賦值給countA后,返回步驟3.6,繼續(xù)停留在S4階段;否則,表示實(shí)現(xiàn)選區(qū)處理,返回步驟3.2,進(jìn)入IDLE階段,等待下一次選區(qū)處理。
步驟4、FPGA處理模塊對(duì)處理后的二值圖像進(jìn)行格式轉(zhuǎn)換處理,得到大小為u×v的預(yù)顯示圖像,并確定數(shù)據(jù)容量rd_Count;
如圖4所示,F(xiàn)IFO單元由6組輸入信號(hào):rst,clk_R,clk_W,wr_En,rd_En和din[1023:0]以及4組輸出信號(hào):full,empty,rd_Count和dout[127:0]組成,其中:
rst表示復(fù)位信號(hào),rst=1表示復(fù)位,rst=0表示復(fù)位完成;
clk_R表示讀時(shí)鐘周期,與顯示單元時(shí)鐘同步;
clk_W表示寫(xiě)時(shí)鐘周期,與選區(qū)單元時(shí)鐘同步;
wr_En表示寫(xiě)使能,wr_En=1表示寫(xiě)使能,wr_En=0表示無(wú)寫(xiě)使能;
rd_En表示讀使能,rd_En=1表示寫(xiě)使能,rd_En=0表示無(wú)寫(xiě)使能;
din[1023:0]表示寫(xiě)入FIFO單元數(shù)據(jù)的格式,寬度為1024bits;
full表示FIFO內(nèi)部空間是否已滿,full=1表示內(nèi)部空間已滿,full=0表示內(nèi)部空間不滿;
empty表示FIFO內(nèi)部空間為空,empty=1表示內(nèi)部空間為空,empty=0表示內(nèi)部空間不空;
rd_Count表示FIFO單元中緩存的數(shù)據(jù)個(gè)數(shù);
dout[127:0]表示FIFO單元輸出數(shù)據(jù)格式,寬度為128bits;
FIFO單元內(nèi)部RAM空間不滿,即full=0的情況下,在寫(xiě)使能wr_En和寫(xiě)時(shí)鐘周期clk_W的作用下,接收選區(qū)單元通過(guò)din[1023:0]數(shù)據(jù)接口傳輸過(guò)來(lái)的寬度為1024bits的圖像數(shù)據(jù),將圖像數(shù)據(jù)寫(xiě)入到FIFO單元的內(nèi)部RAM單元中,并將圖像數(shù)據(jù)轉(zhuǎn)換為寬度為128bits的預(yù)顯示圖像數(shù)據(jù),用于dout[127:0]數(shù)據(jù)接口輸出到顯示單元中;轉(zhuǎn)換后得到大小為u×v的預(yù)顯示圖像,其中u的取值固定為128,v的取值固定為6144;FIFO單元告知DMD顯示單元,其內(nèi)部緩存的數(shù)量容量rd_Count,在內(nèi)部空間不空,即empty=0的情況下,在讀時(shí)鐘周期clk_R和讀使能rd_En控制下,利用dout[127:0]數(shù)據(jù)接口將預(yù)顯示圖像輸入到顯示單元中;
如圖5所示,步驟5、在寫(xiě)觸發(fā)命令的觸發(fā)下,F(xiàn)PGA處理模塊根據(jù)DDC4100模塊接口協(xié)議將預(yù)顯示圖像逐行寫(xiě)入DDC4100模塊,直到完成預(yù)顯示圖像的寫(xiě)入操作后,向DDC4100模塊發(fā)送復(fù)位信號(hào),并等待DDC4100模塊中的DMD設(shè)備完成預(yù)顯示圖像的顯示,從而實(shí)現(xiàn)顯示處理。顯示單元有7個(gè)階段組成,分別為:RST,IDLE,S1,S2,S3,S4和S5,其中RST表示復(fù)位階段,IDLE表示初始化階段,S1表示顯示理階段一、S2表示顯示處理階段二、S3表示顯示處理階段三、S4表示復(fù)位處理階段,S5表示等待階段,各個(gè)階段均在同一個(gè)時(shí)鐘周期clk_R控制下工作。DDC4100模塊接口協(xié)議中包含以下信號(hào)可以簡(jiǎn)化為,行地址row_addr[9:0],表示的范圍為0到767,寫(xiě)入模式model,DMD復(fù)位模式rst0,寫(xiě)入數(shù)據(jù)data;顯示模塊內(nèi)部需要兩個(gè)計(jì)數(shù)器:行計(jì)數(shù)器countB,列計(jì)數(shù)器countC;各階段之間按如下步驟進(jìn)行:
步驟5.1、FPGA處理模進(jìn)行復(fù)位RST操作,包括復(fù)位行計(jì)數(shù)器countB=0、列計(jì)數(shù)器countC=0,寫(xiě)入數(shù)據(jù)data=0,行地址row_addr=0,寫(xiě)入模式model=0和DMD復(fù)位模式rst0=0;若復(fù)位完成,則執(zhí)行步驟5.2,進(jìn)入IDLE階段;否則重復(fù)執(zhí)行步驟5.1,繼續(xù)停留在RST階段;
其中寫(xiě)入模式和DMD復(fù)位模式的具體操作操作如下:
model=0,rst0=0,寫(xiě)入一行,復(fù)位一次;
model=1,rst0=1,寫(xiě)完全部的768行,整體復(fù)位;
其他狀態(tài)不考慮。
步驟5.2、FPGA處理模進(jìn)行初始化IDLE操作,包括初始化行計(jì)數(shù)器countB=0,列計(jì)數(shù)器countC=0,寫(xiě)入模式model=1,DMD復(fù)位模式rst0=1,寫(xiě)入數(shù)據(jù)data=0,行地址row_addr=0;判斷寫(xiě)使能命令是否有效,若有效,則執(zhí)行步驟5.3,進(jìn)入S1階段;否則重復(fù)執(zhí)行步驟5.2,繼續(xù)停留在IDLE階段;
步驟5.3、判斷FIFO單元的數(shù)據(jù)容量rd_Count大于m/u是否成立,即rdCount≥8是否成立,若成立,則執(zhí)行步驟5.4,進(jìn)入S2階段;否則,仍返回步驟5.3執(zhí)行,繼續(xù)停留在S1階段;該階段主要是用于確保FIFO單元中是否有1024bits的圖像數(shù)據(jù);
步驟5.4、FPGA處理模塊根據(jù)行地址row_addr指示的位置,將一行數(shù)據(jù)寫(xiě)入DDC4100模塊,并將countB+1賦值給countB,將row_addr+1賦值給row_addr,執(zhí)行步驟5.5,進(jìn)入狀態(tài)S3;在該階段,寫(xiě)入一行數(shù)據(jù)過(guò)程中,需要設(shè)置一個(gè)列計(jì)數(shù)器countC,每寫(xiě)入一次數(shù)據(jù),將countC+1賦值給countC,當(dāng)countC大于等于8時(shí),表示寫(xiě)完一行數(shù)據(jù),由于在S1階段已經(jīng)做出判斷是否有1024bits的數(shù)據(jù),即一行數(shù)據(jù),所以該階段只需重復(fù)執(zhí)行8次,即表示寫(xiě)完一行數(shù)據(jù);
步驟5.5、FPGA處理模塊判斷countB≥n是否成立,n=768,若成立,則執(zhí)行步驟5.6,進(jìn)入S4階段;否則,執(zhí)行步驟5.3,繼續(xù)停留在S3階段;該階段主要用于判斷數(shù)據(jù)是否已經(jīng)全部寫(xiě)完,即countB是否大于768,同時(shí)對(duì)S2階段中的countC賦值為0,用于下一階段處理;
步驟5.6、FPGA處理模塊向DDC4100模塊發(fā)送復(fù)位信號(hào),并等待T個(gè)時(shí)鐘周期后,執(zhí)行步驟5.7,進(jìn)入S5階段,一般情況下T的取值為16;
步驟5.7、FPGA處理模塊檢測(cè)DDC4100模塊是否完成復(fù)位;若完成,則DDC4100模塊對(duì)預(yù)顯示圖像在自身DMD設(shè)備中進(jìn)行顯示,同時(shí),F(xiàn)PGA處理返回步驟5.2,進(jìn)入IDLE階段;否則,返回步驟5.7,繼續(xù)停留在S5階段;該階段需要等該a×T個(gè)時(shí)鐘周期,a為正整數(shù),每隔T個(gè)時(shí)鐘周期,檢測(cè)一次復(fù)位完成信號(hào),若沒(méi)有完成繼續(xù)等待T個(gè)時(shí)鐘周期。