RGB Resampler IP核的测试

关于RGB Resampler IP核的测试

1.RGB Resampler功能描述

将输入的RGB数据流转换成其它格式的RGB数据流。

2.功能验证

设置源图像像素数据为:3X4格式。

设置RGB Resampler参数如下图所示,将24-bit RGB格式转换为40-bit RGBA格式。

顶层文件的编写:

 1 module top(
 2     clk_clk,
 3     reset_reset_n,
 4     video_rgb_resampler_avalon_rgb_source_ready,
 5     video_rgb_resampler_avalon_rgb_source_startofpacket,
 6     video_rgb_resampler_avalon_rgb_source_endofpacket,
 7     video_rgb_resampler_avalon_rgb_source_valid,
 8     video_rgb_resampler_avalon_rgb_source_data,
 9 );
10
11     input clk_clk;
12     input reset_reset_n;
13     input video_rgb_resampler_avalon_rgb_source_ready;
14     output video_rgb_resampler_avalon_rgb_source_startofpacket;
15     output video_rgb_resampler_avalon_rgb_source_endofpacket;
16     output video_rgb_resampler_avalon_rgb_source_valid;
17     output [39:0]video_rgb_resampler_avalon_rgb_source_data;
18
19  RGB_format u1 (
20   .clk_clk                                             (clk_clk),
21   .reset_reset_n                                       (reset_reset_n),
22   .video_rgb_resampler_avalon_rgb_source_ready         (video_rgb_resampler_avalon_rgb_source_ready),
23   .video_rgb_resampler_avalon_rgb_source_startofpacket (video_rgb_resampler_avalon_rgb_source_startofpacket),
24   .video_rgb_resampler_avalon_rgb_source_endofpacket   (video_rgb_resampler_avalon_rgb_source_endofpacket),
25   .video_rgb_resampler_avalon_rgb_source_valid         (video_rgb_resampler_avalon_rgb_source_valid),
26   .video_rgb_resampler_avalon_rgb_source_data          (video_rgb_resampler_avalon_rgb_source_data)
27  );
28
29 endmodule 

Testbench的编写:

initial
begin
   reset_reset_n = 0; #10; reset_reset_n = 1;
    clk_clk = 1; forever #10 clk_clk = ~clk_clk;
end

always@(posedge clk_clk or negedge reset_reset_n)
    if(!reset_reset_n)
        video_rgb_resampler_avalon_rgb_source_ready = 1‘b0;
    else
        video_rgb_resampler_avalon_rgb_source_ready = 1‘b1;

ModelSIM仿真波形:

波形分析: 输出source_data为40-bit,在start---end之间输出12个数据。

3.将224X224 24-bit RGB图像转换为40-bit RGBA 图像

参数配置:

modelsim仿真并导出modelsim中生成的图像像素数据:

integer w_file;
initial w_file = $fopen("video_rgb_resampler_avalon_rgb_source_data.txt");
always@(posedge clk_clk)
    $fdisplay(w_file, "%d", video_rgb_resampler_avalon_rgb_source_data); 

40-bit RGBA数据格式:

在Matlab中进行数据处理:

fd = fopen(‘video_rgb_resampler_avalon_rgb_source_data.txt‘);
A =uint64(fscanf(fd,‘%f‘));
fclose(fd);
B = uint64(zeros(224,224));

A1 = uint64(zeros(50176,1));
A2 = uint64(zeros(50176,1));
A3 = uint64(zeros(224,224));

R1 = uint64(zeros(50176,1));
R2 = uint64(zeros(50176,1));
R3 = uint64(zeros(224,224));

G1 = uint64(zeros(50176,1));
G2 = uint64(zeros(50176,1));
G3 = uint64(zeros(224,224));

B1 = uint64(zeros(50176,1));
B2 = uint64(zeros(224,224));

for j = 1:224
    for i = 1:224
        B(j,i) = A((j-1)*224+i);
    end
end

% A---1111 1111 11 --- 0000 0000 00 --- 0000 0000 00 --- 0000 0000 00
% R---0000 0000 00 --- 1111 1111 11 --- 0000 0000 00 --- 0000 0000 00
% G---0000 0000 00 --- 0000 0000 00 --- 1111 1111 11 --- 0000 0000 00
% B---0000 0000 00 --- 0000 0000 00 --- 0000 0000 00 --- 1111 1111 11  

a = uint64(bin2dec(‘1111111111000000000000000000000000000000‘));
r = uint64(bin2dec(‘0000000000111111111100000000000000000000‘));
g = uint64(bin2dec(‘0000000000000000000011111111110000000000‘));
b = uint64(bin2dec(‘0000000000000000000000000000001111111111‘));

%---A
for i = 1:50176
    A1(i) = bitand(A(i),a);
end

for i = 1:50176
    A2(i) = bitshift(A1(i),-30);
end

for j = 1:224
    for i = 1:224
        A3(j,i) = A2((j-1)*224+i);
    end
end

%---R
for i = 1:50176
    R1(i) = bitand(A(i),r);
end

for i = 1:50176
    R2(i) = bitshift(R1(i),-20);
end

for j = 1:224
    for i = 1:224
        R3(j,i) = R2((j-1)*224+i);
    end
end

%---G
for i = 1:50176
    G1(i) = bitand(A(i),g);
end

for i = 1:50176
    G2(i) = bitshift(G1(i),-10);
end

