首页 > 其他分享 >基于RS232的VGA图像显示(串口+ram)

基于RS232的VGA图像显示(串口+ram)

时间:2023-08-27 18:00:59浏览次数:47  
标签:ram 模块 RAM VGA 信号 串口 图片 数据 时钟

第40章、基于RS232的VGA图像显示(串口+ram)

【实战】

使用 PC机 通过 UART串口 传输图片像素数据(txt文件)给FPGA,FPGA将 图片数据 缓存到内部RAM中,再利用vga控制模块读取,在VGA显示器中心位置显示缓存到RAM中的图片。VGA显示模式为 640x480@60;图片大小为100x100。

基于RS232的VGA图像显示工程的工作流程:

(1) 系统上电后,板卡传入系统时钟(sys_clk)和复位信号(sys_rst_n)到顶层模块;

(2) 系统时钟直接传入 时钟生成模块(clk_gen),分频产生 VGA工作时钟(vga_clk),作为图像数据生成模块(vga_pic)和VGA时序控制模块(vga_ctrl)的工作时钟;产生串口接收模块工作时钟(rx_clk),作为串口接收模块(uart_rx)的工作时钟。

(3) 使用PC机中的 上位机软件 向FPGA发送 图片数据,串口接收模块(uart_rx)将接收到的图片数据写入 图像数据生成模块(vga_pic) 中调用IP核生成的RAM中。

(4) 图像数据生成模块 以 VGA时序控制模块传入的像素点坐标(pix_x,pix_y)为约束条件,生成背景信息的待显示图像的色彩信息(pix_data);在图片显示区域读取存储于RAM的图片数据;两者数据结合生成VGA显示图像数据pix_data_out传入VGA时序控制模块。

(5) 图像数据生成模块生成的 图像色彩信息pix_data_out 传入 VGA时序控制模块,在模块内部使用使能信号滤除掉非图像显示有效区域的图像数据,产生 RGB色彩信息(rgb),在行、场同步信号(hsync、vsync)的同步作用下,将RGB色彩信息扫描显示到VGA显示器,实现图片显示。

【图像数据生成模块(vga_pic)】

【图片预处理】

图片不能直接通过串口收发,需要通过处理将图片转化为 指示像素信息的数据格式:

①、图片大小:本次实验显示图片大小为100*100,若图片满足要求,无需处理。图片大小的预处理方法可参阅“基于ROM的VGA图像显示”章节的相关部分,此处不再赘述。

②、图片格式:串口传输数据 位宽要求为8bit,要将像素的色彩格式转换为 RGB332 格式,这样既能通过串口传输,也能表示图片信息,但图片清晰度会降低。

使用Matlab对图片进行处理,将图片色彩模式转换为RGB332,并保存为十六进制文本格式的*.txt文件,具体见代码。

【.txt文件生成】

  1. 在vga_uart_pic文件夹下创建matlab文件夹,并添加图片
  2. 画图工具打开,修改像素为100*100,修改图片大小;
  3. matlab创建 vga_uart_pic.m 文件,运行代码,修改图片格式为 RGB332 ,并提取图像像素点信息,输出 “.txt” 格式文件
clc; %清理命令行窗口
clear all; %清理工作区
RGB=imread('logo.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_logo.txt','w+');
for i =1:ROW*COL
fprintf(fidc,'%02x ',imgdata(i));
end
fclose(fidc);

设计本模块的目的是产生 VGA彩条背景像素点色彩信息 和 读出RAM存储的图片数据。模块内部实例化RAM IP核,有6路输入,1路输出,输入信号为数据写时钟、数据写使能、数据写地址、写入数据、数据读时钟、数据读地址,输出为数据读地址对应图片数据。

输入信号:

  1. 时钟信号vga_clk :频率为25MHz,为VGA显示器工作时钟,由分频模块产生并输入;
  2. RAM数据写时钟 :频率为50MHz,由分频模块产生并输入,与 数据接收模块 的工作时钟为同一时钟;
  3. 复位信号sys_rst_n :为顶层模块的rst_n信号输入,低电平有效;pi_flag、pi_data两信号成对出现,由串口数据接收模块产生并传入,分别作为RAM数据写使能信号和数据写入信号;
  4. (pix_x,pix_y) :VGA有效显示区域像素点坐标,由VGA时序控制模块生并输入。

输出信号:

  1. pix_data_out :图像像素点色彩信息,在有效显示区域像素点坐标(pix_x,pix_y)约束下生成,传输到VGA时序控制模块。

第一部分:RAM数据写地址wr_addr信号波形

  1. 想要将串口传入的图像数据 写入RAM 中,时钟、使能、地址和数据信号缺一不可。时钟、使能和数据信号均由外部传入,地址信号内部声明。
  2. 使用输入的数据 写使能信号 pi_flag 作为 数据写地址的wr_addr的自加条件,数据写地址wr_addr赋初值为数据写入首地址,本实验的首地址0,pi_flag信号每拉高一次,地址信号加1。要注意的是,数据写地址使用的时钟要与RAM数据写时钟相同。

第二部分:彩条背景色彩信息(pi_data)波形图

  1. 根据输入像素点坐标(pix_x,pix_y),在有效显示区域,将pix_x计数范围十等分,在不同的计数部分给pix_data赋值对应的色彩信息,因为采用时序逻辑的赋值方式,pix_data滞后pix_x、pix_y信号一个时钟周期。

