码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • System Verilog 视频缩放图像缩放 vivado 仿真



    版权声明:本文为博主原创文章,遵循 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/100ps
    
    module 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;				//60us
    
    parameter VIN_CLK_PERIOD_A		= 10;					//100MHz
    
    initial	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
    end
    
    
    initial	begin
    	rst_n = 0;
    	#RESET_PERIOD
    	rst_n = 1;
    end
    
    
    logic	[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.99
    
    	logic	[15:0]	fn = 0;
    	
    	always_ff@(negedge frame_sync_n)
    	begin
    		fn		<= #1 fn + 1;
    		case(fn)
    		0:		begin	v2_xres	<= #1 v1_xres/1 - 0;	v2_yres	<= #1 v1_yres/1 - 0;	end
    		1:		begin	v2_xres	<= #1 v1_xres/1 - 1;	v2_yres	<= #1 v1_yres/1 - 1;	end
    		2:		begin	v2_xres	<= #1 v1_xres/2 + 1;	v2_yres	<= #1 v1_yres/2 + 1;	end
    		3:		begin	v2_xres	<= #1 v1_xres/2 + 0;	v2_yres	<= #1 v1_yres/2 + 0;	end
    		4:		begin	v2_xres	<= #1 v1_xres/2 - 1;	v2_yres	<= #1 v1_yres/2 - 1;	end
    		5:		begin	v2_xres	<= #1 v1_xres/3 + 1;	v2_yres	<= #1 v1_yres/3 + 1;	end
    		6:		begin	v2_xres	<= #1 v1_xres/3 + 0;	v2_yres	<= #1 v1_yres/3 + 0;	end
    		7:		begin	v2_xres	<= #1 v1_xres/3 - 1;	v2_yres	<= #1 v1_yres/3 - 1;	end
    		8:		begin	v2_xres	<= #1 v1_xres/5 + 1;	v2_yres	<= #1 v1_yres/5 + 1;	end
    		9:		begin	v2_xres	<= #1 v1_xres/5 + 0;	v2_yres	<= #1 v1_yres/5 + 0;	end
    		10:		begin	v2_xres	<= #1 v1_xres/5 - 1;	v2_yres	<= #1 v1_yres/5 - 1;	end
    		11:		begin	v2_xres	<= #1 v1_xres/7 + 1;	v2_yres	<= #1 v1_yres/7 + 1;	end
    		12:		begin	v2_xres	<= #1 v1_xres/7 + 0;	v2_yres	<= #1 v1_yres/7 + 0;	end
    		13:		begin	v2_xres	<= #1 v1_xres/7 - 1;	v2_yres	<= #1 v1_yres/7 - 1;	end
    		default	:	$stop;
    		endcase
    	end
    endmodule
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135

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

    • https://blog.csdn.net/qq_46621272/article/details/126441071
    • 用 BMP 图片文件产生视频数据流,BMP 转视频流模块,读取图片文件,转换成视频数据流输出。

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

    • https://blog.csdn.net/qq_46621272/article/details/120917913
    • 临近插值任意比例视频缩小 verilog 代码,很短的不到 100 行的代码。

    5. 临近缩放 video_scale_near_v1.sv 代码

    • https://blog.csdn.net/qq_46621272/article/details/126520389
    • 临近插值任意比例视频缩放 verilog 代码,很短的不到 300 行的代码。

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

    • https://blog.csdn.net/qq_46621272/article/details/126441149
    • 将视频流输出写入 BMP 图片文件并保存 verilog 代码。

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

    • https://blog.csdn.net/qq_46621272/article/details/126459136
    • 在我们做 verilog 算法时,输出的结果是否正确?需要一个正确的参考。需要一组正确的输出图片与本仿真结果做比对。采用与本实验中相同的算法,用 C 语言实现,可以帮助阅读”临近缩小 video_scale_down_near.sv“算法的理解。C 语言执行后输出的图片文件与本仿真运行产生的 BMP 用软件二进制比对无任何差异。

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

    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 图像视频缩小代码,仿真工程

  • 相关阅读:
    Docker 07 部署Tomcat
    【自动驾驶多传感器融合+多算法融合】
    5分钟搞懂布隆过滤器,掌握亿级数据过滤算法
    掘地三尺搞定 Redis 与 MySQL 数据一致性问题
    跨境电商人的独立站该如何走出困境
    电压放大器在超声成像中的工作原理和应用
    【大数据之Kafka】八、Kafka Broker之生产经验
    经过打包后运行app.exe文件之后问题解决
    组合预测 | MATLAB实现基于BP-Adaboost强分类器多特征分类预测
    数字化工厂管理系统的三个关键技术是什么
  • 原文地址:https://blog.csdn.net/qq_46621272/article/details/126439519
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号