【HDLBits】~ 边沿检测(Edgedetect)

1. 题目

题目

解题思路

这个题检测的是 上升沿,而且是检测到之后,延迟一个周期拉高输出。这是一道经典的题目,思路就是打一拍之后(用触发器就行),把输入取反,之后再与输入相与就可以了。

注意:大家一定要注意的是,非阻塞赋值是等到下个有效信号来临的时候才会完成赋值哦!!!
并不是 <= 符号表示的意思是延迟一个时钟 周期,其实它和=表示赋值是一样的,只不过前者是同时赋值,后者是一步一步的赋值,同时赋值就可以体现到 “打一拍”的效果!!!我认为初学者应该注意一下。

这里可以参考我之前写的一篇文章
点击查看

2. 代码实现

方式一:

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

    reg [7:0] temp_reg;
    
    always @ (posedge clk) begin
       temp_reg <= in;
        pedge <= ~temp_reg & in;
    end
endmodule

方式二:

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

    reg [7:0] save_in, delay_in;
    
    always @ (posedge clk) begin
        save_in <= in;
        delay_in <= save_in;
    end
    
    assign pedge = save_in & (~delay_in);
endmodule

3. 拓展

3.1 那如何实现下降沿的检测呢?

3.1.1 思路

其实思路也很简单,就是 输入信号 打一拍之后(同样是触发器),将输入信号取反,二者相 与 即可实现!!

3.1.2 代码实现

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

    reg [7:0] temp_reg;
    
    always @ (posedge clk) begin
       temp_reg <= in;
        pedge <= temp_reg & ~in;
    end
endmodule

3.2 那如何实现上升沿和下降沿一起检测呢?

3.2.1 思路

输入信号 打一拍(触发器),再与输入信号 相 异或 得到!!!

3.2.2 代码实现

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

    reg [7:0] temp_reg;
    
    always @ (posedge clk) begin
       temp_reg <= in;
        pedge <= temp_reg ^ in;
    end
endmodule

声明

本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!

本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!

如果觉得对你有用的话,记得收藏+评论!!!

先写到这里,之后有什么再补充。一键三连,谢谢大家。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值