1、1b1;dout0=din;endcout=|dout;endmodule500Hz分频模块如下:module int_div500hz(clk, div_out);input clk;output reg div_out;reg 31:0 clk_div;parameter CLK_FREQ = D50_000_000; /系统时钟50MHzparameter DCLK_FREQ = D1000; /输出频率1000/2Hzif(clk_div (CLK_FREQ/DCLK_FREQ)clk_div = clk_div+1;= 0;div_out = div_out;跑表功能需要用到D触发器
2、配合一个sed模块,这里用到的是上升沿触发,当上升沿来到时,输出等于输入。D触发器:module dchufa(d,q,nq,clk);input clk,d;output nq,q;reg q,nq;always(posedge clk)q=d;nq=d;sed模块代码如下:module sed(clk100hz,ti,count,stop,rst);input clk100hz;input stop; /配合D触发器的特性实现暂停跑表的功能input1:0 count;input rst;output31:0ti;reg31:always (posedge clk100hz)if(coun
3、t=2b11)ti31:24=8d4;if(stop)ti=ti;if(rst)ti23:0if(ti3:0=4d9)ti3:=4d0;if(ti7:4=4ti7:4if(ti11:8=4ti11:8if(ti15:12=4d5)ti15:12if(ti19:16=4ti19:16if(ti23:20=420if(ti27:24=4ti27:28=ti31:28+4d1;else if(ti31:28=4d2&d3)else ti27:=ti27:24+4else ti23:=ti23:20+4else ti19:=ti19:16+4else ti15:=ti15:12+4else ti11:
4、=ti11:8+4else ti7:=ti7:4+4else ti3:=ti3:0+4=24b0;需要一个main_control模块来协调整个程序的实现,它负责产生蜂鸣器,key1,key2,key3的响应,同时配合1hz输入(1hz用于产生秒的计时,同时,时和分的转换都在这个模块中)Main_control:module main_control(count,clk1hz,key1,key2,key3,q,beep,t);0count;input clk1hz;input key1;input key2;input key3;output beep;0q;0t;0tempq;reg bee
5、p;always (posedge clk1hz)b00)q31:/if(q3:q3:if(q7:q7:if(q11:q11:if(q15:q15:if(q19:q19:q23:=q23:else if(q23:else q19:=q19:else q15:=q15:else q11:=q11:else q7:=q7:else q3:=q3:/xia mian shi naoling functionif(t23:8=q23:8)beep=1else beepelse if(count=2b01)d2;d9&key1=1b1)8+key1;key2=1d3&16+key2;b10)t31:d3
6、;if(t11:b1)/t11:if(t15:t15:else t15:=t15:else t11:=t11:if(t19:t19:t23:=t23:else if(t23:else t19:=t19:/q continue将要实现的4种功能设置为4种模式,用一个mode模块来选择模式Mode:module mode(key0,count,rst);input key0;output 1:reg 1:always (posedge key0) /用key0的上升沿来判断if(!rst)countb11) /用count变量来计数,显示的数据即为显示的模式=count+2out模块配合segma
7、in模块来控制数码管的显示,这在之前的实验中已经实现out模块:module out(count,q,ti,clk100hz,qout,t);input31:0qout;qout=t;=q;segmain模块不在赘述。Pulse模块用于产生脉冲来控制蜂鸣器Pulse:module pulse(clk,d,spk);input12:0 d;output spk;reg spk;if(clk_divd)spk = spk;最后需要产生乐曲,选择的乐曲为梁祝乐曲,需要一个tonetable模块来产生所发音符所需的分频预置数并且notetable模块中的计数器按照4Hz的时钟速率递增并依次输出分频预置
8、数,并且控制好每个音符的持续时间。依据课本上前几次实验的经验,对每个模块进行设定,编译,设置顶层等等步骤,最后下载到实验版上实现数字钟。 四、实验小结通过本次的综合实验我回顾并掌握了之前几次实验的各种方法,对编程语言有了一个非常清楚的认识,并且进一步掌握了FPGA的开发流程,调试方法以及Quatus II软件的使用,Quartus II的涉及输入、仿真方法以及步骤,熟识Quatus II软件基本功能的使用,这对于本次实验的成功十分重要。本学期的实验虽然只用到了开发板的硬件功能,但为我们今后的进一步学习打下了坚实的基础,而且我们还可以进行进一步的利用verilogHDL语言进行开发,而不仅仅停留在硬件功能上