FPGA图像处理仿真:生成数据源的方法

免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。

读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。

本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。

若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。


前言

本章将介绍如何在仿真中将图像转化为数据流。


一、定义变参

javascript 复制代码
     parameter     IMG_W  = 640 ,//图像宽度
     parameter     IMG_H  = 480 ,//   高度
     parameter DATA_WIDTH = 64   //输出的位宽

二、定义模块接口

javascript 复制代码
(
     input                        clk          ,
     input                        rst_n        ,
     output                       hsync        ,
     output                       vsync        ,
     output    [DATA_WIDTH-1:0]   data 
    );

三、定义图像存储矩阵并初始化

javascript 复制代码
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

四、定义固参

javascript 复制代码
localparam total_h =  IMG_W/(DATA_WIDTH/8) + 100 ;
localparam total_v =  IMG_H + 30 ;

注:多出来的行列用于图像消隐

五、逻辑设计

原理:通过两个计数器来产生hsync、vsync,以及矩阵索引index,最后打拍同步

javascript 复制代码
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一致,否则会出现数据不定态。++


总结

再见

相关推荐
千寻xun16 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
nuoxin1141 天前
HR4988替代A4988-富利威
网络·人工智能·嵌入式硬件·fpga开发·dsp开发
一口一口吃成大V1 天前
vivado的bit 和 bin的区别
fpga开发
尤老师FPGA2 天前
HDMI数据的接收发送实验(十八)
fpga开发
北京青翼科技2 天前
青翼科技 JFM7K325T FPGA+FT-M6678 DSP 的全国产化信号处理平台丨FPGA开发板
fpga开发·数据采集卡·fmc子卡·fpga开发板·ad采集卡·图像处理卡·dsp信号处理
zlinear数据采集卡3 天前
从0到1硬核拆解:工业级数据采集卡的隔离设计与Modbus通信实战
arm开发·单片机·嵌入式硬件·fpga开发·开源
FakeOccupational3 天前
fpga系列 HDL:Microchip FPGA开发软件 Libero Soc FPGA 在线逻辑分析
fpga开发
FPGA技术联盟3 天前
如何在跨时钟域分析中处理好复位信号?
fpga开发
国科安芯3 天前
基于ASM1042S2S的箭载通信网络抗辐射加固方案研究
服务器·网络·嵌入式硬件·fpga开发·架构·信号处理
YYRAN_ZZU4 天前
Lattice 自定义IP业务逻辑核
嵌入式硬件·fpga开发