FPGA生成图像Modelsim仿真生成BMP图片保存显示

        FPGA生成图像模板,产生RBG格式棋盘格。利用Modelsim仿真,将FPGA生成的图片转化成BMP图片保存并显示。

一:仿真代码

`timescale      1ns/1ps
module design_1_wrapper_top 
();

  reg clk_100MHz;
  reg clk_300MHz;
  wire [31:0]clk_rate;
  wire [31:0]frame_rate;
  wire [15:0]heighth;
  wire o_hblank;
  wire o_pixel_clk;
  wire o_vblank;
  wire [11:0]ov_U;
  wire [11:0]ov_V;
  wire [11:0]ov_data;
  wire stable;
  wire [15:0]width;

wire    clk_455M5;

reg [7:0]   rd_data                 ;
reg         wr_en                   ;
  initial    begin
      clk_100MHz=0;
    clk_300MHz=0;
  end

  always #3 clk_100MHz=~clk_100MHz;
  always #1 clk_300MHz=~clk_300MHz;


    design_1_wrapper
    design_1_wrapper_inst
    (
    .clk_100MHz        (clk_100MHz    ),
    .clk_455M5      (clk_455M5  ),
    .clk_rate        (clk_rate    ),
    .frame_rate        (frame_rate    ),
    .heighth        (heighth    ),
    .o_hblank        (o_hblank    ),
    .o_pixel_clk    (o_pixel_clk),
    .o_vblank        (o_vblank    ),
    .ov_U            (ov_U        ),
    .ov_V            (ov_V        ),
    .ov_data        (ov_data    ),
    .stable            (stable        ),
    .width            (width        )
    );
    
    
    reg [7:0]   wr_bmp_data [0:2100000]    ;
    parameter   CLK_PERIOD      =5                                                      ;
    parameter   W_BMP_WIDTH     =32'd1920                                               ;
    parameter   W_BMP_HIGHT     =32'd1080                                               ;
    parameter   PIXEL_BITS      =16'h0018                                               ;   //24bits
    parameter   PIXEL_BYTES     =PIXEL_BITS/8                                           ;   //3bytes
    parameter   IMAGE_SIZE      =((((W_BMP_WIDTH*PIXEL_BYTES)>>2)+1)<<2)*W_BMP_HIGHT    ;
    parameter   BMP_FILE_HEAD   = 32'd54                                                ; 
    parameter   BM_WINDOWS      = 16'h4d42                                              ;
    parameter   FILE_SIZE       =IMAGE_SIZE+BMP_FILE_HEAD                               ;
    integer out_image   ;
    integer i           ;
    integer j           ;
    
    
    initial begin
    
    out_image               =   $fopen("I:picture\\output_file.bmp","wb");
    
    
    //BM
    wr_bmp_data[0 ]  =   BM_WINDOWS[0+:8]   ;
    wr_bmp_data[1 ]  =   BM_WINDOWS[8+:8]   ;
    //bmp file size
    wr_bmp_data[2 ]  =   FILE_SIZE[0 +:8]   ;
    wr_bmp_data[3 ]  =   FILE_SIZE[8 +:8]   ;
    wr_bmp_data[4 ]  =   FILE_SIZE[16+:8]   ;
    wr_bmp_data[5 ]  =   FILE_SIZE[24+:8]   ;
    //reserved
    wr_bmp_data[6 ]  =   8'h00   ;
    wr_bmp_data[7 ]  =   8'h00   ;
    wr_bmp_data[8 ]  =   8'h00   ;
    wr_bmp_data[9 ]  =   8'h00   ;
    
    //offset
    wr_bmp_data[10]  =   BMP_FILE_HEAD[0 +:8]   ;    
    wr_bmp_data[11]  =   BMP_FILE_HEAD[8 +:8]   ;
    wr_bmp_data[12]  =   BMP_FILE_HEAD[16+:8]   ;
    wr_bmp_data[13]  =   BMP_FILE_HEAD[24+:8]   ;
    
    //bmp information struct
    wr_bmp_data[14]  =   8'h28   ;
    wr_bmp_data[15]  =   8'h00   ;
    
    wr_bmp_data[16]  =   8'h00   ;
    wr_bmp_data[17]  =   8'h00   ;
    
    //write bmp width
    wr_bmp_data[18]  =   W_BMP_WIDTH[0+:8]   ;
    wr_bmp_data[19]  =   W_BMP_WIDTH[8+:8]   ;
    wr_bmp_data[20]  =   W_BMP_WIDTH[16+:8]   ;
    wr_bmp_data[21]  =   W_BMP_WIDTH[24+:8]   ;
    //write bmp hight
    wr_bmp_data[22]  =   W_BMP_HIGHT[0+:8]    ;
    wr_bmp_data[23]  =   W_BMP_HIGHT[8+:8]    ;
    wr_bmp_data[24]  =   W_BMP_HIGHT[16+:8]   ;
    wr_bmp_data[25]  =   W_BMP_HIGHT[24+:8]   ;
    
    //bit planes
    wr_bmp_data[26]  =   8'h01   ;
    wr_bmp_data[27]  =   8'h00   ;
    
    //one pixel use bits
    wr_bmp_data[28]  =   PIXEL_BITS[0+:8]   ;
    wr_bmp_data[29]  =   PIXEL_BITS[8+:8]   ;
    
    //compress
    wr_bmp_data[30]  =   8'h00   ;
    wr_bmp_data[31]  =   8'h00   ;
    wr_bmp_data[32]  =   8'h00   ;
    wr_bmp_data[33]  =   8'h00   ;
    
    //bmp image size
    wr_bmp_data[34]  =   IMAGE_SIZE[0 +:8]   ;
    wr_bmp_data[35]  =   IMAGE_SIZE[8 +:8]   ;
    wr_bmp_data[36]  =   IMAGE_SIZE[16+:8]   ;
    wr_bmp_data[37]  =   IMAGE_SIZE[24+:8]   ;
    
    wr_bmp_data[38]  =   8'hC4   ;    
    wr_bmp_data[39]  =   8'h0e   ;
    wr_bmp_data[40]  =   8'h00   ;
    wr_bmp_data[41]  =   8'h00   ;
    
    wr_bmp_data[42]  =   8'hC4   ;
    wr_bmp_data[43]  =   8'h0e   ;
    wr_bmp_data[44]  =   8'h00   ;
    wr_bmp_data[45]  =   8'h00   ;
    //use color board
    wr_bmp_data[46]  =   8'h00   ;
    wr_bmp_data[47]  =   8'h00   ;
    //important color 
    wr_bmp_data[48]  =   8'h00   ;
    wr_bmp_data[49]  =   8'h00   ;
    wr_bmp_data[50]  =   8'h00   ;
    wr_bmp_data[51]  =   8'h00   ;
    wr_bmp_data[52]  =   8'h00   ;
    wr_bmp_data[53]  =   8'h00   ;
    
    j=0;
    for(i=0;i<54;i=i+1)
    begin
        @(posedge clk_455M5)
        $fwrite(out_image,"%c",wr_bmp_data[i]);
    end
    
    for(i=54;i<FILE_SIZE;i=i+1)
    begin
        if((j%(W_BMP_WIDTH*3)==0))begin
        j=0;
        end 
        
        wait(o_vblank);
        wait(o_hblank);
        wr_en=1;
        @(posedge clk_300MHz)begin
        if(j%(PIXEL_BITS/8)==0)
            $fwrite(out_image,"%c",ov_data[7:0]);
        else    if(j%(PIXEL_BITS/8)==1)
            $fwrite(out_image,"%c",ov_U[7:0]);
        else    if(j%(PIXEL_BITS/8)==2)
            $fwrite(out_image,"%c",ov_V[7:0]);            
        end  
        
        wait(o_vblank);
        wait(o_hblank);
        #1
        j=j+1;
       
        wait(o_vblank);
        wait(o_hblank);
    end
  
    wr_en=0;
    $fclose(out_image);
    
    end
endmodule

二:代码仿真

        产生BMP图像。

  

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

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

相关文章

为微信小程序项目添加eslint

背景 在使用vscode开发微信小程序的过程中&#xff0c;修改js的时候发现没有报错提示&#xff0c;让我很不习惯&#xff0c;所以想为微信小程序项目添加eslint配置 编码实战 为微信小程序配置ESLint可以遵循以下步骤&#xff1a; 安装ESLint及其相关插件 首先&#xff0c;…

基于IDEA的Maven(坐标信息介绍和编写)

这篇博客来学习和分析一下&#xff1a; " pom.xml " 所生成的最基本的信息。 之前的博客中讲到&#xff0c;学 Maven 就是学 " pom.xml " 的配置。后面也会围绕这个文件进行学习。 目录 一、分析 pom.xml 文件 &#xff08;1&#xff09;分析的 "p…

2024 年最新 Python 基于火山引擎豆包大模型搭建 QQ 机器人详细教程(更新中)

豆包大模型概述 火山引擎官网&#xff1a;https://www.volcengine.com/ 字节跳动推出的自研大模型。通过字节跳动内部50业务场景实践验证&#xff0c;每日千亿级tokens大使用量持续打磨&#xff0c;提供多模态能力&#xff0c;以优质模型效果为企业打造丰富的业务体验。 模型…

数据库 | SQL语言和关系代数汇总篇(*^▽^*)

双重/两个 not exists 嵌套查询 简单分析_两个not exists-CSDN博客 最明白的 not exists 双层嵌套讲解 SQL 查询语句_not exist 嵌套-CSDN博客 1. 答案&#xff1a; 2. 答案&#xff1a; 3. 4. 5. 6. 7. 8. 这个SQL查询是从两个表&#xff08;假设是SPJ和P&#xff09;中检…

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89402192 更多资源下载&#xff1a;关注我。

.NET+Python量化【1】——环境部署和个人资金账户信息查询

前言&#xff1a;量化资料很少&#xff0c;.NET更少。那我就来开个先河吧~ 以下是使用QMT进行量化开发的环境部署和基础信息获取有关操作。 1、首先自己申请券商的QMT权限&#xff0c;此步骤省略。 2、登陆QMT&#xff0c;选择极简模式&#xff0c;或者独立交易模式之类的。会进…

阿里员工:“大厂病”导致有些人不太正常

阿里巴巴对“大公司病”开刀 阿里巴巴宣布对“大公司病”开刀&#xff0c;终于有高层意识到这个问题的严重性&#xff0c;并决心解决。所谓“大公司病”&#xff0c;不仅体现在规模臃肿、部门繁多、层次复杂&#xff0c;还包括中层管理人员的不作为。这些人处在上传下达的位置&…

旅游管理平台系统

摘要 如今许多地区的风景已经随着网络技术的不断发展和进步而映入人们的眼帘&#xff0c;旅游已经成为一种大众化的休闲方式。而青海海西州风光旖旎&#xff0c;民族文化独特&#xff0c;更是吸引了众多游客纷至沓来。海西州地域广阔、人烟稀少、是一个经济发展缓慢的地方&…

nginx+tomcat负载均衡、动静分离群集【☆☆☆☆☆】

Nginx是一款非常优秀的HTTP服务器软件&#xff0c;性能比tomcat更优秀&#xff0c;它支持高达50 000个并发连接数&#xff0c;拥有强大的静态资源处理能力&#xff0c;运行稳定&#xff0c;内存、CPU等系统资源消耗非常低。目前很多大型网站都应用Nginx服务器作为后端网站程序的…

Python Textract库:文本提取

更多Python学习内容&#xff1a;ipengtao.com Textract是一个强大的Python库&#xff0c;用于从各种文件格式中提取文本。无论是PDF、Word文档、Excel电子表格、HTML页面还是图像&#xff0c;Textract都能有效地提取其中的文本内容。Textract通过集成多种开源工具和库&#xff…

opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

centOS Stream9配置NAT8网络

首先将VMware关机&#xff0c;添加网络适配器 启动虚拟机&#xff0c;查看ens192是否打开连接 安装的图形化需要查看右上角电源处网卡是否连接 最小化安装一般不会出现未连接的状态 使用ip a 查看 配置网卡文件 cd /etc/NetworkManager/system-connections/cd到当前目录下…

7-Zip

最牛掰的解压缩的开源软件&#xff01;赏&#xff01;&#xff01;&#xff01;&#xff01; 概述 7-Zip 是一款免费开源的文件归档和压缩软件&#xff0c;由于其高压缩比和支持多种格式等优势&#xff0c;越来越受到用户的青睐。7-Zip 最初由一位俄罗斯程序员开发&#xff0c…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

uniapp app一键登录

一键登录不需要单独写页面&#xff0c;uniapp 有原生的页面 第一步&#xff0c;登录Dcloud后台》我的应用》点击应用名称 填写完点击 uniCloud模块新建一个服务空间》选择免费 , 创建完点击一键登录&#xff0c;添加应用&#xff0c;这个需要审核&#xff0c;“大概一天左右”…

ORM框架SQLAlchemy

ORM框架SQLAlchemy 目录 ORM框架SQLAlchemy介绍安装架构连接数据库1. PostgreSQL2. MySQL3. Oracle4. Microsoft SQL Server5. SQLite 创建连接池原生Python操作数据库SQLAlchemy的ORM操作创建表外键字段的创建一对多多对多 ORM操作增删改查查询添加删除修改 介绍 sqlalchemy是…

帝国CMS二次开发H5手游如何让同一个url 不同的模板

帝国CMS在二次开发《72游戏网》的时候&#xff0c;H5手游如何让同一个url 不同的模板 比如&#xff1a;www.72yy.com/you/11935.html 是H5游戏宣传页 由于很多H5游戏和网页游戏都是需要使用iframe来嵌套使用的 利于自己网站SEO收录优化 那么就再复制一套程序 用二级目录或者二…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中&#xff0c;包络分析&#xff0c;又称为共振解调技术&#xff0c;是目前应用最为成功的方法之一。首先&#xff0c;对激励引起的共振频带进行带通滤波&#xff0c;然后对滤波信号进行包络谱分析&#xff0c;通过识别包络谱中的故障相关的特征频…

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

[Linux] 系统管理

全局配置文件 用户个性化配置 配置文件的种类 alias命令和unalias命令 进程管理 进程表