
上面就是一个简单的去抖动程序。时钟的频率和去除抖动的
时间自皮滚姿己根据产品实际确定。程序的思路简而言之,如果输入电平改变,就开始计数器计数,只有到达一定时间才认为是真正的备并变化,这时候输出才随之变化;否则就认为是抖动,输出燃绝保持不变。modulemul3_testbench//定义一个没有输入输出端口的测试平台rega2,a1,a0,b2,b1,b0//被测模块的input端口,改为对应的reg寄存器做输入
信号wirep5,p4,p3,p2,p1,p0//被测模块的output端口,改为对应的告老乎wire型initialbegin//初始化所有输入信号的寄存器值a2=0a1=0a0=0b2=0b1=0b0=0#50//一般延迟较长时间后,应该使复位信号不复位系统正常工作,但你没有复位信号end//初始化模块结束后一般时序电路仿真是产生时钟信号,//这是纯组合逻辑没有时钟信号就省略了//然后就袜悉可以根据你所需要验证的功能在此位置编写initial块或always块给reg型//的输入信号赋值的相关逻辑,观察wire型输入信号的值//---------------------------调用被测对象,格式如一般元件调用-------------------mul3DUT(.a2(a2),.a1(a2),.a0(a0),.b2(b2),.b1(b2),.b0(b0),.p5(p5),.p4(p4),.p3(p3),.p2(p2),.p1(p1),.p0(p0))endmodule//最后的提示,
你的程序里定义了整数型变量,其实是不好的用法,甚至不能被正确综合,//可以用等值的reg型变量来替代,即使你定含陪义成整数型,实际上也是被综合成reg型的,//另外,一般可综合代码中最好不要用for语句,个人认为你的代码会完全功能不正常的你没有加唯行按键消抖,用状态切换(状态机),调整按键消抖时间在指肆哗5MS-10MS就差不多了,这部分程序是用在产品上的,裁减了下,不懂请留言:
input clk //10MHz
input [1:0]KEY
reg [1:0] KEY_BUFFER
reg [2:0] state
reg[15:0] dly_reg
always@(posedge clk)
begin
begin
KEY_BUFFER<=KEY //读取键盘
case(state)
3'b001: if (KEY_BUFFER==2'b01) 判断
begin
state <= 3'b011
end //
else if(KEY_BUFFER==2'b10)
begin
state <= 3'b011
end //
else state <= 3'b001
3'b011:if(dly_reg>=16'b1100001101010000) //延时
begin
state <= 3'b100
dly_reg <=16'雹轿d0
end
else
begin
dly_reg<=dly_reg+1'b1
end
3'b100: if ((KEY_BUFFER==2'b11))//在判断
begin
end
else if ((KEY_BUFFER==2'b11))//--
begin
else
state <= 3'b101
3'b101: begin state <= 3'b001end //
endcase
end
end
评论列表(0条)