Board logo

标题: verilog边沿触发的疑问 [打印本页]

作者: anotherchen    时间: 2006-6-10 12:16     标题: verilog边沿触发的疑问

input clk,on;


output xout;


reg xx;


assign xout=xx;


always@(posedge clk)


begin


if(on)


xx=1;


else


xx=0;


end


如果on是一个连续信号,即高电平保持一段时间


按上述程序,xx要等到on边沿变低才可以为0


但我想xx不要通太长,几个clk后就要为0


应该怎样出来好?


我也不想多加一个reg 来作计数将它变回0


能否实现:on上升沿xx=1,否则xx=0?


 


作者: stone133    时间: 2006-6-11 20:36

1。“但我想xx不要通太长,几个clk后就要为0”,一个clk后为0还有办法,你要求几个就得要计数器了,因为“几个”是你定的,硬件不知道“几个”是多少,所以还得计数;
2。“on上升沿xx=1,否则xx=0”这个应该是实现不了的,上升沿在逻辑里面是没有长度的,你所能得到的最小信号也得是半个时钟周期那么长;
作者: anotherchen    时间: 2006-6-12 10:31

确实不复杂
其实在另一个程序里我想实现这个功能罢了
就是,on1为开机信号,off1为关机信号
关机信号优先
我的疑问就是图中ld-on这个信号
ld-on一直为0的话,,不就一直有关机信号拉
所以我就想用上升沿来处理这个关机的信号

或者还有其他更好方法?




作者: anotherchen    时间: 2006-6-12 10:33

[upload=image/bmp]uploadImages/tt.bmp[/upload]
作者: anotherchen    时间: 2006-6-13 10:13

to stone :一个clk后为0还有办法
如果这样应该怎样处理?
作者: stone133    时间: 2006-6-14 12:00

现在论坛有点问题,比较不方便,对不起大家了;
“一个clk后为0还有办法”你让那个判断信号的宽度为一个时钟周期就可以了,这样的话,只有一个时钟能采到这个信号;
具体实现你可以这样:把那个判断信号延迟一个时钟周期,然后取反与未延迟的信号相与得到的信号宽度就是一个时钟周期;

作者: anotherchen    时间: 2006-6-15 16:38


斑竹能看到我发的图么?
请问图中ld-on这个信号
ld-on一直为0的话,,不就一直有关机信号拉
所以我就想用上升沿来处理这个关机的信号

或者还有其他更好方法?

作者: stone133    时间: 2006-6-16 08:37

作为时钟,你用边沿触发得到的也不是一个边沿,而是一个有一个时钟周期宽度的信号;
你的意思是想让关机信号平时有效?开机信号来了就开机,然后再马上关机?
作者: anotherchen    时间: 2006-6-17 17:33

不是
我想开机信号就开机
关机信号就关机
然而ld-on却既是开机信号又是关机信号
当ld-on=1开机,ld-on=0关机
作者: stone133    时间: 2006-6-17 23:45

那就是想和电脑开关一样,按一下开机,再按一下关机?
那么做个模2计数器就可以了吧?这样一来,随着ld-on来的次数,在开机和关机之间转换;
作者: anotherchen    时间: 2006-6-20 13:17

不是,,其实只是一个触点而已
当触点闭合--开机
当触点断开--关机
作者: stone133    时间: 2006-6-20 16:24

我觉得lz想要实现的功能和uart中接收时检测开始位的功能差不多,uart是要检测下降沿的到来,lz是要检测上升沿的到来,我的一点想法:
平时关机信号有效(低电平),开机信号来的时候有一个上升沿,关机信号来的时候有一个下降沿,我们要做的就是把他们取出来,
ld_on---------开关机信号
ld_on_delay---开关机信号延时一个时钟周期
开机信号 = ld_on & (!ld_on_delay)
关机信号 = ld_on_delay & (!ld_on)
这样的得到的开关机信号都是一个时钟周期宽度的脉冲;

作者: anotherchen    时间: 2006-6-20 17:30

启发思路中




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0