首页 > 其他分享 >FPGA/ZYNQ:生成3x3矩阵

FPGA/ZYNQ:生成3x3矩阵

时间:2024-06-03 18:22:57浏览次数:22  
标签:begin ram end matrix FPGA clock RAM 3x3 ZYNQ

一、简述
在对图像进行处理时经常用到矩阵操作,包括sobel边缘检测、中值滤波、形态学等。本篇博客介绍一下用两个RAM生成 3x3 矩阵的方法。
二、实现方法
1.设计line_shift模块用于对三行数据进行寄存;
2.设计一个产生3x3矩阵的模块。
三、实现过程
1.line_shift_RAM_24bit
通过时钟使能信号对RAM的地址进行计数,计得的数就是对应的列(col),即横坐标。由于 RAM 地址在 per_frame_href 信号为低电平时清零;而当新的一行到达时,per_frame_href 信号为高电平,RAM 地址开始累加,所以 RAM 的地址等于每行图像像素的横坐标。以该地址读出对应列的数据,用于上层模块生成“三行一列”的像素数据
//在数据到来时,RAM的读地址累加 always @(posedge clock)begin if(pre_frame_href) if(clken) ram_rd_addr <= ram_rd_addr + 1; else ram_rd_addr <= ram_rd_addr;//当前矩阵位置 else ram_rd_addr <= 0; end
对时钟、地址、数据延迟以同步数据输出,延迟3拍是因为从RAM中读取数据以及向RAM0、RAM1中更新数据各需要花费一个时钟周期
`//对时钟使能信号延迟3拍
always @(posedge clock)begin
clken_dly <= {clken_dly[1:0],clken};
end

//将RAM地址延迟2拍
always @(posedge clock)begin
ram_rd_addr_d0 <= ram_rd_addr;
ram_rd_addr_d1 <= ram_rd_addr_d0;
end

//输入数据延迟3拍送入RAM
always @(posedge clock)begin
shiftin_d0 <= shiftin;
shiftin_d1 <= shiftin_d0;
shiftin_d2 <= shiftin_d1;
end![](/i/l/?n=24&i=blog/3457001/202406/3457001-20240603154852488-1048414967.png)//用于存储前一行图像的RAM
blk_mem_gen_0 u_ram_1024x8_0(
.clka (clock),
.wea (clken_dly[2]),
.addra (ram_rd_addr_d1),//在延迟的第三个时钟周期,当前行的数据写入RAM0
.dina (shiftin_d2),

.clkb (clock),
.addrb (ram_rd_addr),
.doutb (taps0x)//延迟一个时钟周期,输出RAM0中前一行图像的数据

);

//寄存前一行的图像数据
always @(posedge clock)begin
taps0x_d0 <= taps0x;
end

//用于存储前前一行图像的RAM
blk_mem_gen_0 u_ram_1024x8_1(
.clka (clock),
.wea (clken_dly[1]),
.addra (ram_rd_addr_d0),
.dina (taps0x_d0),//在延迟 第二个时钟周期,将前一行图像的数据写入RAM1

.clkb (clock),
.addrb (ram_rd_addr),
.doutb (taps1x)//延迟一个时钟周期,输出RAM1中前前一行的图像的数据

);这里例化了两个伪双端口的RAM(一个只能读,一个只能写),用于存储两行数据。 RAM配置,选择“Primitives Output Register”时RAM 中的数据会寄存一个周期后输出 ![](/i/l/?n=24&i=blog/3457001/202406/3457001-20240603180851748-1321758282.png) ![](/i/l/?n=24&i=blog/3457001/202406/3457001-20240603180915102-379260596.png) 2.生成3x3矩阵 首先调用前面设计的line_shift模块输出三行对应的数据//用于存储列数据的RAM
line_shift_RAM_24bit u_Line_Shift_RAM_24bit(
.clock (clk),
.clken (pre_frame_clken),
.pre_frame_href (pre_frame_href),

.shiftin (pre_img_Y),//当前行的数据
.taps0x (row2_data),//前一行输据
.taps1x (row1_data),//前前一行的数据

);
输出3x3矩阵模块,但在每行开头是通过用前面的数据补充来得到3x3模块,所以理论上在图像最上面和最左边会有前面数据的残余在同步处理后的控制信号下,输出图像矩阵
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
{matrix_p11,matrix_p12,matrix_p13} <= 0;
{matrix_p21,matrix_p22,matrix_p23} <= 0;
{matrix_p31,matrix_p32,matrix_p33} <= 0;
end
else if(read_frame_href)begin
if(read_frame_clken)begin
{matrix_p11,matrix_p12,matrix_p13} <= {matrix_p12,matrix_p13,row1_data};
{matrix_p21,matrix_p22,matrix_p23} <= {matrix_p22,matrix_p23,row2_data};
{matrix_p31,matrix_p32,matrix_p33} <= {matrix_p32,matrix_p33,row3_data};
end
else begin
{matrix_p11,matrix_p12,matrix_p13} <= {matrix_p11,matrix_p12,matrix_p13};
{matrix_p21,matrix_p22,matrix_p23} <= {matrix_p21,matrix_p22,matrix_p23};
{matrix_p31,matrix_p32,matrix_p33} <= {matrix_p31,matrix_p32,matrix_p33};
end
end
else begin
{matrix_p11,matrix_p12,matrix_p13} <= 0;
{matrix_p21,matrix_p22,matrix_p23} <= 0;
{matrix_p31,matrix_p32,matrix_p33} <= 0;
end
end`
参考文献:
1.正点原子sdk中值滤波
(本文用作学习记录,如有侵权请联系作者)

