1043|1

55

帖子

0

TA的资源

一粒金砂(中级)

【国产Tang Primer 25K测评】高云DVI TX(VGA转HDMI)和ROM的IP使用注意点 [复制链接]

本帖最后由 学学学学学学学 于 2024-1-23 23:44 编辑
  1. 本次以一个HDMI-ROM显示图片的例程为例子,简单看一下在Tang-25K开发板上如何在高云FPGA开发平台运行DVI TX和ROM的IP,以及我碰到的一些问题。(例程借鉴了野火开发板例程以及我自己移植进去的一些代码)
  2. 首先是DVI TX这个IP例化碰到的问题,我是在编译的时候碰到的
    1. 报错如下所示:意思是说DVI TX例化输出的tmds_clk_p端口在引脚约束中的电平设置错误。
      ERROR  (CT1109) : "F:\GOWIN\Project\VGA_ROM\src\VGA_ROM.cst":11 | Illegal attribute type 'IO_TYPE = LVCMOS33D' specified on 'tmds_clk_p'
      image.png  
    2. 解决办法:把IO电平设置为ELVDS
      image.png  
  3. 第二个是ROM的IP的使用:
    1. 其实我本来还想使用芯片所集成的RAM16S这个IP的,但是资源不够,两个RAM的IP都不能储存超过18K的图片数据,报错如下
      image.png  
    2. RAM资源不够,那么就使用ROM这个IP,依旧是打开IP管理器,搜索pROM,例如图片所示填写方式,我存储的图片数据的地址线位宽(深度)为14bit,所以要填2的14次方,即16384;输出的数据是16位宽,直接填16即可。然后将由图片生成的后缀为 ".mi"的ROM初始化文件路径添加进去。
      image.png  
    3. 针对高云的ROM初始化要使用的mi文件,这里简单讲一下如何通过matlab,将bmp图片转成mi文件
      1. 这里程序主要参考了野火生成coe文件的代码和一个博主所发的帖子给出的代码(路径:【FPGA】如何生成.mi文件 - 个人文章 - SegmentFault 思否
      2. 我自己简单改代后的matlab文件:里面mi文件和图片的路径要注意更改,以及他们的像素,生成mi文件的图片像素在这段代码里被设置局限在了100*100里,要注意你的图片不能超过这个像素,否则报错。另外就是,我这段代码生成的图片后放进FPGA代码会失真,还是要调一下的,不够我比较懒就。。。。
        clear               %清理命令行窗口
        clc                 %清理工作区
        
        % 使用imread函数读取图片,并转化为三维矩阵
        %image_array = imread('logo.bmp');
        image_array = imread('F:/GOWIN/TangPrimer-25K-example-main/ebf_xc6slx16_pro_tutorial_code-master/30_vga_rom_pic_jump/matlab/image2.bmp');
        
        % 使用size函数计算图片矩阵三个维度的大小
        % 第一维为图片的高度,第二维为图片的宽度,第三维为图片维度
        [height,width,z]=size(image_array);   % 100*100*3
        red   = image_array(:,:,1); % 提取红色分量,数据类型为uint8
        green = image_array(:,:,2); % 提取绿色分量,数据类型为uint8
        blue  = image_array(:,:,3); % 提取蓝色分量,数据类型为uint8
        
        % 使用reshape函数将各个分量重组成一个一维矩阵
        %为了避免溢出,将uint8类型的数据扩大为uint32类型
        r = uint32(reshape(red'   , 1 ,height*width));
        g = uint32(reshape(green' , 1 ,height*width));
        b = uint32(reshape(blue'  , 1 ,height*width));
        
        % 初始化要写入.COE文件中的RGB颜色矩阵
        rgb=zeros(1,height*width);
        
        % 导入的图片为24bit真彩色图片,每个像素占用24bit,RGB888
        % 将RGB888转换为RGB565
        % 红色分量右移3位取出高5位,左移11位作为ROM中RGB数据的第15bit到第11bit
        % 绿色分量右移2位取出高6位,左移5位作为ROM中RGB数据的第10bit到第5bit
        % 蓝色分量右移3位取出高5位,左移0位作为ROM中RGB数据的第4bit到第0bit
        for i = 1:height*width
            rgb(i) = bitshift(bitshift(r(i),-3),11)+ bitshift(bitshift(g(i),-2),5)+ bitshift(bitshift(b(i),-3),0);
        end
        
        %fid = fopen( 'image.mi', 'w+' );
        fid = fopen( 'F:/GOWIN/TangPrimer-25K-example-main/ebf_xc6slx16_pro_tutorial_code-master/30_vga_rom_pic_jump/matlab/image.mi', 'w+' );
        % .mi文件字符串打印
        fprintf( fid, '#File_format=Hex\n');
        fprintf( fid, '#Address_depth=16384\n');
        fprintf( fid, '#Data_width=16\n');
        
        % 写入图片数据
        for i = 1:height*width
            if i == height*width
                fprintf(fid,'%04x\n',rgb(i)); %最后一个数据后面加分号
            else
                if i<=5
                    fprintf(fid,'%04x\n',rgb(i)); 
                else
                    fprintf(fid,'%04x\n',rgb(i));
                    end
            end
        end
        
        fclose( fid ); % 关闭文件指针
  4. 碰到的问题就到此为止了,这里仅贴一下顶层文件和效果,会贴上附件,需要的话可以下载,或者私信我?
      VGA_ROM.zip (596.9 KB, 下载次数: 11)

最新回复

强!   详情 回复 发表于 2024-1-24 09:26

回复
举报

333

帖子

0

TA的资源

版主

强!


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表