版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46621272/article/details/126439519


System Verilog 视频缩放图像缩放 vivado 仿真


文章目录

  • System Verilog 视频缩放图像缩放 vivado 仿真
  • 前言
    • 一、Verilog 图像视频临近缩小算法仿真,代码大部分采用 Syetem Verilog 语言编写。
      • 1. testbench 逻辑框图
      • 2. testbench 激励文件 video_scale_down_near_testbench.sv System verilog 代码
      • 3. [图片文件产生视频数据流 bmp_for_videoStream.sv verilog 代码](https://blog.csdn.net/qq_46621272/article/details/126441071)
      • 4. [临近缩小 video_scale_down_near.sv verilog 代码](https://blog.csdn.net/qq_46621272/article/details/120917913)
      • 5. [临近缩放 video_scale_near_v1.sv 代码](https://blog.csdn.net/qq_46621272/article/details/126520389)
      • 6. [将视频流输出写入 BMP 图片文件 bmp_to_videoStream.sv verilog 代码](https://blog.csdn.net/qq_46621272/article/details/126441149)
      • 7. [用 C 语言编写的临近缩放算法](https://blog.csdn.net/qq_46621272/article/details/126459136)
    • 二、部分图像视频算法效果图片。
      • 1.缩小原始图片
      • 2. 临近缩小效果图 verilog 代码实现
      • 3. 双线性缩小效果图 verilog 代码实现
      • 4.放大原始图片
      • 5. 大比例临近放大效果图 verilog 代码实现
      • 4. 大比例双线性放大效果图 verilog 代码实现
      • 5. 椒盐降噪中值滤波效果拼图 verilog 代码实现
      • 6. 锐化算法效果图 verilog 代码实现
    • 三、系列文章陆续更新相关连接
    • 四、下载链接

前言

  • Verilog 做图像视频算法仿真时,只能看见相关波形,不能直观查看计算后的图像视频效果。本文以临近缩放算法为例,用 BMP 图片文件代替视频数据来做图像视频缩放算法仿真。最终输出缩放后的 BMP 图片文件。可以通过查看图片的办法直观显示图像缩放算法产生的效果。本文中阐述的仿真环境适合很多采用 Verilog FPGA 实现的视频图像算法的仿真。比如各种视频缩放、旋转、拉伸等算法,比如视频滤波、降噪等算法。

一、Verilog 图像视频临近缩小算法仿真,代码大部分采用 Syetem Verilog 语言编写。

1. testbench 逻辑框图

2. testbench 激励文件 video_scale_down_near_testbench.sv System verilog 代码

  • 本仿真激励文件,运行后能产生十几张不同缩放比例的图片,运行时间大概几分钟时间。
//video_scale_down_near_testbench.sv
`timescale 1ns/100psmodule video_scale_down_near_testbench;reg         rst_n;
reg         vclk;
reg         frame_sync_n;parameter RESET_PERIOD         = 1000000.00;
parameter FRAME_H_PERIOD        = 16*1000*1000;            //16ms
parameter FRAME_L_PERIOD        = 60*1000;             //60usparameter VIN_CLK_PERIOD_A        = 10;                  //100MHzinitial vclk = 0;
always  vclk = #(VIN_CLK_PERIOD_A/2.0) ~vclk;initial   begin#0                 frame_sync_n = 1;#RESET_PERIOD     frame_sync_n = 0;      // 16.7ms 帧脉冲while(1)begin#FRAME_L_PERIOD       frame_sync_n = 1;#FRAME_H_PERIOD       frame_sync_n = 0;end
endinitial  beginrst_n = 0;#RESET_PERIODrst_n = 1;
endlogic    [23:0]  v1_dat;
logic           v1_valid;
logic           v1_ready;
logic   [15:0]  v1_xres;
logic   [15:0]  v1_yres;logic   [23:0]  v2_dat;
logic           v2_valid;
logic           v2_ready;
logic   [15:0]  v2_xres;
logic   [15:0]  v2_yres;parameter VIN_BMP_FILE  = "vin.bmp";
parameter VIN_BMP_PATH  = "../../../../../";
parameter VOUT_BMP_PATH = {VIN_BMP_PATH,"vouBmpV/"};//"../../../../../vouBmpV/";bmp_to_videoStream #(.iBMP_FILE_PATH       (VIN_BMP_PATH),.iBMP_FILE_NAME      (VIN_BMP_FILE))u01(.clk             (vclk),.rst_n               (rst_n),.vout_dat           (v1_dat),           //视频数据.vout_valid           (v1_valid),         //视频数据有效.vout_ready         (v1_ready),         //准备好.frame_sync_n      (frame_sync_n),     //视频帧同步复位,低有效.vout_xres          (v1_xres),          //视频水平分辨率.vout_yres         (v1_yres)           //视频垂直分辨率);video_scale_down_near u02(.vin_clk           (vclk),.rst_n               (rst_n),.frame_sync_n       (frame_sync_n),     //输入视频帧同步复位,低有效.vin_dat          (v1_dat),           //输入视频数据.vin_valid          (v1_valid),         //输入视频数据有效.vin_ready            (v1_ready),         //输入准备好.vout_dat            (v2_dat),           //输出视频数据.vout_valid         (v2_valid),         //输出视频数据有效.vout_ready           (v2_ready),         //输出准备好.vin_xres            (v1_xres),          //输入视频水平分辨率.vin_yres            (v1_yres),          //输入视频垂直分辨率.vout_xres           (v2_xres),          //输出视频水平分辨率.vout_yres           (v2_yres)           //输出视频垂直分辨率);bmp_for_videoStream    #(.iREADY               (7),                //插入 0-10 级流控信号, 10 是满级全速无等待.iBMP_FILE_PATH      (VOUT_BMP_PATH))u03(.clk                (vclk),.rst_n               (rst_n),.vin_dat            (v2_dat),           //视频数据.vin_valid            (v2_valid),         //视频数据有效.vin_ready          (v2_ready),         //准备好.frame_sync_n      (frame_sync_n),     //视频帧同步复位,低有效.vin_xres           (v2_xres),          //视频水平分辨率.vin_yres          (v2_yres)           //视频垂直分辨率);//   assign  v2_xres = v1_xres-1;//*1.3;
//  assign  v2_yres = v1_yres-1;//*1.1;    //0.13,0.22,0.32,0.41,0.52,0.61,0.83,0.99logic  [15:0]  fn = 0;always_ff@(negedge frame_sync_n)beginfn        <= #1 fn + 1;case(fn)0:        begin   v2_xres <= #1 v1_xres/1 - 0;    v2_yres <= #1 v1_yres/1 - 0;    end1:       begin   v2_xres <= #1 v1_xres/1 - 1;    v2_yres <= #1 v1_yres/1 - 1;    end2:       begin   v2_xres <= #1 v1_xres/2 + 1;   v2_yres <= #1 v1_yres/2 + 1;   end3:       begin   v2_xres <= #1 v1_xres/2 + 0;   v2_yres <= #1 v1_yres/2 + 0;   end4:       begin   v2_xres <= #1 v1_xres/2 - 1;    v2_yres <= #1 v1_yres/2 - 1;    end5:       begin   v2_xres <= #1 v1_xres/3 + 1;   v2_yres <= #1 v1_yres/3 + 1;   end6:       begin   v2_xres <= #1 v1_xres/3 + 0;   v2_yres <= #1 v1_yres/3 + 0;   end7:       begin   v2_xres <= #1 v1_xres/3 - 1;    v2_yres <= #1 v1_yres/3 - 1;    end8:       begin   v2_xres <= #1 v1_xres/5 + 1;   v2_yres <= #1 v1_yres/5 + 1;   end9:       begin   v2_xres <= #1 v1_xres/5 + 0;   v2_yres <= #1 v1_yres/5 + 0;   end10:      begin   v2_xres <= #1 v1_xres/5 - 1;    v2_yres <= #1 v1_yres/5 - 1;    end11:      begin   v2_xres <= #1 v1_xres/7 + 1;   v2_yres <= #1 v1_yres/7 + 1;   end12:      begin   v2_xres <= #1 v1_xres/7 + 0;   v2_yres <= #1 v1_yres/7 + 0;   end13:      begin   v2_xres <= #1 v1_xres/7 - 1;    v2_yres <= #1 v1_yres/7 - 1;    enddefault  :   $stop;endcaseend
endmodule

3. 图片文件产生视频数据流 bmp_for_videoStream.sv verilog 代码

4. 临近缩小 video_scale_down_near.sv verilog 代码

5. 临近缩放 video_scale_near_v1.sv 代码

6. 将视频流输出写入 BMP 图片文件 bmp_to_videoStream.sv verilog 代码

7. 用 C 语言编写的临近缩放算法

二、部分图像视频算法效果图片。

1.缩小原始图片

原始 960x540 图片

2. 临近缩小效果图 verilog 代码实现

临近缩小 2:1 480x270 图片

3. 双线性缩小效果图 verilog 代码实现

双线性缩小 2:1 480x270 图片,可以对比临近缩小图中间的文字部分

4.放大原始图片

原始 160x120 图片

5. 大比例临近放大效果图 verilog 代码实现

临近1:5 放大800x600 图片

4. 大比例双线性放大效果图 verilog 代码实现

双线性1:5 放大800x600 图片

5. 椒盐降噪中值滤波效果拼图 verilog 代码实现

椒盐降噪效果拼图

6. 锐化算法效果图 verilog 代码实现

原始月亮环形山图片

锐化后月亮环形山图片

三、系列文章陆续更新相关连接

    1. system verilog 临近缩放仿真实验
    1. system verilog 双线性缩放仿真实验(陆续更新)
    1. system verilog 图像处理行缓存 linebuffer 仿真实验(陆续更新)
    1. system verilog linebuffer 应用图像中值滤波仿真实验(陆续更新)
    1. system verilog linebuffer 应用图像高斯滤波仿真实验(陆续更新)
    1. system verilog linebuffer 应用图像拉普拉斯滤波仿真实验(陆续更新)

四、下载链接

本仿真工程文件下载,采用 Xilinx vivado 2017.4 版本
system verilog vivado 图像视频缩放代码,仿真工程
system verilog vivado 图像视频缩小代码,仿真工程

System Verilog 视频缩放图像缩放 vivado 仿真相关推荐

  1. 【system verilog】继续探究IC前端仿真中的“时间”,timescale,timeunit/timeprecision设置

    前言 仿真中的时间单位/时间精度设置是保证验证环境稳定高效的重要手段,但是很多场景下却常常被忽视.如果没有设置合理的相对统一的时间单位/时间精度,不仅延时.打印等信息会不准确,多模块/环境协同时也会隐 ...

  2. FPGA HLS双线性插值图像缩放视频拼接,上板验证稳定通过,提供3套工程源码和技术支持

    目录 1.前言 2.HLS实现双线性插值图像缩放 3.vivado工程1:1080P缩小720P 4.vivado工程2:1080P缩小后mixer二分频 5.上板调试验证并演示 6.福利:工程代码的 ...

  3. python函数图像平移_[Python图像处理]六.图像缩放,图像旋转,图像翻转与图像平移...

    图像缩放 图像缩放主要是调用resize()函数实现,result = cv2.resize(src, dsize[, result[.fx, fy[,interpolation]]])  其中src ...

  4. 图像缩放、旋转、翻转、平移

    本文介绍几种常见的图像几何变换方法. 1. 图像缩放 图像缩放就是将源图像中的像素点经过算法映射到目标图像的像素点的过程,即找出目标图像中的像素点Pd(Xd,Yd)对应的源图像的像素点Ps(Xs,Ys ...

  5. python图像处理第七课--图像缩放、翻转、旋转、平移--小白的成长历程

    #目的为记录在自己运行时存在的问题及解决方法,本文基于CSDN社区的Eastmount大佬的课程,通过学习,其中也增加了自己的考量和问题的解决. 图像缩放 图像缩放由 resize() 函数实现,如下 ...

  6. 基于 MFC+Halcon 实现图像缩放、平移

    1.前言 在机器视觉系统中,图像处理是必不可少的一环.其中设置图像ROI(Region of interest)是基本操作,例如在模板匹配.直线拟合.圆拟合等功能中均会用到.当MFC对话框中的图片控件 ...

  7. Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...

  8. FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

    目录 1.前言 2.目前主流的FPGA图像缩放方案 3.本方案的优越性 4.详细设计方案 5.vivado工程详解 6.上板调试验证并演示 7.福利:工程源码获取 1.前言 代码使用纯verilog实 ...

  9. 视频图像处理基础知识0(双线性插值算法进行图像缩放)【转】

    转自:http://blog.csdn.net/times_poem/article/details/51395781 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 双线性插 ...

最新文章

  1. Chart.js-极区图分析(参数分析+例图)
  2. 移动端rem适配-JS
  3. IEDA快速书写代码快捷键
  4. CSDN博客投票活动开始了
  5. 牛客网---Java题库(11~20)
  6. 【js】js中const,var,let区别
  7. 416. Partition Equal Subset Sum
  8. 修复 VM Player 断网问题 20121215T1402
  9. MIUI9修改手机机型 修改王者荣耀版本
  10. matlab 正则化表达式_MatLab归一化(正则化)函数
  11. 台式计算机cpu允许温度,台式机cpu温度多少正常 台式机cpu正常温度
  12. 知乎被爆裁员20%锤子60%,BAT裁员缩招为啥急于否认?
  13. steam饥荒mod编写,基础的lua语言学习笔记——第一期
  14. html5 3d 签到墙,签到小程序/微信签到/扫码签到/3D签到墙
  15. Mapper method 'comxx' has an unsupported return type
  16. 深度学习提高模型准确率方法
  17. dd腾讯云阿里云并安装相应代理加速github
  18. 诺贝尔奖获得者平均年龄是多少?属于我们的时间好像不多了
  19. 使用示波器的正确姿势
  20. Pytorch:torch.ge()、torch.gt()、torch.le()、torch.lt()

热门文章

  1. 斐讯db2_斐讯P1刷armbian变身linux小型服务器
  2. Garch模型Stata实例
  3. 申请访问学者个人简历怎么写的够高水平?
  4. 数据处理与服务发布——网络分析
  5. 21、【易混淆概念集】-第十三章 相关方参与度评估矩阵 VS 相关方参与计划 相关方登记册 VS 相关方参与计划 相关方立方体 VS 凸显模型 权力/利益方格
  6. 入职阿里一个月被迫转Android...
  7. 如何将多个excel表格合并成一个_多个PDF如何合并成一个?就用这个PDF在线工具!...
  8. 帮我写一份演化博弈的MATLAB代码
  9. java 栈的isEmpty()和empty()的区别
  10. 联想Z475拆修-板号KL6C