版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第4章DE2平臺應用4.1DE2平臺內(nèi)嵌的USBBlaster及FPGA配置4.2音頻編/解碼4.3使用SDRAM及SRAM4.4視頻D/A轉(zhuǎn)換器4.5彩色LCM顯示器4.6用DE2平臺實現(xiàn)視頻解碼4.7USBOTG4.8網(wǎng)絡接口4.9RS232接口4.10DE2控制面板4.11DE2高級應用范例4.12LCM及CIS在DE2平臺上的應用范例4.1DE2平臺內(nèi)嵌的USBBlaster及FPGA配置
CycloneⅡ系列FPGA支持AS、PS和JTAG等三種配置模式,DE2平臺上集成了USBBlaster,可以為EP2C35提供兩種配置模式:JTAG模式和AS(主動串行)模式。DE2平臺上內(nèi)嵌的USBBlaster的原理框圖如圖4.1所示。圖4.1DE2平臺上內(nèi)嵌的USBBlaster原理框圖
JTAG及EPCS16的編程邏輯由CPLDEPM3128AT完成。用SW19來選擇FPGA是編程模式還是運行模式,在編程模式下,USBBlaster可通過AS模式對EPCS16進行編程;在運行模式下,上電后,F(xiàn)PGA從EPCS16中讀取配置數(shù)據(jù),對FPGA進行配置。CycloneⅡ系列FPGA支持在AS模式配置時的配置數(shù)據(jù)壓縮,即將配置數(shù)據(jù)壓縮后保存在配置器件中,上電配置時將壓縮后的配置數(shù)據(jù)讀入FPGA,F(xiàn)PGA對壓縮數(shù)據(jù)流實時解壓后寫入RAM中完成對FPGA的配置。配置數(shù)據(jù)在配置器件中進行壓縮存儲可以使總的配置數(shù)據(jù)量縮減35%~55%。這種壓縮在DE2上是沒有必要的,因為EPCS16的存儲器容量足以配置EP2C35,而且EPCS16中剩余的空間還可以用來保存用戶數(shù)據(jù)。當SW19置于運行位置時,可通過JTAG模式對FPGA進行配置。JTAG模式不支持配置數(shù)據(jù)的壓縮。JTAG模式配置完成后,F(xiàn)PGA自動按新的配置工作,但系統(tǒng)重新上電后,F(xiàn)PGA仍然自動從EPCS16中讀取配置數(shù)據(jù)來配置FPGA。
AS模式和JTAG模式通過不同的信號連線對FPGA進行配置。EPM3128AT通過圖4.1中的JTAG2配置FPGA,通過配置信號連線從EPCS16中讀取AS模式的配置數(shù)據(jù)。EPM3128AT與FPGA之間還有一個類似于JTAG的數(shù)據(jù)鏈路,DE2控制面板使用這個數(shù)據(jù)鏈路實現(xiàn)與FPGA的通信。使用JTAG模式配置FPGA的步驟如下:
(1)打開DE2平臺電源。
(2)用USB電纜通過DE2的USBBlaster接口(J9)將DE2平臺與電腦相連。
(3)將SW19置于RUN。
(4)在QuartusⅡ中或NiosⅡ?IDE中指定SOF文件并用JTAG模式配置FPGA。
AS模式下配置FPGA的步驟如下:
(1)打開DE2平臺電源。
(2)用USB電纜通過DE2的USBBlaster接口(J9)將DE2平臺與電腦相連。
(3)將SW19置于PROG。
(4)在QuartusⅡ中指定POF文件并用AS模式對EPCS16編程。
(5)將SW19置于RUN,系統(tǒng)重新上電,F(xiàn)PGA自動從EPCS16中讀取配置數(shù)據(jù),對FPGA進行配置。圖4.1中,F(xiàn)T232BM芯片實現(xiàn)了USB與并行數(shù)據(jù)接口的轉(zhuǎn)換,F(xiàn)T232BM的配置信息保存在EEPROM芯片93C46中,EEPROM中的數(shù)據(jù)如下:如果93C46中的信息丟失,將DE2平臺通過USBBlaster接口連接到PC上時,PC會自動識別到一個“USB<>SerialCable”的設備。此時,先從FT232BM原廠網(wǎng)站上下載原始驅(qū)動程序,下載地址為/Drivers/D2XX.htm,將此驅(qū)動程序作為“USB<>SerialCable”的驅(qū)動程序安裝到電腦上。然后再從上下載MPROG軟件,重新配置,用MPROG軟件可重新配置USBBlaseter,并能夠?qū)?shù)據(jù)寫入93C46中。USBBlaster具體配置如下:DeviceType:FT232BMUSBVID/PID:OwnVID&PIDVendorID:09FBProductorID:6001USBVersionNumber:USB1.1PullDownIOPinsinUSBSuspend:YESManufacture:AlteraProductDescription:USB-BlasterUSBPowerOption:BusPowered,MaxBusPower150milliAmpsSerialNumberPrefix:91也可以通過JP3對93C46編程,參照本書附錄A中的圖A.20,93C46的CLK、DO、CS、GND引腳分別與JP3的6、7、8、10腳相連,將通用編程器通過自制電纜與JP3相連,在編程軟件中手動輸入EEPROM數(shù)據(jù),然后將數(shù)據(jù)寫入93C46即可,這種方法只有對相關技術(shù)非常熟悉的用戶可用。圖A.20中JP3與EPM3128AT相連的JTAG1是CPLDEPM3128AT的配置JTAG連線。4.2音頻編/解碼4.2.1音頻編/解碼硬件芯片WM8731
DE2的音頻輸入/輸出由Wolfson公司的低功耗立體聲音24位音頻編/解碼芯片WM8731完成。WM8731的音頻采樣速率為8~96?kHz可調(diào);提供2線與3線兩種與主控制器的接口方式;支持四種音頻數(shù)據(jù)格式:I2S模式、左對齊模式、右對齊模式和DSP模式。
WM8731包含了線路輸入、麥克風輸入及耳機輸出。兩路線路輸入RLINEIN和LLINEIN能以1.5?dB的步距在+12~?34.5?dB范圍內(nèi)進行對數(shù)音量調(diào)節(jié),完成A/D轉(zhuǎn)換后,還可以進行高通數(shù)字濾波,有效去除輸入中的直流成分。一路麥克風輸入可以在?6~34?dB范圍內(nèi)進行音量調(diào)節(jié)。這三路模擬輸入都有單獨的靜音功能。D/A轉(zhuǎn)換器輸出、線路輸入旁路及麥克風輸入經(jīng)過側(cè)音電路后可相加作為輸出,可以直接驅(qū)動線路輸出(LOUT和ROUT),也可以通過耳機放大器輸出,以驅(qū)動耳機(RHPOUT和LHPOUT)。耳機放大電路的增益可以在+6~?73?dB范圍內(nèi)以1?dB步距進行調(diào)整。
DE2音頻部分電路如圖4.2所示。DE2平臺上的LINEOUT(J3)接在經(jīng)過耳機放大器放大的耳機輸出上,可以直接驅(qū)動耳機。LINEIN(J2)經(jīng)過隔直電容輸入,而MICIN(J1)則直接輸入。圖4.2DE2音頻部分電路
WM8731的MODE腳接地,選擇了2線控制器接口,控制器通過I2C總線控制WM8731,圖中的I2C_SCLK和I2C_SDAT接口是從FPGA引出的I2C總線,與視頻解碼器共用控制總線。2線模式下,通過引腳CSB選擇WM8731在I2C總線上的地址,若CSB引腳接地,則讀地址為0x34,寫地址為0x35??偩€數(shù)據(jù)B[15:0]中,B[15:9]是WM8731中控制寄存器的地址,B[8:0]是寄存器中的數(shù)值。WM8731寄存器的地址分配及定義如表4.1所示。圖4.3為WM8731I2C總線的時序。圖4.3WM8731I2C總線的時序4.2.2WM8731控制電路的實現(xiàn)對WM8731的控制通過I2C總線來實現(xiàn),代碼4.1是用VerilogHDL實現(xiàn)I2C控制器的參考代碼。本例中只實現(xiàn)了I2C寫數(shù)據(jù),而沒有實現(xiàn)完整的I2C控制器。在這個I2C控制器中,輸入CLOCK是I2C控制器的時鐘輸入,在對這個I2C控制器進行例化時,要提供一個滿足I2C標準的時鐘。I2C控制器每次傳輸24位數(shù)據(jù),前8位是從設備地址SLAVE_ADDR,接下來8位是從設備的寄存器地址SUB_ADDR,最后8位是數(shù)據(jù)。WM8731的I2C通信數(shù)據(jù)格式中有7位寄存器地址和9位數(shù)據(jù),與I2C控制器的數(shù)據(jù)格式定義不一致,實際傳輸時,SUB_ADDR的高7位為寄存器地址,最后1位是9位數(shù)據(jù)的最高位。本例中,I2C控制器使用33個I2C時鐘周期完成1次傳輸24位數(shù)據(jù)。第1個時鐘周期用于初始化控制器,第2、3個周期用于啟動傳輸,第4~30個周期用于傳輸數(shù)據(jù)(其中包含24位數(shù)據(jù)和3個ACK),最后3個周期用以停止傳輸??刂破髦惺褂昧艘粋€6位計數(shù)器SD_COUNTER對傳輸周期計數(shù)。在開始傳輸之前與終止傳輸之后,I2C_SCLK信號都應該保持高電平。I2C的起始條件(START)與終止條件(STOP)由I2C_SCLK與I2C_SDAT配合完成,在代碼中增加了一個1位寄存器SCLK,用以產(chǎn)生START條件和STOP條件。在START之前、STOP之后,SCLK=1;產(chǎn)生START條件之后,至產(chǎn)生STOP條件之前,SCLK=0。數(shù)據(jù)傳輸期間,I2C_SCLK由CLOCK提供。代碼4.1I2C控制器代碼。moduleI2C_Controller( CLOCK, //I2C控制器時鐘輸入
I2C_SCLK, //I2C總線時鐘信號輸出
I2C_SDAT, //I2C總線數(shù)據(jù)信號
I2C_DATA, //要傳輸?shù)臄?shù)據(jù)DATA:[SLAVE_ADDR,SUB_ADDR,DATA] GO, //啟動傳輸
END, //傳輸結(jié)束標志
ACK, //ACK信號輸出
RESET, //I2C控制器復位信號
//以下信號為測試信號
SD_COUNTER, //I2C數(shù)據(jù)發(fā)送計數(shù)器
SDO //I2C控制器發(fā)送的串行數(shù)據(jù)); inputCLOCK; input[23:0]I2C_DATA; inputGO; inputRESET; inputW_R; inoutI2C_SDAT; outputI2C_SCLK; outputEND; outputACK; output[5:0]SD_COUNTER;//I2C數(shù)據(jù)發(fā)送計數(shù)器
outputSDO; //I2C控制器發(fā)送的串行數(shù)據(jù)regSDO;regSCLK;regEND;reg[23:0]SD;reg[5:0]SD_COUNTER;wireI2C_SCLK=SCLK|(((SD_COUNTER>=4)&(SD_COUNTER<=30))?~CLOCK:0);wireI2C_SDAT=SDO?1'bz:0; //如果輸出數(shù)據(jù)為1,I2C_SDAT設為高阻regACK1,ACK2,ACK3;wireACK=ACK1|ACK2|ACK3; //ACK信號always@(negedgeRESETorposedgeCLOCK)beginif(!RESET)beginSCLK=1;SDO=1;ACK1=0;ACK2=0;ACK3=0;END=1;endelsecase(SD_COUNTER) 6'd0:beginACK1=0;ACK2=0;ACK3=0;END=0;SDO=1;SCLK=1;end //I2CSTART 6'd1:beginSD=I2C_DATA;SDO=0;end 6'd2:SCLK=0; //發(fā)送從設備地址
6'd3:SDO=SD[23];
6'd4:SDO=SD[22]; 6'd5:SDO=SD[21]; 6'd6:SDO=SD[20]; 6'd7:SDO=SD[19]; 6'd8:SDO=SD[18]; 6'd9:SDO=SD[17]; 6'd10:SDO=SD[16]; 6'd11:SDO=1'b1; //ACK
//發(fā)送從設備寄存器地址
6'd12:beginSDO=SD[15];ACK1=I2C_SDAT;end 6'd13:SDO=SD[14];
6'd14:SDO=SD[13]; 6'd15:SDO=SD[12]; 6'd16:SDO=SD[11]; 6'd17:SDO=SD[10]; 6'd18:SDO=SD[9]; 6'd19:SDO=SD[8]; 6'd20:SDO=1'b1; //ACK
//發(fā)送數(shù)據(jù)
6'd21:beginSDO=SD[7];ACK2=I2C_SDAT;end 6'd22:SDO=SD[6]; 6'd23:SDO=SD[5]; 6'd24:SDO=SD[4]; 6'd25:SDO=SD[3]; 6'd26:SDO=SD[2]; 6'd27:SDO=SD[1]; 6'd28:SDO=SD[0];
6'd29:SDO=1'b1; //ACK //I2CSTOP 6'd30:beginSDO=1'b0;SCLK=1'b0;ACK3=I2C_SDAT;end 6'd31:SCLK=1'b1; 6'd32:beginSDO=1'b1;END=1;endendcaseendendmodule代碼4.2是音頻編/解碼器配置的參考設計。模塊I2C_Audio_Config的時鐘輸入為DE2平臺上的50?MHz時鐘,I2C控制器時鐘為20?kHz,由50?MHz時鐘分頻得到。音頻編/解碼器配置數(shù)據(jù)存儲在查找表LUT_DATA中,LUT_DATA數(shù)據(jù)為16位,包括了WM8731的寄存器地址和寄存器數(shù)據(jù),共對10個寄存器的內(nèi)容進行配置,配置時逐個寫入寄存器的值,寄存器索引代碼為LUT_INDEX。每個寄存器的配置分為三步,并用mSetup_ST表示當前進行到了哪一步。第一步準備數(shù)據(jù),將8位的從設備地址與LUT_DATA合并為24位數(shù)據(jù)mI2C_DATA,并將mI2C_GO置1,啟動I2C傳輸;第二步檢測傳輸結(jié)束信號,如果檢測到傳輸結(jié)束(mI2C_END=1),但ACK信號不正常,則返回第一步,重新發(fā)送數(shù)據(jù);如果檢測到傳輸結(jié)束且ACK信號正常,則進入第三步,將寄存器索引LUT_INDEX加1,準備下一個數(shù)據(jù)的傳輸。代碼4.2音頻編/解碼器配置代碼。moduleI2C_Audio_Config( iCLK, //時鐘輸入
iRST_N, //復位信號
I2C_SCLK, //I2C總線時鐘信號輸出
I2C_SDAT ); //I2C總線數(shù)據(jù)信號input iCLK;input iRST_N;output I2C_SCLK;inout I2C_SDAT;//內(nèi)部寄存器及連線reg [15:0] mI2C_CLK_DIV;reg [23:0] mI2C_DATA;reg mI2C_CTRL_CLK;reg mI2C_GO;wire mI2C_END;wire mI2C_ACK;reg [15:0] LUT_DATA;reg [5:0] LUT_INDEX;reg [3:0] mSetup_ST;//時鐘參數(shù)parameter CLK_Freq = 50000000; //輸入的系統(tǒng)時鐘50?MHzparameter I2C_Freq = 20000; //I2C總線時鐘20?kHz//存儲音頻編/解碼器配置數(shù)據(jù)的查找表容量parameter LUT_SIZE = 10;//音頻編/解碼器配置數(shù)據(jù)索引parameter SET_LIN_L = 0;parameter SET_LIN_R = 1;parameter SET_HEAD_L = 2;parameter SET_HEAD_R = 3;parameter A_PATH_CTRL = 4;parameter D_PATH_CTRL = 5;parameter POWER_ON = 6;parameter SET_FORMAT = 7;parameter SAMPLE_CTRL = 8;parameter SET_ACTIVE = 9;//////50?MHz時鐘分頻得到20?kHz的I2C控制時鐘//////always@(posedgeiCLKornegedgeiRST_N)begin if(!iRST_N) begin mI2C_CTRL_CLK <= 0; mI2C_CLK_DIV <= 0; end else begin if(mI2C_CLK_DIV <(CLK_Freq/I2C_Freq)) mI2C_CLK_DIV <= mI2C_CLK_DIV+1; else begin mI2C_CLK_DIV <= 0; mI2C_CTRL_CLK <= ~mI2C_CTRL_CLK; end endend////例化I2C控制器///I2C_Controlleru0(.CLOCK(mI2C_CTRL_CLK), //I2C控制器工作時鐘.I2C_SCLK(I2C_SCLK), //I2C總線時鐘信號
.I2C_SDAT(I2C_SDAT), //I2C總線數(shù)據(jù)信號
.I2C_DATA(mI2C_DATA), //DATA:[SLAVE_ADDR,SUB_ADDR,DATA] .GO(mI2C_GO), //啟動傳輸
.END(mI2C_END), //傳輸結(jié)束標志
.ACK(mI2C_ACK), //ACK .RESET(iRST_N) );//////////////////////?配置過程控制?////////////////////////////always@(posedgemI2C_CTRL_CLKornegedgeiRST_N)begin if(!iRST_N) //復位
begin LUT_INDEX <= 0; mSetup_ST <= 0; mI2C_GO <= 0; end else begin if(LUT_INDEX<LUT_SIZE) begin case(mSetup_ST) 0:begin //第一步:準備數(shù)據(jù),啟動傳輸
mI2C_DATA <= {8'h34,LUT_DATA}; mI2C_GO <= 1; mSetup_ST <= 1; end 1: begin if(mI2C_END)//第二步:檢驗傳輸是否正常結(jié)束
begin if(!mI2C_ACK) mSetup_ST <= 2; else mSetup_ST <= 0; mI2C_GO <= 0; end end 2:begin //傳輸結(jié)束,改變LUT_INDEX的值,準備傳輸下一個數(shù)據(jù)
LUT_INDEX <= LUT_INDEX+1; mSetup_ST <= 0; end endcase end endend/////////////////////?配置數(shù)據(jù)查找表?////////////////////////// alwaysbegin case(LUT_INDEX) SET_LIN_L :LUT_DATA <= 16'h001A; SET_LIN_R :LUT_DATA <= 16'h021A; SET_HEAD_L :LUT_DATA <= 16'h047B; SET_HEAD_R :LUT_DATA <= 16'h067B; A_PATH_CTRL :LUT_DATA <= 16'h08F8; D_PATH_CTRL :LUT_DATA <= 16'h0A06;
POWER_ON :LUT_DATA <= 16'h0C00;
SET_FORMAT :LUT_DATA <= 16'h0E01; SAMPLE_CTRL :LUT_DATA <= 16'h1002;
SET_ACTIVE :LUT_DATA <= 16'h1201; endcaseendendmodule4.2.3用WM8731D/A轉(zhuǎn)換器產(chǎn)生正弦波可以將WM8731的工作模式配置成主模式或從模式。主模式工作時,由WM8731控制數(shù)字音頻數(shù)據(jù)接口的時序,從模式工作時WM8731響應來自音頻數(shù)據(jù)接口的時序。WM8731的音頻數(shù)據(jù)格式有四種模式:左對齊、右對齊、I2S及DSP模式。與音頻數(shù)據(jù)傳輸有關的引腳如表4.2所示。音頻數(shù)據(jù)傳輸是串行傳輸,A/D轉(zhuǎn)換器LRC(或D/A轉(zhuǎn)換器LRC)提供左/右聲道的同步信號,也確定了采樣速率,其頻率即為采樣頻率,BCLK是數(shù)字音頻位時鐘,提供位同步信號。左對齊數(shù)據(jù)格式的時序如圖4.4(a)所示,數(shù)據(jù)的MSB在D/A轉(zhuǎn)換器LRC或A/D轉(zhuǎn)換器LRC發(fā)生跳變之后的第一個BCLK的上升沿有效。右對齊數(shù)據(jù)格式的時序如圖4.4(b)所示,數(shù)據(jù)的MSB在D/A轉(zhuǎn)換器LRC或A/D轉(zhuǎn)換器LRC發(fā)生跳變之前的第n個BCLK的上升沿有效,其中n為數(shù)據(jù)位數(shù)。I2S模式數(shù)據(jù)格式的時序如圖4.4(c)所示,數(shù)據(jù)的MSB在D/A轉(zhuǎn)換器LRC或A/D轉(zhuǎn)換器LRC發(fā)生跳變之后的第二個BCLK的上升沿有效。DSP模式數(shù)據(jù)格式的時序如圖4.4(d)所示,左聲道數(shù)據(jù)的MSB在D/A轉(zhuǎn)換器LRC或A/D轉(zhuǎn)換器LRC發(fā)生正跳變之后的第一個或第二個(由LRP確定)BCLK的上升沿有效,右聲道的數(shù)據(jù)緊隨左聲道數(shù)據(jù)之后。圖4.4WM8731的音頻數(shù)據(jù)接口時序(a)左對齊;(b)右對齊;(c)?I2S模式;(d)?DSP模式代碼4.3是用WM8731產(chǎn)生正弦波。WM8731工作在從模式,數(shù)字音頻接口的時序由FPGA產(chǎn)生。代碼4.3用WM8731產(chǎn)生正弦波。moduleAUDIO_D/A轉(zhuǎn)換器( //數(shù)據(jù)音頻輸出引腳oAUD_BCK,oAUD_DATA,oAUD_LRCK,//控制信號iCLK_18_4,iRST_N ); //音頻信號參數(shù)parameter REF_CLK =18432000; //18.432?MHzparameter SAMPLE_RATE=48000; //48?kHzparameter DATA_WIDTH=16; //16?Bitsparameter CHANNEL_NUM =2; //雙通道parameter SIN_SAMPLE_DATA=48; //正弦波每個周期的采樣點數(shù)output oAUD_DATA;output oAUD_LRCK;output reg oAUD_BCK;input iCLK_18_4;input iRST_N;reg [3:0] BCK_DIV;reg [8:0] LRCK_1X_DIV;reg [7:0] LRCK_2X_DIV;reg [6:0] LRCK_4X_DIV;reg [3:0] SEL_Cont;reg [5:0] SIN_Cont; //數(shù)據(jù)計數(shù)器值,表明當前數(shù)據(jù)是正弦波每個周期的第幾個點reg [DATA_WIDTH-1:0] Sin_Out;//正弦波輸出數(shù)據(jù)reg LRCK_1X;reg LRCK_2X;reg LRCK_4X;////////////?生成AUD_BCK信號//////////////always@(posedgeiCLK_18_4ornegedgeiRST_N)begin if(!iRST_N) begin BCK_DIV <= 0; oAUD_BCK <= 0; end else begin if(BCK_DIV>=REF_CLK/(SAMPLE_RATE*DATA_WIDTH*CHANNEL_NUM*2)-1) begin BCK_DIV <= 0; oAUD_BCK <= ~oAUD_BCK; end else BCK_DIV <= BCK_DIV+1; endend////////////生成AUD_LRCK信號//////////////always@(posedgeiCLK_18_4ornegedgeiRST_N)begin if(!iRST_N) begin LRCK_1X_DIV <= 0; LRCK_2X_DIV <= 0; LRCK_4X_DIV <= 0; LRCK_1X <= 0; LRCK_2X <= 0; LRCK_4X <= 0; end else begin //LRCK1X if(LRCK_1X_DIV>=REF_CLK/(SAMPLE_RATE*2)-1) begin LRCK_1X_DIV <= 0; LRCK_1X <= ~LRCK_1X; end else LRCK_1X_DIV<= LRCK_1X_DIV+1; //LRCK2X if(LRCK_2X_DIV>=REF_CLK/(SAMPLE_RATE*4)-1) begin LRCK_2X_DIV<= 0; LRCK_2X <= ~LRCK_2X; end else LRCK_2X_DIV <= LRCK_2X_DIV+1; //LRCK4X if(LRCK_4X_DIV >=REF_CLK/(SAMPLE_RATE*8)-1) begin LRCK_4X_DIV<= 0; LRCK_4X <= ~LRCK_4X; end else LRCK_4X_DIV <=LRCK_4X_DIV+1; end end assign oAUD_LRCK = LRCK_1X;//////////生成正弦查找表地址//////////////always@(negedgeLRCK_1XornegedgeiRST_N)begin if(!iRST_N) SIN_Cont <= 0; else begin if(SIN_Cont<SIN_SAMPLE_DATA-1) SIN_Cont <= SIN_Cont+1; else SIN_Cont <= 0; endend//////////輸出數(shù)據(jù)//////////////always@(negedgeoAUD_BCKornegedgeiRST_N)begin if(!iRST_N) SEL_Cont <= 0; else SEL_Cont <= SEL_Cont+1;endassign oAUD_DATA =Sin_Out[~SEL_Cont]; ////////////正弦表//////////////always@(SIN_Cont)begincase(SIN_Cont)0:Sin_Out<=0;1:Sin_Out<=4276;2:Sin_Out<=8480;3:Sin_Out<=12539;4:Sin_Out<=16383;5:Sin_Out<=19947;6:Sin_Out<=23169;7:Sin_Out<=25995;8:Sin_Out<=28377;9:Sin_Out<=30272;10:Sin_Out<=31650;11:Sin_Out<=32486;12:Sin_Out<=32767;13:Sin_Out<=32486;14:Sin_Out<=31650;15:Sin_Out<=30272;16:Sin_Out<=28377;17:Sin_Out<=25995;18:Sin_Out<=23169;19:Sin_Out<=19947;20:Sin_Out<=16383;21:Sin_Out<=12539;22:Sin_Out<=8480;23:Sin_Out<=4276;24:Sin_Out<=0;25:Sin_Out<=61259;26:Sin_Out<=57056;27:Sin_Out<=52997;28:Sin_Out<=49153;29:Sin_Out<=45589;30:Sin_Out<=42366;31:Sin_Out<=39540;32:Sin_Out<=37159;33:Sin_Out<=35263;34:Sin_Out<=33885;35:Sin_Out<=33049;36:Sin_Out<=32768;37:Sin_Out<=33049;38:Sin_Out<=33885;39:Sin_Out<=35263;40:Sin_Out<=37159;41:Sin_Out<=39540;42:Sin_Out<=42366;43:Sin_Out<=45589;44:Sin_Out<=49152;45:Sin_Out<=52997;46:Sin_Out<=57056;47:Sin_Out<=61259; default : Sin_Out <= 0; endcaseendendmodule接下來建立一個叫做audio_test的新工程來驗證正弦波發(fā)生器。
Altera公司為DE2平臺提供的示范工程中,有一個工程DE2_top,DE2_top是一個非常簡單的工程,其頂層文件DE2_top.v實現(xiàn)了DE2平臺上FPGA所有引腳的定義,可將所有輸入口置為三態(tài),并打開所有的顯示器,包括LCM、HEX0~HEX17、LEDG0~LEDG8及LEDR0~LEDR17。同時,可以將DE2_top.v中引腳定義及初始化的內(nèi)容復制過來,再加入與本設計有關的模塊。代碼4.4是audio_test.v的代碼,其中略去了從DE2_top.v中復制的內(nèi)容。模塊Reset_Delay用以產(chǎn)生延時復位信號,參見代碼4.5。音頻編/解碼器芯片需要18.432?MHz的時鐘輸入,Audio_PLL模塊使用鎖相環(huán)產(chǎn)生了一個頻率為18.409091MHz的時鐘信號。Audio_PLL模塊是用QuartusⅡ的MegaWizardPlug-InManager生成的,具體步驟如下:
(1)使用Tools>MegaWizardPlug-InManager菜單啟動向?qū)В鐖D4.5所示。圖4.5啟動MegaWizardPlug-InManager
(2)選擇Creatanewcustommegafunctionvariation。
(3)在宏功能列表中的I/O組中選擇ALTPLL,選擇文件輸出類型為VerilogHDL,輸出文件名稱為Audio_PLL.v,如圖4.6所示。圖4.6選擇ALTPLL并輸入文件名
(4)在向?qū)У牡?頁(page3of10)中輸入inclock0的頻率為27?MHz,如圖4.7所示。圖4.7確定輸入時鐘頻率
(5)其他選項不變,在第6頁(page6of10)的輸出c0設置頁,如圖4.8所示,選中Usethisclock選項,則c0的參數(shù)設置框有效;選中Enteroutputclockfrequency,這樣可以讓ALTPLL根據(jù)輸出頻率自動選擇鎖相環(huán)的設置;在Requestsettings中輸入18.432,ALTPLL自動選擇最相近的參數(shù),即27?MHz經(jīng)過十五倍倍頻和二十七分頻之后可得到18.409091?MHz的信號。圖4.8設置輸出c0的參數(shù)
(6)其他選項不改變,繼續(xù)按提示完成向?qū)АM瓿稍O計輸入之后,用Assignments>ImportAssignments菜單導入DE2系統(tǒng)光盤中的引腳分配文件DE2_pin_assignments.csv,完成引腳分配。完全編譯工程后,將生成的audiotest.sof文件下載到FPGA中,在DE2的LINEOUT插座上接上耳機,可聽到1?kHz單音頻的聲音,輸出信號音量比較大,注意將耳機音量調(diào)小,以免損傷聽力,也可以用示波器查看輸出。代碼4.4audio_test.v。moduleaudio_test(//將DE2_top.v中引腳定義及初始化的內(nèi)容復制到此處Reset_Delayr0(.iCLK(CLOCK_50),.oRESET(DLY_RST) );Audio_PLLp1(.inclk0(CLOCK_27),.c0(AUD_CTRL_CLK));I2C_Audio_Configu3(.iCLK(CLOCK_50), .iRST_N(DLY_RST), .I2C_SCLK(I2C_SCLK), .I2C_SDAT(I2C_SDAT) );AUDIO_D/A轉(zhuǎn)換器 u4(.oAUD_BCK(AUD_BCLK), .oAUD_DATA(AUD_D/A轉(zhuǎn)換器DAT), .oAUD_LRCK(AUD_D/A轉(zhuǎn)換器LRCK), .iCLK_18_4(AUD_CTRL_CLK), .iRST_N(KEY[0]) );endmodule代碼4.5產(chǎn)生延時復位的代碼。module Reset_Delay(iCLK,oRESET);input iCLK;outputreg oRESET;reg [15:0] Cont;always@(posedgeiCLK)begin if(Cont!=16'hFFFF) begin Cont <= Cont+1; oRESET <= 1'b0; end else oRESET <= 1'b1;endendmodule4.3使用SDRAM及SRAM4.3.1在NiosⅡ中使用SDRAM建立一個新的QuartusⅡ工程,并且對工程命名,本例中為工程命名為SDRAMTest,選擇CycloneⅡEP2C35F672C6芯片。工程建立以后,用Tools>SOPCBuilder菜單啟動SOPCBuilder,建立一個新的SOPC系統(tǒng),如圖4.9所示。本例中將新系統(tǒng)命名為top_sys,將TargetHDL選為Verilog,按OK按鈕。圖4.9為使用SDRAM建立一個新的SOPC系統(tǒng)建立系統(tǒng)的步驟如下:
(1)從組件庫中選擇NiosⅡProcessor-AlteraCoporation,按鼠標右鍵彈出菜單,選中AddnewNiosⅡProcessor-AlteraCoporation。
(2)在彈出的NiosⅡCPU配置窗口中選擇NiosⅡCore為NiosⅡ/e,JTAGDebugModule選擇Level1,其他設置不變。
(3)單擊Finish完成NiosⅡ處理器的添加。
(4)接下來把SDRAM控制器添加到系統(tǒng)中,在組件庫的Memory組中選中SDRAMController,按鼠標右鍵彈出菜單,選中AddNewSDRAMController,彈出SDRAM配置對話框。
(5)將DataWidth修改為16位,其他設置保持默認,也可以根據(jù)自己的要求改變其他配置,點擊Finish完成SDRAM控制器的添加。
(6)在系統(tǒng)模塊列表中選中sdram_0,按鼠標右鍵彈出菜單,選擇Rename,將模塊的名稱改為SDRAM。
(7)在系統(tǒng)中添加On-ChipMemory以保存NiosⅡ軟件,在組件庫中的Memory組中選中On-ChipMemory,按鼠標右鍵彈出菜單,選中AddNewOn-ChipMemory,彈出On-ChipMemory配置對話框。
(8)將TotalMemorySize改為40?KB,其他選項設置保持默認,點擊Finish完成On-ChipMemory的添加。
(9)為了方便調(diào)試SDRAM,添加8位LED燈作為指示,在組件庫的Others組中選中PIO(ParallelI/O),按鼠標右鍵彈出菜單,選中AddNewPIO(ParallelI/O),彈出PIO配置對話框。
(10)保持默認選項不變,單擊Finish完成添加,然后將該模塊名稱改為LED。添加完所有的模塊后,用System>Auto-AssignBaseAddresses菜單重新為系統(tǒng)中的所有模塊分配地址,重新分配地址后的模塊列表如圖4.10所示。點擊Next按鈕,進入NiosⅡMorecpu_0settings,此時系統(tǒng)設置如圖4.11所示,從圖中可以看到,NiosⅡ處理器的復位地址(ResetAddress)、異常處理地址(ExceptionAddress)都設在onchip_memory_0中,斷點位置(BreakLocation)設在JTAG調(diào)試模塊中。單擊Generate按鈕生成系統(tǒng)。圖4.10配置完成后系統(tǒng)中的模塊圖4.11NiosⅡ處理器的地址分配生成SOPC系統(tǒng)后,在QuartusⅡ系統(tǒng)中建立一個頂層文件,來例化這個Nios系統(tǒng)。在QuartusⅡ中用File>New菜單打開新建文件對話框,選中BlockDiagram,建立一個新的原理圖文件(.bdf)。雙擊?.bdf文件中的空白處,打開Symbol窗口,在Symbol窗口的Libraries欄中展開Project項,選中top_sys,然后按OK按鈕,將NiosⅡ處理器添加到原理圖中,并將這個原理圖文件以SDRAM.bdf的文件名保存。圖4.12為系統(tǒng)添加除clk及reset_n之外的引腳,DRAM_DQ[15..0]為雙向引腳,其他引腳均為輸出引腳。圖4.12NiosⅡ系統(tǒng)的引腳
DE2平臺上的SDRAM時序(請參照IC42S6400-7Tdatasheet),要求將DE2所提供的50?MHz時鐘延時3?ns或者相位延遲60°之后作為SDRAM的時鐘輸入DRAM_CLK,可以用鎖相環(huán)產(chǎn)生這個時鐘延遲。按下列步驟生成鎖相環(huán)的代碼:
(1)用Tools>MegaWizardPlug-InManager菜單建立一個新的Megafunction。
(2)在InstalledPlug-Ins中的I/O中選擇ALTPLL,并將輸出文件命名為SDRAM_CLK。
(3)在向?qū)У牡?頁中將inclock0的輸入頻率改為50?MHz。
(4)取消向?qū)У?頁的所有選項。
(5)將向?qū)У?頁中的ClockPhaseShift項設為60?deg或3?ns,其余參數(shù)保持不變,完成鎖相環(huán)的配置。生成鎖相環(huán)之后,在SDRAM.bdf中的空白處雙擊,Project中會出現(xiàn)一個SDRAM_PLL,將SDRAM_PLL添加到?.bdf文件中,然后參照圖4.13完成?.bdf文件。鎖相環(huán)SDRAM_PLL的Verilog代碼在當前工程的目錄中,名為SDRAM_PLL.v,可以用Quartus打開并查看其內(nèi)容。圖4.13完成之后的頂層設計文件完成頂層文件的設計之后,可以從DE2_pin_assignments.csv中導入引腳分配,保存工程,然后完整編譯工程并將工程下載到FPGA中去。具體過程可參照第3章的相關內(nèi)容。硬件設計完成之后,在NiosⅡIDE中通過軟件測試SDRAM的連接是否正確。按以下步驟完成測試:
(1)?NiosⅡ?IDE中,用New>C/C++Applications菜單建立一個新工程。
(2)選擇BlankProject模板。
(3)選擇硬件設計所在目錄中的top_sys.ptf文件作為系統(tǒng)文件。
(4)選擇cpu_0作為處理器。
5)點擊Finish完成工程創(chuàng)建。為工程新建一個文件SDRAM.c,文件中的內(nèi)容如代碼4.6所示。代碼4.6測試SDRAM的代碼。#include"system.h"#include"altera_avalon_pio_regs.h"intmain(){IOWR(SDRAM_BASE,0,3); //對SDRAM中0地址位寫數(shù)據(jù)3IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,IORD(SDRAM,0));//讀取SDRAM中0地址位數(shù)據(jù)并使LED顯示return0;}測試代碼中先向SDRAM的地址0寫入數(shù)據(jù)3,然后再將SDRAM中地址0的數(shù)據(jù)讀出來并在LED上顯示。編譯工程時,選中工程并按鼠標右鍵,在彈出的菜單中選擇RunasHardware下載并運行程序,此時LEDR1和LEDR0亮,LEDR2~LEDR7不亮,表明SDRAM可用??稍诖舜a基礎上編寫更復雜的測試代碼和應用代碼。需要注意的是,SOPCBuilder中將程序存儲器默認為On-ChipMemory??梢园凑障铝胁襟E將ProgramMemory設定在SDRAM中:
(1)參照前文建立SOPC系統(tǒng)的步驟,將系統(tǒng)中的On-ChipMemory模塊刪除。
(2)將ResetAddress和ExceptionAddress都設在SDRAM中,重新生成top_sys,并且重新編譯下載QuartusⅡ工程文件。
(3)在NiosⅡ?IDE中,選中剛建立的工程,單擊鼠標右鍵,選擇SystemLibraryProperties,彈出系統(tǒng)庫屬性設置對話框。
(4)在系統(tǒng)庫屬性設置對話框中,將ProgramMemory設置成SDRAM,選擇OK按鈕完成設置。完成以上步驟之后,將測試代碼修改為如代碼4.7所示的內(nèi)容,在這個代碼中,NiosⅡ處理器直接點亮LEDR0~LEDR7,編譯并運行測試代碼,LEDR0~LEDR7全亮,說明程序已經(jīng)在SDRAM中成功運行。代碼4.7程序在SDRAM中運行的測試代碼。#include"system.h"#include"altera_avalon_pio_regs.h"intmain(){IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
return0;}4.3.2在NiosⅡ中使用SRAM由于SOPCBuilder組件庫中沒有現(xiàn)成的SRAM組件,因此需要自己編寫SRAM與Avalon總線模塊的接口文件,并將SRAM作為自定義組件加入到SOPC系統(tǒng)中去。其余用法與SDRAM相同。為SRAM接口建立一個新的Verilog文件,命名為ext_sram.v,如代碼4.8所示。代碼4.8SRAM接口代碼ext_sram.v。module SRAM_16Bit_512K( //Avalon總線模塊側(cè)信號
oDATA,iDATA,iADDR, iWE_N,iOE_N, iCE_N,iRST_N, iUB_N,iLB_N, //SRAM側(cè)信號
SRAM_DQ, SRAM_ADDR, SRAM_UB_N, SRAM_LB_N, SRAM_WE_N, SRAM_CE_N, SRAM_OE_N );input [15:0] iDATA;output [15:0] oDATA;input [17:0] iADDR;input iWE_N,iOE_N;input iCE_N,iRST_N;input iUB_N,iLB_N;inout [15:0] SRAM_DQ;output [17:0] SRAM_ADDR;output SRAM_UB_N,SRAM_LB_N,SRAM_WE_N,SRAM_CE_N,SRAM_OE_N;assign SRAM_DQ =SRAM_WE_N?16'hzzzz:iDATA;assign oDATA = SRAM_DQ;assign SRAM_ADDR = iADDR;assign SRAM_WE_N = iWE_N;assign SRAM_OE_N = iOE_N;assign SRAM_CE_N = iCE_N;assign SRAM_RST_N = iRST_N;assign SRAM_UB_N = iUB_N;assign SRAM_LB_N = iLB_N;endmodule建立一個新的QuartusⅡ工程,并且對工程命名,本例中為工程命名為SRAM,選擇CycloneⅡ?EP2C35F672C6芯片。工程建立以后,用Tools>SOPCBuilder菜單啟動SOPCBuilder,新建一個名為top_sys的SOPC系統(tǒng)。用File>NewComponent菜單建立一個新組件,在對話框中選擇HDLFiles,瀏覽并添加ext_sram.v文件。參照3.5.2小節(jié)中的步驟配置SRAM自定義組件,信號分配如圖4.14所示。圖4.14SRAM自定義組件的信號分配在AboutInterfaces頁中,將Slavingaddressing設置為Memory類型,根據(jù)DE2平臺上使用的SRAM時序(參考IS61LV25616AL數(shù)據(jù)手冊)對ReadWait/WriteWait進行設置,如圖4.15所示,其余選項不變。自定義組件添加完成后,在SOPCBuilder組件列表的UserLogic組中,增加了ext_sram組件,參照4.3.1小節(jié)中使用SDRAM的流程,建立一個新的SOPC系統(tǒng),將ext_sram組件添加到新系統(tǒng)中,完成硬件系統(tǒng)設計,并在NiosⅡ?IDE中編寫測試軟件對SRAM進行測試。圖4.15SRAM接口設置4.4視頻D/A轉(zhuǎn)換器4.4.1視頻D/A轉(zhuǎn)換器
ADV7123最高可以支持100?Hz刷新頻率時1600×1200像素的分辨率。ADV7123內(nèi)含三路最高可達240MS/s(萬百抽樣/秒)的10位視頻D/A轉(zhuǎn)換器,時鐘頻率為50?MHz,輸出1?MHz時的SFDR為?70?dB;時鐘頻率為140?MHz,輸出40?HMz信號時的SFDR為?53?dB。D/A轉(zhuǎn)換器的輸出電流范圍為2~26?mA,TTL兼容輸入,單電源工作電壓為+5?V/+3.3?V,+3.3?V工作時最小功耗為30?mW。
RGB顯示的視頻信號電平如圖4.16所示,圖中的IRE單位是國際無線電工程師學會制定的國際通用電視電平計算法,它以消隱電平為零電平基準點,向上將0.7?V(p-p值)的視頻信號分為10等分,每一單元為10?IRE;向下將?0.3?V(p-p值)的同步信號分為4等分,每一單元為10?IRE,該計量方式以整數(shù)為單位,非常方便。有一些資料中直接認為1?IRE為0.7?V,則同步電平為?43?IRE,實際上都是?0.3?V。在一些設計中,同步信號在三種顏色的信號中都出現(xiàn),而目前常用的設計中,同步信號只在綠色信號中出現(xiàn),即所謂綠同步(SyncOnGreen)。綠色信號的范圍為0~1.0?V,紅色和藍色信號的范圍為0~0.7?V。RGB模擬輸出實際上是電流輸出,一般在模擬視頻傳輸線兩端各有一個75?Ω的終端電阻,當輸出電平為0.7?V時,輸出電流為18.67?mA;輸出電平為1.0?V時,輸出電流為26.67?mA。圖4.16RGB顯示的視頻信號電平高速視頻D/A轉(zhuǎn)換器ADV7123的原理框圖如圖4.17所示。ADV7123由完全獨立的三個10位高速D/A轉(zhuǎn)換器組成,RGB視頻數(shù)據(jù)分別從R9~R0、G9~G0和B9~B0輸入,在時鐘CLOCK的上升沿鎖存到數(shù)據(jù)寄存器中,然后經(jīng)高速D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬信號。三個獨立的視頻D/A轉(zhuǎn)換器都是電流型輸出,可以接成差分輸出,也可以接成單端輸出,DE2上按單端輸出連接,為滿足工業(yè)標準,在模擬輸出端用75?Ω的電阻接地。消隱及同步邏輯控制輸出信號的同步和消隱,低電平有效的BLANK信號是復合消隱信號,當BLANK為低電平時,模擬視頻輸出消隱電平,此時從R9~R0、G9~G0和B9~B0輸入的所有數(shù)據(jù)被忽略。同樣是低電平有效的SYNC信號是復合同步信號,控制輸出信號的同步,SYNC為低電平時,D/A轉(zhuǎn)換器關斷40?IRE的電流源。ADV7123只有在綠色輸出通道才有同步信號出現(xiàn)。BLANK和SYNC信號都是在CLOCK的上升沿被鎖存的。圖4.17ADV7123原理框圖
DE2平臺上視頻D/A轉(zhuǎn)換器部分的原理如圖4.18所示,F(xiàn)PGA輸出視頻數(shù)據(jù)信號VGA_R0~VGA_R9、VGA_G0~VGA_G9、VGA_B0~VGA_B9,分別連接到ADV7123的R0~R9、G0~G9和B0~B9。另外FPGA為ADV7123提供消隱信號VGA_BLANK、同步信號VGA_SYNC及時鐘信號VGA_CLOCK。輸出到VGA顯示器的水平同步信號VGA_HS和垂直同步信號VGA_VS由FPGA直接給出。圖4.18DE2視頻D/A轉(zhuǎn)換器原理圖
VGA顯示的基本時序如圖4.19所示,垂直和水平的時間周期都可以分為四個區(qū)間:同步脈沖a、同步脈沖結(jié)束與有效視頻信號開始之間的時間間隔即后沿b、有效視頻信號顯示區(qū)間c及有效視頻信號結(jié)束與同步脈沖開始之間的時間間隔即前沿d。圖4.19VGA顯示的基本時序不同配置的VGA模式,水平同步時間參數(shù)如表4.3所示,垂直同步時間參數(shù)如表4.4所示。4.4.2VGA顯示器應用示例代碼4.9是一個帶十字光標的VGA顯示控制器代碼,控制器的信號包括如下內(nèi)容:
(1)用于控制信號的光標屬性。①光標使能輸入:iCursor_EN,寬度為1位。②光標橫坐標:iCursor_X,寬度為10位。③光標縱坐標:iCursor_Y,寬度為10位。④光標紅色信號強度:iCursor_R,寬度為10位。⑤光標綠色信號強度:iCursor_G,寬度為10位。⑥光標藍色信號強度:iCursor_B,寬度為10位。
(2)顯示數(shù)據(jù)的輸入信號。①紅色信號輸入數(shù)據(jù)iRed。②綠色信號輸入數(shù)據(jù)iGreen。③藍色信號輸入數(shù)據(jù)iBlue。
(3)控制信號:包括時鐘信號iCLK及控制器復位信號iRST_N。
(4)?RAM地址輸出oAddress及當前坐標輸出oCoord_X和oCoord_Y。
(5)輸出到VGAD/A轉(zhuǎn)換器的信號。①紅色數(shù)據(jù)信號輸出:oVGA_R。②綠色數(shù)據(jù)信號輸出:oVGA_G。③藍色數(shù)據(jù)信號輸出:oVGA_B。④同步信號輸出:oVGA_SYNC。⑤消隱信號輸出:oVGA_BLANK。⑥時鐘輸出:oVGA_CLOCK。
(6)輸出到VGA接口的信號。①水平同步信號輸出:oVGA_H_SYNC。②垂直同步信號輸出:oVGA_V_SYNC。
VGA顯示的相關參數(shù)在代碼中以parameter的形式列出??刂破鞯妮斎腩l率應為25.175?MHz,VGA控制器工作時,需要外接一個RAM以保存當前顯示的數(shù)據(jù),控制器根據(jù)不同時刻在VGA顯示器上顯示的像素位置,計算出RAM中當前數(shù)據(jù)存放的地址并輸出RAM地址(oAddress信號),外接RAM控制器從該地址中讀取數(shù)據(jù),返回給VGA控制器(iRed,iGreen,iBlue),VGA控制器將顯示數(shù)據(jù)輸出到VGAD/A轉(zhuǎn)換器。如果在頂層設計中使用VGA_Controller模塊,那么可以通過光標位置坐標、光標使能信號和光標顏色信號來控制光標的顯示。如果允許光標顯示,則代碼中通過判斷當前像素位置的橫坐標或縱坐標是否與光標坐標一致來確定當前像素是顯示從RAM中讀取的數(shù)據(jù)還是顯示光標的顏色,從而實現(xiàn)光標的顯示,使用此VGA控制器的具體代碼不在此列出。代碼4.9VGA控制器代碼。module VGA_Controller( iCursor_EN, //光標使能信號輸入
iCursor_X, //光標橫坐標
iCursor_Y, //光標縱坐標
iCursor_R, //光標紅色信號強度
iCursor_G, //光標綠色信號強度
iCursor_B, //光標藍色信號強度
iRed, //紅色信號輸入數(shù)據(jù)
iGreen, //綠色信號輸入數(shù)據(jù)
iBlue, //藍色信號輸入數(shù)據(jù)
oAddress, //RAM地址輸出 oCoord_X, //輸出橫坐標
oCoord_Y, //輸出縱坐標
//輸出到VGA的信號
oVGA_R, //紅色數(shù)據(jù)信號輸出
oVGA_G, //綠色數(shù)據(jù)信號輸出
oVGA_B, //藍色數(shù)據(jù)信號輸出
oVGA_H_SYNC, //水平同步信號輸出
oVGA_V_SYNC, //垂直同步信號輸出
oVGA_SYNC, //同步信號輸出
oVGA_BLANK, //消隱信號輸出
oVGA_CLOCK, //時鐘輸出
iCLK, //時鐘輸入
iRST_N); //控制器復位信號輸入//水平參數(shù)(單位:像素)parameterH_SYNC_CYC=96;parameterH_SYNC_BACK=45+3;parameter H_SYNC_ACT=640; parameter H_SYNC_FRONT=13+3;parameter H_SYNC_TOTAL=800;//垂直參數(shù)(單位:線)parameter V_SYNC_CYC=2;parameter V_SYNC_BACK=30+2;parameter V_SYNC_ACT=480;parameter V_SYNC_FRONT=9+2;parameter V_SYNC_TOTAL=525;//起始偏移parameter X_START=H_SYNC_CYC+H_SYNC_BACK+4;parameter Y_START=V_SYNC_CYC+V_SYNC_BACK;//主控制器側(cè)信號output reg [19:0] oAddress;output reg [9:0] oCoord_X;output reg [9:0] oCoord_Y;input iCursor_EN;input [9:0] iCursor_X;input [9:0] iCursor_Y;input [9:0] iCursor_R;input [9:0] iCursor_G;input [9:0] iCursor_B;input [9:0] iRed;input [9:0] iGreen;input [9:0] iBlue;//VGA信號output [9:0] oVGA_R;output [9:0] oVGA_G;output [9:0] oVGA_B;output reg oVGA_H_SYNC;output reg oVGA_V_SYNC;output oVGA_SYNC;output oVGA_BLANK;output oVGA_CLOCK;//控制信號input iCLK;input iRST_N;//內(nèi)部寄存器及連線reg [9:0] H_Cont;reg [9:0] V_Co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年出國打工人員勞動合同與海外生活服務保障與職業(yè)規(guī)劃協(xié)議3篇
- 組態(tài)王電梯課程設計
- 2025版人工智能公司股權(quán)激勵與商業(yè)應用合作協(xié)議范本3篇
- 承德應用技術(shù)職業(yè)學院《教育與信息技術(shù)》2023-2024學年第一學期期末試卷
- 成都藝術(shù)職業(yè)大學《高聚物合成工藝學》2023-2024學年第一學期期末試卷
- 2025版寄售交易合同:家居用品寄售合作協(xié)議3篇
- 2024年版:離婚訴訟雙方調(diào)解協(xié)議書(含財產(chǎn)分配)
- 2025版xxx金融衍生品交易合同補充協(xié)議2篇
- 二零二五年度出租車網(wǎng)絡平臺加盟經(jīng)營協(xié)議3篇
- 二零二五年咖啡廳加盟與合作發(fā)展協(xié)議3篇
- Lesson-1.-spring-festival(雙語課件-春節(jié))
- 小學體育知識樹PPT課件(帶內(nèi)容)
- 全球試驗室儀器耗材國際品牌簡介
- 鋼抱箍+工字鋼梁在蓋梁施工中的應用
- 消防聯(lián)動調(diào)試記錄(2)
- 追求“真實、樸實、扎實”的語文課堂
- 螺桿空壓機操作規(guī)程完整
- 702班素質(zhì)評價觀測學生填寫完成情況檢查
- 大學學院成績單(模板)
- 奧林燃燒器說明書(GP130-150H)
- 績效管理模塊-績效管理與績效考核制度
評論
0/150
提交評論