韓旭東,吳全興
(中國電子科技集團公司第四十七研究所,沈陽 110000)
隨著時代的發展,計算機對顯卡的要求越來越高,一款高端GPU是衡量顯卡性能的最重要指標。在早期沒有GPU的年代,所有圖形的處理都由CPU完成,但隨著計算機的發展,CPU越來越顯得力不從心,GPU在這種情況下應運而生。在單片機領域也有著與之相似的情況,嵌入式系統的圖形顯示雖然沒有計算機那樣復雜,但顯示屏的分辨率和色彩同樣越來越豐富。為了在不增加CPU負擔的情況下滿足圖形顯示需求,在此設計一款基于DMA(Direct Memory Access)架構的圖像加速器。在功能上,該設計相當于一款類似GPU的外設,可以獨立處理二維復雜圖形,能夠實現包括單色快速填充、圖像復制、顏色格式轉化后復制及前后兩張圖片混合等功能。
所設計圖像加速器的系統構成如圖1所示。
其中,前景層/背景層緩存是一個32bit×64的FIFO,用于高速讀取源數據時的緩存。前/背景層格式轉換控制器負責處理前/背景層緩存輸出的顏色和透明度。透明度可以采用源數據的,可以采用前/背景層內置的,也可以采用源數據的透明度與前/背景層內置的透明度的乘積再除以255;顏色可以是源數據自帶的,可以是前/背景層格式轉換控制器內部指定的,也可以是查找表中檢索出的顏色。

圖1 基于DMA的圖像加速器系統構成
將透明度和顏色依現有方法處理為ARGB8888格式的數據,再輸出給后續模塊處理。
前/背景層查找表是一個32bit×256的RAM,用于預存指定數量的顏色值。當使用間接顏色模式(L4、L8、AL44、AL88)時,依據源數據的索引值(L部分的值),檢索出查找表中對應的顏色(ARGB888或RGB88顏色格式)并輸出給前/背景層格式轉換控制器,再由前/背景層格式轉換控制器將其轉換成統一的ARGB8888格式數據。
混合控制器用于將前景層格式轉換控制器和背景層格式轉換控制器輸出的ARGB8888格式的數據,按照各自的透明度,加權運算得出混合后的新的ARGB8888格式的數據,并輸出給輸出格式轉換控制器。
輸出格式轉換控制器用于將ARGB8888格式的數據,依據現有的處理方法,轉化成實際用于顯示的直接顏色模式(ARGB8888、RGB888、RGB565、ARGB1555和ARGB4444)。
輸出緩存是一個32bit×64的FIFO,用于緩存要輸出到目標區域的像素數據。
圖像DMA的顏色有三種工作模式,即:直接顏色模式(ARGB8888、RGB888、RGB565、ARGB1555、ARGB4444);間接顏色模式(L4、L8、AL44、AL88);透明度模式(A4、A8)。其中,A代表透明度,R代表紅色,G代表綠色,B代表藍色,L代表亮度并用于檢索查找表CLUT?;诖耍驹O計圖像加速器可工作在四種模式下,即:單色快速填充、圖像復制、顏色格式轉化、轉化前后兩張圖片混合。
在第一種工作模式下,使用內置寄存器指定的單一顏色,依據輸出格式轉換控制器中指定的格式,直接向目標矩形區域寫數據,常用于清屏操作。
第二種工作模式用于實現快速復制功能,圖像DMA將源區域的圖像數據讀取到前景層緩沖區,之后直接寫到目標區域,在這過程中圖像數據的顏色格式沒有改變。
第三種工作模式實現格式轉化功能,通過前景層格式轉換控制器將源圖片轉為統一的ARGB8888的顏色格式。對于RGB565、ARGB4444和ARGB1555顏色模式,需要做線性擴展,過程如下述代碼[1-4]:


