EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Tronlong123 于 2023-6-9 14:44 编辑 ' D) @8 X6 p* r! g) h8 b" u% M
5 s( w' [5 G0 A( _& a+ d' F% B+ Z+ _前 言本文主要介绍FPGA视频开发案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx SDK 2017.4。
0 l, N: D! C4 J* | 评估板简介本案例采用的评估版为创龙科技TL5728F-EVM,它是一款基于TI Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + Xilinx Artix-7 FPGA处理器设计的高端异构多核评估板,由核心板与评估底板组成。AM5728与Artix-7在核心板内部通过GPMC、I2C通信总线连接,在评估底板通过PCIe通信总线连接。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估板接口资源丰富,引出双路千兆网口、双路SFP光口、USB 3.0、CAN、RS485、SATA、HDMI、GPMC、FMC等接口,方便用户快速进行产品方案评估与技术预研。 * G) q7 ^* g: T, e3 x: V
在进行本文如下操作前,请先按照调试工具安装文档安装Xilinx Vivado开发工具包。本文默认使用创龙科技的TL-DLC10下载器进行操作演示。 根据评估底板丝印将Artix-7的BOOT SET拨码开关(SW3)拨至01(1~2),此档位为SPI FLASH启动模式(此模式可进行程序在线加载、固化并离线启动),并将评估板通过下载器正常连接至PC机。 * p# V% |3 n& H% P% c
图 1
# w. ?) {9 _, F6 l) c5 Y: \" F cameralink_display案例cameralink_display案例分为FPGA程序与MicroBlaze裸机程序两部分。FPGA程序位于产品资料“4-软件资料\Demo\FPGA_Demo\All-Programmable-FPGA-demos\cameralink_display\hw\”目录下,包含project和bin两个目录。基于MicroBlaze软核的裸机程序位于产品资料“4-软件资料\Demo\All-Programmable-FPGA-demos\cameralink_display\sw\baremetal_demo”目录下,包含project和bin两个目录。
0 ^; ~& m r/ a$ `4 k( h9 A2 l g 案例功能案例功能:评估板通过FMC视频模块TLCameraLinkF的CameraLink接口采集分辨率为1280 x 1024的视频,并通过TLCameraLinkF模块的HDMI OUT接口输出采集到的视频。 ![]()
# {9 P I4 n; |( ?图 2 程序功能框图
, S6 u8 H# \7 Y4 P$ |- a% m
本案例FPGA程序支持CameraLink Full模式(工程为cameralink_display_full_xx)与CameraLink Base模式(工程为cameralink_display_base_xx)。 Full模式工程编译后生成的可执行文件为cameralink_display_full_xx.bit,Base模式工程编译后生成的可执行文件为cameralink_display_base_xx.bit。 5 L; q6 f* k9 \4 b/ t) T
操作说明本案例支持三款CameraLink相机,具体说明如下。 表 1 厂家 | 相机型号 | 支持模式 | 相机性能 | Microview (北京微视) | RS-A5241-CM107-S00 (黑白CameraLink相机) | Full | 全幅面2560*2048下,帧率可达107fps | Base | RS-A5241-CC107-S00 (彩色CameraLink相机) | Full | 全幅面2560*2048下,帧率可达107fps | Base | MVC1381SAM-CL60-S00 (黑白CameraLink相机) | Base | 全幅面1280*1024下,帧率可达60fps |
Full模式硬件连接方法 如采用Full模式,请将创龙科技的TLCameraLinkF模块连接至评估板FMC接口,评估板J1跳线帽选择1.8V档位,以配置FMC IO的BANK电压为1.8V。 请将CameraLink相机的CL0通过数据线连接至TLCameraLinkF模块的CameraLink1接口,将CameraLink相机的CL1通过数据线连接至TLCameraLinkF模块的CameraLink2接口,将HDMI显示屏通过数据线连接至TLCameraLinkF模块的HDMI OUT接口。 ; b, s' H7 g' N: P/ }( E7 J# A+ m
图 3 Base模式硬件连接方法 如采用Base模式,请将创龙科技的TLCameraLinkF模块连接至评估板FMC接口,评估板J1跳线帽选择1.8V档位,以配置FMC IO的BANK电压为1.8V。 请将CameraLink相机的CL0通过数据线连接至TLCameraLinkF模块的CameraLink1接口,将HDMI显示屏通过数据线连接至TLCameraLinkF模块的HDMI OUT接口。 c9 S. Q; F: t$ }2 o
图 4 下面对三款不同型号的CameraLink相机在Full/Base模式下的操作步骤进行说明。 1.黑白CameraLink相机RS-A5241-CM107-S00,Full模式 请运行Full模式程序,即可看到串口调试终端打印如下信息。请先输入"1"选择相机型号为RS-A5241-CM107-S00,再输入"1"选择为Full模式。配置完成后,即可看到HDMI显示屏输出黑白图像。
, N( k- Z/ \% J! L: \& Z# Q图 5
0 u1 [8 @8 O8 Y8 K( _: L& a2. 彩色CameraLink相机RS-A5241-CC107-S00,Full模式 请运行Full模式程序,即可看到串口调试终端打印如下信息。请先输入"2"选择相机型号为RS-A5241-CC107-S00,再输入"1"选择为Full模式。配置完成后,即可看到HDMI显示屏输出彩色图像。
- m' O& f* f# d+ Y4 _图 7 % h4 r& X; V# ~3 z6 S
图 8 备注:由于彩色CameraLink相机RS-A5241-CC107-S00无白平衡功能,故图像颜色偏绿。 3.黑白CameraLink相机RS-A5241-CM107-S00,Base模式 请运行Base模式程序,即可看到串口调试终端打印如下信息。请先输入"1"选择相机型号为RS-A5241-CM107-S00,再输入"2"选择为Base模式。配置完成后,即可看到HDMI显示屏输出黑白图像。 ) Z3 W/ [1 [1 G' S. }* W
图 9 ; g6 k- N; Q; W4 J4 [! ? M( B- b
图 10 4.CameraLink相机RS-A5241-CC107-S00,Base模式 请运行Base模式程序,即可看到串口调试终端打印如下信息。请先输入"2"选择相机型号为RS-A5241-CC107-S00,再输入"2"选择为Base模式。配置完成后,即可看到HDMI显示屏输出彩色图像。
5 q6 U7 G( `4 {+ K( K图 11 , Z' N7 z- p: F
图 12 备注:由于彩色CameraLink相机RS-A5241-CC107-S00无白平衡功能,故图像颜色偏绿。
5 p+ Q$ e( T2 J( X
5.黑白CameraLink相机MVC1381SAM-CL60-S00,Base模式 请运行Base模式程序,即可看到串口调试终端打印如下信息。请输入"3"选择相机型号为MVC1381SAM-CL60-S00。配置完成后,即可看到HDMI显示屏输出黑白图像。
1 K$ _ e3 r# A! J8 d图 13 . e, J- V, S+ [% I3 Q" ]7 c$ G# ?
图 14 * x/ g; D! B8 r7 R
关键代码(MicroBlaze)MicroBlaze裸机源码为"sw\baremetal_demo\project\cameralink_display\src\",关键代码说明如下。 - main函数。
1 {- p3 k% {$ P' v/ y, \1 ~
l; j& i. H' @! `5 r% T
3 h& ]# o5 o9 ]$ r图 15 0 w! F0 C' V4 S Q: I& |
图 16
+ H" c: b; {5 M( C b
图 17 l2 c4 F% h/ v; S2 q. z
2.初始化VDMA,将采集到的视频数据缓存至DDR,再进行HDMI视频输出。 图 18
. \( Y. q$ d# c3 F/ I9 e. {+ n. M" o图 19 4 C0 r/ j7 H* A- u
图 20 6.初始化Sensor Demosaic IP核,以将彩色CameraLink相机的Bayer格式视频数据转化为RGB格式。 % ]. i- k7 Y( f% q( L8 e% p
图 21
, t o* H+ o) W1 l A图 22 Vivado工程说明点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址,MicroBlaze可通过对应地址对IP核进行控制。 ' U, v9 B! z+ i/ g
图 23 本案例分别支持CameraLink Full模式(工程为cameralink_display_full_xx)与CameraLink Base模式(工程为cameralink_display_base_xx)。两者区别如下: - Full模式Vivado工程:Pixels Per Clock配置为8,即每个时钟8个像素。
- Base模式Vivado工程:Pixels Per Clock配置为2,即每个时钟2个像素。; m- w' A8 Z* {' W
8 D% M$ j( g: | q' A6 b1 Y1 x
/ O2 Q5 ^, J5 I' N$ P图 24 Full模式 0 Q5 ]3 F: S9 f* o
图 25 Base模式 CameraLink Full模式Vivado工程顶层文件为"hw\project\cameralink_display_full_xx\cameralink_display.srcs\sources_1\imports\hdl\cameralink_display_full.v"。 CameraLink Base模式Vivado工程顶层文件为"hw\project\cameralink_display_base_xx\cameralink_display.srcs\sources_1\imports\hdl\cameralink_display_base.v"。 关键代码说明如下。 - 定义模块接口。
* V! j! q- C1 i1 K" T7 j. U4 G g
# C- L4 I1 g1 u+ ?& ^" ?图 26 - 使用STARTUPE2原语输出复位信号。
1 p1 N( R. ~% b- K/ K: o
: ]/ y3 |, f' q* D$ y5 V
! ]/ n# V# K' }5 Z3 P1 o图 27 - 调用Block Design。6 B$ U& M+ l6 p* o: N6 Q
- ^/ h5 ], z' H; k& M z 7 B! Z/ o. U9 t5 n& u
图 28 模块/IP核配置lvds_n_x_1to7_sdr_rx模块本案例使用lvds_n_x_1to7_sdr_rx模块将CameraLink相机输入的差分视频数据转化成并行视频数据。 lvds_n_x_1to7_sdr_rx模块开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《xapp585-lvds-source-synch-serdes-clock-multiplication.pdf》。lvds_n_x_1to7_sdr_rx模块源码文件为Vivado工程"cameralink_display.srcs\sources_1\imports\hdl\lvds_n_x_1to7_sdr_rx.v",具体配置说明如下。 - delay_refclk_in接入由Clocking Wizard输出的200MHz参考时钟。
5 F7 e/ t6 f( S$ h3 n/ W) z$ K; w7 o2 `2 K2 ]" N
p: v% E4 v, [1 ~& E9 T4 P+ u$ q图 29 - 配置N(通道数量)为3对应Full模式,配置N为1则对应Base模式。配置X为4,表示“每个通道的数据差分对数量为4”。' U* B7 ^% _5 T% D7 I% a; J
0 Y& W& A" O; N& ]5 e! ]; ~, f- c
- Base模式:单通道,每通道数据差分对为4组,需1个连接器。
- Medium模式:双通道,每通道数据差分对为4组,需2个连接器。
- Full模式:三通道,每通道数据差分对为4组,需2个连接器。. j6 E5 U0 Z% E; {9 p
: K& x2 S8 f; I6 T8 \/ M p& K
% F2 T& y, ^3 B6 |1 Z# _1 d: _图 30 cameralink_bit_allocation_rx模块本案例使用cameralink_bit_allocation_rx模块将转化后的并行视频数据进行重组,分离出行同步信号、场同步型号、数据有效信号和像素数据。 cameralink_bit_allocation_rx模块源码为Vivado工程"cameralink_display.srcs\sources_1\imports\hdl\cameralink_bit_allocation_rx.v",具体配置与关键代码说明如下。 - 配置N(通道数量)为3对应Full模式,配置N为1则对应Base模式。
' j+ S% ~9 r9 O# ^' b. n5 @0 t6 ]* j- }- O( N
- Base模式:单通道,输出端PortA、PortB、PortC有效。
- Medium模式:双通道,输出端PortA、PortB、PortC、PortD、PortE、PortF有效。
- Full模式:三通道,输出端PortA、PortB、PortC、PortD、PortE、PortF、PortG、PortH有效。
! M! @# S$ J. r, K! ^6 M9 c: }# c
" @2 H$ U, D0 t" [1 n- a1 T1 x 5 C$ I! G! s4 g0 U2 G
图 31 - data_in的数据排列格式。
0 u% @5 b& ]4 j. U, z
2 |2 w X! E* i7 F; N* W
下图为Base模式单通道4组差分对图像数据排列,例如TxIN[7:6]对应D[0:1],TxIN[4:0]对应D[2:6]。 . k7 V ], s: s" Q7 B$ g" s8 d3 u
图 32 将Base模式单通道4组差分对图像数据保存在data_in数组的排列顺序如下。 ) j) A6 ^1 N4 N6 x+ t! {) W7 M4 U. Q( r
图 33 - 分离行同步信号、场同步信号、数据有效信号和像素数据。: a6 ^0 o- h, g& N. o# Z
9 U7 g! D. R2 U1 ?5 t) B- S2 @: K
根据CameraLink V2.0协议,RX24对应行有效信号LVAL(行同步信号),RX25对应帧有效信号FVAL(场同步信号),RX26对应数据有效信号DVAL,具体对应关系如下。
' `3 n% M% I5 W2 y图 34 根据上图说明,即可将行同步信号、场同步型号、数据有效信号和像素数据进行分离。 # `& [2 P1 ?% H0 X( K
图 35 VDMA IP核本案例使用VDMA IP核进行视频数据缓存。 VDMA(AXI Video Direct Memory Access) IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg020_axi_vdma.pdf》。 VDMA IP核寄存器列表如下,其中S2MM_xx将视频数据缓存至DDR,MM2S_xx将视频数据从DDR中取出。 3 k- W# e! P1 X1 B( C* ~3 G
图 36
$ I% }* B* @ r6 }! N% P图 37 VDMA IP核具体配置说明如下。 - Frame Buffers配置为4个。
- Write Burst Size、Read Burst Size均配置为128。
- 读通道的Stream Date Width配置为8。
- 读/写通道的Line Buffer Depth均配置为2048。
' S# G6 R9 L$ c2 f# E3 r) H v% d5 s
0 Y9 V, F: f2 \- N- Y; G( P图 38 - 点击Advanced,保持默认配置,即可避免VDMA同时读写同一个Buffer,造成视频数据传输乱码。
0 I5 R+ d+ ]4 L& w) \9 h, k1 e7 I+ c5 e+ q8 Q8 W5 O8 q
# \' Y2 D! [8 F; j3 w+ O5 O/ O. U图 39 Video In to AXI4-Stream IP核本案例使用Video In to AXI4-Stream IP核将并行视频信号转换为AXI4-Stream视频流。 Video In to AXI4-Stream IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg043_v_vid_in_axi4s.pdf》,具体配置说明如下。 - Full模式:Pixels Per Clock配置为8,即每个时钟8个像素。Base模式:Pixels Per Clock配置为2,即每个时钟2个像素。
- 视频格式配置为Mono/Sensor。
- 数据位宽配置为8bit。7 v+ o6 B& U N% H$ V {- }
. n% G' C/ g1 A P9 Q4 G( q7 j
( L( t! |: S) s
图 40 AXI4-Stream to Video Out IP核本案例使用AXI4-Stream to Video Out IP核将AXI4-Stream视频流转化为并行视频信号。 AXI4-Stream to Video Out IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg044_v_axis_vid_out.pdf》,具体配置说明如下。 - FIFO Depth配置为2048。
- Clock Mode配置为Independent(独立时钟)。' [" o& U8 u/ F% C+ _5 j1 H, Z) F
0 s: _" a' t- \) O
/ I0 [4 {0 E; d$ f9 w图 41 Video Mixer IP核本案例使用Video Mixer IP核将视频数据叠加到1920 x 1080分辨率的视频中。 Video Mixer IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg243-v-mix-v2.0.pdf》,具体配置说明如下。 Mixer通过MicroBlaze配置寄存器进行使能。 6 k$ |, ?( K, s' V: F
图 42 - Number of Layers配置为3,其中Master Layer(s_axis_video)未使用,仅使用Layer1(s_axis_video1)与Layer2(s_axis_video2)。当采集黑白CameraLink相机的图像时,使用Layer1;当采集彩色CameraLink相机的图像时,使用Layer2。
- 配置可支持的最大分辨率为1920 x 1080。
- e% B F/ ~" F. G5 @& F( A: K" T m
- P# y. e% U, I5 e* L; P7 y; R 3 q( D& c' U8 R
图 43 VTC IP核本案例使用VTC IP核产生用于视频输出的时序。 VTC(Video Timing Controller) IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg016_v_tc.pdf》,具体配置说明如下。 - 点击Detection/Generation,确保不勾选"Include AXI4-Lite InteRFace"及"Enable Detection"。
( b% @; Z3 o. B6 R- @) E6 ^$ X$ C# Z
8 _3 N; H6 ]9 G6 [, ^图 44 - 点击Default/Constant,Video Mode配置为1080p,其余配置保持默认。
D8 \- }' l3 t# K z5 g
L7 N- Q1 H2 t" T: D5 [; B
2 ?) Q! c0 G8 ?' u# l图 45 Sensor Demosaic IP核本案例使用Sensor Demosaic IP核将彩色CameraLink相机的Bayer格式视频数据转化为RGB格式。 Sensor Demosaic IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg286-v-demosaic.pdf》,具体配置说明如下。图像宽高以及Bayer的格式,通过MicroBlaze配置寄存器进行设置。 9 V' T7 Y# l" e! k
图 46 由于Sensor Demosaic IP核视频数据输出格式为RBG,因此使用AXI4-Stream Subset Converter IP核将RBG转换成RGB,再进行视频输出。 # P: {( r' Q, X/ M
图 47 % ]' z# N. Y) C5 y. I
图 48 AXI4-Stream Switch IP核本案例使用AXI4-Stream Switch IP核选择黑白或彩色CameraLink相机视频数据进行处理。 AXI4-Stream Switch IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg085-axi4stream-infrastructure.pdf》,具体配置说明如下。本案例通过MicroBlaze配置寄存器,选择将S00_AXIS(视频数据输入通道)路由到M00_AXIS(黑白CameraLink相机视频数据处理通道)或M01_AXIS(彩色CameraLink相机视频数据处理通道)。 - Number of slave interfaces配置为1,即配置1个Slave接口。
- Number of master interfaces配置为2,即配置2个Master接口。
- Use control register routing配置为Yes,即使能AXI4-Lite接口。
( { Z% P8 j, L
- e2 |/ ~7 S) z6 ` 1 u- s9 H% y& D; ], K
图 49 Vivado工程编译申请IP核License如需重新编译工程或打开Video Mixer IP核,需在Xilinx官网申请Video Mixer IP核的免费License,并将其正确导入。License申请与导入方法,请查阅调试工具安装文档相关章节,其它IP核无需License。 成功导入后,可在View License Status窗口发现新添加的License。 ; q. h3 P( j) P* v0 K% ]$ Z' S( D
图 50 工程编译异常解决本案例包含HLS IP核,由于Vivado工程文件路径过长,可能导致工程编译过程中出现如下错误。 9 _; K' o5 B' e) @$ k
图 51 可在Tcl Console窗口执行如下命令,重新生成HLS IP核相关文件,即可正常编译工程。 Vivado# foreach ip_in_proj [get_ips] {compile_c [get_ips cameralink_display_bd_v_demosaic_0_0]}
" L, [8 v+ o4 f5 Z7 Y; Q图 52 Vivado# foreach ip_in_proj [get_ips] {compile_c [get_ips cameralink_display_bd_v_mix_0_0]}
+ p- I2 N0 T$ h' G- i8 ]& I; i图 53 更多嵌入式开发知识分享,欢迎关注Tronlong创龙~ * v" t, T& S, ^) T1 Q) G6 P
|