基于EBAZ4205矿板的图像处理:02生成测试彩条图像

基于EBAZ4205矿板的图像处理:02生成测试彩条图像

生成测试彩条图像可以有两种方式

VDMA缓存PS端生成彩条图像数据,PL端输出

这里可以直接看超级大电工开源的代码,写的很好详细,我就不再班门弄斧了(下面是链接)
EBAZ4205 第二十四个工程 用VDMA模块来缓存图像并在HDMI上显示(一)800X600分辨率测试

verilog生成彩条图像数据,PL端输出

先看效果

请添加图片描述
在这里插入图片描述

请添加图片描述

项目讲解

采用的是纯PL端的方案,PS只是用来点灯和uart打印了
下面是block design
在这里插入图片描述
时钟和复位,我用的都是片外的,实测用PS端生成的也可以,甚至那个clock wizard不用,时钟全都由PS生成也可以。
clock wizard的设置如下
在这里插入图片描述
在这里插入图片描述
这里根据800X600的分辨率设置了PCLK和PCLKX5。

在写这个项目之前,我有过疑惑,为啥他们都用的是800X600这种“远古”分辨率,老子要上1080P,但是实际写下来发现,clock wizard确实可以倍频到那么高的频率,但是生成的不准,timing约束时会报错。

所以我就老老实实的改成生成800X600分辨率了。

其他的就是HDMI_test模块了,它还包含了hdmi_timming_generator和hdmi_color_bar_generator模块,分别负责生成图像的行场同步信号和色彩数据。

代码

hdmi_test

`timescale 1ns / 1ps
`define UD #1
module hdmi_test(
    input wire        rstn          ,
    input             pclk          ,                       
    output            vs_out        , 
    output            hs_out        , 
    output            de_out        ,
    output     [23:0] rgb_out
);

parameter   X_WIDTH = 4'd12;
parameter   Y_WIDTH = 4'd12;    

//600p
parameter H_TOTAL = 12'd1056;
parameter H_ACT = 12'd800;
parameter H_FP = 12'd40;
parameter H_SYNC = 12'd128;
parameter H_BP = 12'd88;

parameter HV_OFFSET = 12'd0;

parameter V_TOTAL = 12'd628;
parameter V_ACT = 12'd600;
parameter V_FP = 12'd1;
parameter V_SYNC = 12'd4;
parameter V_BP = 12'd23;



wire [X_WIDTH - 1'b1:0]     act_x      ;
wire [Y_WIDTH - 1'b1:0]     act_y      ;    
wire                        hs         ;
wire                        vs         ;
wire                        de         ;
reg  [3:0]                  reset_delay_cnt;
wire [7:0]  r_out;
wire [7:0]  g_out;
wire [7:0]  b_out;
assign rgb_out = {r_out,g_out,b_out};



hdmi_timming_generator #(
    .X_BITS               (  X_WIDTH              ), 
    .Y_BITS               (  Y_WIDTH              ),
    .V_TOTAL              (  V_TOTAL              ),                    
    .V_FP                 (  V_FP                 ),                    
    .V_BP                 (  V_BP                 ),                    
    .V_SYNC               (  V_SYNC               ),                    
    .V_ACT                (  V_ACT                ),                    
    .H_TOTAL              (  H_TOTAL              ),                    
    .H_FP                 (  H_FP                 ),                    
    .H_BP                 (  H_BP                 ),                    
    .H_SYNC               (  H_SYNC               ),                    
    .H_ACT                (  H_ACT                )                     

) hdmi_timming_generator1                                         
(                                                 
    .clk                  (  pclk                 ),                            
    .rstn                 (  rstn                 ),                        
    .vs_out               (  vs                   ),                                                                                                                                    
    .hs_out               (  hs                   ),          
    .de_out               (  de                   ),           
    .x_act                (  act_x                ),          
    .y_act                (  act_y                )           
);

hdmi_color_bar_generator #(
    .COCLOR_DEPP          (  8                    ), 
    .X_BITS               (  X_WIDTH              ),
    .Y_BITS               (  Y_WIDTH              ),
    .H_ACT                (  H_ACT                ),
    .V_ACT                (  V_ACT                )
) // Number of fractional bits for ramp pattern
hdmi_color_bar_generator1 (
    .rstn                 (  rstn_out             ),                                                
    .pix_clk              (  pclk                 ),
    .act_x                (  act_x                ),
    // input video timing
    .vs_in                (  vs                   ),                   
    .hs_in                (  hs                   ),                       
    .de_in                (  de                   ),
    // test pattern image output                    
    .vs_out               (  vs_out               ),                    
    .hs_out               (  hs_out               ),                    
    .de_out               (  de_out               ),                    
    .r_out                (  r_out                ),                  
    .g_out                (  g_out                ),                   
    .b_out                (  b_out                ) 
);

