当前位置: 首页 > news >正文

用微软雅黑做网站可以吗企业网站建设的困难和问题

用微软雅黑做网站可以吗,企业网站建设的困难和问题,想要导航网站推广怎么做,网站开发方向 英语翻译文章目录 一、前言二、FPGA实现三行缓存的架构三、Verilog代码实现四、仿真验证五、输入图像数据进行仿真验证 一、前言 在 FPGA 做图像处理时,行缓存是一个非常重要的一个步骤,因为图像输入还有输出都是一行一行进行的,即处理完一行后再处理…

文章目录

  • 一、前言
  • 二、FPGA实现三行缓存的架构
  • 三、Verilog代码实现
  • 四、仿真验证
  • 五、输入图像数据进行仿真验证


一、前言

  在 FPGA 做图像处理时,行缓存是一个非常重要的一个步骤,因为图像输入还有输出都是一行一行进行的,即处理完一行后再处理下一行。行缓存可以存储当前行和前一行的数据以及多行的数据,使得在处理当前行时能够方便地访问周围像素。许多图像处理的算法都需要几行的图像数据进行处理,因此行缓存是非常重要的,本文实现三行缓存,多行缓存的思想也是一致的。

二、FPGA实现三行缓存的架构

  由于图像数据一般都是从上到下从左到右一个一个输入进来,因此我们优先考虑使用FIFO,先进先出。按照一般想法,我们只需要三个FIFO,每个FIFO存储一行数据即可实现三行缓存,这里可以节省资源只使用两个FIFO实现,具体实现框框架如下:

在这里插入图片描述

  开始时,图像数据的第0行写入到FIFO1中,图像数据的第1行写入到FIFO2中。

在这里插入图片描述
  当第2行数据到来时写入到FIFO2中,同时输出写入的数据作为第二行;同时读出FIFO2中的数据写入到FIFO1中,并输出作为第一行,同时读出FIFO1中的数据输出作为第0行。

在这里插入图片描述
  同理,当第三行数据来临时写入到FIFO2中,同时输出写入数据作为第二行,再同时读出FIFO2中的数据写入到FIFO1中并输出作为第一行,同时读出FIFO2中的数据输出作为第0行。后面的行以此类推。

三、Verilog代码实现

  先看输入接口,输入为像素数据和有效信号,输出为三行数据以及有效信号。

 	input                                               sys_clk ,input                                               sys_rst ,input           [23:0]                              i_img_data  ,input                                               i_img_data_valid    ,output          [23:0]                              o_img_data_1line  ,output          [23:0]                              o_img_data_2line  ,output          [23:0]                              o_img_data_3line  ,output                                              o_img_data_valid    

  再次例化两个FIFO,位宽就为一个像素位宽,深度为一行中最多的像素数量。

img_line_buffer_fifo u0_img_line_buffer_fifo (.clk  (sys_clk        ),  // input wire clk.srst (sys_rst        ),  // input wire srst.din  (fifo1_wr_data  ),  // input wire [23 : 0] din.wr_en(fifo1_wr_en    ),  // input wire wr_en.rd_en(rd_en          ),  // input wire rd_en.dout (fifo1_q        ),  // output wire [23 : 0] dout.full (),                 // output wire full.empty()                  // output wire empty
);img_line_buffer_fifo u1_img_line_buffer_fifo (.clk  (sys_clk        ),  // input wire clk.srst (sys_rst        ),  // input wire srst.din  (fifo2_wr_data  ),  // input wire [23 : 0] din.wr_en(fifo2_wr_en    ),  // input wire wr_en.rd_en(rd_en          ),  // input wire rd_en.dout (fifo2_q        ),  // output wire [23 : 0] dout.full (),                 // output wire full.empty()                  // output wire empty
);

  然后根据架构图编写出剩下的代码,编写仿真代码。

四、仿真验证

  仿真我们先设置图像宽度为50*50,这样仿真可以跑快一点,然后写入数据流为每次都是0-49循环。就像一幅图像的第0行数据是0-49,第1行的数据也是0-49,每一行的数据都是0-49。按照想法,我们每次输出的数据就是前三行的像素,也就是3行的 0-49数据,仿真代码如下:

