《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的視頻圖像處理器的串行通信設計
基于FPGA的視頻圖像處理器的串行通信設計
鄭 勇1,雷 霖1,劉先志2
摘要: 芯片及解決方案,站點首頁,芯片,網絡與通信,EDA及可編程,多媒體
Abstract:
Key words :

    摘  要: 提出了一種在FPGA上實現視頻圖像處理" title="視頻圖像處理">視頻圖像處理器分系統與系統之間的數據串行通信設計方法,采用UART串行數據傳輸協議,傳輸波特率可設置調整,采用視頻場同步信號作為發送器" title="發送器">發送器發送控制信號,實現視頻圖像處理的實時性要求。串口" title="串口">串口采用雙口" title="雙口">雙口RAM實現與視頻圖像處理部分的異步通信。設計中大量采用參數化設計,使用靈活、通用性強,可實現FPGA與一般串口通信系統通信。設計程序下載到FPGA芯片中,通信數據完全正確,電路工作穩定、可靠。 

    關鍵詞: FPGA;Verilog HDL;UART;雙口RAM;視頻圖像

 

    在視頻圖像處理系統中,諸如圖像相減等操作,處理的數據量很大,對處理速度的要求很高,但算法結構相對簡單,適合用FPGA進行硬件實現。由于FPGA的開發具有很強的靈活性,因此,可以利用FPGA的資源,在芯片上實現視頻圖像處理的串口通信功能,從而簡化了電路,縮小了體積,提高了可靠性,并且在使用上有很大的靈活性。 

1 總體概述

    在FPGA上實現視頻圖像處理器分系統與系統之間的數據串行通信,采用UART串行數據傳輸協議,通信的傳輸波特率、FPGA系統時鐘頻率" title="時鐘頻率">時鐘頻率均采用參數化設計,可滿足不同系統主頻和傳輸波特率要求。分系統發送接收有幀頭、幀尾,用來判斷數據接收的正確性。數據格式為一個起始位低電平0,8個數據位數,一個停止位高電平1,一個數據串為10位。總體結構如圖1所示。

 

 

    為解決串口與視頻圖像部分的異步通信問題,采用了在FPGA上產生雙口RAM實現串口與視頻圖像處理部分的對接。雙口RAM就是存儲數據共享的存儲器,配備兩套獨立的地址、數據和控制線,允許兩個獨立的CPU或控制器同時異步地訪問存儲單元,特別適合異步處理器之間的異步高速通信。雙口RAM的存儲空間大小和數據地址位數均采用參數化設計,使得雙口RAM的存儲空間大小可根據實際應用需要進行調整,增加了串口使用的靈活性和通用性。 

    在視頻圖像處理中,為滿足實時性要求,一次圖像處理在一場圖像時間中完成,故可用視頻場同步信號作為串口發送器發送控制信號。PAL電視制式規定,場掃描頻率為50Hz,一幀圖像分為奇數場和偶數場。 

2 結構功能設計 

2.1 波特率發生器

    波特率發生器如圖2所示。 

    rst_n:系統復位信號 

    clk:系統時鐘頻率 

    clk_16x:輸出波特率(傳輸波特率時鐘頻率的16倍) 

    串口在接收數據時,理想的采樣點是在數據位的中間。為了對串行數據位進行精確采樣,可對數據位時間進行分段,分段數越大,則采樣點越靠近中間點,但同時也增加了系統的開銷。在設計應用中,采用了16倍時間分段。 

    串口的接收和發送是按照相同的波特率進行的,波特率發生器產生的時鐘頻率不是波特率時鐘頻率,而是波特率時鐘頻率的16倍(即一個傳輸位的寬度為16個clk_16x時鐘周期)。可以根據給定的系統時鐘頻率和要求的波特率算出波特率計數值。假設系統時鐘頻率為40MHz,要求的傳輸波特率為115 200b/s,則可產生Counter=(Clk_frequency/(2*16*Baud_rate))-1,即對clk計數到Counter時對clk_16x進行翻轉一次。在程序設計中,采用參數化設計,可根據應用要求改變波特率大小。 

  parameter Clk_frequency=40000000, 

           //系統時鐘頻率40MHz 

  Baud_rate=115200, 

          //要求傳輸波特率值115 200b/s 

  Counter=(Clk_frequency/(2*16*Baud_rate))-1,Width=7; 

           //能夠存儲Counter值的二進制形式所需的位數 

