数字逻辑电路实验报告(七巧板设计)_第1页
数字逻辑电路实验报告(七巧板设计)_第2页
数字逻辑电路实验报告(七巧板设计)_第3页
数字逻辑电路实验报告(七巧板设计)_第4页
数字逻辑电路实验报告(七巧板设计)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数字逻辑电路》实验报告第十四次实验:七巧板的基本设计姓名:车开达学号:1012200072010级计算机系一班邮箱:798195236@时间:12月22日实验目的这个实验是自己的个人的设计,是从一本关于iphone的游戏设计中得到的灵感,自己感觉这个实验能够将键盘和显示器联系起来并且实现不算太难,主要是联系获得键盘的数据,处理数据并能够在显示器上显示相应的图案,是个个人感觉比较新颖的想法,所以没有太用心实现简易处理器,大部分时间都用来实现这个设计了。二、实验原理(背景知识)从第九次实验中的键盘实验可以学到如何接受外界键盘的输入,在后面的VGA实验中可以基本了解如何显示基本图案,但是如何实现移动和旋转,所以为了方便实现以及统一管理,自己使用了有一个点来形成一个图案,并且对移动和旋转都是以这个点为基准的。然后主要是对每个图案的图形计算,其中对图像的旋转是要新的计算,不可能使用固定计算函数可以得到,所以不同的旋转是不同的状态,这样就能实现基本的移动和旋转,另外可以实现相应的游戏功能,即每一个图案的坐标相对位置是不变的,所以实现对应的游戏功能就是计算每个坐标的相对位置是否相同。至于详细想法在下面进行细述。实验器材/环境硬件:个人电脑,Altera公司的DE2-70开发板等;软件:QuartusII等。实验设计思路(验收实验)1、分析所需要的七巧板形状,每个形状的支撑点,对每个形状进行编号以及每种形状可以出现的状态:(1)5个三角形,我们选取直角顶点为支撑点,共存在8个状态,即每次旋转45度;(2)1个正方形,我们任意选取一个顶点为支撑点,共存在2个状态,即旋转45度产生的两种状态;(3)1个平行四边形,我们选取角度小的那个顶点为支撑点,共存在4个状态,每个状态有一对平行边或者平行水平或者平行数值。2、确定键盘上的功能键,并对其功能进行编号,主要有移动方向键(后来共用了2组方向键,以便操控),控制旋转键,选择不同图形键,后来添加了初始键、两个预置图案的键、一个判断图形是否符合要求的键,并对他们进行了相应的编码(4位,最后证明4位有点少)。3、确定功能模块:(1)从键盘接受数据并对其进行基本出来的模块,代码如下:moduleio_ps2(clk,clrn,ps2_clk,ps2_data,data,change); inputclk,clrn,ps2_clk,ps2_data; outputreg[3:0]data; outputchange; wirechange; regready; regoverflow; reg[3:0]count; reg[7:0]temp_data,temp; regkey_f0; reg[9:0]buffer; reg[7:0]fifo[7:0]; reg[2:0]w_ptr,r_ptr; reg[2:0]ps2_clk_sync; always@(posedgeclk)begin ps2_clk_sync<={ps2_clk_sync[1:0],ps2_clk}; end wiresampling=ps2_clk_sync[2]&~ps2_clk_sync[1]; always@(posedgeclk)begin if(clrn==0)begin count<=0; w_ptr<=0; r_ptr<=0; overflow<=0; end else if(sampling)begin if(count==4'd10)begin if((buffer[0]==0)&&(ps2_data)&&(^buffer[9:1]))begin fifo[w_ptr]<=buffer[8:1]; w_ptr<=w_ptr+3'b1; ready<=1'b1; overflow<=overflow|(r_ptr==(w_ptr+3'b1)); end count<=0; end elsebegin buffer[count]<=ps2_data; count<=count+3'b1; end end if(ready)begin temp=fifo[r_ptr-3'd1]; temp_data=fifo[r_ptr]; r_ptr<=r_ptr+3'd1; ready<=1'b0; if(temp_data==8'hf0)begin //temp=fifo[r_ptr-3'd2]; key_f0<=1'b1; end elsebegin key_f0<=1'b0; end end end always@(posedgekey_f0ornegedgeclrn)begin if(!clrn) data<=4'd0; elsebegin case(temp) 8'h0D:data<=4'd1; 8'h29:data<=4'd2; 8'h1D:data<=4'd3; 8'h1C:data<=4'd4; 8'h1B:data<=4'd5; 8'h23:data<=4'd6; 8'h43:data<=4'd7; 8'h3B:data<=4'd8; 8'h42:data<=4'd9; 8'h4B:data<=4'd10; 8'h16:data<=4'd11; 8'h1E:data<=4'd12; 8'h45:data<=4'd13; 8'h5A:data<=4'd14; default: data<=4'd15; endcase end end assignchange=~key_f0;endmodule(2)接受键盘模块送来的数据,并由此选择对应图形的状态,并在开始时对所有图形位置状态进行初始化,将每个图形坐标、状态送入VGA显示模块,代码如下:moduleps2_vga(din,clk,x0,x1,x2,x3,x4,x5,x6,y0,y1,y2,y3,y4,y5,y6,state0,state1,state2,state3,state4,state5,state6,choose); input[3:0]din; inputclk; outputreg[2:0]choose; outputreg[9:0]x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6; outputreg[2:0]state0,state1,state2,state5,state6; outputreg[1:0]state4; outputregstate3; initialbegin x0=10'd320; y0=10'd240; x1=10'd320; y1=10'd240; x2=10'd384; y2=10'd176; x3=10'd320; y3=10'd176; x4=10'd352; y4=10'd208; x5=10'd288; y5=10'd208; x6=10'd320; y6=10'd240; state3=1'b1; state4=2'd1; end always@(posedgeclk)begin case(din) 4'd1: choose<=choose+1'b1; 4'd2:begin case(choose) 3'd0: state0<=state0+1'b1; 3'd1: state1<=state1+1'b1; 3'd2: state2<=state2+1'b1; 3'd3: state3<=state3+1'b1; 3'd4: state4<=state4+1'b1; 3'd5: state5<=state5+1'b1; 3'd6: state6<=state6+1'b1; default:; endcase end 4'd3:begin case(choose) 3'd0: y0<=y0-10'd5; 3'd1: y1<=y1-10'd5; 3'd2: y2<=y2-10'd5; 3'd3: y3<=y3-10'd5; 3'd4: y4<=y4-10'd5; 3'd5: y5<=y5-10'd5; 3'd6: y6<=y6-10'd5; default:; endcase end 4'd4:begin case(choose) 3'd0: x0<=x0-10'd5; 3'd1: x1<=x1-10'd5; 3'd2: x2<=x2-10'd5; 3'd3: x3<=x3-10'd5; 3'd4: x4<=x4-10'd5; 3'd5: x5<=x5-10'd5; 3'd6: x6<=x6-10'd5; default:; endcase end 4'd5:begin case(choose) 3'd0: y0<=y0+10'd5; 3'd1: y1<=y1+10'd5; 3'd2: y2<=y2+10'd5; 3'd3: y3<=y3+10'd5; 3'd4: y4<=y4+10'd5; 3'd5: y5<=y5+10'd5; 3'd6: y6<=y6+10'd5; default:; endcase end 4'd6:begin case(choose) 3'd0: x0<=x0+10'd5; 3'd1: x1<=x1+10'd5; 3'd2: x2<=x2+10'd5; 3'd3: x3<=x3+10'd5; 3'd4: x4<=x4+10'd5; 3'd5: x5<=x5+10'd5; 3'd6: x6<=x6+10'd5; default:; endcase end 4'd7:begin case(choose) 3'd0: y0<=y0-10'd1; 3'd1: y1<=y1-10'd1; 3'd2: y2<=y2-10'd1; 3'd3: y3<=y3-10'd1; 3'd4: y4<=y4-10'd1; 3'd5: y5<=y5-10'd1; 3'd6: y6<=y6-10'd1; default:; endcase end 4'd8:begin case(choose) 3'd0: x0<=x0-10'd1; 3'd1: x1<=x1-10'd1; 3'd2: x2<=x2-10'd1; 3'd3: x3<=x3-10'd1; 3'd4: x4<=x4-10'd1; 3'd5: x5<=x5-10'd1; 3'd6: x6<=x6-10'd1; default:; endcase end 4'd9:begin case(choose) 3'd0: y0<=y0+10'd1; 3'd1: y1<=y1+10'd1; 3'd2: y2<=y2+10'd1; 3'd3: y3<=y3+10'd1; 3'd4: y4<=y4+10'd1; 3'd5: y5<=y5+10'd1; 3'd6: y6<=y6+10'd1; default:; endcase end 4'd10:begin case(choose) 3'd0: x0<=x0+10'd1; 3'd1: x1<=x1+10'd1; 3'd2: x2<=x2+10'd1; 3'd3: x3<=x3+10'd1; 3'd4: x4<=x4+10'd1; 3'd5: x5<=x5+10'd1; 3'd6: x6<=x6+10'd1; default:; endcase end 4'd11:begin x0<=10'd390; x1<=10'd390; x2<=10'd435; x3<=10'd390; x4<=10'd480; x5<=10'd390; x6<=10'd390; y0<=10'd290; y1<=10'd290; y2<=10'd313; y3<=10'd268; y4<=10'd223; y5<=10'd268; y6<=10'd313; state0<=3'd1; state1<=3'd1; state2<=3'd5; state3<=1'd0; state4<=2'd2; state5<=3'd1; state6<=3'd1; end 4'd12:begin x0<=10'd252; x1<=10'd342; x2<=10'd297; x3<=10'd252; x4<=10'd432; x5<=10'd252; x6<=10'd252; y0<=10'd276; y1<=10'd276; y2<=10'd321; y3<=10'd122; y4<=10'd321; y5<=10'd122; y6<=10'd122; state0<=3'd3; state1<=3'd1; state2<=3'd7; state3<=1'd1; state4<=2'd3; state5<=3'd6; state6<=3'd0; end 4'd13:begin x0=10'd320; y0=10'd240; x1=10'd320; y1=10'd240; x2=10'd384; y2=10'd176; x3=10'd320; y3=10'd176; x4=10'd352; y4=10'd208; x5=10'd288; y5=10'd208; x6=10'd320; y6=10'd240; state3=1'b1; state4=2'd1; state0=3'd0; state1=3'd0; state2=3'd0; state5=3'd0; state6=3'd0; end 4'd14:begin if((x3-1<=x5&&x5<=x3+1)&&(x3-1<=x6&&x6<=x3+1)&&((x3-1<=x0&&x0<=x3+1&&x3+89<=x1&&x1<=x3+91&&state0==3&&state1==1)||(x3-1<=x1&&x1<=x3+1&&x3+89<=x0&&x0<=x3+91&&state0==7&&state1==5))&&((x3+44)<=x2&&x2<=x3+46)&&(x3+179<=x4&&x4<=x3+181)) if((y3-1<=y5&&y5<=y3+1)&&(y3-1<=y6&&y6<=y3+1)&&(y3+153<=y0&&y3+155>=y0)&&(y1-1<=y0&&y0<=y1+1)&&(y0+44<=y4&&y0+46<=y4)&&(y4-1<=y2&&y4+1<=y2)&&((state5==6&&state6==0)||(state6==4&&state5==2))&&(state3==1)&&(state4==3)&&(state2==7)) begin x0=10'd320; y0=10'd240; x1=10'd320; y1=10'd240; x2=10'd384; y2=10'd176; x3=10'd320; y3=10'd176; x4=10'd352; y4=10'd208; x5=10'd288; y5=10'd208; x6=10'd320; y6=10'd240; state3=1'b1; state4=2'd1; state0=3'd0; state1=3'd0; state2=3'd0; state5=3'd0; state6=3'd0; end end default:begin choose<=3'd7; end endcase endendmodule(3)接受中间模块送来的数据,并对其进行坐标范围和状态的识别、计算,最后在显示器中显示,代码如下:moduleio_vga( iCLK_50,//DE2_70clock50MHZ iCLRN,//clear_NconnecttoiSW[0] //toADV7123 choose, x0,x1,x2,x3,x4,x5,x6, y0,y1,y2,y3,y4,y5,y6, state0,state1,state2,state3,state4,state5,state6, oVGA_R, oVGA_G, oVGA_B, oVGA_SYNC_N, oVGA_BLANK_N, oVGA_CLOCK, //toVGA oVGA_HS, oVGA_VS); inputiCLK_50; inputiCLRN; input[2:0]choose; input[9:0]x0,x1,x2,x3,x4,x5,x6,y0,y1,y2,y3,y4,y5,y6; input[2:0]state0,state1,state2,state5,state6; inputstate3; input[1:0]state4; outputreg[9:0]oVGA_R,oVGA_G,oVGA_B; outputoVGA_SYNC_N,oVGA_BLANK_N,oVGA_CLOCK; outputoVGA_HS,oVGA_VS; regvga_clk; reg[9:0]h_count,v_count; regout0,out1,out2,out3,out4,out5,out6;/*-----------------------------------------------------------------常量定义------------------------------------------------------------------*///HorizontalParameter(Pixel) parameterH_SYNC_CYC=96; parameterH_SYNC_BACK=48; parameterH_SYNC_ACT=640; parameterH_SYNC_FRONT=16; parameterH_SYNC_TOTAL=800;//96+48+640+16=800//VirticalParameter(Line) parameterV_SYNC_CYC=2; parameterV_SYNC_BACK=32; parameterV_SYNC_ACT=480; parameterV_SYNC_FRONT=11; parameterV_SYNC_TOTAL=525;//2+32+480+11=525//StartOffset parameterX_START=H_SYNC_CYC+H_SYNC_BACK;//96+48=144before640 parameterY_START=V_SYNC_CYC+V_SYNC_BACK;//2+32=34before480/*-----------------------------------------------------------------*///oVGA_CLKGenerator,50MHZto25MHZ always@(posedgeiCLK_50ornegedgeiCLRN)begin if(iCLRN==0) vga_clk<=1'b1; else vga_clk<=~vga_clk; end//H_SyncCounter always@(posedgevga_clkornegedgeiCLRN)begin if(iCLRN==0) h_count<=10'd0; elseif(h_count==H_SYNC_TOTAL) h_count<=10'd0; else h_count=h_count+10'd1; end//V_SyncCounter always@(posedgevga_clkornegedgeiCLRN)begin if(iCLRN==0) v_count<=10'd0; elseif(h_count==H_SYNC_TOTAL)begin if(v_count==V_SYNC_TOTAL) v_count<=10'd0; else v_count=v_count+10'd1; end end always@(posedgevga_clk)begin case(state0) 3'd0: out0=(h_count>=X_START+x0-64)&&(h_count<=X_START+x0)&&(((v_count>=Y_START+y0-64)&&(v_count<=Y_START+y0)&&(h_count-(x0+X_START)+64<=v_count-(y0+Y_START)+64))||((v_count>=Y_START+y0)&&(v_count<=Y_START+y0+64)&&(v_count+h_count-(x0+X_START)-(y0+Y_START)+64<64))); 3'd1: out0=(h_count>=X_START+x0-90)&&(v_count>=Y_START+y0-90)&&(h_count<=X_START+x0)&&(v_count<=Y_START+y0)&&(h_count+v_count-(x0+X_START)-(y0+Y_START)+180>90); 3'd2: out0=(v_count>=Y_START+y0-64)&&(v_count<=Y_START+y0)&&(((h_count>=X_START+x0-64)&&(h_count<=X_START+x0)&&(h_count-(x0+X_START)+64>=v_count-(y0+Y_START)+64))||((h_count>=X_START+x0)&&(h_count<=X_START+x0+64)&&(h_count+v_count+64-(x0+X_START)-(y0+Y_START)<64))); 3'd3: out0=(h_count>=X_START+x0)&&(v_count>=Y_START+y0-90)&&(h_count<=X_START+x0+90)&&(v_count<=Y_START+y0)&&(h_count-(x0+X_START)<=v_count-(y0+Y_START)+90); 3'd4: out0=(h_count>=X_START+x0)&&(h_count<=X_START+x0+64)&&(((v_count<=Y_START+y0)&&(v_count>=Y_START+y0-64)&&(h_count+v_count-(x0+X_START)-(y0+Y_START)+64>=64))||((v_count>=Y_START+y0)&&(v_count<=Y_START+y0+64)&&(h_count-(x0+X_START)>=v_count-(y0+Y_START)))); 3'd5: out0=(h_count>=X_START+x0)&&(v_count>=Y_START+y0)&&(h_count<=X_START+x0+90)&&(v_count<=Y_START+y0+90)&&(h_count+v_count-(x0+X_START)-(y0+Y_START)<=90); 3'd6: out0=(v_count>=Y_START+y0)&&(v_count<=Y_START+y0+64)&&(((h_count<=X_START+x0+64)&&(h_count>=X_START+x0)&&(h_count-(x0+X_START)<=v_count-(y0+Y_START)))||((h_count<=X_START+x0)&&(h_count>=X_START+x0-64)&&(h_count+v_count-(x0+X_START)-(y0+Y_START)+64>=64))); 3'd7: out0=(h_count>=X_START+x0-90)&&(v_count>=Y_START+y0)&&(h_count<=X_START+x0)&&(v_count<=Y_START+y0+90)&&(h_count-(x0+X_START)+90>=v_count-(y0+Y_START)); endcase case(state1) 3'd0: out1=(v_count>=Y_START+y1)&&(v_count<=Y_START+y1+64)&&(((h_count<=X_START+x1+64)&&(h_count>=X_START+x1)&&(h_count-(x1+X_START)<=v_count-(y1+Y_START)))||((h_count<=X_START+x1)&&(h_count>=X_START+x1-64)&&(h_count+v_count-(x1+X_START)-(y1+Y_START)+64>=64))); 3'd1: out1=(h_count>=X_START+x1-90)&&(v_count>=Y_START+y1)&&(h_count<=X_START+x1)&&(v_count<=Y_START+y1+90)&&(h_count-(x1+X_START)+90>=v_count-(y1+Y_START)); 3'd2: out1=(h_count>=X_START+x1-64)&&(h_count<=X_START+x1)&&(((v_count>=Y_START+y1-64)&&(v_count<=Y_START+y1)&&(h_count-(x1+X_START)+64<=v_count-(y1+Y_START)+64))||((v_count>=Y_START+y1)&&(v_count<=Y_START+y1+64)&&(v_count+h_count-(x1+X_START)-(y1+Y_START)+64<64))); 3'd3: out1=(h_count>=X_START+x1-90)&&(v_count>=Y_START+y1-90)&&(h_count<=X_START+x1)&&(v_count<=Y_START+y1)&&(h_count+v_count-(x1+X_START)-(y1+Y_START)+180>90); 3'd4: out1=(v_count>=Y_START+y1-64)&&(v_count<=Y_START+y1)&&(((h_count>=X_START+x1-64)&&(h_count<=X_START+x1)&&(h_count-(x1+X_START)+64>=v_count-(y1+Y_START)+64))||((h_count>=X_START+x1)&&(h_count<=X_START+x1+64)&&(h_count+v_count+64-(x1+X_START)-(y1+Y_START)<64))); 3'd5: out1=(h_count>=X_START+x1)&&(v_count>=Y_START+y1-90)&&(h_count<=X_START+x1+90)&&(v_count<=Y_START+y1)&&(h_count-(x1+X_START)<=v_count-(y1+Y_START)+90); 3'd6: out1=(h_count>=X_START+x1)&&(h_count<=X_START+x1+64)&&(((v_count<=Y_START+y1)&&(v_count>=Y_START+y1-64)&&(h_count+v_count-(x1+X_START)-(y1+Y_START)+64>=64))||((v_count>=Y_START+y1)&&(v_count<=Y_START+y1+64)&&(h_count-(x1+X_START)>=v_count-(y1+Y_START)))); 3'd7: out1=(h_count>=X_START+x1)&&(v_count>=Y_START+y1)&&(h_count<=X_START+x1+90)&&(v_count<=Y_START+y1+90)&&(h_count+v_count-(x1+X_START)-(y1+Y_START)<=90); endcase case(state2) 3'd0: out2=(h_count>=X_START+x2-64)&&(v_count>=Y_START+y2)&&(h_count<=X_START+x2)&&(v_count<=Y_START+y2+64)&&(h_count-(x2+X_START)+64>=v_count-(y2+Y_START)); 3'd1: out2=(h_count>=X_START+x2-45)&&(h_count<=X_START+x2)&&(((v_count>=Y_START+y2-45)&&(v_count<=Y_START+y2)&&(h_count-(x2+X_START)+45<=v_count-(y2+Y_START)+45))||((v_count>=Y_START+y2)&&(v_count<=Y_START+y2+45)&&(v_count+h_count-(x2+X_START)-(y2+Y_START)+45<45))); 3'd2: out2=(h_count>=X_START+x2-64)&&(v_count>=Y_START+y2-64)&&(h_count<=X_START+x2)&&(v_count<=Y_START+y2)&&(h_count+v_count-(x2+X_START)-(y2+Y_START)+128>64); 3'd3: out2=(v_count>=Y_START+y2-45)&&(v_count<=Y_START+y2)&&(((h_count>=X_START+x2-45)&&(h_count<=X_START+x2)&&(h_count-(x2+X_START)+45>=v_count-(y2+Y_START)+45))||((h_count>=X_START+x2)&&(h_count<=X_START+x2+45)&&(h_count+v_count+45-(x2+X_START)-(y2+Y_START)<45))); 3'd4: out2=(h_count>=X_START+x2)&&(v_count>=Y_START+y2-64)&&(h_count<=X_START+x2+64)&&(v_count<=Y_START+y2)&&(h_count-(x2+X_START)<=v_count-(y2+Y_START)+64); 3'd5: out2=(h_count>=X_START+x2)&&(h_count<=X_START+x2+45)&&(((v_count<=Y_START+y2)&&(v_count>=Y_START+y2-45)&&(h_count+v_count-(x2+X_START)-(y2+Y_START)+45>=45))||((v_count>=Y_START+y2)&&(v_count<=Y_START+y2+45)&&(h_count-(x2+X_START)>=v_count-(y2+Y_START)))); 3'd6: out2=(h_count>=X_START+x2)&&(v_count>=Y_START+y2)&&(h_count<=X_START+x2+64)&&(v_count<=Y_START+y2+64)&&(h_count+v_count-(x2+X_START)-(y2+Y_START)<=64); 3'd7: out2=(v_count>=Y_START+y2)&&(v_count<=Y_START+y2+45)&&(((h_count<=X_START+x2+45)&&(h_count>=X_START+x2)&&(h_count-(x2+X_START)<=v_count-(y2+Y_START)))||((h_count<=X_START+x2)&&(h_count>=X_START+x2-45)&&(h_count+v_count-(x2+X_START)-(y2+Y_START)+45>=45))); endcase case(state3) 1'b0: out3=(h_count>=X_START+x3)&&(v_count>=Y_START+y3)&&(h_count<=X_START+x3+45)&&(v_count<=Y_START+y3+45); 1'b1: out3=((h_count>=X_START+x3-32)&&(h_count<=X_START+x3)&&(v_count>=Y_START+y3)&&(v_count<=Y_START+y3+32)&&(h_count-(X_START+x3)+32+v_count-(Y_START+y3)>=32))||((h_count>=X_START+x3)&&(v_count>=Y_START+y3)&&(h_count<=X_START+x3+32)&&(v_count<=Y_START+y3+32)&&(h_count-(X_START+x3)<=v_count-(Y_START+y3)))|| ((h_count>=X_START+x3-32)&&(h_count<=X_START+x3)&&(v_count>=Y_START+y3+32)&&(v_count<=Y_START+y3+64)&&(h_count-(X_START+x3)+32>=v_count-(Y_START+y3)-32))||((h_count>=X_START+x3)&&(h_count<=X_START+x3+32)&&(v_count>=Y_START+y3+32)&&(v_count<=Y_START+y3+64)&&(h_count-(X_START+x3)+v_count-(Y_START+y3)-32<=32)); endcase case(state4) 2'd0: out4=(v_count>=Y_START+y4)&&(v_count<=Y_START+y4+45)&&(((h_count>=X_START+x4)&&(h_count<=X_START+x4+45)&&(h_count-(X_START+x4)>=v_count-(Y_START+y4)))||((h_count>=X_START+x4+45)&&(h_count<=X_START+x4+90)&&(h_count-(X_START+x4)-45<=v_count-(Y_START+y4)))); 2'd1: out4=(h_count>=X_START+x4)&&(h_count<=X_START+x4+32)&&(((v_count>=Y_START+y4)&&(v_count<=Y_START+y4+32)&&(h_count-(X_START+x4)<=v_count-(Y_START+y4)))||((v_count>=Y_START+y4+32)&&(v_count<=Y_START+y4+64))||((v_count>=Y_START+y4+64)&&(v_count<=Y_START+y4+96)&&(h_count-(X_START+x4)>=v_count-(Y_START+y4)-64))); 2'd2: out4=(h_count>=X_START+x4-45)&&(v_count>=Y_START+y4)&&(h_count<=X_START+x4)&&(v_count<=Y_START+y4+90)&&(h_count-(X_START+x4)+45+v_count-(Y_START+y4)>=45)&&(h_count-(X_START+x4)+v_count-(Y_START+y4)<=45); 2'd3: out4=(h_count>=X_START+x4-90)&&(v_count>=Y_START+y4)&&(h_count<=X_START+x4)&&(v_count<=Y_START+y4+45)&&(h_count-(X_START+x4)+90+v_count-(Y_START+y4)>=45)&&(h_count-(X_START+x4)+45+v_count-(Y_START+y4)<=45); endcase case(state5) 3'd0: out5=(v_count>=Y_START+y5-32)&&(v_count<=Y_START+y5)&&(((h_count>=X_START+x5-32)&&(h_count<=X_START+x5)&&(h_count-(x5+X_START)+32>=v_count-(y5+Y_START)+32))||((h_count>=X_START+x5)&&(h_count<=X_START+x5+32)&&(h_count+v_count+32-(x5+X_START)-(y5+Y_START)<32))); 3'd1: out5=(h_count>=X_START+x5)&&(v_count>=Y_START+y5-45)&&(h_count<=X_START+x5+45)&&(v_count<=Y_START+y5)&&(h_count-(x5+X_START)<=v_count-(y5+Y_START)+45); 3'd2: out5=(h_count>=X_START+x5)&&(h_count<=X_START+x5+32)&&(((v_count<=Y_START+y5)&&(v_count>=Y_START+y5-32)&&(h_count+v_count-(x5+X_START)-(y5+Y_START)+32>=32))||((v_count>=Y_START+y5)&&(v_count<=Y_START+y5+32)&&(h_count-(x5+X_START)>=v_count-(y5+Y_START)))); 3'd3: out5=(h_count>=X_START+x5)&&(v_count>=Y_START+y5)&&(h_count<=X_START+x5+45)&&(v_count<=Y_START+y5+45)&&(h_count+v_count-(x5+X_START)-(y5+Y_START)<=45); 3'd4: out5=(v_count>=Y_START+y5)&&(v_count<=Y_START+y5+32)&&(((h_count<=X_START+x5+32)&&(h_count>=X_START+x5)&&(h_count-(x5+X_START)<=v_count-(y5+Y_START)))||((h_count<=X_START+x5)&&(h_count>=X_START+x5-32)&&(h_count+v_count-(x5+X_START)-(y5+Y_START)+32>=32))); 3'd5: out5=(h_count>=X_START+x5-45)&&(v_count>=Y_START+y5)&&(h_count<=X_START+x5)&&(v_count<=Y_START+y5+45)&&(h_count-(x5+X_START)+45>=v_count-(y5+Y_START)); 3'd6: out5=(h_count>=X_START+x5-32)&&(h_count<=X_START+x5)&&(((v_count>=Y_START+y5-32)&&(v_count<=Y_START+y5)&&(h_count-(x5+X_START)+32<=v_count-(y5+Y_START)+32))||((v_count>=Y_START+y5)&&(v_count<=Y_START+y5+32)&&(v_count+h_count-(x5+X_START)-(y5+Y_START)+32<32))); 3'd7: out5=(h_count>=X_START+x5-45)&&(v_count>=Y_START+y5-45)&&(h_count<=X_START+x5)&&(v_count<=Y_START+y5)&&(h_count+v_count-(x5+X_START)-(y5+Y_START)+90>45); endcase case(state6) 3'd0: out6=(h_count>=X_START+x6)&&(h_count<=X_START+x6+32)&&(((v_count<=Y_START+y6)&&(v_count>=Y_START+y6-32)&&(h_count+v_count-(x6+X_START)-(y6+Y_START)+32>=32))||((v_count>=Y_START+y6)&&(v_count<=Y_START+y6+32)&&(h_count-(x6+X_START)>=v_count-(y6+Y_START)))); 3'd1: out6=(h_count>=X_START+x6)&&(v_count>=Y_START+y6)&&(h_count<=X_START+x6+45)&&(v_count<=Y_START+y6+45)&&(h_count+v_count-(x6+X_START)-(y6+Y_START)<=45); 3'd2: out6=(v_count>=Y_START+y6)&&(v_count<=Y_START+y6+32)&&(((h_count<=X_START+x6+32)&&(h_count>=X_START+x6)&&(h_count-(x6+X_START)<=v_count-(y6+Y_START)))||((h_count<=X_START+x6)&&(h_count>=X_START+x6-32)&&(h_count+v_count-(x6+X_START)-(y6+Y_START)+32>=32))); 3'd3: out6=(h_count>=X_START+x6-45)&&(v_count>=Y_START+y6)&&(h_count<=X_START+x6)&&(v_count<=Y_START+y6+45)&&(h_count-(x6+X_START)+45>=v_count-(y6+Y_START)); 3'd4: out6=(h_count>=X_START+x6-32)&&(h_count<=X_START+x6)&&(((v_count>=Y_START+y6-32)&&(v_count<=Y_START+y6)&&(h_count-(x6+X_START)+32<=v_count-(y6+Y_START)+32))||((v_count>=Y_START+y6)&&(v_count<=Y_START+y6+32)&&(v_count+h_count-(x6+X_START)-(y6+Y_START)+32<32))); 3'd5: out6=(h_count>=X_START+x6-45)&&(v_count>=Y_START+y6-45)&&(h_count<=X_START+x6)&&(v_count<=Y_START+y6)&&(h_count+v_count-(x6+X_START)-(y6+Y_START)+90>45); 3'd6: out6=(v_count>=Y_START+y6-32)&&(v_count<=Y_START+y6)&&(((h_count>=X_START+x6-32)&&(h_count<=X_START+x6)&&(h_count-(x6+X_START)+32>=v_count-(y6+Y_START)+32))||((h_count>=X_START+x6)&&(h_count<=X_START+x6+32)&&(h_count+v_count+32-(x6+X_START)-(y6+Y_START)<32))); 3'd7: out6=(h_count>=X_START+x6)&&(v_count>=Y_START+y6-45)&&(h_count<=X_START+x6+45)&&(v_count<=Y_START+y6)&&(h_count-(x6+X_START)<=v_count-(y6+Y_START)+45); endcase if(out0)begin oVGA_R<=10'b1111111111; oVGA_G<=10'b0000000000; oVGA_B<=10'b0000000000; end elseif(out1)begin oVGA_R<=10'b0000000000; oVGA_G<=10'b1111111111; oVGA_B<=10'b0000000000; end elseif(out2)begin oVGA_R<=10'b0000000000; oVGA_G<=10'b0000000000; oVGA_B<=10'b1111111111; end elseif(out3)begin oVGA_R<=10'b1111111111; oVGA_G<=10'b1111111111; oVGA_B<=10'b0000000000; end elseif(out4)begin oVGA_R<=10'b1111111111; oVGA_G<=10'b0000000000; oVGA_B<=10'b1111111111; end elseif(out5)begin oVGA_R<=10'b0000000000; oVGA_G<=10'b1111111111; oVGA_B<=10'b1111111111; end elseif(out6)begin oVGA_R<=10'b1000000000; oVGA_G<=10'b1000000000; oVGA_B<=10'b1000000000; end elsebegin oVGA_R<=10'b0000000000; oVGA_G<=10'b0000000000; oVGA_B<=10'b0000000000; end case(choose) 3'd0: if(out0)begin oVGA_R<=10'b1111111111; oVGA_G<=10'b1111111111; oVGA_B<=10'b11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论