對于ARGB8888和RGB888模式則無需上述操作。對于間接顏色模式,通過L部分的索引值,找到查找表中對應的像素值(ARGB8888或RGB888格式);如果是A4、A8兩種顏色模式,則直接結合前景層指定的顏色,通過前景層格式轉換控制器轉化成ARGB8888模式。在此過程中,前景層格式轉換控制器最終輸出的像素的透明度,可以保持上述原始計算/查找出的值,也可以替換成指定的透明度,或替換成原始值與指定值的乘積再除以255。經過輸出轉換控制器將ARGB8888的顏色格式轉換成指定顏色格式保存到輸出緩存,最終輸出到目標區域。
第四種工作模式為格式轉化后再混合。格式轉化部分與第三種工作模式相同,先將前景層源圖片和背景層源圖片分別通過前景層格式轉換控制器和背景層格式轉換控制器轉換成統一的ARGB8888顏色格式,混合器再根據兩個圖片各自的透明度加權運算得出新的圖片,經過輸出轉換控制器將其轉換成指定的顏色格式,保存到輸出緩存中,最后輸出到目標區域。混合時需要根據前景層和背景層的顏色格式(直接顏色模式,間接顏色模式),將前景層和背景層格式轉換控制器輸出的每一個像素一一對應,完成混合。
邏輯設計完成后,將其整合到一款MCU中,搭建仿真驗證平臺進行功能驗證[5]以及FPGA[6-8]驗證。四種工作模式的仿真結果如下:
(1)第一種工作模式
對單色快速填充功能進行模擬仿真,即將寄存器DMA2D_OCOLR指定的某一顏色輸出到目標矩形區域(狀態機的0x10狀態),仿真結果波形如圖2所示。

圖2 第一工作模式仿真波形
(2)第二種工作模式
仿真簡單復制圖片功能,通過前景層緩存讀取源圖像(狀態機的0xc狀態),再將輸出(FG_FIFO_o)寫入目標區域(狀態機的0x15狀態),仿真結果波形如圖3所示。

圖3 第二工作模式仿真波形
(3)第三種工作模式
仿真顏色格式轉化后復制的情形,通過前景層緩存讀取源圖像(狀態機的0xc狀態),再將其輸出(FG_FIFO_o)輸入到前景層格式轉換控制器(狀態機的0x13狀態),格式轉換后的輸出(FG_PFC_o,顏色格式為ARGB8888)輸入到輸出格式轉換控制器(狀態機的0x13狀態),再將輸出格式轉換控制器的輸出(Converter_Out)寫入輸出緩存(狀態機的0x13狀態),最后寫入目標矩形區域(狀態機的0x10狀態,輸出顏色格式為ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444),仿真波形如圖4所示。

圖4 第三工作模式仿真波形
(4)第四種工作模式
仿真顏色格式轉化前后兩張圖片的混合,通過前/背景層緩存讀取源圖像(狀態機的0xc/0xe狀態),再將其輸出(FG_FIFO_o/BG_FIFO_o)輸入到前/背景層格式轉換控制器(狀態機的0x13狀態),將前/背景層格式轉換控制器的輸出(FG_PFC_o/BG_FIFO_o,輸出顏色格式為ARGB8888),同時輸入到混合控制器(狀態機的0x13狀態),再將其輸出(Blender_Out,輸出顏色格式為ARGB8888)輸入到輸出格式轉換控制器(狀態機的0x13狀態),再將輸出格式轉換控制器的輸出(Converter_Out)寫入輸出緩存,最后寫入目標矩形區域(狀態機的0x10狀態,輸 出 顏 色 格 式 為ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444),仿真波形如圖5所示。

圖5 第四工作模式仿真波形
上述功能仿真的結果展示出了四種工作模式的數據流過程,圖像DMA實現了預定的基本功能,加速器設計的正確性得以驗證。
為了進一步驗證設計的正確性,在FPGA上進行一次混合模式的驗證。前景層圖片顏色格式為ARGB888,透明度為50%,背景層圖片顏色格式為RGB888,不透明,輸出顏色格式為RGB565。混合模式驗證結果如圖6所示,可見其取得了良好的圖像處理效果。

圖6 混合模式驗證
所設計的基于DMA架構的圖像加速器主要用于二維圖形的加速處理,支持11種顏色模式和4種工作模式,支持一個或者兩個圖層的輸入,可以對一個或者同時對兩個圖層進行顏色格式轉換,可以單獨處理一個圖層或者混合處理兩個圖層并輸出處理后的像素數據。經過實驗仿真,設計實現了這些預期的功能。將此加速器用在單片機中,通過配置相關軟件,便可在嵌入式系統中同樣實現二維圖像的華麗豐富的渲染效果。