首页 > 其他分享 >DUT-图像简易灰度

DUT-图像简易灰度

时间:2024-04-05 14:36:16浏览次数:14  
标签:WD dst 简易 STEP video output 灰度 DUT NB

模板-V1

模型功能

  1. 输入视频总线
  2. 输出视频总线
  3. 将RGB24数据转化为灰度数据

模型框图

控制模型

实现步骤

源码编写

  • 未经仿真的原始代码
    `timescale 1ns / 1ps
    /*
*/
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/04/05 13:24:26
// Design Name: 
// Module Name: video_gray_cacu
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//          FUNC1: output gray
//////////////////////////////////////////////////////////////////////////////////
module video_gray_cacu #(
    //mode
    parameter MD_SIM_ABLE = 0,
    //number
    
    //width
    parameter WD_DATA = 24,
    parameter WD_BYTE = 8,
    parameter WD_ERR_INFO = 4
   )(
    //system signals
    input           i_sys_clk   ,  
    input           i_sys_resetn,  
    //video src
    input                       s_video_src_fsync,
    input                       s_video_src_vsync,
    input                       s_video_src_hsync,
    input                       s_video_src_psync,
    input [WD_DATA-1:0]         s_video_src_vdata,
    //video dst
    output                       m_video_dst_fsync,
    output                       m_video_dst_vsync,
    output                       m_video_dst_hsync,
    output                       m_video_dst_psync,
    output [WD_DATA-1:0]         m_video_dst_vdata,
    
    //error info feedback
    output   [WD_ERR_INFO-1:0]  m_err_video_info1
);
//========================================================
//function to math and logic

//========================================================
//localparam to converation and calculate
localparam NB_CACU_STEP = 2;
//========================================================
//register and wire to time sequence and combine
// ----------------------------------------------------------
// FUNC1: output gray
reg  [NB_CACU_STEP-1:0]   r_video_dst_fsync_dn = 0;
reg  [NB_CACU_STEP-1:0]   r_video_dst_vsync_dn = 0;
reg  [NB_CACU_STEP-1:0]   r_video_dst_hsync_dn = 0;
reg  [NB_CACU_STEP-1:0]   r_video_dst_psync_dn = 0;
reg  [WD_DATA-1:0]        r_video_dst_vdata = 0;
assign m_video_dst_fsync = r_video_dst_fsync_dn[NB_CACU_STEP-1];
assign m_video_dst_vsync = r_video_dst_vsync_dn[NB_CACU_STEP-1];
assign m_video_dst_hsync = r_video_dst_hsync_dn[NB_CACU_STEP-1];
assign m_video_dst_psync = r_video_dst_psync_dn[NB_CACU_STEP-1];
assign m_video_dst_vdata = r_video_dst_vdata;
//cacu-1
reg  [WD_DATA+1-1:0]      r_video_R_add_B;
reg  [WD_DATA+1-1:0]      r_video_G_mul_2;
//cacu-2
wire [WD_DATA+2-1:0]      w_video_R_add_B_add_2G;
//========================================================
//always and assign to drive logic and connect
// ----------------------------------------------------------
// FUNC1: output gray
always@(posedge i_sys_clk)
begin
    if(!i_sys_resetn) //system reset
    begin
        r_video_R_add_B <= 1'b0; //
        r_video_G_mul_2 <= 1'b0;
    end
    else if(1) //
    begin
        r_video_R_add_B <=  s_video_src_vdata[WD_BYTE*1-1:WD_BYTE*0]  //R
                            + s_video_src_vdata[WD_BYTE*3-1:WD_BYTE*2]; //B  //
        r_video_G_mul_2 <= {s_video_src_vdata[WD_BYTE*2-1:WD_BYTE*1],1'b0};
    end
end
assign w_video_R_add_B_add_2G = r_video_R_add_B + r_video_G_mul_2;
always@(posedge i_sys_clk)
begin
    if(!i_sys_resetn) //system reset
    begin
        r_video_dst_fsync_dn <= 1'b0;
        r_video_dst_vsync_dn <= 1'b0;
        r_video_dst_hsync_dn <= 1'b0;
        r_video_dst_psync_dn <= 1'b0;
        r_video_dst_vdata <= 1'b0;//
    end
    else if(1) //
    begin
        r_video_dst_fsync_dn <= {r_video_dst_fsync_dn[NB_CACU_STEP-2:0],s_video_src_fsync};
        r_video_dst_vsync_dn <= {r_video_dst_vsync_dn[NB_CACU_STEP-2:0],s_video_src_vsync};
        r_video_dst_hsync_dn <= {r_video_dst_hsync_dn[NB_CACU_STEP-2:0],s_video_src_hsync};
        r_video_dst_psync_dn <= {r_video_dst_psync_dn[NB_CACU_STEP-2:0],s_video_src_psync};
        r_video_dst_vdata <={(3){w_video_R_add_B_add_2G[WD_BYTE+2-1:2]}};//  //
    end
end
//========================================================
//module and task to build part of system

//========================================================
//expand and plug-in part with version 

//========================================================
//ila and vio to debug and monitor

endmodule
              
/* end verilog

*/

video总线描述

  1. 使用自定义video总线,包括帧同步、垂直同步、水平同步、像素点同步和数据五个信号
  2. 总线的时序图如下:

获取测试端口

测试端口 测试目标
复位测试 仿真无非0和1的值进入初始化即可
video输入 总线的数据同步格式正常;
video输出 总线的数据和输入的理论计算结果一致
报错信息

最终效果

封装模型

调用接口

调用参数配置

  • 只是演示仿真仿真系统如何搭建,所以DUT可以比较简单,只需要引入基本的总线概念即可

标签:WD,dst,简易,STEP,video,output,灰度,DUT,NB
From: https://www.cnblogs.com/electricdream/p/18115642

相关文章

  • 攻防世界no-strings-attached做法(简易版)
    首先查个壳,发现没壳,是32bit,那就丢进ida32中进行反编译进入main函数查看,里面有很多个函数,挨个点进去看看,找找关键点进入最后一个函数,发现了些东西,两个函数输出success和denied,if括号内的条件就得为非0,也就是说ws数组和s2数组相等才行,上面对s2数组进行了处理,那就直接看他咋处理的......
  • 简易自增id生成器
    importjava.util.concurrent.*;importjava.util.concurrent.atomic.AtomicLong;importjava.util.function.Function;publicclassSeqManager{privatefinalSeqseq;privatefinalExecutorServicee=newThreadPoolExecutor(1,1,0L,Time......
  • 生鲜配送供应链系统_升鲜宝_杭州生鲜配送系统之升鲜宝_门店简易进销存设计说明_门店订
    生鲜配送供应链系统_杭州生鲜配送系统之升鲜宝_门店简易进销存设计说明_门店订货端(一)    作为长期一线开发供应链管理系统的开发人员,经过与最终客户的沟通与交流。客户的客户(食堂、酒店、烧烤连锁门店等客户)有一些简单的进销存的需要,但客户的这类客户,又不愿意单独购买一套......
  • Java游戏开发基础:从零开始搭建自己的游戏之《人生重开模拟器》简易版
    一、引言人生重开模拟器游戏是一种虚拟角色扮演游戏,玩家通过控制一个虚构的角色,体验与现实生活中不同的选择和结果。玩家的决策将影响角色的生活轨迹,包括他们的职业生涯、社交关系、健康和财富等方面。游戏的乐趣在于提供了一个虚拟的沙盒环境,玩家可以尝试不同的生活选择,而......
  • 简易线程池实现
    程序中,频繁地调用pthread_create函数创建线程,非常浪费时间,尤其在服务器端的时候,多线程的使用情况下频繁启用线程和释放线程资源,这样也会影响程序的运行效率。可以先在服务器空闲的时候先创建多个线程,我们先在线程函数里面使用pthread_cond_wait将其休眠,有任务过来的时候使用pthre......
  • 30 天精通 RxJS (08):简易拖拉实作 - take, first, takeUntil, concatAll
    我们今天要接着讲take,first,takeUntil,concatAll这四个operators,并且实作一个简易的拖拉功能。Operatorstaketake是一个很简单的operator,顾名思义就是取前几个元素后就结束,范例如下varsource=Rx.Observable.interval(1000)varexample=source.take(3)example.......
  • 基于Sermant的全链路灰度发布在汽车行业DMS系统的应用
    本文分享自华为云社区《基于Sermant的全链路灰度发布在汽车行业DMS系统的应用》,作者:聂子雄华为云高级软件工程师摘要随着汽车产业的智能升级,DMS系统作为汽车行业的经销管理系统也面临着更加多种多样的业务场景的挑战。借助Sermant,华为云能够为DMS系统提供一整套端到端全链路灰......
  • python - 图片灰度化、二值化
    1.灰度化fromPILimportImageimg=Image.open("test.jpg")img=img.convert("L")img.save("output.jpg")2.二值化fromPILimportImageimg=Image.open("test.jpg")img=img.convert("1")img.save("out......
  • 手写简易操作系统(二十)--实现堆内存管理
    前情提要前面我们实现了0x80中断,并实现了两个中断调用,getpid和write,其中write还由于没有实现文件系统,是个残血版,这一节我们实现堆内存管理。一、arena在计算机科学中,“arena”内存管理通常指的是一种内存分配和管理技术,它通常用于动态内存分配和释放。在这种管理......
  • C# 简易图像处理(包括平移,旋转,翻转, 裁切)
    控件布局主要分为一个Panel+一个PictureBox+还有一个自定义半透明裁切平面ExtendedPanel;Form1.Designer.cs代码如下:namespaceImageEditer{partialclassImageEdit{///<summary>///必需的设计器变量。///</summary>pr......