FPGA 視頻數據輸入輸出直通工程:
- 屏:13.2吋8bit色深,屏幕分辨率為1440*1920@60,具有兩個Port,每個Port有4個差分數據對與1個差分時鐘對,差分對均支持LVDS協議
- 芯片:Cyclone V系列FPGA
- 目的:通過FPGA的LVDS SerDes RX接口輸入8bit 色深RGB圖像數據,然后再通過LVDS SerDes TX接口輸出8bit 色深RGB圖像數據,是個直通工程
一、13.2吋屏
?1.1 13.2吋屏參數:
DCLK frequency = horizontal line*vertical field*60=783*1962*60=92_174_760Hz≈ 92.17MHz
DCLK(即,Data Clock)就是Pixel Clock。
1.2?屏的數據傳輸格式:
該屏有兩個Port,是8bit 色深圖像,傳輸的數據格式如下圖:
由圖可知:
- 該屏有兩個Port,分奇偶Port(即,Odd Port與Even Port)
- 每個Port有4個差分數據對與1個時鐘差分對
- 每個Port的LVDS數據格式相同
- 差分時鐘的占空比為4/7,且差分時鐘頻率與數據速率為1:7
- 差分時鐘與差分數據對之間的相位關系,即,差分時鐘高電平中間時刻對應一個像素周期的開始時刻
通過VESA的標準協議可知,VESA的10bit屏的接口兼容8bit屏接口。如下圖:
VESA:單port?8bit 屏:4個數據差分對+一個像素時鐘差分對Pixel Clock | |||||||
數據差分對 | T1 | T2 | T3 | T4 | T5 | T6 | T7 |
0+/- | R0 | R1 | R2 | R3 | R4 | R5 | G0 |
1+/- | G1 | G2 | G3 | G4 | G5 | B0 | B1 |
2+/- | B2 | B3 | B4 | B5 | HS | VS | DE |
3+/- | R6 | R7 | G6 | G7 | B6 | B7 | XX |
VESA:單port?10bit 屏:4個數據差分對+一個像素時鐘差分對Pixel Clock | |||||||
數據差分對 | T1 | T2 | T3 | T4 | T5 | T6 | T7 |
0+/- | R0 | R1 | R2 | R3 | R4 | R5 | G0 |
1+/- | G1 | G2 | G3 | G4 | G5 | B0 | B1 |
2+/- | B2 | B3 | B4 | B5 | HS | VS | DE |
3+/- | R6 | R7 | G6 | G7 | B6 | B7 | XX |
4+/- | R8 | R9 | G8 | G9 | B8 | B9 | XX |
?參考:LVDS電平標準與LCD屏的LVDS數據格式-CSDN博客
為了提高FPGA系統兼容性,在編寫Verilog程序時,用10bit 色深的VESA標準協議。
二、Cyclone V的LVDS SerDes結構
2.1 LVDS Receiver結構
2.2 LVDS Transmitter結構
三、Intel FPGA的LVDS SerDes IP配置
3.1 添加LVDS SerDes IP
IP添加方式:在IP Catalog中輸入LVDS+回車,可選擇ALTLVDS_RX與ALTLVDS_TX兩個LVDS SerDes IP進行參數設置。
3.2?rx_serdes_ip
3.2.1 rx_serdes_ip參數設置
3.2.2 例化rx_serdes:
//定義接口
reg? [4:0] ? rx_datao_p;
reg? [4:0] ? rx_datae_p;reg pixel_clk_in;
wire ? ?[69:0] ?rx_out;
wire?pixel_clk_out;
//例化
lvds_rx_1?u1_lvds_rx_1(
?? ?.rx_in?? ??? ??? ??? ??? ?({rx_datao_p, rx_datae_p}),
?? ?.rx_inclock?? ??? ??? ??? ?(pixel_clk_in),
?? ?.rx_out?? ??? ??? ??? ??? ?(rx_out),
?? ?.rx_outclock ? ? ? ? ? ?(pixel_clk_out)
?? ?);?? ?
3.3 tx_serdes
3.3.1?tx_serdes_ip參數設置
3.3.2 例化tx_serdes
reg ? ? [34:0] ?tx_datao;
reg ? ? [34:0] ?tx_datae;
wire [4:0] ? tx_datao_p;wire [4:0] ? tx_datae_p;
lvds_tx? u1_lvds_tx?(
? ? .pll_areset (tx_reset),
? ? .tx_in ? ? ?({7'b1100011, tx_datao, 7'b1100011, tx_datae}),
? ? .tx_inclock (pixel_clk_out),
? ? .tx_out ? ? ({tx_cko_p, tx_datao_p, tx_cke_p, tx_datae_p}));
注意: {7'b1100011, tx_datao, 7'b1100011, tx_datae}中的兩個7'b1100011是兩個TX Port的Pixel Clock,結合LVDS Transmitter中的Serializer工作機制即可理解。
四、附件參考
Cyclone? V Device Handbook Volume 1: Device Interfaces and Integration
?