1、数字逻辑电路实验报告第 十三 次实验: 综合大实验 时间:2013.12.18一、 实验目的综合运用本学期学习到的知识,设计出属于自己的大实验,尽可能的多运用各种知识展示创新,有趣思想。二、实验原理(背景知识)(1)VGA: VGA接口的接口信号主要有5个:R(Red)、G(Green)、B(Blue)、HS(Horizontal Synchronization)和VS(Vertical Synchronization),即红,蓝,绿,水平同步和垂直同步(也称为行同步和帧同步)。图像的显示是以像素(点)为单位,显示器的分辨率是指屏幕每行有多少个像素及每帧由多少行,标准的VGA分辨率是640*4
2、80,也有更高的分辨率。通过R、G、B的不同颜色配比可以形成各种不同的颜色。(2)PS/2键盘:键盘扫描码均以十六进制表示,键盘上各按键的扫描码是随机排列的,如果想迅速地将键盘扫描码转换为ASCII码,一个最简单的方法就是利用查表的方法。(3)分频定时器:如果在计数器的时钟输入端输入一个固定频率的时钟,那么计数器就变成了计时器。DE2-70开发板上有两个分别产生28.86MHz和50MHz时钟信号的振荡器。两个时钟信号都连接到FPGA,可以为用户的逻辑电路提供时钟信号。三、 实验器材/环境Quartus 12.0;实验开发板;PS/2键盘;显示器。四、 实验设计思路(验收实验)(1)主要运用知
3、识:VGA显示器;PS/2键盘操控;定时器。(2)主要思想:以书本的VGA和PS/2的代码为主要基础,对代码进行修改,实现自己想要的功能。(3)希望效果:能够在显示器上有自动按某轨迹运动的小球;能够通过键盘来操控小球的颜色变化。(4)小球图像显示:由于显示屏为点阵,可以以(x0,y0)为圆心进行绘图,运用(x-x0)2+(y-y0)2= X_START)&(h_count =20 & (x+X_START-h_count)=20 & (v_count-y-Y_START)=20 & (y+Y_START-v_count)=20) &(h_count-x-X_START)*(h_count-x-
4、X_START)+(v_count-y-Y_START)*(v_count-y-Y_START)6400);(5)小球运动:通过定时器的运用,让圆心以某一规律按某频率进行变动,从而带动图像的移动。为了让圆心能在显示屏范围内运动,使用模的方式,具体实现关键代码:always (posedge vga_clk )beginif(t_count % 1000000=0)beginx =(x+499)%500;y =(y+399)%400;m =(480+m)%500;n =(n+399)%400;endend(6)小球颜色变换:通过对键盘上数字键运用case语句,对Color_G、Color_B、C
5、olor_R颜色进行不同的配比,从而产生不一样的颜色。我是通过手动对颜色进行了随机的数字配比,通过与同学们的交流,发现可以通过循环加形成渐变,从而达到更好的效果。五、 实验的测试序列或验证方法module colorworld(iCLK_50,iCLRN,oVGA_R,oVGA_G,oVGA_B,oVGA_SYNC_N,oVGA_BLANK_N,oVGA_CLOCK,oVGA_HS,oVGA_VS, clk,clrn,ps2_clk,ps2_data,ready,overflow,count);/VGAinput iCLK_50;input iCLRN;output reg 9:0oVGA_R
6、,oVGA_B,oVGA_G;output oVGA_SYNC_N,oVGA_BLANK_N,oVGA_CLOCK;output oVGA_HS,oVGA_VS;reg vga_clk;reg 9:0h_count,v_count;reg 11:0data_reg;reg video_out1;reg video_out2;reg video_out3;reg video_out4;reg video_out5;reg video_out6;reg video_out7;reg video_out8;/PS2input clk,clrn,ps2_clk,ps2_data;output read
7、y;reg ready;output reg overflow;output reg 3:0 count;reg 9:0 buffer;reg 7:0 fifo7:0;reg 2:0 w_ptr,r_ptr;reg 2:0 ps2_clk_sync;/pic centerreg 8:0 x= 200;reg 8:0 y=400;reg 8:0 m=0;reg 8:0 n=300;reg 25:0 t_count = 0;/常量定义/Horizontal Parameter(Pixel)parameter H_SYNC_CYC = 96;parameter H_SYNC_BACK = 48;pa
8、rameter H_SYNC_ACT = 640;parameter H_SYNC_FRONT = 16;parameter H_SYNC_TOTAL = 800;/Virtical Parameter(Line)parameter V_SYNC_CYC = 2;parameter V_SYNC_BACK = 32;parameter V_SYNC_ACT = 480;parameter V_SYNC_FRONT = 11;parameter V_SYNC_TOTAL = 525;/Start Offsetparameter X_START = H_SYNC_CYC + H_SYNC_BACK
9、;parameter Y_START = V_SYNC_CYC + V_SYNC_BACK;/color of back ground,can be changedreg 9:0Color_R = 10b0000000000;reg 9:0Color_G = 10b0000000000;reg 9:0Color_B= 10b0000000000;/oVGA_CLK Generator , 50MHZ to 25 MHzalways (posedge iCLK_50 or negedge iCLRN)beginif(iCLRN = 0) vga_clk = 1b1;else vga_clk =
10、vga_clk;end/H_Sync Counteralways (posedge vga_clk or negedge iCLRN)begin if(iCLRN = 0) h_count = 10d0; else if(h_count = H_SYNC_TOTAL) h_count = 10d0; else h_count = h_count + 10d1;end/V_Sync Counteralways (posedge vga_clk or negedge iCLRN)begin if(iCLRN = 0) v_count = 10d0; else if(h_count = H_SYNC
11、_TOTAL) begin if(v_count = V_SYNC_TOTAL) v_count = 10d0; else v_count = v_count + 10d1; endend/计数器always(posedge vga_clk )beginif(t_count50000000)t_count=t_count+1;elset_count= X_START)&(h_count X_START+H_SYNC_ACT) &(h_count-x-X_START)20 & (x+X_START-h_count)20 & (v_count-y-Y_START)20 & (y+Y_START-v
12、_count)= X_START)&(h_count =20 & (x+X_START-h_count)=20 & (v_count-y-Y_START)=20 & (y+Y_START-v_count)=20) &(h_count-x-X_START)*(h_count-x-X_START)+(v_count-y-Y_START)*(v_count-y-Y_START)= X_START)&(h_count =6400) &(h_count-x-X_START)*(h_count-x-X_START)+(v_count-y-Y_START)*(v_count-y-Y_START)= X_ST
13、ART)&(h_count =10000) &(h_count-x-X_START)*(h_count-x-X_START)+(v_count-y-Y_START)*(v_count-y-Y_START)= X_START)&(h_count X_START+H_SYNC_ACT) &(h_count-m-X_START)20 & (m+X_START-h_count)20 & (v_count-n-Y_START)20 & (n+Y_START-v_count)= X_START)&(h_count =20 & (m+X_START-h_count)=20 & (v_count-n-Y_ST
14、ART)=20 & (n+Y_START-v_count)=20) &(h_count-m-X_START)*(h_count-m-X_START)+(v_count-n-Y_START)*(v_count-n-Y_START)= X_START)&(h_count =6400) &(h_count-m-X_START)*(h_count-m-X_START)+(v_count-n-Y_START)*(v_count-n-Y_START)= X_START)&(h_count =10000) &(h_count-m-X_START)*(h_count-m-X_START)+(v_count-n
15、-Y_START)*(v_count-n-Y_START)=14400); end/PS2 always (posedge clk)beginps2_clk_sync = ps2_clk_sync1:0,ps2_clk;endwire sampling = ps2_clk_sync2 & ps2_clk_sync1;always (posedge clk)begin if (clrn = 0) begin count = 0;w_ptr = 0;r_ptr = 0;ready = 0;overflow = 0; end else if(sampling) begin if(count = 4d
16、10) begin if(buffer0 = 0)&(ps2_data)&(buffer9:1) begin fifow_ptr = buffer8:1; w_ptr = w_ptr +3b1; ready = 3b1; overflow = overflow|(r_ptr = (w_ptr +3b1) ; end count = 0; end else begin buffercount = ps2_data; count = count +3b1; end end if(ready) begin case (fifor_ptr) /press keyboard to change colo
17、r 8h69:begin Color_R = 10b1111111111; Color_G = 10b1111111111; Color_B = 10b0000000000;end 8h72:begin Color_R = 10b1111111111; Color_G = 10b0000000000; Color_B = 10b1111111111;end 8h7A:begin Color_R = 10b0000000000; Color_G = 10b1111111111; Color_B = 10b1111111111;end 8h6B:begin Color_R = 10b0000001
18、111; Color_G = 10b1111111111; Color_B = 10b0001110000;end 8h73:begin Color_R = 10b1111000000; Color_G = 10b1111100001; Color_B = 10b1111100000;end 8h74:begin Color_R = 10b1000110011; Color_G = 10b1010101011; Color_B = 10b0100110000;end 8h6C:begin Color_R = 10b0110001111; Color_G = 10b1010101111; Col
19、or_B = 10b1001001000;end 8h75:begin Color_R = 10b0011001100; Color_G = 10b0000000001; Color_B = 10b1100000000;end 8h7D:begin Color_R = 10b101110011; Color_G = 10b1010101011; Color_B = 10b0100111100;end 8h16:begin Color_R = 10b1100001111; Color_G = 10b0011110011; Color_B = 10b1111000000;end 8h1E:begi
20、n Color_R = 10b1101010111; Color_G = 10b0001111000; Color_B = 10b0001111111;end 8h26:begin Color_R = 10b1111000000; Color_G = 10b1111111001; Color_B = 10b1101111111;end 8h2E:begin Color_R = 10b0011001111; Color_G = 10b0001111111; Color_B = 10b0001110000;end 8h36:begin Color_R = 10b1001000000; Color_
21、G = 10b0000000001; Color_B = 10b0000000000;end 8h3D:begin Color_R = 10b1000110011; Color_G = 10b1000000001; Color_B = 10b0110110000;end 8h3E:begin Color_R = 10b0000001111; Color_G = 10b0000101111; Color_B = 10b1001001110;end 8h46:begin Color_R = 10b000000100; Color_G = 10b0000000001; Color_B = 10b11
22、0110100;end 8h25:begin Color_R = 10b100010011; Color_G = 10b0010101011; Color_B = 10b0100111100;end default ; endcase r_ptr = r_ptr +3d1; ready = 10d96);assign oVGA_VS = (v_count = 10d2);assign oVGA_SYNC_N = 1b0;assign oVGA_BLANK_N = oVGA_HS & oVGA_VS;assign oVGA_CLOCK = vga_clk;endmodule六、 实验过程(验收实
23、验的过程) 图一:插入代码 图二:分配引脚 图三:实验现象七、 实验结果操作方法:将使能端的状态调为“1”;运行开始时,在显示屏上,两个小球会在不同的起始位置沿不同的轨迹运动,通过PS/2键盘上的两处数字键盘(均为19,共18个键盘),按动数字可以变换不同的颜色。八、 实验中遇到的问题及解决方案1. 绘出图形后如何使图形以近似联系的方式自由移动解决方法:通过模运算,使得坐标能按照微小的方式进行以移动;通过分频,使得变化速度不快不慢。注意模运算时,为了使坐标的一次变换比较小,对于x所加的数要与模数相近,并且使模数较大从而增加移动范围。2. 如何手控变换颜色解决方法:为不同的键盘的ASCII分配不同的颜色配比,并尽可能使组合不相同从而得到不同的颜色。通过与同学的交流,发现也可以为不同的ASCII码对应不同的颜色加上一个较小的数以增加配比,从而得到不同的颜色,这样就不需要麻烦地手动分配了。九、 实验的启示/意见和建议(1) 思路很重要,确定自己想要的效果,然后通过所学的知识进行实现。(2) 要学会与别人交流以获取知识。
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922