FPGA图像处理仿真:生成数据源的方法
免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。
读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。
本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。
若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。
前言
本章将介绍如何在仿真中将图像转化为数据流。
一、定义变参
parameter IMG_W = 640 ,//图像宽度
parameter IMG_H = 480 ,// 高度
parameter DATA_WIDTH = 64 //输出的位宽
二、定义模块接口
(
input clk ,
input rst_n ,
output hsync ,
output vsync ,
output [DATA_WIDTH-1:0] data
);
三、定义图像存储矩阵并初始化
reg [DATA_WIDTH-1:0] array [(IMG_W*IMG_H*8/DATA_WIDTH)-1:0];
initial
begin
$readmemh("C:/Users/ROG/Desktop/INTR_PRJ/project_1/project_1.sim/480.txt",array);
end
四、定义固参
localparam total_h = IMG_W/(DATA_WIDTH/8) + 100 ;
localparam total_v = IMG_H + 30 ;
注:多出来的行列用于图像消隐
五、逻辑设计
原理:通过两个计数器来产生hsync、vsync,以及矩阵索引index,最后打拍同步
reg [31:0] index ;
reg [15:0] cnt_h ;
reg [15:0] cnt_v ;
reg valid_h ;
reg valid_v ;
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt_h <= 'd0;
else if(cnt_h>=total_h-1)
cnt_h <= 'd0;
else
cnt_h <= cnt_h + 1'b1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt_v <= 'd0;
else if(cnt_h>=total_h-1 && cnt_v>=total_v-1)
cnt_v <= 'd0;
else if(cnt_h>=total_h-1)
cnt_v <= cnt_v + 1'b1;
else
cnt_v <= cnt_v;
always@(posedge clk or negedge rst_n)
if(!rst_n)
valid_h <= 1'd0;
else if(cnt_h>(100-1))
valid_h <= 1'd1;
else
valid_h <= 1'd0;
always@(posedge clk or negedge rst_n)
if(!rst_n)
valid_v <= 1'b0;
else if(cnt_v>(30-1))
valid_v <= 1'b1;
else
valid_v <= 1'b0;
always@(posedge clk or negedge rst_n)
if(!rst_n)
index <= 'd0;
else if(valid_v && valid_h)
if(index==(IMG_W*IMG_H*8/DATA_WIDTH)-1)
index <= 'd0;
else
index <= index + 1'b1;
else
index <= index;
always@(posedge clk or negedge rst_n)
if(!rst_n)
vsync <= 1'b0;
else
vsync <= valid_v;
always@(posedge clk or negedge rst_n)
if(!rst_n)
data <= 'd0;
else if(valid_v && valid_h)
data <= array[index];
else
data <= 'd0;
always@(posedge clk or negedge rst_n)
if(!rst_n)
hsync <= 1'b0;
else
hsync <= valid_v & valid_h;
六、仿真
注:TXT文件中的单个数据的长度需要与DATA_WIDTH一致,否则会出现数据不定态。
总结
再见