第三部分:RAM读使能(rd_en)、RAM地址(rd_addr)和读出图片数据(pic_data)波形图

  1. 将要显示的的图片数据通过串口写入RAM,写入图片分辨率为100*100。要想将存储在RAM的图片数据 读取出来,数据读时钟、读使能信号和地址信号必不可少,数据读时钟由外部传入,所以模块内部要声明 RAM读使能信号(rd_en) 和 RAM地址(ram_addr)信号。
  2. 在图片显示区域拉高使能信号,将要读取数据地址写入 RAM地址端口,读取地址对应图像数据。读地址信号以读使能信号为约束条件,在数据读时钟信号同步下,初值为0,当读使能信号为高电平时,每一个时钟周期自加1。但要注意,自RAM读取的数据是 滞后 使能信号和地址信号一个时钟周期的(比如,当使能信号为高电平,地址写入为999,但与地址999同步输出的数据为地址998的数据,所以RAM读使能信号(rd_en)和RAM地址(rd_addr)信号均要超前图片显示区域一个时钟周期)。

第四部分:图片显示有效信号(pic_valid)、待显示图像数据(pic_data_out)波形图

  1. 声明一个内部信号,那就是图片显示有效信号(pic_valid)。在有效信号为高电平时,将自RAM读出的图片数据赋值给待显示图像数据(pic_data_out),覆盖彩条背景。
  2. 利用RAM读使能信号(rd_en)信号 延迟一个时钟周期生成 图片显示有效信号(pic_valid)(RAM读使能信号(rd_en)超前图片显示区域一个时钟周期);
  3. 在有效信号为高电平时,将自ROM读出的图片数据赋值给待显示图像数据(pic_data_out),覆盖彩条背景。

标签:ram,模块,RAM,VGA,信号,串口,图片,数据,时钟
From: https://www.cnblogs.com/jasonleeeee/p/17660569.html

相关文章

  • 串口RS485
    第31章、串口RS485【理论】【RS485简介】1、RS-485是双向、半双工通信协议,允许多个驱动器和接收器挂接在总线上,其中每个驱动器都能够脱离总线。(RS232为双向,双工,单端传输)半双工:指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。2、RS-485采用差分传输方式能......
  • 串口RS232
    第30章、串口RS232UART,通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。它包括了RS232、RS499、RS......
  • 【pandas小技巧】--花哨的DataFrame
    最近github上发现了一个库(plottable),可以用简单的方式就设置出花哨的DataFrame样式。github上的地址:https://github.com/znstrider/plottable1.安装通过pip安装:pipinstallplottable2.行的颜色使用plottable的API,调整背景和字体的颜色非常方便。2.1.奇偶行不同颜......
  • 【STM32】5_0_串口通信
    串口通信概述通用同步异步收发器(USARTUniversalSynchronousAsynchronousReceiver/Transmitter)能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准NRZ异步串行数据格式的要求。USART通过小数波特率发生器提供了多种波特率。它支持同步单向通信和半双工单......
  • 论文解读(TAMEPT)《A Two-Stage Framework with Self-Supervised Distillation For Cros
     论文信息论文标题:ATwo-StageFrameworkwithSelf-SupervisedDistillationForCross-DomainTextClassification论文作者:YunlongFeng,BohanLi,LiboQin,XiaoXu,WanxiangChe论文来源:2023aRxiv论文地址:download 论文代码:download视屏讲解:click1介绍 动......
  • # yyds干货盘点 # 盘点一个dataframe读取csv文件失败的问题
    大家好,我是皮皮。一、前言前几天在Python钻石群【心田有垢生荒草】问了一个Pandas数据处理的问题,一起来看看吧。大佬们求教个方法 现在有个数据量很大的dataframe 要吐csv格式 但结果总是串行 加了encoding='utf-8'还是没解决 还有其他方法么?下图是他提供的图片:二、实现......
  • STM32深入学习3:DMA,串口通信和看门狗
    DMADMA直接存储器存取,用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA1有7个通道,DMA2有5个通道,还有一个仲裁器来协调各个DMA请求的优先权。DMA的作用是实现数据的直接传输,从地址到地址的数据传输。DMA传输的相关参数:源地址,目标地址,数据传输量,传输模式......
  • Jenkins +miniprogram-ci 构建 发布、预览微信小程序
           #!/bin/bash-lrm-rfqrcode*.jpgyarnyarnwxcitype=$actionappid=$appidversion=$versiondesc=$descbuildId=${BUILD_ID}#计算过期时间,并将过期时间写进自定义环境变量#计算过期时间,并将过期时间写进自定义环境变量now=`date'+%Y-%m-%d%H......
  • 吃透这份阿里P7大佬整理的《Android Framework源码笔记》,还怕找不到工作?
    前言随着Android开发行业的快速发展,市场需求也在不断提升,导致低端Android开发市场就业大环境不好、行业趋势下滑,使得不少初中级的Android开发开始失业,找不到工作。对于大部分的开发者来说,找不到工作的一大部分原因,是因为AndroidFramework无法做到精通。想要成为真正的高级Androi......
  • Pandas 使用教程 Series、DataFrame
    目录Series(一维数据)指定索引值使用key/value对象,创建对象设置Series名称参数DataFrame(二维数据)使用字典(key/value)创建loc属性返回指定行的数据Pandas一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)Pandas可以从各种文件格式比如CSV、JSON、SQL、M......