3、Z<=~clk_1HZ;endendendmodule注:本文所使用的分频模块只能进行偶数分频。M为分频的倍数。计时模块:moduleszz_js(clk_1HZ,num1,num2,num3,num4,num5,num6);inputclk_1HZ;outputreg[3:0]num1,num2,num3,num4,num5,num6;always@(posedgeclk_1HZ)40beginif((num6==4'b10)&&(num5==4'b100))beginnum5=4'b0;num6=4'b0;endelseif(num5==4
4、'b1001)beginnum6=num6+4'b1;num5=4'b0;endelseif(num4==4'b0110)beginnum5=num5+4'b1;num4=4'b0;endelseif(num3==4'b1001)beginnum3=4'b0;num4=num4+4'b1;endelseif(num2==4'b0110)40beginnum2=4'b0;num3=num3+4'b1;endelseif(num1==4'b1001)beginnum1=4'b0;num2=num2+4'b1;endelsebeginnum1=num
5、1+4'b1;endendendmodule注:本文所使用的计时模块的代码采用状态机,非阻塞语句赋值,所以在判以后不会立即清零,所以判断采用是当其为5的时候才进行下一次状态,并在下一次状态进行清零。控制语句:moduleszz_kz(clk,rst,turn1,turn2,turn3,n1,n2,n3,n4,n5,n6,rs1,rs2,rs3,rs4,rs5,rs6);inputclk,turn1,turn2,turn3,rst;input[3:0]n1,n2,n3,n4,n5,n6;outputreg[3:0]rs1,rs2,rs3,rs4,
6、rs5,rs6;reg[3:0]num1,num2,num3,num4,num5,num6;always@(posedgeclk)40beginif(!rst)beginrs1=n1;rs2=n2;rs3=n3;rs4=n4;rs5=n5;rs6=n6;endelsebeginrs1=n1;rs2=n2;rs3=n3;rs4=n4;rs5=n5;rs6=n6;rs5=rs5+num5;rs3=rs3+num3;if(turn1)beginrs5=n5;num5=num5+4'b1;endif(turn2)beginrs3=n3;num3=num
7、3+4'b1;endif(turn3)beginrs2=0;rs1=0;endendendmodule注:本控制程序是对键位的高电平进行监测,则进行清秒,调分,调时的功能。1、程序的测试图40图为计数模块的部分的图形。图为程序调试以后的结果1、程序代码注:因为在FPGA的试验台上有1HZ的CLK信号,所以在实现时可以将CLK信号直接设置为1HZ,故省略例化分频语句。moduleszz_js(clk_1HZ,num1,num2,num3,num4,num5,num6);40inputclk_1HZ;outputreg[3:0]num1,num2,
8、num3,num4,num5,num6;always@(posedgeclk_1HZ)beginif((num6==4'b10)&&(num5==4'