文档介绍:2016-12-171《计算机EDA设计》实验教程实验二按钮消抖电路北航计算机学院艾明晶2016-12-172内容概要?实验目的?实验要求?实验原理?实验内容?实验报告2016-12-173?掌握按钮消抖电路的原理。?掌握定时器的实现方法。?掌握Verilog HDL语言中采用reg型变量作为中间变量的用法。实验目的2016-12-174实验要求?设计一个按钮消抖电路?输入信号?时钟信号clk(fclk= 1000Hz)?按钮提供的脉冲信号pbn(低有效)?输出信号?signal(负脉冲)一旦按钮按下,则此电路输出一个持续时间一定的有效信号。在此期间,即使按钮有几个连续的负脉冲,但电路输出仍保持低电平,从而将按钮的抖动屏蔽掉。2016-12-175实验原理?机械开关,触点接触不可靠?机械开关按下时机械触点接触不可靠,在动作初期会产生多次抖动,从而对其后的电路形成多次输入,有可能使电路输出不正确。因此有必要设计一个按钮消抖电路,将抖动屏蔽掉。?按钮消抖的原理?一旦按钮按下,使按钮消抖电路输出一个持续时间一定的有效信号。在此期间,即使按钮产生了几个连续的负脉冲,但消抖电路输出仍保持低电平。2016-12-176?输出有效信号如何定时??可以使用加法计数器来实现,定时的长短可根据按钮的实际抖动时间来确定(这里定为120ms)。?pbn不是电平信号,应使用一个中间变量enable来控制计数。?用加法计数器实现输出信号定时,用if-else语句描述?当pbn有效或enable为“1”时(靠pbn来启动计数,用enable来维持记数),计数器加1计数;而当计到121时,使计数器清零。否则当pbn无效,且enable为"0"时,计数器清零。2016-12-177?采用阻塞赋值语句描述?当计数器的值=0时,signal 为“1”,enable 为“0”;而在计数器的值不为0时,signal 为“0”,enable 为“1”。响应pbn信号,signal由“1”变为“0”2016-12-178signal保持低电平的时间为120ms120ms2016-12-179?采用Verilog HDL语言设计此按钮消抖电路。?选择Cyclone系列的EP1C12Q240C8,对设计项目进行编译和时序仿真。?若仿真波形出现毛刺,试分析原因并修改程序,消除毛刺。?提示:仿真时clock的T = 1ms,Grid Size = 1ms,End Time = 400ms。?采用ModelSim软件进行功能仿真。实验内容2016-12-1710module test_button; reg clk,pbn;wire signal,enable; wire[6:t; button my_button (clk,pbn,t,enable); initial // Clock generator begin clk = 0; #1 forever #1 clk = !clk; //Tclk = 2ns end initial// Test stimulus begin pbn = 1; #12 pbn = 0; #6 pbn = 1; #4 pbn = 0; #2 pbn = 1; #2 pbn = 0; #2 pbn = 1; #260 pbn = 0; #4 pbn = 1; #4 pbn = 0; #2 pbn = 1; #2 pbn = 0; #2 pbn = 1; #800 $stop; //Stop simulation at 800ns. end initial $monitor($stime,, clk,, pbn,,, cnt,,,enable,,,signal);endmodule 在测试文件中时钟激励的周期设为2ns(相当于实际的1ms),在QuartusⅡ中仿真时End Time = 400ms,则这里仿真结束时间设为800ns(相当于实际的400ms)。