for j = 1:224
    for i = 1:224
        G3(j,i) = G2((j-1)*224+i);
    end
end

%---B
for i = 1:50176
    B1(i) = bitand(A(i),b);
end

for j = 1:224
    for i = 1:224
        B2(j,i) = B1((j-1)*224+i);
    end
end

需要注意的问题:

源文件中的数据值比较大,如果以十进制的方式读入数据,会出现如下问题:

如果以16进制的形式读入,则不会出现此问题:

时间: 2024-10-08 03:37:42

RGB Resampler IP核的测试的相关文章

FPGA学习笔记之FIFO IP核

FIFO总结文档 何为FIFO .? FIFO(First In First Out ) 先进先出是一个常用于数据缓存的一个数据缓冲器. fifo主要有WRREQ(写信号)WRclk(写时钟)data(写数据)wrfull(写满标志)wrempty(写空标志)wrusedw(告知里面还有多少数据) Rdreq(读信号)rdclk(读时钟)rdfull(读满标志)rdempty(读空标志)rdusedw(告知里面数据个数) 以上所有信号全是高电平有效. 为什么要用fifo? 在项目设计中,我们通常

zedboard zynq 学习 sobel 边缘检测 IP核 制作 根据 文档 Xapp890

官方文档http://www.xilinx.com/support/documentation/application_notes/xapp890-zynq-sobel-vivado-hls.pdf 准备工作 下载 工程文件 http://pan.baidu.com/s/1eQqwjBk 这是我用百度云分享的 如果不行了, 可以用 官方链接 https://secure.xilinx.com/webreg/clickthrough.do?cid=193509 sobel 算子边缘检测原理 这里不

Lattice 的 Framebuffer IP核使用调试笔记之IP核生成与参数设置

本文由远航路上ing 原创,转载请标明出处. 这节笔记记录IP核的生成以及参数设置. 先再IP库里下载安装Framebuffer 的ipcore 并安装完毕. 一.IP核的生成: 1.先点击IP核则右边会出现生成对话框: 按箭头指示顺序进行设置:要设置生成ip核的路径(可以新建一个文件夹ipcore来放置IP核,若有多个IP核则在ipcore下分别建立文件夹),IP核的名字,以及语言的类型:verilog或VHDL.最后点击Customize. 2. 在上一步设置之后会出现下面的设置界面,先设置

FIR IP核使用

1. 系数由matlab中的fdatool产生,放入coe文件中, radix=10;coefdata=-0.062121140095564 ,  -----0.049142699407068; 2.可以选择滤波器的类型,此处选择插值滤波器,插值倍数设为8. 3.时钟: input sampling frequency   输入该滤波器数据的采样速率. clock   frequency    fir IP核的工作时钟, 他们之间的关系为   clock   frequency  >   inp

基于Virtext6平台的GTX IP核基本设置说明

本工程基于以下条件使用: 板卡:DBF板v3.0 芯片型号:Virtex6 315T ISE版本:14.7 IP核版本: v6_gtxwizard : 1.12 一.IP核配置进行流程 第一页配置:线速率和编码 TX.RX的 Line Rate .Data Path Width .Reference Clock根据项目的实际情况进行选择 Reference Clock :表示 外界时钟输入给GTX模块的参考时钟 注: 红色框代表必须按照截图设置. 绿色框代表根据项目需求进行设置. 黄色框代表,可

Xilinx Vivado的使用详细介绍(3):使用IP核

IP核(IP Core) Vivado中有很多IP核可以直接使用,例如数学运算(乘法器.除法器.浮点运算器等).信号处理(FFT.DFT.DDS等).IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度. 使用Verilog调用IP核 这里简单举一个乘法器的IP核使用实例,使用Verilog调用.首先新建工程,新建demo.v顶层模块. 添加IP核 点击Flow Navigator中的IP Catalog. 选择Math Functions下

IP核之初——FIFO添加以太网MAC头部

说白了,IP核就是别人做好了的硬件模块,提供完整的用户接口和说明文档,更复杂的还有示例工程,你只要能用好这个IP核,设计已经完成一半了.说起来容易,从冗长的英文文档和网上各个非标准教程中汲取所需,并灵活运用还是需要下一番功夫的. 我认为其中最重要的几点如下: 1) 提供给IP核正确的时钟和复位条件: 2) 明确各个重要用户接口功能: 3) 掌握所需指令的操作时序: 4) 知道内部寄存器地址及功能和配置方式.顺序: 5) 会从官方示例工程中学会IP核正确使用方式: 今天来讲讲一个最常用的IP核,F

Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核

Zedboard OLED Display Controller IP v1 介绍 Author:zhangxianhe 本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的说明.运行在ARM处理器系统上的测试应用程序用于通过其驱动程序的功能与IP进行通信. Vivado设计套件被用作开发环境.硬件验证是在Zedboard上完成的,然而,这个IP可以很容易地应用于其他主板或嵌入式系统. 平台 硬件:Zedboard xc7z020clg484-1 软件:Vivado 2

自定义AXI总线形式SPI接口IP核,点亮OLED

一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做些项目时可以直接调用Xilinx提供的SPI IP核,这里仅出于练习的目的考虑. 二.接口时序分析 本项目用的OLED型号为UG-2832HSWEG04,核心控制器是SSD1306.该芯片支持并口.I2C以及SPI接口,这里采用4线SPI作为数据总线.4线SPI接口包括: SCLK:串行时钟,SSD