找回密码
 注册
关于网站域名变更的通知
查看: 619|回复: 2
打印 上一主题 下一主题

转——【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-28 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Zedd 于 2019-3-30 16:03 编辑
) g& Q6 z/ [/ O
" _3 M! C6 H; [& }) j: p2 o0 B+ r  K
十四、TFT屏显示图片
& I- E: C$ U( ~% |& H5 T; [
本文由杭电网友曾凯峰贡献,特此感谢
; ~( h2 Z& k6 {( X
学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张图片,有了这个想法就开始动工了。首先想到是利用FPGA内部ROM存储图片数据,然后通过控制读取数据地址将图片数据传给TFT驱动模块,从而将每个图片数据显示在对应的像素点上。整个设计的框图如下: + M0 w. ?) ^- s3 H- M3 X% H

! l( J( c' e- K7 {主要是在小梅哥TFT驱动设计基础上增加了图片数据发送控制模块Imgdata_send,该模块包括存储图片数据的rom,和一些简单的逻辑控制。具体的rom IP核的建立我这里就不说了,不懂的可以参看小梅哥的相关内容的视频,我这里主要讲如何将图片转换成mif文件。这里有两种方法,可以作为参考,主要用到如下软件:
, f; {* l) s* e
5 |, y2 o5 T( [$ T4 k" n; w
步骤1:利用Img2Lcd将图片转化为BMP格式的(当然图片本身为BMP格式就不需要转了,直接进入步骤2); ' F' w$ n8 }+ D, a
步骤2:利用BMP2Mif可将图片转化为mif文件。
" H9 b/ G/ R; I具体实现如下:
! D4 R4 x! o% @& o: I步骤1:先打开Img2Lcd打开一张图片,选择输出格式为BMP格式,输出灰度选择24位真彩色(由于BMP2Mif软件只能载入24位或8位的,所以这里就没有直接选16位的真彩色),最大宽度和高度根据图片实际的大小进行选择的,由于内部rom能存储的数据量有限,我选择了一张像素为160*120的图片如果想显示大的图片,如480*272图片,用这种方法就不能实现(看到这里有人想,如果想显示大点的图片那应该怎么解决,后面我会有其他方法来实现TFT屏保显示)。
9 k/ `3 W0 m( I. t3 Q. }$ P2 ~

3 m  L$ V+ n8 S' X7 {; K! t步骤2:打开BMP2Mif软件,加载刚转换输出的24位BMP格式图片,选择输出图像格式和文件类型,点击一键转换便将图片转换为了mif文件了,可以将mif文件名更改下以区别不同图片mif文件。 8 x; ]" k6 k& E; P

, T' J: e8 @9 R; r# c# |; ]; D可以用Notepad++将转化的mif文件打开看看,截取部分图如下: - |0 f" d$ h* n3 K2 m0 R2 Q

1 R# F8 [- Y& q/ f" v& A' e( V" wrom IP核设置完成后就是数据发送控制模块Imgdata_send中控制逻辑的编写,主要是让图片显示在屏幕指定的地方,这就需要根据TFT_CTRL模块的TFT行和场扫描计数器输出信号来控制rom的数据地址,从而控制TFT_CTRL的待显示数据data_in。具体代码如下:
3 h7 }$ ~( l. E$ w( v; l
! \( D/ r9 K" L, v& D0 g
, A7 J& G6 i/ y0 y! g2 z5 O- S

, i' R4 m: L; {8 U+ D0 U3 P
# {8 P) |" ~/ i3 {# K/ r2 |
接下来就是仿真验证,利用已有的TFT_CTRL模块的hcount、vcount、tft_de作为Imgdata_send模块的输出进行仿真验证,代码如下: 2 m* _% [" K; X. _" b; j; @3 ^/ c
0 C) s/ c/ N5 v1 F3 |
1 Q8 P; B7 T# \8 z% j* _2 q

0 g! P2 e4 I0 @, i# X9 |  j
; X9 i2 c5 u  n; L! z) L- }- Q
. t, g6 `- P0 X0 ^

! S! R0 `- h7 u, m8 ]
% x$ B' D3 K  R' N8 e仿真验证的波形图如下: 6 d- y: w+ A3 h0 i

& a9 h$ w% G! E; X* r& P5 b% ~" A
2 B0 Q  S$ h% ]0 Z( {. G8 {0 @& y+ ?
5 X, t4 |) Z! J2 ?6 Y' R& D
- N7 S# S$ U/ i5 @/ }2 ]' O0 a

" f( c2 S; Y* [8 K' K: G从仿真结果可以看出,图片数据是在我们指定的区域输出的。该模块仿真验证正确后,进行顶层电路文件的设计。顶层文件编写如下: 0 Y; R$ l, m% L/ b3 J
2 N/ ?" ?3 Y9 v) N% _/ u& k
4 B& _: u+ K/ [+ C( ?

  U4 B7 g' ^+ ^
3 w) v8 H" g' p4 r7 `
7 T% J2 g9 k- N( i/ e' l# c
3 h+ W6 J1 E% E: c
& a' b2 u' @+ j
7 J3 E9 z; _9 R, y+ U7 w' F
生成的顶层电路图如下:
+ o' L5 @0 {+ E& W% {, v% z8 D

/ c2 j* C- z) f- q) q4 Y0 R) w接下来就是仿真验证,仿真验证程序如下:
# |2 G: I' T* Q) x

" {6 t. F% G7 [/ X4 o
' U  M" N  i% H  s7 i0 h9 d

$ C) f0 W! ~8 f$ ~7 p# ~

5 V7 b+ S6 d: F
' f6 f! }4 k4 Z( R! U. T  w5 h4 q7 ?" H/ g9 _4 c( v
仿真波形如下:
+ A. C* s+ U9 U/ v

; \7 O" m. i9 ^/ `2 S
. n9 U/ M" s. G0 F* X

" G+ R, f" |% a/ W9 K  u4 @# z! s; ~1 |+ I; O- v0 @' K* k

. z# I. l7 }+ O从波形可以看出,图片数据在指定区域显示。接下来就是板级验证,引脚分配参照芯航线FPGA学习套件引脚分配表进行分配,然后布局布线,板级程序下载最后实现的效果图如下:
$ {0 v: r2 o- a) h  J: z* w

; f* s- a2 R% k  n我们设置的是显示在屏幕的左上角,与预期效果是一致的,想要改变图片的位置,可以更改Imgdata_send模块的28、29行代码:
3 V% H: E! ~- a2 O
) o8 N+ t: z2 Z
将上面的(0、0)更改为其他的数,图片位置就会改变,如果想让图片在屏幕上自动的移动,可以自己设置一种路径让img_hbegin、img_vbegin的值按你的路径变化就可实现图片的自动移动,读者可以自己改进学习。
- s2 c, g" [, ~3 F5 h1 k2 o3 s

1 [. p2 ]' q) ~9 c' T
游客,如果您要查看本帖隐藏内容请回复

9 y7 J" W$ \! ]$ f

该用户从未签到

3#
发表于 2021-9-29 14:03 | 只看该作者
学习学习学习
' T+ k2 Q! Q+ o% u( j* Y* r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-7 19:58 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表