本章目录:
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
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得收藏+评论!!!
先写到这里,之后有什么再补充。一键三连,谢谢大家。