c语言sscanf函数的用法是什么
233
2022-10-24
vga接口设计原理及实现
vga接口原理
15针VGA接口引脚(4张)
vga接口设计原理
这些电子束轰击的目标就是荧光屏上的三原色。为此,电子枪发射的电子束不是一束,而是三束,它们分别受电脑显卡R、 G、 B三个基色视频信号电压的控制,去轰击各自的荧光粉单元。受到高速电子束的激发,这些荧光粉单元分别发出强弱不同的红、绿、蓝三种光。根据空间混色法(将三个基色光同时照射同一表面相邻很近的三个点上进行混色的方法)产生丰富的色彩,这种方法利用人们眼睛在超过一定距离后分辨力不高的特性,产生与直接混色法相同的效果。用这种方法可以产生不同色彩的像素,而大量的不同色彩的像素可以组成一张漂亮的画面,而不断变换的画面就成为可动的图像。
利用了人们眼睛的视觉残留特性和荧光粉的余辉作用,这就是即使只有一支电子枪,只要三支电子束可以足够快地向所有排列整齐的像素进行激发,人们还是可以看到一幅完整的图像的。现在的CRT显示器中的电子枪能发射这三支电子束,然后以非常非常快的速度对所有的像素进行扫描激发。
因为有大量排列整齐的像素需要激发,必然要求有规律的电子枪扫描运动才显得高效,通常实现扫描的方式很多,如直线式扫描,圆形扫描,螺旋扫描等等。其中,直线式扫描又可分为逐行扫描和隔行扫描两种,事实上,在CRT显示系统中两种都有采用。逐行扫描是电子束在屏幕上一行紧接一行从左到右的扫描方式,是比较先进的一种方式。而隔行扫描中,一张图像的扫描不是在一个场周期中完成的,而是由两个场周期完成的。在前一个场周期扫描所有奇数行,称为奇数场扫描,在后一个场周期扫描所有偶数行,称为偶数场扫描。无论是逐行扫描还是隔行扫描,为了完成对整个屏幕的扫描,扫描线并不是完全水平的,而是稍微倾斜的,为此电子束既要作水平方向的运动,又要作垂直方向的运动。前者形成一行的扫描,称为行扫描,后者形成一幅画面的扫描,称为场扫描。
VGA显示设计原理
1.图像存储原理
[R2,R1,R0,G2,G1,G0,B1,B0]
读入Matlab函数的原始图像包含8位的红色,8位的绿色,8位的蓝色,存储在.coe文件的图像包含3位的红色,3位绿色和2位的蓝色。这种转换是和Nexys2板子的8位VGA颜色的硬件设计是相对应的,其图像质量必然降低。
2.设计结构
设计的输入信号包含:
1)hsync:行同步信号,提供给VGA显示器接口; 2)vsync:垂直同步信号,提供给VGA显示器接口;
其中xpix和ypix是图像本地像素的位置,在实现该乘法时,使用移位相加的算法: ypix*240=ypix*(128+64+32+16);
红,绿和蓝输出从loon240x160ROM M[7:0]输出,其地址是根据上面的等式计算得到。
设计实现和验证
2.新建名字为vga_bsprite,类型为VHDL module的设计文件,完成设计代码输入。 3.新建名字为clkdiv,类型为VHDL module的设计文件,完成设计代码输入。 4.新建名字为vga640x480,类型为VHDL module的设计文件,完成设计代码输入。 5.使用IMG2coe8.m(matlab程序),将图片转换为.coe文件(ROM核需要的保存象素信息的XILINX的存储文件格式)。
9.在管理窗口中双击Implement Design选项,完成设计实现;
11.在管理窗口中双击Generate Programming File,生成比特流文件;
13.对设计进行调试和验证。
设计代码
1.vga_bsprite.vhd代码 library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity vga_bsprite is port (
vidon : in std_logic;
hc : in std_logic_vector(9 downto 0); vc : in std_logic_vector(9 downto 0); M : in std_logic_vector(7 downto 0); sw : in std_logic_vector(7 downto 0); rom_addr16 : out std_logic_vector(15 downto 0);
red : out std_logic_vector(2 downto 0); green : out std_logic_vector(2 downto 0); blue : out std_logic_vector(1 downto 0) );
end vga_bsprite;
architecture Behavioral of vga_bsprite is
constant hbp: std_logic_vector(9 downto 0) := “0010010000”; --Horizontal back porch = 144 (128+16) (96+48) constant vbp: std_logic_vector(9 downto 0) := “0000011111”; --Vertical back porch = 31 (2+29) constant w: integer := 240; constant h: integer := 160;
signal xpix, ypix: std_logic_vector(9 downto 0); signal rom_addr : std_logic_vector(16 downto 0); signal C1, R1: std_logic_vector(9 downto 0); signal spriteon, R, G, B: std_logic; begin
--set C1 and R1 using switches
C1 《= ‘0’ & SW(3 downto 0) & “00001”; R1 《= ‘0’ & SW(7 downto 4) & “00001”; ypix 《= vc-R1 when vc》=R1 and vc《R1+h xpix 《= hc-C1 when hc》=C1 and hc《C1+w
spriteon 《= ‘1’ when (((hc 》= C1 ) and (hc 《 C1 + w)) and ((vc 》= R1 ) and (vc 《 R1 + h))) else ‘0’;
process(xpix, ypix)
variable rom_addr1, rom_addr2: STD_LOGIC_VECTOR (16 downto 0); begin
rom_addr1 := (ypix & “0000000”) + (‘0’ & ypix & “000000”) + (“00” & ypix & “00000”) + (“000” & ypix & “0000”); -- y*(128+64+32+16) = y*240
rom_addr2 := rom_addr1 + (“00000000” & xpix); -- y*240+x rom_addr16 《= rom_addr2(15 downto 0);
end process;
process(spriteon, vidon, M) begin
red 《= M(7 downto 5); green 《= M(4 downto 2); blue 《= M(1 downto 0); end if; end process; end Behavioral;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~