本文原地址:http://www.easyx.cn/skills/View.aspx?id=172
常见的屏幕分辨率很奇怪,为什么总用一些不零不整的数字?比如以前最常见的分辨率是 640x480,当初为什么这么设计?
因为这个分辨率运算速度比较快,人也相对比较好记。 大家知道,屏幕上的每一个点,都会对应内存中的一个位置。比如 640x480@256色,表示每个点占用一个字节,整个屏幕有 640x480=300k 个点,占用 300KB 内存。屏幕的每一个像素的保存,在内存中是线性存储结构。在屏幕上的坐标 (x, y) 画一个点,就相当于在对应显存偏移 y * 640 + x 的位置赋值。 PS:在这篇文章中有一段代码,可以实践一下通过内存赋值来直接画点:http://www.easyx.cn/skills/View.aspx?id=55 每绘制一个点,都需要执行一次乘法和一次加法运算。所有的绘图操作都需要调用画点函数,因此提高画点的效率,将会提升所有绘图操作的速度。 现在我们将计算内存偏移量的算法修改一下: d = y * 640 + x = y * (512 + 128) + x = y * 512 + y * 128 + x = y * 2^9 + y * 2^7 + x = y << 9 + y << 7 + x于是,1 次乘法 1 次加法,就修改为了 2 次移位 2 次加法。学过计算机组成原理的同学应该知道,修改后的算法虽然繁琐,但是性能提高了数倍。 这也是为什么采用 640 的原因。 常见的分辨率,都可以拆分为 2 的 n 次方的和差运算,例如: 640 = 512 + 128= 2^9 + 2^7
768 = 512 + 256 = 2^9 + 2^8
800 = 512 + 256 + 32 = 2^9 +2^8 + 2^5
1024 = 2^10
1152 = 1024 + 128 = 2^10 + 2^7
1280 = 1024 + 256 = 2^10 + 2^8
1920 = 2048 - 128 = 2^11 - 2^7基于前面讲的原理,大家可以将其应用在最基础的画点上,以提升算法的效率。 不过现在 CPU 里面都有乘法器单元,写程序时直接用乘法性能也不差。但是在硬件实现上,这个数值还是很有意义的。
随着现在笔记本电脑的普及,身边的台式机电脑也越来越少,台式机显示器也更加不容易获得。大家在学习FPGA,做VGA显示图像等应用时往往就因为没有显示器而无法进行。为此,大家也可以使用TFT显示屏来代替。例如AC620开发板扩展配套的5寸800*480分辨率的TFT显示屏,该显示屏的驱动时序和VGA显示器完全一致,大家使用VGA显示器的驱动代码修改几个时序参数,就可以用来直接驱动该显示屏。该显示屏可以直接用于小梅哥团队设计生产的所有FPGA开发板,也可以用于正点原子阿波罗系列STM32开发板。提供基于FPGA的实用逻辑分析仪源码工程。
下图为小梅哥团队的AC620 FPGA开发板提供的基于该5寸TFT显示屏的一些设计实例,成功申请了AC620或是自己已有AC620开发板的网友,就可以体验使用该5寸屏进行仪器仪表设计和图像采集监控系统的设计啦。(发烧友论坛赠送的圣诞礼物——精致的水杯有出镜哟。)看完图,就可以找到免费申请试用链接啦。
AC620开发板是一个功能齐全,接口丰富,性能优异,外观精美,兼容性强,教学资源完善,服务细致周到的FPGA开发平台。基于最适合FPGA学习的Intel Cyclone IV E FPGA,支持以太网、音频编解码、图像传感器接口、常见工业通信接口、实时时钟、显示屏等。配套精品视频教程和出版书籍,以及20多个综合实用实例,为学习FPGA的用户提供从入门到进阶的全方位教学服务。现在只要申请,就有机会免费试用哟,如果试用报告写的好,更是有机会直接永久获得该板卡。试用链接: https://bbs.elecfans.com/try_ac620.html
|