`timescale 1ns / 1psmodule tb_img_3line_buffer();reg                                                 sys_clk ;
reg                                                 sys_rst ;
reg                                                 i_img_data_valid    ;
reg             [23:0]                              i_img_data  ;
reg             [12:0]                              cnt ;
wire            [23:0]                              o_img_data_1line    ;
wire            [23:0]                              o_img_data_2line    ;
wire            [23:0]                              o_img_data_3line    ;
wire                                                o_img_data_valid    ;initial beginsys_clk =0;sys_rst = 1;i_img_data_valid = 0;i_img_data = 'd0;#200;sys_rst = 0;
endalways #5 sys_clk = ~sys_clk;always @(posedge sys_clk) beginif(sys_rst == 1'b1)i_img_data_valid <= 1'b0;else if(cnt == 49)i_img_data_valid <= 1'b0;elsei_img_data_valid <= 1'b1;
endalways @(posedge sys_clk) beginif(sys_rst == 1'b1)cnt <= 'd0;else if(cnt == 49)cnt <= 'd0;else if(i_img_data_valid == 1'b1)cnt <= cnt + 1'b1;elsecnt <= cnt;
endalways @(posedge sys_clk) beginif(sys_rst == 1'b1)i_img_data <= 'd0;else if(i_img_data == 49)i_img_data <= 'd0;else if(i_img_data_valid == 1'b1)i_img_data <= i_img_data + 1'b1;elsei_img_data <= i_img_data;
endimg_3line_buffer#(.IMG_WIDTH         ( 50 ),.IMG_HEIGHT        ( 50 )
)u_img_3line_buffer(.sys_clk           ( sys_clk           ),.sys_rst           ( sys_rst           ),.i_img_data        ( i_img_data        ),.i_img_data_valid  ( i_img_data_valid  ),.o_img_data_1line  ( o_img_data_1line  ),.o_img_data_2line  ( o_img_data_2line  ),.o_img_data_3line  ( o_img_data_3line  ),.o_img_data_valid  ( o_img_data_valid  )
);endmodule

  运行仿真

在这里插入图片描述
  可以看到写入的每一行数据都是0-49,写入两行后,开始输出数据。

在这里插入图片描述
  我们可以看到输出的三行数据都是0-49的数据。符合预期。我们修改一下仿真代码,写入2500个数据,对应50*50的图像大小,数据为0-2499,这样第0行的数据就是0-49,第1行的数据就是50-99,第2行的数据就是100-149,第3行的数据就是150-199。输出的数据就应该是(0,50,100),(1,51,101)以此类推,仿真代码如下:

`timescale 1ns / 1psmodule tb_img_3line_buffer();reg                                                 sys_clk ;
reg                                                 sys_rst ;
reg                                                 i_img_data_valid    ;
reg             [23:0]                              i_img_data  ;
reg             [12:0]                              cnt ;
wire            [23:0]                              o_img_data_1line    ;
wire            [23:0]                              o_img_data_2line    ;
wire            [23:0]                              o_img_data_3line    ;
wire                                                o_img_data_valid    ;initial beginsys_clk =0;sys_rst = 1;i_img_data_valid = 0;i_img_data = 'd0;#200;sys_rst = 0;
endalways #5 sys_clk = ~sys_clk;always @(posedge sys_clk) beginif(sys_rst == 1'b1)i_img_data_valid <= 1'b0;else if(cnt == 2499)i_img_data_valid <= 1'b0;elsei_img_data_valid <= 1'b1;
endalways @(posedge sys_clk) beginif(sys_rst == 1'b1)cnt <= 'd0;else if(cnt == 2499)cnt <= 'd0;else if(i_img_data_valid == 1'b1)cnt <= cnt + 1'b1;elsecnt <= cnt;
endalways @(posedge sys_clk) beginif(sys_rst == 1'b1)i_img_data <= 'd0;else if(i_img_data == 2499)i_img_data <= 'd0;else if(i_img_data_valid == 1'b1)i_img_data <= i_img_data + 1'b1;elsei_img_data <= i_img_data;
endimg_3line_buffer#(.IMG_WIDTH         ( 50 ),.IMG_HEIGHT        ( 50 )
)u_img_3line_buffer(.sys_clk           ( sys_clk           ),.sys_rst           ( sys_rst           ),.i_img_data        ( i_img_data        ),.i_img_data_valid  ( i_img_data_valid  ),.o_img_data_1line  ( o_img_data_1line  ),.o_img_data_2line  ( o_img_data_2line  ),.o_img_data_3line  ( o_img_data_3line  ),.o_img_data_valid  ( o_img_data_valid  )
);endmodule

  运行仿真

在这里插入图片描述
在这里插入图片描述
  验证完成和预期一致,后续一些图像处理算法需要用到这个行缓存。

五、输入图像数据进行仿真验证

  现在我们在仿真中输入一张图片,然后通过三行缓存输出,每次只取出第一行的数据写入到新的图片中:

在这里插入图片描述
  可以看出输出的图像和输入图像一模一样,文件大小也是一模一样,因此三行缓存是没问题的。

http://www.yayakq.cn/news/818423/

相关文章:

  • 网站开发软件标书范本南宁专业网站营销
  • 做it题的网站网站如何进行品牌建设
  • 网站建设分金手指专业二七wordpress 修改上传文件大小
  • 摄影网站源码 国外百度网盘网址
  • 建设银行积分网站好的做网站架构的书
  • 深圳网站建设公司哪好wordpress使用jquery
  • 网站制作公司 知道万维科技大学网页制作与网站建设
  • 网站设计网站建设公司长沙建个网站要多少钱
  • 广州建设交易中心网站首页中小微企业查询网站
  • 购买了网站如何使用吗怎么更改wordpress文件上传大小
  • 做网站备案重庆做网站多少钱
  • 长沙seo网站管理wordpress图床
  • 网站的ppt方案怎么做买域名的钱最后给了谁
  • 网站内容过滤网站主机多大
  • 网站建立价格uc浏览器网页版
  • 济宁做网站哪家比较好建个网站花钱做百度推广
  • jsp 网站连接数据库如何建设网站服务器
  • 网站的运营成本dedecms导入网站模板下载
  • 调兵山网站做网站例子图片描述
  • 网站开发设计框图网站建设注意哪些
  • 团队网站建设国际本科
  • 小男孩和女人做的网站东莞 营销网站
  • 企业网站建设变相收取等级保护费郑州网站建设哪家最好
  • 自己做博客网站和百家号的区别网站开发使用语言
  • 河南艾特网站建设公司网站免费进入窗口软件有哪些
  • 可以做婚礼视频的网站软件定制开发一般多少钱
  • 制作网站一年多少钱网易企业邮箱登录页
  • 机械网站建设开发东莞外贸网络推广
  • 企业形象型网站建设怎样申请自己企业的网站
  • 网站域名费怎么查询品牌网站建设方案