2.2 帶雙口RAM的發送器

    帶雙口RAM的發送器模塊如圖3所示。 

    Data_out:串行輸出 

    Vs:    發送控制信號(視頻場同步信號) 

    Cs:    雙口RAM的片選信號 

    Wren:  雙口RAM的寫使能信號 

    Addr:  雙口RAM的地址線 

    Data:  雙口RAM的數據線 

    串口發送器采用雙口RAM與視頻圖像處理部分對接,視頻圖像處理部分將并行數據發送到雙口RAM中,然后,在發送控制信號(視頻場同步信號)的控制下,由串口發送器將雙口RAM中的并行數據讀出來,并轉為串行數據發送出去。 

    為簡化串口發送器對雙口RAM的控制,采用了將雙口RAM和發送器做到一個模塊中的方式。因此,對發送器而言,雙口RAM就相當于一個內部存儲器,可以直接對其進行讀寫操作,而不需要額外的存儲器控制端口和數據傳輸接口。 

    視頻圖像處理部分對雙口RAM的發送數據過程與對一般的存儲器操作過程類似,就是根據控制端口將數據寫到雙口RAM中。部分程序如下(程序中采用參數化設計,可以改變雙口RAM的大小): 

    parameter width=5,//發送器雙口RAM地址位數 

    number=30;//發送器雙口RAM存儲字節大小 

    input[width-1:0] Addr;//發送器雙口RAM數據的地址 

    reg[7:0] memory[number-1:0];//發送器雙口RAM 

    always @(posedge Wren)//對雙口RAM寫入并行數據, wren為上升沿有效 

        begin 

          if(Cs==1′b0) 

            begin 

              memory[Addr]<=Data; 

            end 

          end 

    發送器從發送控制信號(場同步信號)Vs到來開始,隔16個clk_16x周期輸出1位數據,順序為1位起始位,8位數據位和1位停止位,數據位為從低位到高位發送形式。發送器采用狀態機風格進行描述,共分為5個狀態:空閑狀態S0、開始狀態S1、等待狀態S2、移位狀態S3、停止狀態S4。 

    在狀態機轉換過程中,需要一位寄存器變量來判斷要發送的數據是否已發送完, 以確保一個場同步信號只對雙口RAM中的number字節數據發送一遍。 

    系統一旦復位,發送器就進入S0狀態,同時對一位寬寄存器型變量num置0。 

    空閑狀態S0:在此狀態完成初始化工作,即對所要用到的寄存器賦初值(包括雙口RAM的數據讀出地址addr_cnt清0),且將串行輸出Data_out置為高電平。當Vs有效(場同步期間)且num==0成立時,進入S1狀態。在Vs無效期間,將num置0,且繼續在S0狀態。 

    開始狀態S1:給出起始位低電平0,即將Data_out置0,同時將當前addr_cnt地址的數據從雙口RAM中讀出并存入發送移位寄存器shift_reg,系統進入S2狀態。 

    等待狀態S2:在此狀態,每次等待16個clk_16x,即:保證每位的寬度位16個clk_16x時鐘周期,包括起始位等待在內,要等待9次,其中,數據位等待為8次。若等待次數在9次以內,則轉入S3狀態,否則,轉入S4狀態。 

    移位狀態S3:將shift_reg[0]賦給Data_out,同時實現從高位到低位移位。進入S2狀態。 

    停止狀態S4:給出停止位高電平1,即將Data_out置為高電平,且計滿16個clk_16x。然后,判斷是否已將memory[number-1:0]中的number個字節的數據都輸出,若沒有,就轉入S1狀態繼續輸出,否則,就進入S0空閑狀態,同時將num置1。 

