版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《FPGA原理与应用》课程实验指导书实验项目代码实验一:分频器设计实验类型:验证型实验学时:2实验要求:必做3.实验步骤在设计任意分频器模块时运用了状态机设计思想,其中一种实现方式如下:1)顶层模块:modulediv_clk(clk,rst, clk_out); parameterHW=3; //分频输出时钟高电平宽度为3个输入时钟周期 parameterLW=2; //分频输出时钟低电平宽度为2个输入时钟周期 inputclk,rst; //输入时钟,复位信号 outputregclk_out; //分频输出时钟 reg[31:0]count; //分频控制计数器 regstate; //状态寄存器 always@(posedgeclkornegedgerst) begin if(!rst) //异步复位 begin clk_out<=1'b0; count<=0; state<=0; end else case(state) 0:if(count<LW-1) //时钟低电平宽度控制 begin count<=count+1; state<=0; end else begin //当计数值等于LW时状态转移,同时输出反转 count<=0; clk_out<=1; state<=1; end 1:if(count<HW-1) //时钟高电平宽度控制 begin count<=count+1; state<=1; end else begin //当计数值等于HW时状态转移,同时输出反转 count<=0; clk_out<=0; state<=0; end default:state<=0; endcase endendmodule通过修改参数HW,LW可以任意改变高低电平所需的分频个数,能够非常方便的实现任意分频的要求。2)然后编写测试文件div_clk_tb.v,程序如下:`timescale1ns/1psmodulediv_clk_tb;regclk;regrst;wireclk_out;initialbegin clk=0; rst=0; #100.1rst=1; endalways#10clk=~clk; div_clku1(.clk(clk),.rst(rst),clk_out(clk_out));endmodule 3)测试文件导入(具体过程参见教材)测试文件已编写完成,但其并未被设置为ModelSim仿真工具的测试文件。需要进行以下设置。执行Assignments->Settings,在弹出的窗口右侧选择EDAToolSettings->Simulation。EDANetlistWritersettings栏中进行设置。实验二:数码管显示设计实验类型:验证型实验学时:2实验要求:必做moduleseven_seg(inputclk,//系统时钟outputreg[7:0]seg,//段选信号(a-g+dp)outputreg[3:0]sel,//位选信号(低电平有效)outputreg[3:0]num//二进制输出(4位LED));//系统时钟频率假设为50MHz,扫描频率=50MHz/2^16≈763Hzreg[15:0]scan_counter=0;//扫描分频计数器wirescan_tick=(scan_counter==16'hFFFF);//扫描使能信号//更新计数器(0.5秒更新一次显示数据)reg[24:0]update_counter=0;//0.5秒计数器@50MHzwireupdate_tick=(update_counter==25'd24_999_999);//0.5秒使能//数码管显示寄存器(存储6个4位值)reg[3:0]digit[5:0];//扫描指针(0-5循环)reg[2:0]scan_ptr=0;//初始化显示数据initialbegindigit[0]=4'h0;digit[1]=4'h1;digit[2]=4'h2;digit[3]=4'h3;digit[4]=4'h4;digit[5]=4'h5;end//扫描计数器逻辑always@(posedgeclk)beginscan_counter<=scan_counter+1;end//更新计数器逻辑always@(posedgeclk)beginupdate_counter<=(update_tick)?0:update_counter+1;end//显示数据更新逻辑(每0.5秒所有数码管+1)always@(posedgeclk)beginif(update_tick)begindigit[0]<=digit[0]+1;digit[1]<=digit[1]+1;digit[2]<=digit[2]+1;digit[3]<=digit[3]+1;digit[4]<=digit[4]+1;digit[5]<=digit[5]+1;endend//扫描指针更新逻辑always@(posedgeclk)beginif(scan_tick)beginscan_ptr<=(scan_ptr==3'd5)?0:scan_ptr+1;endend//7段译码器函数function[7:0]seg_decoder;input[3:0]hex;begincase(hex)4'h0:seg_decoder=8'b11000000;//04'h1:seg_decoder=8'b11111001;//14'h2:seg_decoder=8'b10100100;//24'h3:seg_decoder=8'b10110000;//34'h4:seg_decoder=8'b10011001;//44'h5:seg_decoder=8'b10010010;//54'h6:seg_decoder=8'b10000010;//64'h7:seg_decoder=8'b11111000;//74'h8:seg_decoder=8'b10000000;//84'h9:seg_decoder=8'b10010000;//94'hA:seg_decoder=8'b10001000;//A4'hB:seg_decoder=8'b10000011;//b4'hC:seg_decoder=8'b11000110;//C4'hD:seg_decoder=8'b10100001;//d4'hE:seg_decoder=8'b10000110;//E4'hF:seg_decoder=8'b10001110;//Fdefault:seg_decoder=8'b11111111;//全灭endcaseendendfunction//输出逻辑always@(posedgeclk)beginif(scan_tick)begin//1.获取当前数码管数据num=digit[scan_ptr];//2.生成段选信号seg=seg_decoder(digit[scan_ptr]);//3.生成位选信号(低电平有效)case(scan_ptr)3'd0:sel=4'b1110;//第1位数码管3'd1:sel=4'b1101;//第2位数码管3'd2:sel=4'b1011;//第3位数码管3'd3:sel=4'b0111;//第4位数码管3'd4:sel=4'b1110;//复用第1位(实际6位)3'd5:sel=4'b1101;//复用第2位(实际6位)default:sel=4'b1111;//全关endcaseendendendmodule实验三:VGA驱动设计实验类型:综合型实验学时:4实验要求:必做modulevga_controller(inputclk,//系统时钟(50MHz)inputrst_n,//复位信号(低电平有效)inputmode,//显示模式:0=蓝屏,1=彩条outputreg[2:0]rgb,//RGB输出{R,G,B}outputreghs,//行同步信号outputregvs//场同步信号);//640x480@60Hz时序参数parameterH_DISPLAY=640;//行显示像素数parameterH_FRONT_PORCH=16;//行前沿parameterH_SYNC=96;//行同步脉冲parameterH_BACK_PORCH=48;//行后沿parameterH_TOTAL=H_DISPLAY+H_FRONT_PORCH+H_SYNC+H_BACK_PORCH;//行总像素数parameterV_DISPLAY=480;//场显示行数parameterV_FRONT_PORCH=10;//场前沿parameterV_SYNC=2;//场同步脉冲parameterV_BACK_PORCH=33;//场后沿parameterV_TOTAL=V_DISPLAY+V_FRONT_PORCH+V_SYNC+V_BACK_PORCH;//场总行数//内部寄存器reg[9:0]h_count;//行计数器(0-799)reg[9:0]v_count;//场计数器(0-524)regpixel_clk;//像素时钟(25MHz)//25MHz像素时钟生成(50MHz/2)always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginpixel_clk<=0;endelsebeginpixel_clk<=~pixel_clk;endend//行计数器always@(posedgepixel_clkornegedgerst_n)beginif(!rst_n)beginh_count<=0;endelsebeginif(h_count==H_TOTAL-1)beginh_count<=0;endelsebeginh_count<=h_count+1;endendend//场计数器always@(posedgepixel_clkornegedgerst_n)beginif(!rst_n)beginv_count<=0;endelsebeginif(h_count==H_TOTAL-1)beginif(v_count==V_TOTAL-1)beginv_count<=0;endelsebeginv_count<=v_count+1;endendendend//行同步信号产生(负极性)always@(posedgepixel_clkornegedgerst_n)beginif(!rst_n)beginhs<=1;endelsebeginif(h_count>=(H_DISPLAY+H_FRONT_PORCH)&&h_count<(H_DISPLAY+H_FRONT_PORCH+H_SYNC))beginhs<=0;//同步脉冲期间输出低电平endelsebeginhs<=1;endendend//场同步信号产生(负极性)always@(posedgepixel_clkornegedgerst_n)beginif(!rst_n)beginvs<=1;endelsebeginif(v_count>=(V_DISPLAY+V_FRONT_PORCH)&&v_count<(V_DISPLAY+V_FRONT_PORCH+V_SYNC))beginvs<=0;//同步脉冲期间输出低电平endelsebeginvs<=1;endendend//RGB输出控制always@(posedgepixel_clkornegedgerst_n)beginif(!rst_n)beginrgb<=3'b000;//复位时关闭RGBendelsebegin//在有效显示区域内输出颜色if(h_count<H_DISPLAY&&v_count<V_DISPLAY)beginif(mode==0)begin//蓝屏模式:纯蓝色rgb<=3'b001;endelsebegin//彩条模式:垂直彩条case(h_count[8:6])//将640像素分成8个条带(80像素/条)3'b000:rgb<=3'b111;//白色(R+G+B)3'b001:rgb<=3'b110;//黄色(R+G)3'b010:rgb<=3'b101;//紫色(R+B)3'b011:rgb<=3'b100;//红色(R)3'b100:rgb<=3'b011;//青色(G+B)3'b101:rgb<=3'b010;//绿色(G)3'b110:rgb<=3'b001;//蓝色(B)3'b111:rgb<=3'b000;//黑色default:rgb<=3'b000;endcaseendendelsebegin//非显示区域关闭RGBrgb<=3'b000;endendendendmodule实验四:矩阵键盘设计实验类型:综合型实验学时:4实验要求:必做因此编写3部分的程序。(1)顶层模块:moduletop_matrix_keyboard(clk,rst,key_row,key_col,seg_t,sel_t);inputclk,rst;input[3:0]key_row;output[3:0]key_col;output[2:0]sel_t;output[7:0]seg_t;wirekey_flag;wire[3:0]key_value;zkey_boardu_zkey_board(.clk(clk),.rst(rst),.key_row(key_row),.key_col(key_col),.key_flag(key_flag),.key_value(key_value));seg_ledu_seg_led(.key_flag(key_flag),.key_value(key_value),.clk(clk),.rst(rst),.seg_t(seg_t),.sel_t(sel_t));endmodule(2)按键扫描模块:```verilog//按键经过消抖,检测出具体的行列值,存起来。按键值最后要送给数码管显示出来//先把列设置为全低电平,去扫描行。找到具体的行后,然后再用每一列去巡查(即,把第一列设为0,其余3列为高----1110),//如果第一列确实有按键按下,则行row不等于1111;也就是此时找到按键所在的列。现在行列都确定了。就把此时的行列值存起来,用于后续显示。//如果第一列没有按键按下,则进行状态转移,用第二列继续查。//如果第二列确实有按键按下(则行row不等于1111),也就是此时找到了按键所在的列。现在行列都确定了。就把此时的行列值存起来,用于后续显示。//扫描过程:先检测行,找到行后,再用每一列去找具体的按键所在的列。最后行列都找到了modulezkey_board(clk,rst,key_row,key_col,key_flag,key_value);inputclk,rst;input[3:0]key_row;//按键所在的行outputreg[3:0]key_col;//按键所在的列,都是4位的。4行4列outputregkey_flag;//找到最终的行与列后,发出一个信号outputreg[3:0]key_value;//按键消抖模块计数值reg[31:0]delay_cnt;//按键消抖模块计数器reg[3:0]key_reg;//临时寄存行按键值的寄存器,进行对比regkey_flag_row;//监测行按键数据有效的标志//按键消抖模块--延时计数器(按下多久才是不抖动,即数据稳定的时间)always@(posedgeclkornegedgerst)beginif(!rst)beginkey_reg<=4'b1111;//无按键按下,因为低电平代表按下delay_cnt<=32'd0;endelsebeginkey_reg<=key_row;if(key_reg!=key_row)delay_cnt<=32'd1000000;//软件仿真,此值放小。delay_cnt<=32'd1000000/100;elseif(key_reg==key_row)beginif(delay_cnt>32'd0)delay_cnt<=delay_cnt-1;//自减一elsedelay_cnt<=delay_cnt;endendendalways@(posedgeclkornegedgerst)begin//不要用0判断,而是用1判断,因为delay_cnt最终保持的是0,所以我们提前一个周期去判断if(!rst)key_flag_row<=0;elsebeginif(delay_cnt==1)//如果delay_cnt==1;代表着完成了一次稳定的按键按下。key_flag_row<=1'b1;elsekey_flag_row<=1'b0;//再次拉低,目的标志位只拉高一个周期。endend//以上是行按下,而且消抖了//下面具体的行列扫描过程reg[2:0]state;reg[3:0]key_row_reg;//存放找到的行reg[3:0]key_col_reg;//存放找到的列always@(posedgeclkornegedgerst)beginif(!rst)beginstate<=3'b000;key_col<=4'b0000;//下板测试修改下赋值1111会怎么样endelsebegincase(state)0:beginkey_flag<=1'b0;if((key_row!=4'b1111)&&key_flag_row)begin//有行按下,并且消抖//有一行按下了((key_row!=4'b1111)),state<=3'd1;//下面把第一列拉低,巡查第一列有没有按键按下的情况,若有按下,此时的rowkey_col<=4'b1110;//第一列巡查---假设第1列有按键按下,其余3列拉高。如果第一列确实按键中有按键按下,此时行endelsestate<=3'd0;//如果没有行按下,则保持状态。即状态不转移。end1:beginif(key_row!=4'b1111)//此时行中出现一个低电平,说明肯定此列有按键按下了。state<=3'd5;elsebegin//如果行中没有低电平,说明此列么有按键按下。需要继续巡查第二列,状态转移state<=3'd2;key_col<=4'b1101;//准备用第二列巡查endend2:beginif(key_row!=4'b1111)state<=3'd5;//此时行中出现一个低电平,找到列了。elsebeginstate<=3'd3;key_col<=4'b1011;endend3:beginif(key_row!=4'b1111)state<=3'd5;elsebeginstate<=3'd4;key_col<=4'b0111;//用第4列去巡查endend4:beginif(key_row!=4'b1111)state<=3'd5;elsestate<=3'd0;end5:beginif(key_row!=4'b1111)begin//列找到了,行是输入确定的。所以行列确定就存下来,此时按键的位置就找到了。也就key_row_reg<=key_row;//存放行编号key_col_reg<=key_col;//存放列编号state<=3'd5;key_flag<=1'b1;endelsestate<=3'd0;endendcaseendendalways@(posedgeclk)beginif(key_flag==1'b1)begincase({key_col_reg,key_row_reg})8'b1110_1110:key_value<=4'd0;8'b1110_1101:key_value<=4'd4;8'b1110_1011:key_value<=4'd8;8'b1110_0111:key_value<=4'd12;8'b1101_1110:key_value<=4'd1;8'b1101_1101:key_value<=4'd5;8'b1101_1011:key_value<=4'd9;8'b1101_0111:key_value<=4'd13;8'b1011_1110:key_value<=4'd2;8'b1011_1101:key_value<=4'd6;8'b1011_1011:key_value<=4'd10;8'b1011_0111:key_value<=4'd14;8'b0111_1110:key_value<=4'd3;8'b0111_1101:key_value<=4'd7;8'b0111_1011:key_value<=4'd11;8'b0111_0111:key_value<=4'd15;endcaseendendendmodule(3)数码管显示模块:moduleseg_led(key_flag,key_value,clk,rst,seg_t,sel_t);inputclk,rst;inputkey_flag;input[3:0]key_value;output[2:0]sel_t;//位选output[7:0]seg_t;//段选reg[2:0]sel;reg[7:0]seg_l;assignsel_t=sel;assignseg_t=seg_l;//assignseg_t=~seg_l;比较容易移植,因为有的数码管是低电平点亮,有些是高电平点亮//位选信号赋值always@(posedgeclkornegedgerst)beginif(!rst)sel<=3'b010;elseif(key_flag)sel<=3'b001;elsesel<=3'b111;endendmodule测试模块,自行书写。实验五:蜂鸣器设计实验类型:综合型实验学时:4实验要求:必做其余4个子模块要编写程序。计数器模块:Time_counter:moduletime_counter(clk,rst,time_finish);inputclk,rst;//1MHz时钟信号outputtime_finish;//输出时间计数标志位(每隔0.25s变高电平1次)reg[17:0]counter;always@(posedgeclkornegedgerst)beginif(!rst)counter<=0;elseif(time_finish)counter<=0;elsecounter<=counter+1;end//每到0.25s,time_finish信号拉高,表示已经到达0.25//assigntime_finish=(counter==18'd249_999)?1'd1:1'd0;//用于仿真,因为真正的0.25s需要很长时间,assigntime_finish=(counter==18'd25)?1'd1:1'd0;endmodule地址产生模块:Addr_genmoduleaddr_gen(clk,rst,addr,time_finish);inputclk,rst;//1MHz时钟outputreg[6:0]addr;//输出给ROM的地址信号inputtime_finish;always@(posedgeclkornegedgerst)beginif(!rst)addr<=0;elseif(time_finish)//每0.25s,输出给ROM的地址信号自加1.addr<=addr+1;elseaddr<=addr;//不够0.25s,ROM的地址信号不变endendmodule解码模块:Decodemoduledecode(clk,rst,rom_data,music_data);inputclk,rst;input[7:0]rom_data;//输入ROM的数据outputreg[10:0]music_data;//输出ROM的解码数据always@(posedgeclkornegedgerst)beginif(!rst)music_data<=0;elsecase(rom_data)8'h11:music_data<=11'd1911;//(1MHz/261.63Hz/2)=1191低音18'h12:music_data<=11'd1702;//(1MHz/293.67Hz/2)=1702低音28'h13:music_data<=11'd1431;8'h14:music_data<=11'd1276;8'h15:music_data<=11'd1136;8'h16:music_data<=11'd1012;8'h21:music_data<=11'd939;//(1MHz/532.25Hz/2)=939中音18'h22:music_data<=11'd851;//(1MHz/587.33Hz/2)=851中音28'h23:music_data<=11'd758;8'h24:music_data<=11'd716;8'h25:music_data<=11'd638;8'h26:music_data<=11'd568;8'h27:music_data<=11'd506;8'h41:music_data<=11'd478;//(1MHz/1046.50Hz/2)=4788'h42:music_data<=11'd425;8'h43:music_data<=11'd379;8'h44:music_data<=11'd358;8'h45:music_data<=11'd319;8'h46:music_data<=11'd284;8'h47:music_data<=11'd253;8'h00:music_data<=11'd0;endcaseendendmodule音乐产生模块:Music_genmodulemusic_gen(clk,rst,music_data,beep);inputclk,rst;input[10:0]music_data;//输入音乐频率控制字outputregbeep;//输出方波reg[10:0]data,count;//寄存音乐控制字的data,计数器countalways@(posedgeclkornegedgerst)beginif(!rst)data<=11'd0;//寄存器data复位elsedata<=music_data;//data寄存音乐控制字endalways@(posedgeclkornegedgerst)beginif(!rst)begincount<=11'd1;//计数器复位beep<=1'd0;//输出方波复位endelseif(data==11'd0)//停止节拍begincount<=1;beep<=0;endelseif(count<=data)//当计数器小于等于data时,count<=count+1'd1;//计数器继续累加elsebegincount<=1'd1;beep<=~beep;//输出方波取反endendendmodule顶层模块:modulebeep(clk,rst,beep_data);inputclk,rst;//50MHz的系统时钟信号outputbeep_data;//输出方波wireclk_1m,time_finish;//1MHz的时钟信号,0.25s时间计数标志位wire[6:0]addr;//ROM地址线wire[7:0]rom_data;//ROM数据线wire[10:0]music_data;//ROM数据解码数据线my_pllmy_pll_inst(.areset(!rst),.inclk0(clk),.c0(clk_1m));my_rommy_rom_inst(.address(addr),.clock(clk_1m),.q(rom_data));decodedecode(.clk(clk_1m),.rst(rst),.rom_data(rom_data),.music_data(music_data));music_genmusic_gen(.clk(clk_1m),.rst(rst),.music_data(music_data),.beep(beep_data));//音乐发生器模块time_countertime_counter(.clk(clk_1m),.rst(rst),.time_finish(time_finish));//0.25s的时间计数器模块addr_genaddr_gen(.clk(clk_1m),.rst(rst),.addr(addr),.time_finish(time_finish));//ROM地址发生器endmodule测试模块自行书写。实验六:数码管显示moduleseg7(clk,rst,sel,seg,num);//把num从端口中删除,用作中间量inputclk;//时钟信号inputrst;//复位信号outputreg[2:0]sel;//数码管位选端口outputreg[7:0]seg;//数码管段选端口//outputreg[3:0]num;reg[3:0]num;//显示的数字或字母的输出端口reg[31:0]counter_5kHz;//计数器1,控制扫描频率为5kHzreg[31:0]counter_1Hz;//计数器2,控制所要显示的数据1s更新一次reg[2:0]pos;//数码管位选控制信号--8种情况--8个管子always@(posedgeclkornegedgerst)beginif(!rst)beginseg<=8'b0000_0000;sel<=3'b111;counter_1Hz<=0;counter_5kHz<=0;num<=0;pos<=0;endelsebeginif(counter_1Hz<5000_0000)counter_1Hz<=counter_1Hz+1;else//达到计数值,数据刷新且计数器清零beginnum<=num+1;counter_1Hz<=0;endcase(num)//判断数据值,将对应数码管显示编码赋给段选端4'b0000:seg<=8'b0011_1111;4'b0001:seg<=8'b0000_0110;4'b0010:seg<=8'b0101_1011;4'b0011:seg<=8'b0100_1111;4'b0100:seg<=8'b0110_0110;4'b0101:seg<=8'b0110_1101;4'b0110:seg<=8'b0111_1101;4'b0111:seg<=8'b0000_0111;4'b1000:seg<=8'b0111_1111;4'b1001:seg<=8'b0110_1111;4'b1010:seg<=8'b0111_0111;4'b1011:seg<=8'b0111_1100;4'b1100:seg<=8'b0011_1001;4'b1101:seg<=8'b0101_1110;4'b1110:seg<=8'b0111_1001;4'b1111:seg<=8'b0111_0001;default:seg<=8'b0000_0000;endcase//数码管动态扫描频率5kHz,是否达到计数值,计数器清零还是加1?if(counter_5kHz<1_0000)counter_5kHz<=counter_5kHz+1;elsebeginpos<=pos+1;counter_5kHz<=0;endcase(pos)//判断数码管位选控制信号3'b00:sel<=3'b000;3'b01:sel<=3'b001;3'b10:sel<=3'b010;3'b11:sel<=3'b011;default:sel<=2;//default:sel<=7;endcaseendendendmodule`timescale1ns/1psmoduleseg7_tb;regclk;//时钟regrst;//复位wire[2:0]sel;//位选端口wire[7:0]seg;//段选端口wire[3:0]num;//数据输出端口initialbeginclk=0;rst=0;#20rst=1;endalways#10clk=~clk;//产生一个50MHz的时钟激励seg7i1(.clk(clk),.rst(rst),.sel(sel),.seg(seg),.num(num));endmodulemoduleseg7(clk,rst,sel,seg);inputclk,rst;reg[3:0]num;outputreg[2:0]sel;outputreg[7:0]seg;reg[31:0]counter_1hz;reg[31:0]counter_5khz;reg[2:0]pos;//00,01,10,11----4种情况always@(posedgeclkornegedgerst)beginif(!rst)beginsel<=3'b111;seg<=8'b0;pos<=0;counter_1hz<=0;counter_5khz<=0;num<=0;endelsebeginif(counter_1hz<5000_0000)counter_1hz<=counter_1hz+1;elsebegincounter_1hz<=0;num<=num+1;endcase(num)4'b0000:seg<=~(8'b0011_1111);4'b0001:seg<=~(8'b0000_0110);4'b0010:seg<=~(8'b0101_1011);4'b0011:seg<=~(8'b0100_1111);4'b0100:seg<=~(8'b0110_0110);4'b0101:seg<=~(8'b0110_1101);4'b0110:seg<=~(8'b0111_1101);4'b0111:seg<=~(8'b0000_0111);4'b1000:seg<=~(8'b0111_1111);4'b1001:seg<=~(8'b0110_1111);4'b1010:seg<=~(8'b0111_0111);4'b1011:seg<=~(8'b0111_1100);4'b1100:seg<=~(8'b0011_1001);4'b1101:seg<=~(8'b0101_1110);4'b1110:seg<=~(8'b0111_1001);4'b1111:seg<=~(8'b0111_0001);default:seg<=~(8'b0000_0000);endcaseif(counter_5khz<1000)counter_5khz<=counter_5khz+1;elsebegincounter_5khz<=0;pos<=pos+1;endcase(pos)3'b00:sel<=3'b000;3'b01:sel<=3'b001;3'b10:sel<=3'b010;3'b11:sel<=3'b011;default:sel<=1;endcaseendendendmodule实验七:VGA驱动设计实验程序moduletop(clk,rst,vga_vs,vga_hs,vga_r,vga_b,vga_g);inputclk,rst;outputvga_vs,vga_hs;output[2:0]vga_r,vga_g;output[1:0]vga_b;wireclk_40;wireen;pllpll_inst(.inclk0(clk),.c0(clk_40));VGAVGA(.clk(clk_40),.rst(rst),.vga_vs(vga_vs),.vga_hs(vga_hs),.enh(enh),.enq(enq));r_g_br_g_b(.enq(enq),.enh(enh),.vga_r(vga_r),.vga_g(vga_g),.vga_b(vga_b));endmodulemoduler_g_b(enq,enh,vga_r,vga_g,vga_b);inputenq,enh;output[2:0]vga_r,vga_g;output[1:0]vga_b;assignvga_r=enq?3'b111:3'b000;assignvga_b=2'b00;assignvga_g=enh?3'b111:3'b000;endmodule//hang计数always@(posedgeclkornegedgerst)beginif(!rst)cnt_v<=11'd0;elseif(cnt_h==(hy_all-1))if(cnt_v==(vy_all-1))//所有列扫描完毕cnt_v<=11'd0;elsecnt_v<=cnt_v+1'b1;end//限定列同步信号always@(posedgeclkornegedgerst)beginif(!rst)vga_hs<=1'b1;elseif(cnt_h==0)//列扫描开始vga_hs<=1'b0;elseif(cnt_h==hy_a)vga_hs<=1'b1;end//限定hang同步信号always@(posedgeclkornegedgerst)beginif(!rst)vga_vs<=1'b1;elseif(cnt_v==0)//ha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童跌倒损伤护理
- 2026内蒙古地质矿产集团有限公司所属矿山企业招聘230人笔试模拟试题及答案解析
- 2026吉林延边州敦化市官地镇中心卫生院招聘乡村医生1人考试备考试题及答案解析
- 2026年2月四川绵阳市中科经永投资发展集团有限公司招聘管理人员及专业人员11人笔试备考试题及答案解析
- 2026内蒙古鄂尔多斯市准格尔旗中心医院招聘护理专业技术人员16人考试参考试题及答案解析
- 2026荣丰现代农业发展有限公司招聘6人笔试备考试题及答案解析
- 2026浙江温州市第一幼儿园站前园区招聘2人考试参考题库及答案解析
- 2026四川长虹集团财务有限公司招聘财务管理岗等岗位2人考试参考题库及答案解析
- 2026四川蜀道城乡投资集团有限责任公司校园招聘3人考试参考试题及答案解析
- 2026年国网吉林省电力有限公司高校毕业生招聘第二批笔试备考试题及答案解析
- 劳动创造美好生活2026年新学期劳动教育开学第一课
- 2026年春苏教版(2026修订)小学数学五年级第二学期教学计划及进度表
- 2026年春季学期校长在开学安全工作专题会议上的部署讲话稿
- 2026四川能投综合能源有限责任公司招聘19人备考题库参考答案详解
- 2026年及未来5年市场数据中国工程保险行业市场调查研究及发展战略规划报告
- (2026春新版)部编版三年级语文下册全册教案
- 船舶机电故障失控应急预案范文
- 2026年莱芜职业技术学院单招综合素质考试模拟试题带答案解析
- 部编版小学语文一年级下册教案设计(新教材全册)
- 2026年中国中信金融资产管理股份有限公司大连分公司人才引进及社会招聘备考题库及参考答案详解
- 浙江省强基联盟2025-2026学年高二上学期12月联考日语试题含答案
评论
0/150
提交评论