本实验的任务要求是利用串口像开发板发送图片数据,比较简单,因为是采用了ram来做缓存,最终显示出来的图片分辨率非常小,下一步学习完SDRAM,做个SDRAM控制器,就可以传大图了,本小白还在学习中,后续争取搞出来上传到博客上。
这里本人是借鉴了野火FPGA学习的第40章基于RS232的VGA图像显示,在此进行实验的一个扩展学习。
实验总体框架:
1.图像数据处理
2.模块搭建以及修改
3.实验效果
1.主要是利用Matlab进行对图片的数据进行处理,处理代码如下:
clc; %清理命令行窗口
clear all; %清理工作区
RGB=imread('test2.bmp'); %使用imread函数读取图片数据
[ROW,COL,D]=size(RGB); %图片行,列,维度
R=RGB(:,:,1); %提取图片中的红色分量
G=RGB(:,:,2); %提取图片中的绿色分量
B=RGB(:,:,3); %提取图片中的蓝色分量
imgdata=zeros(1,ROW*COL); %定义一个初值为0的数组,存储转换后的图片数据
%转换为RGB332格式
for r=1:ROW
for c=1:COL
imgdata((r-1)*COL+c)=bitand(R(r,c),224)+bitshift(bitand(G(r,c),224),-3)+bitshift(bitand(B(r,c),192),-6);
end
end
%打开或生成txt文件,将格式转换完成的数据写入txt文件
fidc=fopen('data_test.txt','w+');
for i =1:ROW*COL
fprintf(fidc,'%02x ',imgdata(i));
end
fclose(fidc);
2.主要是在原框架上进行修改,在VGA的基础上,加入HDMI控制模块,实现VGA转HDMI的控制效果,在基于RS232的VGA图像显示实验基础上,主要做了几处修改,一是把修改时钟,这个主要取决于你所实验的图像显示分辨率以及帧率,比如我这次用HDMI所显示的分辨率是640*480,60帧,算下来差不多需要25M的工作时钟,并且后面HDMI差分输出时钟也需要125M的时钟(可以参考野火FPGA学习内容HDMI的驱动显示[野火]FPGA Verilog开发实战指南——基于Altera EP4CE10 征途Pro开发板 — [野火]FPGA Verilog开发实战指南——基于Altera EP4CE10 征途Pro开发板 文档)。二是修改接口数据RGB的分量,因为是采用的RGB332格式,在基于RS232的VGA图像显示实验中,传输的RGB数据是16bit,而在本实验是8bit,这就需要做一些处理和修改了。
3.最终实验结果如下图
源码放在这了:
链接:https://pan.baidu.com/s/1M-Me62NSP-jIJRt0tHTi8Q?pwd=hcbw
提取码:hcbw