一,实验原理二,各模块程序与仿真结果图。1,分频器,将晶振的 48MHz频率分频为电子秒表的最小分辨频率,周期 0.01S。同时在译码部分需要一个 1KHz的扫描信号,所以分频器的功能就是产生一个 100Hz信号和 1kHz信号。源代码如下:moduledivclk(clk,clk_100,clk_1k);inputclk;outputregclk_100,clk_1k;reg[29:0]counter1,counter2;initialbegincounter1<=0;counter2<=0;clk_100<=0;clk_1k<=0;endalways@(posedgeclk)beginif(counter1==240000)begincounter1<=0;clk_100<=~clk_100;endelsebegincounter1<=counter1+1;endif(counter2==24000)begincounter2<=0;clk_1k<=~clk_1k;endelsebegincounter2<=counter2+1;endendendmodule仿真结果2,计数器秒表计数器和一般计数器不同的是进制,在 0.01s__0.99s时,都是十进制的,而到了秒和分的时候,十位秒和个位秒是十进制,秒和分之间则为六十进制所以在进位时注意区分。秒表有两个按键,一个复位按键 reset,一个run/stop按键,reset按键比较好处理,因为是点触式,可以检测其下降沿部位(低电平有效),当硬件检测到,说明是有按键按下。而run/stop按键则为,按下一次这个键,秒表 run和 stop切换一次可定义一个信号寄存器,在检测到这个按键按下时,自身在 0和 1之间翻转一次,1表示 run,0表示 stop。我们知道,在按键按下一次时会有如下的毛刺信号,这个毛刺信号持续时间虽然只有 1-3ms,但是这对于硬件来说,还是很长的,最关键的是,会产生很多个下降沿和电平触发。所以必须对其进行处理,否则在按键按下一次后,run/stop会反转多次。消抖方法分为硬件消抖和软件延时消抖。在 FPGA中可以定义三个 D触发器,进行硬件 3ms消抖(时间可以根据实际情况而定),消抖原理always@(posedgeclk_1k)//以1kHz扫描信号,进行定时begindout1<=reset;dout2<=dout1;dout3<=dout2;clr<=(dout1|dout2|dout3);end在三个每隔 1ms的点上取三个值,如果这三个值都是低电平,则说明下降沿来了。电路模块源程序代码modulecounter(clk_100,clk_1k,reset,key,cnte0,cnte1,cnte2,cnte3,cnte4,cnte5);inputclk_100,clk_1k,reset,key;outputreg[3:0]cnte0,cnte1,cnte2,cnte3,cnte4,cnte5;regkey_out,run;regclr,dout1,dout2,dout3,do1,do2,do3;initialbegincnte0<=0;cnte1<=0;cnte2<=0;cnte3<=0;cnte4<=0;cnte5<=0;run<=1;clr<=1;dout1<=1;dout2<=1;dout3<=1;do1<=1;do2<=1;do3<=1;key_out<=0;endalways@(pose...