首页 数字电路时钟设计verilog语言编写

数字电路时钟设计verilog语言编写

举报
开通vip

数字电路时钟设计verilog语言编写电子线路设计与测试实验报告一、实验名称多功能数字钟设计实验目的掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;熟悉一种EDA软件使用;掌握Verilog设计方法;掌握分模块分层次的设计方法;用Verilog完成一个多功能数字钟设计.设计内容及要求1.根本功能?具有“秒〞、“分〞、“时〞计时功能,小时按24小时制计时.?具有校时功能,能对“分〞和“小时〞进行调整.扩展功能?仿播送电台正点报时.在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号...

数字电路时钟设计verilog语言编写
电子线路设计与测试实验报告一、实验名称多功能数字钟设计实验目的掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;熟悉一种EDA软件使用;掌握Verilog设计方法;掌握分模块分层次的设计方法;用Verilog完成一个多功能数字钟设计.设计内容及要求1.根本功能?具有“秒〞、“分〞、“时〞计时功能,小时按24小时制计时.?具有校时功能,能对“分〞和“小时〞进行调整.扩展功能?仿播送电台正点报时.在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点.?定时限制,其时间为23时58分.选做内容?任意时刻闹钟〔闹钟时间可设置〕.?自动报整点时数.四.系统框图与说明数字钟框图I定时限制伪电台授时.数字钟电路系统由主体电路和扩展电路两大局部所组成..秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器根据“24进制〞规律计数..计数器的输出经译码器送显示器.五.设计步骤1.列写多功能数字钟设计--层次 结构图 人力资源部组织结构图钢结构图纸会审六年级数学知识结构图单元知识结构图社区居委组织结构图 .拟定数字钟的组成框图,在Max+PlusII软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路;.设计各单元电路并进行仿真;.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;.下载到CycloneIIFPGA实验平台上,实际测试数字钟的逻辑功能.六.Verilog代码//24进制时钟,具有计时、校时、仿播送电台正点报时、固定时刻定时,任意时刻闹钟等功能moduleclock_main(LED_Hour,LED_Minute,LED_Second,Alarm,CP_1KHz,Jsh_Min_key,Jsh_Hour_key,Set_Hour_key,Set_Min_key,Show,Ctrl_Bell);inputCP_1KHz;//定义输入时钟inputJsh_Min_key,Jsh_Hour_key;//定义校时按键inputSet_Hour_key,Set_Min_key;//定义闹钟定时按键inputShow;//定义显示模式按键inputCtrl_Bell;//定义闹钟铃声限制output[7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量wire[7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量类型wire[7:0]Hour,Minute,Second;wire[7:0]Set_Hour_Out,Set_Min_Out;wireOut_1Hz,Out_500Hz;//定义分频模块输出变量类型regAlarm_Ring,Alarm_Clock_1KHz;//定义仿播送电台报时和固定时刻定时铃声outputAlarm;//蜂鸣器输入supply1Vdd;wireAlarm_Clock;//任意时刻闹钟闹铃wireMinL_EN,MinH_EN,Hour_EN;//定义中间变量类型//分频fre_dividerFD0(Out_1Hz,Out_500Hz,Vdd,Vdd,CP_1KHz);//正常计时counter10U1(.Q(Second[3:0]),.nCR(Vdd),.EN(Vdd),.CP(Out_1Hz));counter6U2(.Q(Second[7:4]),.nCR(Vdd),.EN(Second[3:0]==4'h9),.CP(Out_1Hz));assignMinL_EN=Jsh_Min_key?Vdd:(Second==8'h59);assignMinH_EN=(Jsh_Min_key&&(Minute[3:0]==4'h9))||(Minute[3:0]==4'h9)&&(Second==8'h59);counter10U3(.Q(Minute[3:0]),.nCR(Vdd),.EN(MinL_EN),.CP(Out_1Hz));counter6U4(.Q(Minute[7:4]),.nCR(Vdd),.EN(MinH_EN),.CP(Out_1Hz));assignHour_EN=Jsh_Hour_key?Vdd:((Minute==8'h59)&&(Second==8'h59));counter24U5(Hour[7:4],Hour[3:0],Vdd,Hour_EN,Out_1Hz);//仿播送电台正点报时baoshiBS1(Alarm_Ring,Minute,Second,Out_500Hz,CP_1KHz);//在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点//固定时刻定时always@(HourorMinuteorSecond)//所定时刻为23时58分,蜂鸣器发出低音1KHz信号,持续5秒钟if(Hour==8'h23&Minute==8'h58)case(Second)8'h00,8'h01,8'h02,8'h03,8'h04:Alarm_Clock_1KHz=CP_1KHz;defaultAlarm_Clock_1KHz=1'b0;endcaseelseAlarm_Clock_1KHz=1'b0;//任意时刻闹钟setclockSC1(Alarm_Clock,Set_Hour_Out,Set_Min_Out,Hour,Minute,Second,Set_Hour_key,Set_Min_key,CP_1KHz,Out_500Hz,Out_1Hz,Ctrl_Bell);//响铃assignAlarm=Alarm_Ring||Alarm_Clock_1KHz||Alarm_Clock;//数码管显示选择Choice_2to1CU1(LED_Hour,Show,Set_Hour_Out,Hour);//Show为高电平时,显示闹钟所定时刻;为低电平时,显示正常计时Choice_2to1CU2(LED_Minute,Show,Set_Min_Out,Minute);Choice_2to1CU3(LED_Second,Show,8'h00,Second);Endmodule//**********分频模块,获得500Hz低频1Hz时钟源**********modulefre_divider(Out_1Hz,Out_500Hz,nCR,EN,In_1KHz);inputnCR,EN,In_1KHz;outputOut_1Hz,Out_500Hz;supply1Vdd;wireOut_1Hz,Out_500Hz;wire[11:0]Qn;//定义中间变量类型wireEN1,EN2;counter10DU1(.Q(Qn[3:0]),.nCR(nCR),.EN(EN),.CP(In_1KHz));counter10DU2(.Q(Qn[7:4]),.nCR(nCR),.EN(EN1),.CP(In_1KHz));counter10DU3(.Q(Qn[11:8]),.nCR(nCR),.EN(EN2),.CP(In_1KHz));assignEN1=(Qn[3:0]==4'd9);assignEN2=(Qn[7:4]==4'd9)&(Qn[3:0]==4'd9);assignOut_500Hz=Qn[0];assignOut_1Hz=Qn[11];endmodulemodulecounter10(Q,nCO,nCR,EN,CP);inputCP,nCR,EN;output[3:0]Q;outputnCO;reg[3:0]Q;always@(posedgeCPornegedgenCR)beginif(~nCR)Q<=4'd0;elseif(EN)beginif(Q>=4'd9)Q<=4'd0;elseQ<=Q+1'd1;endelseQ<=Q;endassignnCO=~(Q[3]&&Q[0]);endmodulemodulecounter6(Q,nCO,nCR,EN,CP);inputCP,nCR,EN;//****************模6计数器******************output[3:0]Q;outputnCO;reg[3:0]Q;always@(posedgeCPornegedgenCR)beginif(~nCR)Q<=4'd0;elseif(EN)beginif(Q==4'd5)Q<=4'd0;elseQ<=Q+1'd1;endelseQ<=Q;endassignnCO=~(Q[2]&&Q[0]);endmodule//**********模60计数,用来构成分、秒计数**********modulecounter60(Qnt,CO,nCR,EN,CP);inputCP,nCR,EN;output[7:0]Qnt;outputCO;wire[7:0]Qnt;counter10U0(Qnt[3:0],nCO_10,nCR,EN,CP);counter6U1(Qnt[7:4],nCO_6,nCR,Qnt[3:0]==4'd9,CP);assignCO=~((Qnt[7:4]==4'd5)&&(Qnt[3:0]==4'd9));endmodule//********************模24计数器********************modulecounter24(CntH,CntL,nCR,EN,CP);inputCP,nCR,EN;output[3:0]CntH,CntL;reg[3:0]CntH,CntL;always@(posedgeCPornegedgenCR)beginif(~nCR){CntH,CntL}<=8'h00;elseif(~EN){CntH,CntL}<={CntH,CntL};elseif((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;elseif((CntH==2)&&(CntL<3))beginCntH<=CntH;CntL<=CntL+1'b1;endelseif(CntL==9)beginCntH<=CntH+1'b1;CntL<=4'b0000;endelsebeginCntH<=CntH;CntL<=CntL+1'b1;endendendmodule//**********仿播送电台正点报时**********modulebaoshi(Alarm_Ring,Minute,Second,_500Hz,_1KHz);input[7:0]Minute,Second;//定义输入变量input_500Hz,_1KHz;outputAlarm_Ring;//定义输出变量regAlarm_Ring;//定义输出变量类型always@(MinuteorSecond)if(Minute==8'h59)case(Second)8'h51,8'h53,8'h55,8'h57:Alarm_Ring=_500Hz;//在59分51秒、53秒、55秒、57秒发出低音512Hz信号8'h59:Alarm_Ring=_1KHz;〃在59分59秒时发出一次高音1024Hz信号default:Alarm_Ring=1'b0;endcaseelseAlarm_Ring=1'b0;Endmodule,***********************************modulesetclock(Alarm_Clock,Set_Hour_Out,Set_Min_Out,Hour,Minute,Second,Set_Hour_key,Set_Min_key,_1KHz,_500Hz,_1Hz,Ctrl_Bell);inputSet_Hour_key,Set_Min_key;inputCtrl_Bell;input[7:0]Hour,Minute,Second;outputAlarm_Clock;output[7:0]Set_Hour_Out,Set_Min_Out;wire[7:0]Set_Hour_Out,Set_Min_Out;wireAlarm_Clock;input_1KHz,_500Hz,_1Hz;supply1Vdd;wireHourH_EQU,HourL_EQU,MinH_EQU,MinL_EQU;实现wireTime_EQU;counter60SU1(.Qnt(Set_Min_Out),.nCR(Vdd),.EN(Set_Min_key),.CP(_1Hz));//闹钟分钟的设定counter24SU2(Set_Hour_Out[7:4],Set_Hour_Out[3:0],Vdd,Set_Hour_key,_1Hz);//实现闹钟小时的设定comparatorSU4(HourH_EQU,Set_Hour_Out[7:4],Hour[7:4]);comparatorSU5(HourL_EQU,Set_Hour_Out[3:0],Hour[3:0]);comparatorSU6(MinH_EQU,Set_Min_Out[7:4],Minute[7:4]);comparatorSU7(MinL_EQU,Set_Min_Out[3:0],Minute[3:0]);assignTime_EQU=(HourH_EQU&&HourL_EQU&&MinH_EQU&&MinL_EQU);assignAlarm_Clock=Ctrl_Bell?(Time_EQU&&(((Second[0]==1'b1)&&_500Hz)||((Second[0]==1'b0)&&_1KHz))):1'b0;endmodulemoduleChoice_2to1(Qnt,SEL,X,Y);//**********************************modulecomparator(EQU,A,B);〃比拟器,如果A和B相等时,那么输出为1input[3:0]A,B;outputEQU;assignEQU=(A==B);endmodule//****************二选一选择器****************input[7:0]X,Y;inputSEL;output[7:0]Qnt;assignQnt=SEL?X:Y;endmodule七.各工作模块仿真波形1.根本功能—正常计时和校时N*_ED_HaurHD73:〔ozLEDMiouiaHDCK5?工00_ED_SecoridH1EJsh_Min_kmy0rnJsl^_Hour_key0■LED_HourhoeM阿丫运短通正乂鼻aLED_MicuteH0400何画〔必伺*LtUjiecandH162.仿播送电台正点报时■tf-CP_1KHz0I—Alarm0-wLED_HourH00LED_MinuteH56LtU_iseconclH693.固定时刻定时Alarm07LE3_HourH2323IF^JTlinuleH5B57X58与*LED_SttwidH214.任意时刻定时及闹钟设定Or-Mcxle1■»-SkMinks/■J_--S&t_Fcur_keyJ♦不LEDHouHM00K01=LE2_MifidteH00WK货专mLE3_Spc--S&1_Mir_kGy0■r-St1Houfkey0-l*Alarn0LED_HourMOILFD_MInuteH011k6JLED_Sec£indH20旭㈣但回加陀但赵虺屈W回Mi口X巾〔2啊何何笆〔或八.实验 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf :1.对于本次能够成功地使用Verilog设计并仿真出多功能数字钟,感到非常满意.2.本次多功能数字钟设计实验,从刚开始对Verilog语言非常陌生,到最后接近熟练地掌握Verilog语言的程度,期间花费不少时间和精力,同时也收获了很多,学会了使用VerilogEDA软件使语言编程仿真电路实验,掌握了可编程逻辑器件的应用开发技术,熟悉了一种用,掌握了Verilog设计方法,即分模块分层次的设计方法.3.本次多功能数字钟设计实验,对于Verilog语言的学习与应用,可以说是一次很好的锻炼时机,在设计过程中,汲取了诸多经验教训,深刻体会到一个小小的错误可能会给整个程序所带来的严重后果.所以,在以后的学习及程序设计当中,我们一定要倍加小心,在程序出现不正常运行的情况下要耐心调试,尽量做到精益求精.4.由于时间有限,还有一局部选做内容没能够完成,即数字钟的自动报整点时数功能.但本次设计实验已使我对Verilog语言产生了浓厚的兴趣,在以后的学习生活中会主动去了解更多有关这方面的知识及其在实践中的应用.
本文档为【数字电路时钟设计verilog语言编写】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_270070
暂无简介~
格式:doc
大小:126KB
软件:Word
页数:10
分类:
上传时间:2018-09-18
浏览量:2