01.测试例程pcie2screen
例程pcie2screen是配合myd-jx8mma7开发板所带的myir_pcie_5t_cmos 工程的测试例,它的作用是显示fpga所连接的摄像头所采集的视频。运行该程序后屏幕会显示一个标题为demo的窗口。
使用鼠标点击 ready按钮,demo 窗口会显示连续的视频,说明摄像头、ddr、pcie接口各部分正常。如果没有接摄像头,该程序会显示杂乱无章的图像。
该测试例的源码没有包括在sdk中,可以向米尔公司的技术人员索取。该实例程序是用qt开发的,使用了opengl技术。程序包括以下几个主要的类:
· mainwindow:qmainwindow子类,是显示窗口的。
· uopenglyuv:qopenglwidget子类,用于显示采集到的图像。该类的initializegl函数用于初始化opengl。paintgl函数是用于绘制图像的,其中最核心的语句是:
glteximage2d(gl_texture_2d, 0, gl_rgba, vw, vh, 0, gl_rgba, gl_unsigned_byte, prgb);
其中的prgb保存从fpga读取的数据。从这句我们可以看出该程序所要求的图像的格式。
· xdma_getimg:主线程类
· xdma_programe:对riffa接口进行了封装,其中的read_pack用于读取fpga数据,被主线程循环调用。其函数定义如下:
int xdma_programe::read_pack(char *pdata, int len)
{
//int buffer[1920 * 1080];
//int buffer[1024 * 768];
int buffer[1280 * 720];
int i;
if(dev_fd != null)
{
fpga_send(dev_fd, 0, buffer, len / 4, 0, 1, 25000);
fpga_recv(dev_fd, 0, buffer, len / 4, 25000);
memcpy(pdata, (char *)buffer, len);
return len;
}
else
{
return 0;
}
}
从函数中可以看出,在每次读数据前,该函数先向fpga写一次数据(数据无意义,和fpga的状态机有关),每次读入一整帧的数据。
02.fpga端程序的修改
fpga端的逻辑控制在chnl_tester.v中,它定义了一个状态机,用于对数据收发进行控制。状态机定义如下:
always @(posedge clk or posedge rst) begin
if (rst) begin
rlen <= #1 0;
rcount <= #1 0;
rstate <= #1 0;
rdata <= #1 0;
vout_vs_r <= #1 0;
end
else begin
case (rstate)
3'd0: begin // wait for start of rx, save length
if (chnl_rx) begin
rlen <= #1 chnl_rx_len;
rcount <= #1 0;
rstate <= #1 3'd1;
end
end
3'd1: begin // wait for last data in rx, save value
if (chnl_rx_data_valid) begin
rdata <= #1 chnl_rx_data;
rcount = rlen)begin
rstate <= #1 3'd2;
end
end
3'd2: begin // prepare for tx
if (read_valid) begin
rcount <= #1 0;
rstate <= #1 3'd3;
end
end
3'd3: begin // start tx with save length and data value
if (chnl_tx_data_ren) begin
//rdata <= #1 data_in;
rcount = rlen)
rstate <= #1 3'd4;
end
end
3'd4: begin
if (vout_vs_r)
rstate <= #1 3'd5;
else begin
vout_vs_r <= #1 1;
rstate <= #1 3'd4;
rcount <= #1 0;
end
end
3'd5: begin
if (vs_flag) begin
rstate <= #1 3'd0;
vout_vs_r <= #1 0;
end
else
rstate <= #1 3'd5;
end
endcase
end
end
我们手头没有摄像头进行测试,所以简单修改该程序,使程序发送蓝色渐变色带信号。
核心修改如下:
……
reg [31:0] rcolor = 0;
……
assign chnl_tx_data = (read_en)? {rcolor, rcolor}:64'd0;
……
3'd3: begin // start tx with save length and data value
if (chnl_tx_data_ren) begin
//rdata <= #1 data_in;
// if (rcount % 5 == 4)
rcolor = 255)
rcolor <= #1 0;
rcount = rlen)
rstate <= #1 3'd4;
end
end
……
03.测试结果
我们没有修改arm端的测试程序,仍然使用厂家提供的pcie2screen,只是重新烧写fpga程序。程序的运行效果参见如下:
米尔myc-jx8mma7核心板及开发板
米尔myc-jx8mma7核心板及开发板,采用arm+fpga的处理架构,采用nxp i.mx8m mini及xilinx artix-7处理器,四核 cortex-a53、cortex-m4、artix-7 cpu,1.8ghz主频,基于arm+fpga处理架构,具备高性能、低成本、低功耗等特点,两者各司其职,各自发挥原本架构的独特优势。搭载的artix-7 cpu对标zynq 7010的fpga资源,能够满足高速数据采集的需求,并且采用pcie高速通信,支持200~300mb/s的通信能力。能够提供出色的视频和音频体验,将媒体的特定功能与针对低功耗优化的高性能处理相结合,具备1080p 60hz的h.265和vp9解码器,满足高清显示的要求。
为了方便开发者研究评估,米尔提供配套myd-jx8mma7开发板,采用12v/2a直流供电,搭载了1路千兆以太网接口、2路sfp光模块接口、1路usb2.0协议m.2 b型插座的5g模块接口、1路sdio/串口协议的wifi/蓝牙接口、1路hdmi显示接口、1路lvds显示接口、1路mipi csi接口、1路dvp摄像头接口、1路音频输入输出接口、2路usb host type a、1路usb type-c、2路micro sd、1路fmc扩展接口、1路兼容树莓派扩展模块接口。
关注米尔,领先的嵌入式处理器模组厂商。
AliOS究竟是什么,会为汽车行业带来哪些价值
波峰焊设备应该维护哪些部位,该如何去维护
Apple Watch遭指控,心脏技术侵权心脏病学家?
智能机器人的发展历程
dfrobot优质鳄鱼夹连接线介绍
米尔ARM+FPGA架构开发板PCIE2SCREEN示例分析与测试
任正非以不成功就跳楼 逼出一个芯片女皇
一条SQL如何被MySQL架构中的各个组件操作执行的?
传感器技术在防盗技术方面的应用
苹果13.2.2系统好不好
RFID在电石生产上有什么用
TIOBE 指数的定义方式
小鹏NGP依然属于辅助驾驶,而不是无人驾驶
触摸屏电解电容的作用 电解电容符号表示
关于电流感应及效率分析的参考设计
什么是防爆对讲机,防爆对讲机的产生对一些行业造成了什么印象
3D打印机应该如何做3D打印设计
苹果获得全新家用供电途径专利
AI算力6年增长30万倍,软硬件能力增长破除深度学习“寒冬论”
历代天翼UIM手机卡图集 从一开始的32K容量到现在的512K到底发生了哪些变化