三、模塊設(shè)計(jì)架構(gòu)設(shè)計(jì) 我們要實(shí)現(xiàn)的功能,概括起來(lái)就是FPGA產(chǎn)生VGA時(shí)序,即控制VGA_R4~R0、VGA_G5~G0、VGA_B4~B0、VGA_HSYNC和VGA_VSYNC,讓顯示器顯示紅色。其中,VGA_HSYNC和VGA_VSYNC,FPGA可根據(jù)時(shí)序產(chǎn)生高低電平。而顏色數(shù)據(jù),由于是固定的紅色,FPGA也能自己產(chǎn)生,不需要外部輸入圖像的數(shù)據(jù)。那么我們的FPGA工程,可以定義輸出信號(hào)hys表示行同步,用輸出信號(hào)vys表示場(chǎng)同步,定義一個(gè)16位的信號(hào)lcd_rgb,其中lcd_rgb[15:11]表示VGA_R4~0,、lcd_rgb[10:5]表示VGA_G5~0,、lcd_rgb[4:0]表示VGA_B4~0。 我們還需要時(shí)鐘信號(hào)和復(fù)位信號(hào)來(lái)進(jìn)行工程控制。 綜上所述,我們這個(gè)工程需要五個(gè)信號(hào),時(shí)鐘clk,復(fù)位rst_n,場(chǎng)同步信號(hào)vys、行同步信號(hào)hys和RGB輸出信號(hào)lcd_rgb。 需要注意的是,輸入進(jìn)來(lái)的時(shí)鐘clk是50MHz,而從分辨率參數(shù)表可知道,行單位的基準(zhǔn)時(shí)鐘是25 MHz。為此我們需要根據(jù)50MHz來(lái)產(chǎn)生一個(gè)25 MHz的時(shí)鐘,然后再用于產(chǎn)生VGA時(shí)序。 為了得到這個(gè)25M時(shí)鐘,我們需要一個(gè)PLL。PLL可以認(rèn)為是FPGA內(nèi)的一個(gè)硬核,它的功能是根據(jù)輸入的時(shí)鐘,產(chǎn)生一個(gè)或多個(gè)倍頻和分頻后的輸出時(shí)鐘,同時(shí)可以調(diào)整這些輸出時(shí)鐘的相位、占空比等。 例如,輸入進(jìn)來(lái)是50M時(shí)鐘,如果我需要一個(gè)100M時(shí)鐘,那么從邏輯上、代碼上是不可能產(chǎn)生的,我們就必須用到PLL來(lái)產(chǎn)生了。 整個(gè)工程的結(jié)構(gòu)圖如下。 file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png PLL的生成方式過(guò)程,請(qǐng)看本案例的綜合工程和上板一節(jié)的內(nèi)容。 我們先分析功能。要控制顯示器,讓其產(chǎn)生紅色,也就是讓FPGA控制VGA_R0~4、VGA_G0~5、VGA_B0~4、VGA_VSYNC和VGA_HSYNC信號(hào)。那么VGA驅(qū)動(dòng)模塊,可以定義輸出信號(hào)hys表示行同步,用輸出信號(hào)vys表示場(chǎng)同步,定義一個(gè)16位的信號(hào)lcd_rgb,其中lcd_rgb[15:11]表示VGA_R4~0,、lcd_rgb[10:5]表示VGA_G5~0,、lcd_rgb[4:0]表示VGA_B4~0。 同時(shí)該模塊的工作時(shí)鐘為25M,同時(shí)需要一個(gè)復(fù)位信號(hào)。 綜上所述,我們這個(gè)模塊需要五個(gè)信號(hào),25M時(shí)鐘clk,復(fù)位rst_n,場(chǎng)同步信號(hào)vys、行同步信號(hào)hys和RGB輸出信號(hào)lcd_rgb。 |