标签:begin,ram,end,matrix,FPGA,clock,RAM,3x3,ZYNQ
From: https://www.cnblogs.com/ppptwlearning/p/18229327

相关文章

  • 突破带宽瓶颈,5SGXEB6R3F43C3G、5SGXEB6R1F43C1G、5SGXEB6R2F43I3G、5SGXEB6R3F43C2G F
    StratixVFPGA的主要性能突破包括:集成66个28Gbps串行收发器(每通道功耗仅200mW)、提供1.6Tbps串行交换能力、提供12.5Gbps背板驱动和28Gbps芯片至芯片驱动能力、提供7组72位1600MbpsDDR3接口、以及提供1840GMACS或1000GFLOPS计算能力、业界第一款精度可变的DSP模块、53Mb嵌入式......
  • FPGA复位专题---(42)复位信号高扇出?
     (42)复位信号高扇出?1目录(a)FPGA简介(b)Verilog简介(c)复位简介(d)复位信号高扇出?(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现......
  • RGMII接口--->(007)FPGA实现RGMII接口(七)
     (007)FPGA实现RGMII接口(七)1目录(a)FPGA简介(b)IC简介(c)Verilog简介(d)FPGA实现RGMII接口(七)(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定......
  • (中文参数)可编程逻辑IC 5SGXEB6R2F40I2G、5SGXEB6R2F40I3G、5SGXEB6R3F40I3G、5SGXEB6R
    概述StratixV是业内第一款可提供精度可变DSP模块的FPGA,这使得它可提供业内效率最高、性能最好的多精度DSP数据通路和功能,如FFT、FIR和浮点DSP。StratixVFPGA具有1.6Tbps串行交换能力,采用各种创新技术和前沿28-nm工艺,突破带宽瓶颈,降低了宽带应用的成本和功耗。StratixVFP......
  • FPGA图像处理--CLAHE算法(一)
    FPGA交流群:838607138本文首发于公众号:FPGA开源工坊在介绍CLAHE算法之前必须要先提一下直方图均衡化,直方图均衡化算法是一种常见的图像增强算法,可以让像素的亮度分配的更加均匀从而获得一个比较好的观察效果。如下图就是经过直方图均衡化后的效果图。importcv2importnumpya......
  • 米尔FPGA核心板上市!国产紫光同创Logos-2核心板
    随着嵌入式的快速发展,在工控、通信、5G通信领域,FPGA以其超灵活的可编程能力,被越来越多的工程师选择。近日,米尔电子发布2款FPGA的核心板和开发板,型号分别为:基于紫光同创Logos-2系列PG2L100H的MYC-J2L100H核心板及开发板、基于XilinxArtix-7系列的MYC-J7A100T核心板及开发板。 ......
  • Stratix V FPGA突破带宽瓶颈,5SGXEA5N3F40I4G、5SGXEA5N2F40C3G、5SGXEA5N2F40I3LG降低
    概述StratixVFPGA的主要性能突破包括:集成66个28Gbps串行收发器(每通道功耗仅200mW)、提供1.6Tbps串行交换能力、提供12.5Gbps背板驱动和28Gbps芯片至芯片驱动能力、提供7组72位1600MbpsDDR3接口、以及提供1840GMACS或1000GFLOPS计算能力、业界第一款精度可变的DSP模块、53Mb......
  • Xilinx FPGA NVMe A4S Host Controller, 高性能NVMe A4S主机控制器IP
    NVMeA4SHostControllerIP1     介绍NVMeA4SHostControllerIP可以连接高速存储PCIeSSD,无需CPU和外部存储器,自动加速处理所有的NVMe协议命令,具备独立的数据写入AXI4-Stream/FIFO接口和数据读取AXI4-Stream/FIFO接口,适合于高性能、顺序访问的应用,比如视频记录、信号......
  • 全国产RK3568J + FPGA的PCIe、FSPI通信实测数据分享!
    测试数据汇总案例时钟频率理论速率测试结果FSPI通信案例150MHz71.53MB/s读速率:67.452MB/s写速率:52.638MB/sPCIe通信案例100MHz803.09MB/s读速率:595.24MB/s写速率:791.14MB/s备注:(1)当TLPheadersize=16Byte时,PCIe理论传输速率为:7......
  • Zynq学习笔记--AXI4-Stream 图像数据从仿真输出到图像文件
    目录1.简介2.构建工程2.1Vivado工程2.2TestBench代码2.3关键代码分析3. VPG BackgroundPatternID(0x0020)Register4.总结1.简介使用SystemVerilog将AXI4-Stream图像数据从仿真输出到图像文件(PPM)。用到的函数包括$fopen、$fwrite和$fclose......