verilog键盘

verilog键盘,第1张

你的应该是那种老式的键盘,4*4的行列式扫描键盘,先输入行信息,在分别对列进行扫描,确定是哪一列。

你把你的代码发上来看看么。

其实你就一个按键,为啥用键盘,一个简单的pushbutton不就行了。。。

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语句,个人认为你的代码会完全功能不正常的

熄灭了一下说明是检测到断码F0的,为什么马上有亮了,那就很简单了

if(buffer的值是F0) //检测到断码

led = 熄灭

else //不再发送断码或者你的buffer值已经更新

led = 点亮

熄灭时间是根据你的buffer的值持续为F0的时间来判断的,松开后,buffer值不再是F0,LED马上又亮了,那么就代表LED应该只会持续亮一个时钟周期或者几个时钟周期,具体buffer是什么值以及LED持续熄灭时间,可能要看你的代码以及PS2协议规定。

所以,要亮就比较简单了。

直接检测到断码后,熄灭LED,然后保持LED,再到下一次按下即检测到通码后点亮并保持

这种可以用状态机实现,肯定是灭-亮-灭的循环。空闲状态LED保持熄灭。这里就要多一步检测通码,具体实现可以根据需求来改

case(LED_STATE)

IDLE : begin

if(buffer=通码) begin

LED<= 1'b1

LED_STATE <= LED_High

end

else begin

LED<= 1'b0

LED_STATE<= IDLE

end

end

LED_High : begin//在此状态检测断码,如果没有检测到,LED则保持High

if(buffer=断码) begin

LED<= 1'b0 //熄灭

LED_STATE<= LED_Low

end

else begin

LED<= 1'b1 //保持1

LED_STATE<= LED_STATE

end

end

LED_Low : begin

if(buffer=通码) begin

LED<= 1'b1

LED_STATE <= LED_High

end

else begin //不检测到通码则保持熄灭

LED<= 1'b0

LED_STATE<= LED_STATE

end

end

default:

endcase


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12092352.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存