FPGA projet : VGA

news2024/9/24 17:25:59

在vga屏幕上显示 : 野火科技

相比于上个工程,只需要修改 vga_pix 模块即可。

注意存储器类型变量的定义:reg 【宽度】<名称>【深度】

赋值 always @(poseedge vga_clk)begin

为每一行赋值,不可位赋值。

end

使用 <名称>【深度】【宽度】

 

module vga_pix(
    input           wire            vga_clk     ,
    input           wire            vga_rst_n   ,
    input           wire    [9:0]   pix_x       ,      
    input           wire    [9:0]   pix_y       ,

    output          reg     [15:00] pix_data 
);

    // parameter
    parameter PIX_X_VALID = 192 ,
              PIX_Y_VALID = 208 ; // 有效开始边界

    parameter CHAR_X      = 256 ,
              CHAR_Y      = 64  ; // 有效空间

    parameter BLACK      = 16'h0000 ,
              GOLD       = 16'hFEC0 ;
    // define 存储器变量 深度64 宽度256
    reg      [255:0] char [63:0];
    // wire signal define
    wire    [9:0]   char_x ;
    wire    [9:0]   char_y ;

    // char_x  字符横向范围 && 字符纵向范围。有效范围横坐标 - 字符开始坐标
    assign char_x = ( (pix_x >= PIX_X_VALID && pix_x <= PIX_X_VALID + CHAR_X - 1'b1) && 
            ( pix_y >= PIX_Y_VALID && pix_y <= PIX_Y_VALID + CHAR_Y - 1'b1) ) ? (pix_x - PIX_X_VALID) : 10'h3ff;
    // char_y
    assign char_y = ( (pix_x >= PIX_X_VALID && pix_x <= PIX_X_VALID + CHAR_X - 1'b1) && 
            ( pix_y >= PIX_Y_VALID && pix_y <= PIX_Y_VALID + CHAR_Y - 1'b1) ) ? (pix_y - PIX_Y_VALID) : 10'h3ff;

    // char_data
    always @(posedge vga_clk) begin
        char[ 0] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[ 1] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[ 2] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[ 3] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[ 4] <= 256'h0000000000000000000000000000000000000000070000000001C00040000000 ;
        char[ 5] <= 256'h000000000000000000000000000000000000000003E000000000F00078000000 ;
        char[ 6] <= 256'h000000000000000000000380000000000000060003E000000000F8007E000000 ;
        char[ 7] <= 256'h0000038000780000000003E0000000000000078001E000000000F0003E000000 ;
        char[ 8] <= 256'h00003FE003FE0000000001F00000000000000FC001E000000000F0003C000000 ;
        char[ 9] <= 256'h0007FFF07F3F0000000001F00000000000001F8001C000000000F0003C000000 ;
        char[10] <= 256'h07FF81F7F83E0000000001F00000000000003E0001C000000000E0003C000000 ;
        char[11] <= 256'h03E1C1E1C0780000000001E0000000000000780001C000000000E0003C000000 ;
        char[12] <= 256'h03C1C1E000700000000001E0000000000000E00001C000000000E00038000000 ;
        char[13] <= 256'h01C1C1E000E00000000000E0000000000003C001C1C000000000E00038000000 ;
        char[14] <= 256'h01C0C1C001C00000000000E00000000000077001F1C000000000E000387C0000 ;
        char[15] <= 256'h01C0FDC001800000000000E00180000000187800F1C000000000E0003FFC0000 ;
        char[16] <= 256'h00E7F9C07B000000000000E001E000000000700071C000000000E0007FF00000 ;
        char[17] <= 256'h00FFC1803E000000000001E001F000000000700011C000000000E007FFC00000 ;
        char[18] <= 256'h00E0C1801F000000000001E003F800000000700001C000000000FF1FFE000000 ;
        char[19] <= 256'h00E0C3800F000000000001E003F80000000033C001C00000000FFE0FF8000000 ;
        char[20] <= 256'h0060C38007038000000401C007C0000000003FE001C0000000FFF00030000000 ;
        char[21] <= 256'h0060C700013FE000000701C00F0000000001FE0781C0000000FFE00030000000 ;
        char[22] <= 256'h0071FF0007FFF0000007C1C01C000000001FF003C1C000000000E00030000000 ;
        char[23] <= 256'h003FC200FF83F8000003E1C03800000003FF7001E1C000000000E00030000000 ;
        char[24] <= 256'h0030C07FF803F8000001E1C0E00000001FF8F000E1C000000000E00030000000 ;
        char[25] <= 256'h0000C03F9C03C0000001F1C1800000000FE0F00041C000000000E20033800000 ;
        char[26] <= 256'h0000C0000E0700000000F1C0000000000301F00001C0F8000000EC003FE00000 ;
        char[27] <= 256'h0000C4000F040000000061E0000000000003F80001DFFC000000F801FFE00000 ;
        char[28] <= 256'h0000FF000E000000000001E0000000000003FF0003FFFC000000F07FE3E00000 ;
        char[29] <= 256'h000FFE000E000000000003F000000000000777807FF800000001E07F03C00000 ;
        char[30] <= 256'h007FF0000E000000000003D800000000000E73BFFFC000000003E00003C00000 ;
        char[31] <= 256'h001EC000060000000000039C00000000001C707FE1C000000007E00003800000 ;
        char[32] <= 256'h0000C000060000000000038C00000000001C700C01C00000001EE03C03800000 ;
        char[33] <= 256'h0000C0E00600000000000786000000000038700001C00000007CE01E03800000 ;
        char[34] <= 256'h0000CFC00600000000000707000000000070700001C0000001F8E00707000000 ;
        char[35] <= 256'h0000FE0006000000000007038000000000E0700001C000000FF0E00387000000 ;
        char[36] <= 256'h0007F0000700000000000F01C000000001C0700001C000000FC0E001C7000000 ;
        char[37] <= 256'h007F80000700000000000E01E00000000300700001C000000780E000EE000000 ;
        char[38] <= 256'h0FFE00000700000000001E00F00000000600700001C000000300E0007E000000 ;
        char[39] <= 256'h0FF000000700000000001C00780000000800700001C000000000E0003C000000 ;
        char[40] <= 256'h07C0000007000000000038003C0000001000700001C000000000E0007E000000 ;
        char[41] <= 256'h0100000007000000000078003F0000000000700001C000000000E000FF800000 ;
        char[42] <= 256'h00000000070000000000F0001F8000000000700001C000000000E001F7C00000 ;
        char[43] <= 256'h00000000070000000001E0000FE000000000700001C000000000E007C3F00000 ;
        char[44] <= 256'h00000000070000000003C00007F800000000F00001C00000001FE01F81FC0000 ;
        char[45] <= 256'h000000000F000000000F800007FE00000000F00001C000000007E0FC00FF8000 ;
        char[46] <= 256'h000000070F000000001E000003FFC0000000700001C000000003E3E0007FF000 ;
        char[47] <= 256'h00000003FF000000007C000001FFF8000000600001C000000001C000003FFC00 ;
        char[48] <= 256'h00000000FE00000001E00000007FF8000000600001C000000001C00000000000 ;
        char[49] <= 256'h000000007E00000003000000000000000000200001C000000000800000000000 ;
        char[50] <= 256'h000000003C000000000000000000000000000000018000000000000000000000 ;
        char[51] <= 256'h0000000038000000000000000000000000000000008000000000000000000000 ;
        char[52] <= 256'h0000000010000000000000000000000000000000008000000000000000000000 ;
        char[53] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[54] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[55] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[56] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[57] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[58] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[59] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[60] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[61] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[62] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
        char[63] <= 256'h0000000000000000000000000000000000000000000000000000000000000000 ;
    end
    // pix_data
    always @(posedge vga_clk or negedge vga_rst_n) begin
        if(~vga_rst_n) begin
            pix_data <= BLACK ;
        end else begin
            if(((pix_x >= PIX_X_VALID - 1'b1) && (pix_x <= (PIX_X_VALID + CHAR_X - 2'd2))) && 
                ((pix_y >= PIX_Y_VALID) && (pix_y <= (PIX_Y_VALID + CHAR_Y - 1'b1))) && 
                    (char[char_y][10'd255 - char_x] == 1'b1)) begin
                pix_data <= GOLD ;
            end
            else begin
                pix_data <= BLACK ;
            end
        end
    end
endmodule 
`timescale 1ns/1ns
module test_vga_ctrl ();
    reg                   sys_clk_50m ;
    reg                   sys_rst_n   ;
    wire    [15:00]       pix_data    ;

    wire                  vga_clk     ;
    wire                  locked      ;

    wire                  vga_rst_n   ;
    
    assign vga_rst_n = sys_rst_n && locked;

    wire                  hsync       ;
    wire                  vsync       ;
    wire    [ 9: 0]       pix_x       ;
    wire    [ 9: 0]       pix_y       ;

    wire    [15:00]       rgb         ;

vga_pix vga_pix_insert (
    .vga_clk                ( vga_clk   ) ,
    .vga_rst_n              ( vga_rst_n ) ,
    .pix_x                  ( pix_x     ) ,
    .pix_y                  ( pix_y     ) ,

    .pix_data               ( pix_data  )  
);

pll_25m	pll_25m_inst (
	.areset                 ( ~sys_rst_n   ),
	.inclk0                 ( sys_clk_50m  ),
	.c0                     ( vga_clk      ),
	.locked                 ( locked       )
);

vga_ctrl vga_ctrl_insert(
    .vga_clk                ( vga_clk      ) ,
    .vga_rst_n              ( vga_rst_n    ) ,
    .pix_data               ( pix_data     ) ,
    
    .hsync                  ( hsync        ) ,
    .vsync                  ( vsync        ) ,
    .pix_x                  ( pix_x        ) ,
    .pix_y                  ( pix_y        ) ,
    .rgb                    ( rgb          )      
); // 640X480@60

    parameter CYCLE = 20  ;
    initial begin
        sys_clk_50m    = 1'b1  ;
        sys_rst_n <= 1'b0  ;
        #(CYCLE * 2)       ;
        sys_rst_n <= 1'b1  ;
        #(CYCLE * 10000)   ;
    end
    always #(CYCLE / 2) sys_clk_50m = ~sys_clk_50m ;
endmodule

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝直播流量底层逻辑规则

大花客服外包 位商家朋友们在运营店铺的过程中&#xff0c;是不是最担心的就是没有流量&#xff1f;今天针对直播间流量分配规则底层原理&#xff0c;给大家做一个深度剖析。 一、十大直播间流量来源 十大直播间流量来源公域流量私域流量 1、封面图点击率&#xff08;公域&am…

Django系列:Django应用(app)的创建与配置

Django系列 Django应用&#xff08;app&#xff09;的创建与配置 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article…

【7z密码】7z压缩包密码忘记了,怎么办?i

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

广义IoU

使用相对误差相似可能导致模型在回归大小边界框时表现不一致的原因是&#xff0c;边界框的尺度不同会对相对误差产生不同的影响。 假设我们有两个边界框&#xff0c;一个较小&#xff0c;一个较大&#xff0c;它们的真实尺寸分别为10x10和100x100。如果我们的模型在回归这两个边…

神兵利器 - sigurls侦察工具,Squeak 通过.net执行shellcode,脚本自动爬取所有接口swagger-hack

神兵利器 - sigurls侦察工具&#xff0c;Squeak 通过.net执行shellcode&#xff0c;脚本自动爬取所有接口swagger-hack。 ############################# 免责声明&#xff1a;工具本身并无好坏&#xff0c;希望大家以遵守《网络安全法》相关法律为前提来使用该工具&#xff0…

MATLAB中scatter3函数用法

目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建三维散点图 改变标记大小 改变标记颜色 填充标记 设置标记类型 设置标记属性 绘制表中的数据 使用自定义标记大小和颜色绘制表数据 指定三维散点图的坐标区 使用句柄设置散点序列属性 scatter3函数的功…

打开深度学习的锁:(1)入门神经网络

打开深度学习的锁 导言PS&#xff1a;神经网络的训练过程一、导入的包和说明二、数据的预处理2.1 数据集说明2.2 数据集降维度并且转置2.3 数据预处理完整代码 三、逻辑回归3.1 线性回归函数公式3.2 sigmoid函数公式 四、初始化函数五、构建逻辑回归的前向传播和后向传播5.1 损…

FDM3D打印系列——Blue Mary

大家好&#xff0c;我是阿赵。   这次打印一个拳皇里面的Blue Mary。   打印这个模型的原因&#xff0c;是看到有网友说这个模型用FDM打印不出来&#xff0c;有些人评论说要光固化才行。所以我也想试试。结果是成功的。 一、打印过程 这个模型是分为了5个部分&#xff0c…

PowerShell脚本免杀/bypass/绕过杀毒软件,ReconFTW 漏洞扫描

PowerShell脚本免杀/bypass/绕过杀毒软件&#xff0c;ReconFTW 漏洞扫描。 #################### 免责声明&#xff1a;工具本身并无好坏&#xff0c;希望大家以遵守《网络安全法》相关法律为前提来使用该工具&#xff0c;支持研究学习&#xff0c;切勿用于非法犯罪活动&#…

Observability:使用 OpenTelemetry 手动检测 Go 应用程序

作者&#xff1a;Luca Wintergerst DevOps 和 SRE 团队正在改变软件开发的流程。 DevOps 工程师专注于高效的软件应用程序和服务交付&#xff0c;而 SRE 团队是确保可靠性、可扩展性和性能的关键。 这些团队必须依赖全栈可观察性解决方案&#xff0c;使他们能够管理和监控系统&…

Git配置SSH

前言&#xff1a; Git是分布式的代码管理工具&#xff0c;远程的代码管理是基于SSH的&#xff0c;所以要使用远程的Git则需要SSH的配置 温馨提示&#xff1a; 1.查看是否已经有了ssh公钥&#xff1a;cd ~/.ssh 如果没有则不会有此文件夹&#xff0c;有则删除 一、git 配置 &a…

性能测试之性能监控和性能优化

目录 一.概述二.jconsole和jvisualvm三.jconsole四.visualvm1.输入命令提示 jvisualvm不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件2.打开jvisualvm里面不包含GC监控 五.性能优化1.优化中间件&#xff08;中间件越多&#xff0c;系统性能越差&#xff09;2.优…

【电子元件】常用电子元器件的识别之电阻器

目录 前言1. 电阻器的识别1.1 普通电阻器的识别1. 普通电阻器的识别色环电阻器绕线电阻器水泥电阻器贴片电阻器网络电阻器(排阻)保险电阻器精密电阻器2. 电阻器的符号3. 普通电阻器的主要参数标称阻值和允许误差额定功率最高工作电压温度系数1.2 电位器的识别1. 电位器的识别…

Python浪漫星空

系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://wan…

2023-09-15 LeetCode每日一题(宝石补给)

2023-09-15每日一题 一、题目编号 LCP 50. 宝石补给二、题目链接 点击跳转到题目位置 三、题目描述 欢迎各位勇者来到力扣新手村&#xff0c;在开始试炼之前&#xff0c;请各位勇者先进行「宝石补给」。 每位勇者初始都拥有一些能量宝石&#xff0c; gem[i] 表示第 i 位勇…

mybatis基本构成mybatis与hibernate的区别添加mybatis支持

目录 1. mybatis简介 2. mybatis基本构成 3. mybatis与hibernate的区别 4. 项目中添加mybatis支持 1. mybatis简介 Mybatis是Apache的一个Java开源项目&#xff0c;是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中&#xff0c;避免将Sql语句硬编…

《向量数据库指南》——向量数据库Milvus Cloud如何面对市场质疑?

我认为答案是这样&#xff1a;如果你的数据量只有 100 万条或者几十万条&#xff0c;无论使用何种数据库都可以解决这个问题&#xff0c;甚至不用使用向量数据库也可以达到目标。就像为什么要使用 MySQL 一样&#xff0c;如果你只有 100 条数据&#xff0c;可能在 Excel 中进行…

微信小程序——生命周期详解(代码解读)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Leetcode: 645.错误的集合 题解【超详细】

题目 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复…

2023年“羊城杯”网络安全大赛 决赛 AWDP [Break+Fix] Web方向题解wp 全

终于迎来了我的第一百篇文章。 这次决赛赛制是AWDP。BreakFix&#xff0c;其实就是CTFFix&#xff0c;Fix规则有点难崩。Break和Fix题目是一样的。 总结一下&#xff1a;败北&#xff0c;还是太菜了得继续修炼一下。 一、Break ezSSTI 看到是SSTI&#xff0c;焚靖直接一把梭…