Verilog实现在某个信号的上升沿激活另一个信号一段时间

今天在写Verilog代码的时候遇到了一个棘手的问题。

我想要实现的目标是:在一个sensor信号上升时,激活一个复位信号rst_light。但是又不能让它一直保持激活状态,必须让它在激活一小段时间后再变为未激活的状态。波形图大概是长这样:

                         __________________________
sensor     _____________|  
                          __
rst_light  ______________|  |_______________________

尝试上网查询,但是没有合适的解决方法
又尝试去问AI,但是AI给的答复,会让rst_light在sensor激活后一直保持激活的状态。从而使得它对应的模块无法正常工作。总之就是没有解决问题。

后来我想到了用这样的方式解决:

always @(posedge sensor) rst_light <= 1'b1;

always @(posedge sys_clk)
    if(rst_light == 1'b1)
        rst_light <= 1'b0;

这种方式从逻辑上行得通,但是出现了两个always语句一起对rst_light赋值的问题。综合的时候会报错。

经过我一天的思考,终于找到了这个方法:

reg sensor_mid;

always @(posedge sys_clk) sensor_mid <= ~sensor;
assign rst_light = sensor_mid && sensor;

这个方法使用了一个中间变量sensor_mid,它是sensor延迟再取反得到的。这样就能使得sensor和sensor_mid中间产生一点空隙,而这点空隙正好能为rst_clk信号提供一小段存在的时间。从而解决了问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值