verilog自动手动换挡频率计.docx_第1页
verilog自动手动换挡频率计.docx_第2页
verilog自动手动换挡频率计.docx_第3页
verilog自动手动换挡频率计.docx_第4页
verilog自动手动换挡频率计.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

直接上源码,不解释,自己建工程运行即可看到功能!module control(cp1024hz,started,reset,k1,k2,k3,k4,k5,k6,zero1,zero2,zero3,zero4,zero5,zero6,time_out,mode,flag_pressed,sound_en,latch_en);/yesdinput cp1024hz,started,reset;input k1,k2,k3,k4,k5,k6;/抢答的6个按键,由cp1024hz扫描是否有按键input zero1,zero2,zero3,zero4,zero5,zero6;/6个用?的分数是否为0,并将分数为0的淘汰input time_out;/倒计时已完output flag_pressed,sound_en,latch_en,mode;/是否已按键;声音控制;模式控制;输出模式reg flag_pressed,sound_en,latch_en;reg3:0 mode;always (posedge cp1024hz)beginif(!started)/当started=0时,对系统进行初始化,同时将mode置0;beginmode=0;flag_pressed=1;/利用设置这个将k1k6屏蔽sound_en=0;latch_en=0;endelsebeginif(reset)/started=1已开始,reset=1新一轮抢答beginflag_pressed=0;sound_en=0;latch_en=0;mode=7; /mode置为抢答模式endelsebeginif(time_out)beginsound_en=1;/时间完了之后,响声提示endelsebeginif(!flag_pressed & k1 & !zero1)/当started=1时,按下key1beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=1;endelse if(started & !flag_pressed & k2 & !zero2)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=2;endelse if(!flag_pressed & k3 & !zero3)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=3;endelse if(!flag_pressed & k4 & !zero4)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=4;endelse if(!flag_pressed & k5 & !zero5)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=5;endelse if(!flag_pressed & k6 & !zero6)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=6;endendendendendendmodulemodule display(cp1024hz,mode,setted_score,score1,score2,score3,score4,score5,score6,time_countdown,disp);/yesdinput cp1024hz;input3:0 mode,time_countdown;/从time_count引出input7:0 setted_score,score1,score2,score3,score4,score5,score6;output disp;reg 3:0mode_disp;reg7:0 disp;always (posedge cp1024hz)begincase(mode)4b0000 : disp=setted_score;4b0001 : disp=score1;4b0010 : disp=score2;4b0011 : disp=score3;4b0100 : disp=score4;4b0101 : disp=score5;4b0110 : disp=score6;4b0111 :begindisp3:0=time_countdown;disp7:4=0;end default : disp=setted_score;endcaseendendmodulemodule mode_latch_change(cp1024hz,started,flag_pressed,latch_clk,up_clk,down_clk,mode_in,mode_out);input cp1024hz,started,flag_pressed;/yesdinput latch_clk;/锁存mode的信号input up_clk,down_clk;/设置mode按键,上调和下调input3:0mode_in;/从control的mode输出引进output mode_out;reg3:0 mode_out;reg up_clk1,down_clk1,latch_clk1;always (posedge cp1024hz)begin up_clk1=up_clk; down_clk1=down_clk; latch_clk1=latch_clk;endwire up_clk2,down_clk2,latch_clk2;/对输入的信号的变化,便于cp1024hz的脉冲捕获assign up_clk2=up_clk1&(up_clk);assign down_clk2=down_clk1&(down_clk);assign latch_clk2=latch_clk1&(latch_clk);always (posedge cp1024hz)beginif(!started)/started=0,设置分数模式,mode_out=mode_in=0;beginmode_out=0;endelse/正常工作beginif(!flag_pressed)/抢答模式beginmode_out=mode_in;endelse if(latch_clk2)/锁存模式beginmode_out=6)beginmode_out=0;endelsebeginmode_out=mode_out+1;endendelse if(flag_pressed & down_clk2)/查看各个分数,mode减计数beginif(mode_out=0)beginmode_out=6;endelsebeginmode_out=mode_out-1;endendelsebegin/mode_out=mode_in;endendendendmodulemodule restart(cp1024hz,start_clk,started);/started=0设置初始分数,started=1开始工作input cp1024hz,start_clk;/yesdoutput started;reg started;reg start_clk1;always (posedge cp1024hz)beginstart_clk1=start_clk;endwire start_clk2;assign start_clk2=start_clk1&(start_clk);/变换start_clk信号,防止抖动以及便于cp1024hz扫描always (posedge cp1024hz)/start正常工作抢答_clk翻转,started翻转,为0时设置分数,为1时beginif(start_clk2)beginstarted=started;endendendmodulemodule score_count(cp1024hz,started,reset,mode,time_out,right_key,wrong_key,setted_score,score1,score2,score3,score4,score5,score6,zero1,zero2,zero3,zero4,zero5,zero6);/yesdinput cp1024hz,started,reset;input time_out;/时间完了之后却没有是抢答input right_key,wrong_key;/每次抢答之后主持人用于判断抢答者回答是否正确,从而设置分数input3:0 mode;/从control的mode输出引进input7:0 setted_score;/mode=0时设置的厨师分数output score1,score2,score3,score4,score5,score6;/各玩家分数output zero1,zero2,zero3,zero4,zero5,zero6;/玩家分数是否为0reg zero1,zero2,zero3,zero4,zero5,zero6;reg 7:0score1,score2,score3,score4,score5,score6;reg right1,wrong1;always (posedge cp1024hz)beginright1=right_key;wrong1=wrong_key;endwire right2,wrong2;/将判断回答对错的信号变换,消除抖动以及便于扫描识别assign right2=right1&(right_key);assign wrong2=wrong1&(wrong_key);reg temp_flag;/用于消除多次判断回答对错,防止扣分错误always (posedge cp1024hz)beginif(!started)/设置分数时,对各个玩家分数初始化beginscore1=setted_score;score2=setted_score;score3=setted_score;score4=setted_score;score5=setted_score;score6=setted_score;zero1=0;zero2=0;zero3=0;zero4=0;zero5=0;zero6=0;temp_flag=0;endelse/started=1,正常工作模式beginif(reset)/reset之后初始化参数begintemp_flag=0;endelse/进行回答判断beginif(!time_out & !temp_flag & wrong2)/回答错误,减1分begintemp_flag=1)beginscore13:0=9;score17:4=score17:4-1;endelse if(score13:0=1 & score17:4=0)beginscore17:0=0;zero1=1;/玩家1的分数减少到0,淘汰endelsebeginif(score17:0!=0)beginscore13:0=1)beginscore23:0=9;score27:4=score27:4-1;endelse if(score23:0=1 & score27:4=0)beginscore27:0=0;zero2=1;endelsebeginif(score27:0!=0)beginscore23:0=1)beginscore33:0=9;score37:4=score37:4-1;endelse if(score33:0=1 & score37:4=0)beginscore37:0=0;zero3=1;endelsebeginif(score37:0!=0)beginscore33:0=1)beginscore43:0=9;score47:4=score47:4-1;endelse if(score43:0=1 & score47:4=0)beginscore47:0=0;zero4=1;endelsebeginif(score47:0!=0)beginscore43:0=1)beginscore53:0=9;score57:4=score57:4-1;endelse if(score53:0=1 & score57:4=0)beginscore57:0=0;zero5=1;endelsebeginif(score57:0!=0)beginscore53:0=1)beginscore63:0=9;score67:4=score67:4-1;endelse if(score63:0=1 & score67:4=0)beginscore67:0=0;zero6=1;endelsebeginif(score67:0!=0)beginscore63:0=score63:0-1;endendenddefault : ;endcaseendif(!time_out & !temp_flag & right2)/回答正确,相应加1分begintemp_flag=1;case(mode)4b0001 : /玩家1if(score13:0=9)beginscore13:0=0;score17:4=score17:4+1;endelsebeginscore13:0=score13:0+1;end4b0010 : /玩家2if(score23:0=9)beginscore23:0=0;score27:4=score27:4+1;endelsebeginscore23:0=score23:0+1;end4b0011 : /玩家3if(score33:0=9)beginscore33:0=0;score37:4=score37:4+1;endelsebeginscore33:0=score33:0+1;end4b0100 : /玩家4if(score43:0=9)beginscore43:0=0;score47:4=score47:4+1;endelsebeginscore43:0=score43:0+1;end4b0101 : /玩家5if(score53:0=9)beginscore53:0=0;score57:4=score57:4+1;endelsebeginscore53:0=score53:0+1;end4b0110 : /玩家6if(score63:0=9)beginscore63:0=0;score67:4=score67:4+1;endelsebeginscore63:0=score63:0+1;enddefault : ;endcaseendendendendendmodulemodule set_score(cp1024hz,started,set_up,set_down,setted_score);/抢答前设置玩家分数yesinput cp1024hz,started,set_up,set_down;output setted_score;reg 7:0setted_score;reg cp_up,cp_down;always (posedge cp1024hz)begin cp_up =set_up; cp_down =set_down;endwire cp_up_pos,cp_down_pos;assign cp_up_pos=cp_up&(set_up);assign cp_down_pos=cp_down&(set_down) ;/设置分数的cp,防止抖动always (posedge cp1024hz) /设置初始分数beginif(!started) /当stared=0,设置模式,开始设置分数beginif(cp_up_pos&(!cp_down_pos) /加分设置beginif(setted_score3:0=9)beginsetted_score3:0=0;if(setted_score7:4=9)beginsetted_score7:4=0;endelsebeginsetted_score7:4=setted_score7:4+1;endendelsebeginsetted_score3:0=setted_score3:0+1;endendelse if(!cp_up_pos)&cp_down_pos) /减分设置beginif(setted_score3:0=0)beginsetted_score3:0=9;if(setted_score7:4=0)beginsetted_score7:4=9;endelsebeginsetted_score7:4=setted_score7:4-1;endendelsebeginsetted_score3:0=setted_score3:0-1;endendendendendmodulemodule sound_alarm(reset,sound_en,cp1024hz,time_less_alarm,alarm);/yesdinput reset,sound_en,cp1024hz;input time_less_alarm;output alarm;reg 9:0 temp_count;reg temp;always (posedge cp1024hz)/(包括倒计时完,已抢答两种情况的声音提示)beginif(reset)/对中间变量进行初始化begintemp=1;temp_count=0;endif(sound_en=1)beginif(temp_count=1023)/sound_en=1时,响1s钟提示begintemp=0;endelse begintemp_count=temp_count+1;endendendwire alarm_time;assign alarm_time=temp & sound_en;reg9:0 temp1;reg time_left_alarm;always (posedge cp1024hz)/时间到三秒时 提示声0.5sbeginif(reset)/对中间变量进行初始化begintemp1=1;time_left_alarm=0;endelsebeginif(time_less_alarm=0)begintemp1=0;time_left_alarm=0;endelsebegin/时间少于3s时 提示if(temp1=512)begintemp1=temp1+1;time_left_alarm=1;endelsebegintime_left_alarm=0;endendendendassign alarm=(time_left

温馨提示

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

评论

0/150

提交评论