endmodule

hdmi_timming_generator

`timescale 1ns / 1ps
`define UD #1
module hdmi_timming_generator # (
    parameter               X_BITS=4'd12,
    parameter               Y_BITS=4'd12,
    parameter               V_TOTAL = 12'd750,
    parameter               V_FP = 12'd5,
    parameter               V_BP = 12'd20,
    parameter               V_SYNC = 12'd5,
    parameter               V_ACT = 12'd720,
    parameter               H_TOTAL = 12'd1650,
    parameter               H_FP = 12'd110,
    parameter               H_BP = 12'd220,
    parameter               H_SYNC = 12'd40,
    parameter               H_ACT = 12'd1280
)(
    input                   clk,
    input                   rstn,
    output reg              vs_out,
    output reg              hs_out,
    output reg              de_out,
    output reg [X_BITS-1:0] x_act,
    output reg [Y_BITS-1:0] y_act
);
//    parameter               HV_OFFSET = 12'd0 ;
    reg [X_BITS-1:0]        h_count = 'd0;
    reg [Y_BITS-1:0]        v_count = 'd0;
    
    always @(posedge clk)
    begin
        if (!rstn)
            h_count <= `UD 0;
        else
        begin
            if (h_count < H_TOTAL - 1)
                h_count <= `UD h_count + 1;
            else
                h_count <= `UD 0;
        end
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            v_count <= `UD 0;
        else
        if (h_count == H_TOTAL - 1)
        begin
            if (v_count == V_TOTAL - 1)
                v_count <= `UD 0;
            else
                v_count <= `UD v_count + 1;
        end
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            hs_out <= `UD 4'b0;
        else 
            hs_out <= `UD ((h_count < H_SYNC));
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            vs_out <= `UD 4'b0;
        else 
        begin
            if (v_count == 0)
                vs_out <= `UD 1'b1;
            else if (v_count == V_SYNC)
                vs_out <= `UD 1'b0;
            else
                vs_out <= `UD vs_out;
        end
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            de_out <= `UD 4'b0;
        else
            de_out <= (((v_count >= V_SYNC + V_BP) && (v_count <= V_TOTAL - V_FP - 1)) && 
                      ((h_count >= H_SYNC + H_BP) && (h_count <= H_TOTAL - H_FP - 1)));
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            x_act <= `UD 'd0;
        else 
        begin
            if(h_count > (H_SYNC + H_BP - 1'b1))
                x_act <= `UD (h_count - (H_SYNC + H_BP));
            else
                x_act <= `UD 'd0;
        end
    end
    
    always @(posedge clk)
    begin
        if (!rstn)
            y_act <= `UD 'd0;
        else 
        begin
            if(v_count > (V_SYNC + V_BP - 1'b1))
                y_act <= `UD (v_count - (V_SYNC + V_BP));
            else
                y_act <= `UD 'd0;
        end
    end
    
endmodule

hdmi_color_bar_generator

`timescale 1ns / 1ps
`define UD #1
module hdmi_color_bar_generator # (
    parameter                            COCLOR_DEPP=8, 
    parameter                            X_BITS=13,
    parameter                            Y_BITS=13,
    parameter                            H_ACT = 12'd1280,
    parameter                            V_ACT = 12'd720
)(                                       
    input                                rstn, 
    input                                pix_clk,
    input [X_BITS-1:0]                   act_x,
    input                                vs_in, 
    input                                hs_in, 
    input                                de_in,
    
    output reg                           vs_out, 
    output reg                           hs_out, 
    output reg                           de_out,
    output reg [COCLOR_DEPP-1:0]         r_out, 
    output reg [COCLOR_DEPP-1:0]         g_out, 
    output reg [COCLOR_DEPP-1:0]         b_out
);
    localparam H_ACT_ARRAY_0 = H_ACT/8;
    localparam H_ACT_ARRAY_1 = 2* (H_ACT/8);
    localparam H_ACT_ARRAY_2 = 3* (H_ACT/8);
    localparam H_ACT_ARRAY_3 = 4* (H_ACT/8);
    localparam H_ACT_ARRAY_4 = 5* (H_ACT/8);
    localparam H_ACT_ARRAY_5 = 6* (H_ACT/8);
    localparam H_ACT_ARRAY_6 = 7* (H_ACT/8);
    localparam H_ACT_ARRAY_7 = 8* (H_ACT/8);
    
    always @(posedge pix_clk)
    begin
        vs_out <= `UD vs_in;
        hs_out <= `UD hs_in;
        de_out <= `UD de_in;
    end

    always @(posedge pix_clk)
    begin
        if (de_in)
        begin
            if(act_x < H_ACT_ARRAY_0)
            begin
                r_out <= 8'hff;
                g_out <= 8'hff;
                b_out <= 8'hff;
            end
            else if(act_x < H_ACT_ARRAY_1)
            begin
                r_out <= 8'hff;
                g_out <= 8'hff;
                b_out <= 8'h00;
            end
            else if(act_x < H_ACT_ARRAY_2)
            begin
                r_out <= 8'h00;
                g_out <= 8'hff;
                b_out <= 8'hff;
            end
            else if(act_x < H_ACT_ARRAY_3)
            begin
                r_out <= 8'h00;
                g_out <= 8'hff;
                b_out <= 8'h00;
            end
            else if(act_x < H_ACT_ARRAY_4)
            begin
                r_out <= 8'hff;
                g_out <= 8'h00;
                b_out <= 8'hff;
            end
            else if(act_x < H_ACT_ARRAY_5)
            begin
                r_out <= 8'hff;
                g_out <= 8'h00;
                b_out <= 8'h00;
            end
            else if(act_x < H_ACT_ARRAY_6)
            begin
                r_out <= 8'h00;
                g_out <= 8'h00;
                b_out <= 8'hff;
            end
            else
            begin
                r_out <= 8'h0;
                g_out <= 8'h0;
                b_out <= 8'h0;
            end
        end
        else
        begin
            r_out <= 8'h00;
            g_out <= 8'h00;
            b_out <= 8'h00;
        end
    end
    
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22 - Hadoop HA 高可用集群搭建、手动模式、自动模式以及HA模式集群

目录 1、HA 概述 2、HDFS-HA 集群搭建 2.1、HDFS-HA 核心问题 3、HDFS-HA 手动模式 3.1、环境准备 3.2、规划集群 3.3、配置 HDFS-HA 集群 3.4、启动 HDFS-HA 集群 4、HDFS-HA 自动模式 4.1、HDFS-HA 自动故障转移工作机制 4.2、HDFS-HA 自动故障转移的集群规划 4.…

AI助力后厨可视化智慧监管,让“舌尖安全”看得见

一、背景与需求分析 夏天是食物易腐败的季节&#xff0c;高温容易引发食品安全问题。在后厨环境中&#xff0c;食品安全问题可能涉及食品加工、后厨环境、食品是否被污染等方面&#xff0c;而不合格的食品安全管理可能导致食品中毒事件等风险&#xff0c;损害消费者的健康和餐…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

你的动漫AI女友 Anime gf :自定义创建各种独特个性、语言风格的虚拟角色

一个本地且开源的 CharacterAI 替代工具 Anime gf&#xff0c;提供了一个用户友好的界面&#xff0c;允许用户在桌面上与虚拟角色互动。你可以自定义创建各种角色&#xff0c;让每个虚拟角色都有自己的独特个性和语言风格&#xff0c;可以接入OpenAI、Anthropic、Mistral和 Tog…

建立外贸网站常用的WordPress插件

我们最近使用hostease的虚拟主机在创建wordpress外贸网站时&#xff0c;需要选择安装一些插件。对于wordpress建站选择合适的WordPress插件至关重要。面对琳琅满目的插件选择&#xff0c;根据多年的实践经验&#xff0c;我为您推荐以下必备插件清单&#xff0c;让您的网站建设更…

电商红利再现,“视频号小店”即将顶替“抖音小店”

哈喽~我是电商月月 电商行业发展迅速&#xff0c;除了“刚兴起”就入驻的商家&#xff0c;竞争少&#xff0c;市场大&#xff0c;能简简单单吃到第一批红利&#xff0c;后来入驻的商家就需要运用技巧与同行竞争了【要么认真选品&#xff0c;有独特的卖点。要么就是打价格战&am…

系统性文献综述的撰写(Systematic Review)

文献综述 什么是文献综述 对某一个“领域、专业、课题、问题、研究专题”&#xff0c;通过搜集大量的相关资料&#xff08;别人发表的论文&#xff09;&#xff0c;然后通过“阅读、分析、归纳、整理”给出最新进展、学术见解或建议。对其做出综合性介绍和阐述的一种学术论文…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

【nginx】http2 配置造成 多进程请求变成单进程

一、环境简要说明 #访问请求过程 用户&#xff08;浏览器&#xff09; ——> 防火墙映射 ——> nginx ——> app服务&#xff08;java&#xff09; http2是什么&#xff0c;简单来说是继HTTP1.1版本之后的新版HTTP协议&#xff0c;支持二进制分帧、多路复用、首部压缩…

认识Linux及一些基本

目录 linux简介&#xff1a; 1. 发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 4. 发行版本 Debian Ubuntu 红帽企业级Linux Cent…

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 &#xff08;一&#xff09;栈和队列的基本概念 &#xff08;二&a…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后&#xff0c;往下滑 咱们在下载neo4j时&#xff0c;官方可能要咱们填写一下个人信息&#xff0c;比如&#xff1a;姓名组织结构邮箱等&#xff1a; 咱们可以观察一下&#xff0c;ne4j的下载链…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

C++奇迹之旅:类和对象const成员static关键字友元内部类

文章目录 &#x1f4dd;const成员&#x1f320; const 成员函数是什么&#xff1f;&#x1f320; 取地址及const取地址操作符重载 &#x1f309;static成员&#x1f320;概念&#x1f320;static特性&#x1f309;static小题 &#x1f320;友元&#x1f309; 友元函数&#x1f…

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动 解决步骤&#xff1a; 1.去以下的目录中删掉.npmrc文件&#xff08;只在C:\User.npmrc&#xff09; 2.清除缓存&#xff0c;使用npm cache verify 不要用npm cache clean --force&#xff0c;容易出现npm WAR…

国产AI大模型加速“上车”

上海白领刘先生&#xff0c;坐上他的汽车主驾&#xff0c;向右扭头说&#xff1a;“打开那窗户。”话音刚落&#xff0c;副驾驶的车窗自动开了。 这辆车搭载了基于国产AI大模型的智能系统&#xff0c;就像有了人的大脑和神经网络&#xff0c;通过学习提升语音、视觉等多模态感…

VCSA6.7重置root密码

VCSA6.7重置root密码 1、登录VCSA所运行的ESXI主机 2、打开VCSA虚拟机Web控制台&#xff0c;先拍摄一个快照&#xff0c;然后重启虚拟机&#xff0c;在如下界面按"e" 3、找到linux开头的段落&#xff0c;在末尾追加rw init/bin/bash; 4、输入完成后&#xff0c;按&…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

溪谷软件:游戏联运有多简单?

游戏联运&#xff0c;即游戏联合运营&#xff0c;是一种游戏运营模式&#xff0c;涉及到多个平台或公司共同推广和运营同一款游戏。对于开发者而言&#xff0c;游戏联运的简化程度可能因具体情况而异&#xff0c;但以下是一些因素&#xff0c;使得游戏联运在某种程度上变得更加…