Verilog仿真时总是边沿触发 , 怎样改为电平触发 因为我模拟按键的时候while( (!k0) ) ;总是直接过去了

//定义输入输出inputreset;inputen,clr;inputk0,k1,k2,k3,k4,k5;output[16:0]code;//定义类型reg[15:0... //定义输入输出 input reset ; input en,clr; input k0,k1,k2,k3,k4,k5 ; output [16:0] code ; //定义类型 reg [15:0] code ; reg [3:0] temp ; always @( reset or clr or temp or en or k0 or k1 or k2 or k3 or k4 ) begin if( (!reset) || (!clr) ) begin code = 16'h0000; end else if(en && ( (!k0)||(!k1)||(!k2)||(!k3)||(!k4) )) begin while( (!k0)||(!k1)||(!k2)||(!k3)||(!k4) ) ;//这里直接跳过了,应该是仿真边沿触发的原因 if(code[3:0]!=temp[3:0]) begin code = code <<4 ; code[3:0] = temp[3:0] ; end while( (k0)&&(k1)&&(k2)&&(k3)&&(k4) ) ; end end always @( en or k0 or k1 or k2 or k3 or k4 or k5) begin if(en) begin if(!k5 && !k0) begin while(!k0) ; temp<=4'b0000 ; end else if(!k5 && !k1) begin while(!k1) ; temp<=4'b0001 ; end else if(!k5 && !k2) begin while(!k2) ; temp<=4'b0010 ; end else if(!k5 && !k3) begin while(!k3) ; temp<=4'b0011 ; end else if(!k5 && !k4) begin while(!k4) ; temp<=4'b0100 ; end else if(k5 && !k0) begin while(!k0) ; temp<=4'b0101 ; end else if(k5 && !k1) begin while(!k1) ; temp<=4'b0110 ; end else if(k5 && !k2) begin while(!k2) ; temp<=4'b0111 ; end else if(k5 && !k3) begin while(!k3) ; temp<=4'b1000 ; end else if(k5 && !k4) begin while(!k4) ; temp<=4'b1001 ; end end end 展开
 我来答
班丘元绿36
2016-05-23 · TA获得超过694个赞
知道小有建树答主
回答量:810
采纳率:100%
帮助的人:219万
展开全部
下降沿时刻不也就是低电平时刻,波形没有问题。按键是有抖动的,逻辑上需要设计多次检测才可以认为是低电平,
追问

但是Verilog这里的while,感觉不像单片机里的while一样 ,等到它变成高电平才放行啊,,,,,, 就是while(!k0) ,k0还是低电平的时候,就跳出while了, 这里不是应该高电平才能出循环吗

追答
程序太乱,懒得看,多个分支推荐用case语句,if语句套while(不可综合语句,用在仿真中)语句,有阻塞语句,有非阻塞语句,不知道综合后能成什么样。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式