2.3 帶雙口RAM的接收器 

    帶雙口RAM的接收器模塊如圖4所示。 

    Data_in 串行輸入 

    Cs_rd   雙口RAM的片選信號 

    Rd      雙口RAM的讀使能信號 

    addr_rd 雙口RAM的地址線 

    Data_rd 雙口RAM的數據線 

    串口接收器采用雙口RAM與視頻圖像處理部分對接,接收器將接收到的串行數據轉換為并行數據并將其存儲到雙口RAM中。視頻圖像處理部分在進行數據處理時則可根據雙口RAM的控制端口將并行數據讀出并進行處理,其讀出數據過程與在發送器中寫數據過程類似。 

    在接收一個串行數據幀的起始位時,是由邏輯1轉為邏輯0來判斷的。為了避免毛刺(周期很短)的影響,能夠得到正確的起始位信號,必須要求接收到的起始位至少有1/4都是屬于邏輯0才可認定接收到的是起始位。因為波特率發生器產生的時鐘頻率為接收串行數據波特率的16倍,所以計數4次就可以去除毛刺的影響。 

    接收器采用狀態機風格進行描述,共分為5個狀態:開始狀態S0、延遲狀態S1、等待狀態S2、移位狀態S3、停止狀態S4。 

    系統復位后,對所要用到的寄存器初始化,進入S0狀態。 

    開始狀態S0: 如果串口輸入Data_in為0且維持4個clk_16x,就判斷起始位信號(低電平)到來,進入S1狀態。 

    延遲狀態S1:計數4次clk_16x,再加上S0狀態已經計數的4次,共8次。因為接收器采用的時鐘clk_16x為波特率的16倍,所以一個串行位有16個clk_16x 時鐘周期,則計數8次可以保證采樣點在起始位電平的中間。進入S2狀態。 

    等待狀態S2:計數16次clk_16x,即:采樣點在下一個串行位的中間。然后,判斷是否已經移位了8次,若沒有,則轉入S3狀態;否則,轉入S4狀態。 

    移位狀態S3:將串行輸入Data_in賦給內部移位寄存器的最高位shift_reg1[7],同時實現shift_reg1從高位向低位移位一次。進入S2狀態。 

    停止狀態S4:將shift_reg存到雙口RAM中。判斷是否已將需要接收的數據個數接收完,若沒有,則在雙口RAM中的存儲地址自動累加,否則,雙口RAM中的存儲地址清0。進入S0狀態。 

3 仿真驗證

    在實驗中,選用了Altera公司的Cyclone系列EP1C12024017芯片,采用Verilog HDL語言進行描述,用QuartusII5.1進行綜合、仿真。仿真中,先進行各個模塊的仿真,然后采用自發自收方式仿真,即將發送器的發送輸出串口和接收器的接收輸入串口直接連接,比較接收到的數據是否和發送的一樣。仿真結果表明,串口的接收和發送工作完全正確。圖5、圖6給出了波特率發生器仿真波形和自發自收方式仿真波形。將程序下載到芯片中運行,通信數據完全正確,電路工作穩定、可靠。

 

 

    本設計采用雙口RAM實現串口與視頻圖像處理部分的異步通信。設計中大量采用參數化設計,雙口RAM的存儲空間大小、傳輸波特率和系統主頻均可根據實際使用要求靈活調整;通用性強,只需將發送器的場同步發送控制信號改為所要求的發送控制信號,就可實現FPGA與一般串口通信系統通信。 

參考文獻

[1] 王誠,吳繼華.Altera FPGA/CPLD設計.北京:人民郵電出版社,2005. 

[2] 張兆揚.工業電視.北京:科學出版社,1982. 

[3] 蘇光大.微機圖像處理系統.北京:清華大學出版社,2000. 

[4] 賀前華.基于FPGA的視頻轉換系統的實現.微電子學與計算機,2003,(5). 

[5] Henry Chang,Larry Cooke.Surviving the SOC Revolution-A Guide to Platform-Based Design.Kluwer Academic Publishers,1999. 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 亚洲系列在线 | 精品国产美女福利到在线不卡 | 97国产精品欧美一区二区三区 | 114毛片免费观看网站 | 亚洲在线免费免费观看视频 | 黄在线观看网站 | 成人高清视频免费观看 | 日本成人免费在线 | 99国产在线播放 | 国产精品hd免费观看 | 欧美日韩第三页 | 国产主播精品福利19禁vip | 国产中文字幕免费观看 | 国产精品免费aⅴ片在线观看 | 一级国产视频 | 日本高清在线精品一区二区三区 | 男人天堂视频网 | 俄罗斯美女在线观看一区 | 精品国产91在线网 | 午夜三级国产精品理论三级 | 波多野结衣在线视频观看 | 久草在线青青草 | www.色片| 高清国产美女一级毛片 | 国内精品影院久久久久 | 日本特黄特色 | 久久久久久久国产高清 | 国产精品秦先生手机在线 | 国产国语对白一级毛片 | 欧美成人亚洲国产精品 | 亚洲欧美国产日韩天堂在线视 | 日韩高清免费观看 | 欧美视频在线观 | 成人精品免费网站 | 亚洲人成片在线观看 | 国产免费福利体检区久久 | 亚洲免费人成在线视频观看 | 日本xxxxx久色视频在线观看 | 黄色网址www| 国产精品成人一区二区不卡 | 欧美成人免费全部色播 |