ebaz4205部署Yolo(六)—— 图像采集和推流(仅裸机)

部署运行你感兴趣的模型镜像

方案

开发板:ebaz4205

摄像头:ov5640

显示器:vga接口,1080p

vivado设计

时钟需求:74.25Mhz(PL晶振分频)、50Mhz和200Mhz(PS引出)

高速总线需求:AXI-HP 

VTC

输出:根据分辨率   输出视频显示同步信号    

clk:74.25Mhz(1024*720 60hz)  (用一个clock wizard生成)

如果是1080p下图要配置1080p,且要改VTC的输入时钟,1080p 60hz 时钟为148.5Mhz

vga接口

输入:使能信号、视频数据

输出:vga数据

根据有效信号使能,向vga输出16位显示数据。

`timescale 1ns / 1ps
module video_active(
    input       active_video,
    input    [15:0]   rgb_data_i,
    
    output    wire  [15:0]  rgb_data_out
);
    
assign rgb_data_out = (active_video == 1'b1) ? {rgb_data_i[7:0], rgb_data_i[15:8]}: 16'h0;
  
endmodule

AXI4-Stream to Video Out

输入:video_data 、 VTC输出的视频同步信号

输出:vga同步信号、视频数据

作用:将DDR取出的视频数据进行同步

输入输出位宽都为16bit

in_clk:200M                                out_clk:74.25Mhz(1024*720 60hz)

VDMA

通过高速接口连接至zynq,通过zynq读写内存中的视频数据,输出至stream to video_out

clk:200M

OV5640模块

verilog驱动(配置)ov5640摄像头(摄像头自带驱动晶振)

摄像头输入:视频数据1024*720(可配置)、同步信号、像素时钟

RTL输出:iic配置信号、复位、上电

50Mhz时钟用于输出配置信息

三个模块:iic通信模块、ov5640寄存器配置模块、sccb通信启动模块

代码托管:wrjxx/ov5640-驱动程序-verilog- (github.com)

1080p输出要改ov5640驱动中的寄存器配置,配置输出1080p的参数。(可参考github 1080p_cfg)

modelsim仿真(debug)

寄存器配置到100被复位,检测发现计数溢出导致。修改为时序逻辑后解决,成功输出304个寄存器配置。

AXI4-Stream to Video In

接收摄像头采集的数据,传到VDMA

输入:同步信号、像素时钟(pclk)、视频数据

输出:视频数据        (clk=200M) 

裸机测试(乒乓操作)

内存作为帧缓存(显存),进行乒乓操作来避免视频割裂。

VDMA的frame buffer设置 3帧缓存。

#include "xil_io.h"
#include "xil_types.h"
#include <stdio.h>
#include <sleep.h>
int main(){
	// read
	Xil_Out32(0x43000000,0x8B); // 对0x8b的解释:10001011  见下图
	Xil_Out32(0x43000000+0x5C,0x01000000); //指定三帧在ddr中的起始地址
	Xil_Out32(0x43000000+0x60,0x02000000);
	Xil_Out32(0x43000000+0x64,0x03000000);
	Xil_Out32(0x43000000+0x58,1920*2);
	Xil_Out32(0x43000000+0x54,1920*2); // 一个像素占两个字节(所以要x2)
	Xil_Out32(0x43000000+0x50,1080);

	//write
	Xil_Out32(0x43000000+0x30,0x8B);
	Xil_Out32(0x43000000+0xAC,0x01000000);
	Xil_Out32(0x43000000+0xB0,0x02000000);
	Xil_Out32(0x43000000+0xB4,0x03000000);
	Xil_Out32(0x43000000+0xA8,1920*2);
	Xil_Out32(0x43000000+0xA4,1920*2);
	Xil_Out32(0x43000000+0xA0,1080);

	return 0;
}

VDMA提供四种模式的 Genlock 同步。其中GenLock 同步锁相机制(保证读写同一块帧缓冲的顺序)。 

问题记录

vivado报错

外部输入时钟

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets ov5640_pclk_IBUF]
xdc文件添加,降级该错误

裸机测试推流失败

① vga无法驱动。 因为直接给vtc的clken接了constant 1。应该接PLL的locked,需要等PLL稳定后再对逻辑进行复位和使能。

② 摄像头无法驱动。跨时钟域处理问题导致亚稳态。。。。

ov5640接了全局复位,ps时钟,复位应该不会产生亚稳态。

要根据时钟源确定使能和复位信号的连接。注意时序。

显示问题

视频显示偏蓝绿色,寄存器错误配置为了YUV。修改后解决。

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值