题解 | #边沿检测#

边沿检测

https://www.nowcoder.com/practice/fed4247d5ef64ac68c20283ebace11f4

边沿检测
本文所有思路根据FPGA探索者的思路仿真模拟的

本题解题思路只有一拍,相对实际应用而言,可能会有毛刺会让一拍判断失误。所以考虑两排来判断是否为上升沿或者下降沿。
其中,对data_r1记录为时钟上升沿时,data_r1 = a。而将 #clk data_r2 = ->a用来表示将data_r2延迟一个clk进行打拍。
通过手绘波形图分析,在data_r1=1,data_r2 = 0时对应的为上升沿,当data_r1 = 0, data_r2 = 1时为下降沿,因为data_r1和data_r2之间存在一个clk的时延,则记录下的上升信号与下降信号的波形宽度至少为一个clk,可以保证对信号更好的判断,减少判断失误。
最后贴一下代码。(该代码使用其他仿真工具验证的,并不适用该题)
module部分
`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	output reg num,
	output reg rise,
	output reg down
);
reg data_r1,data_r2;
always @(posedge clk or negedge rst_n) 
if(!rst_n) begin data_r1 <= 1'b0; data_r2 <= 1'b0; end
else begin #1 data_r1 <= a; data_r2 <= data_r1; end

always @(posedge clk or negedge rst_n)  
if(!rst_n) begin rise <= 1'b0; down <= 1'b0;num <= 1'b0; end
else if(data_r1==1'b1 && data_r2==1'b0) begin rise <=1'b1;down <=1'b0;num <= 1'b1; end
else if(data_r1==1'b0 && data_r2==1'b1) begin down <=1'b1;rise <=1'b0;num <= 1'b1; end
else begin rise <= 1'b0;down <= 1'b0;num <=1'b0; end

endmodule
testbech部分
`timescale 1ns/1ns
module testbench();
	reg a;
	reg clk,rst_n;
	wire rise,down,num;
initial begin
	clk = 0;
	rst_n = 0;
end
initial begin
clk = 1'b0;
rst_n = 1'b0;
#20 rst_n = 1'b1;
end
always #10 clk <= !clk;

always @(posedge clk or negedge rst_n)
if(!rst_n) a <= 1'b0;
else #3 a <= {$random}%2;

edge_detect dut(
	.clk(clk),
	.rst_n(rst_n),
	.a(a),
	.num(num),
	.rise(rise),
	.down(down)
);

endmodule
仿真波形




全部评论
什么情况的毛刺会让一拍失误呢?小于一个周期且被时钟上升沿采样的吗?
点赞 回复 分享
发布于 2023-08-07 23:36 湖北

相关推荐

不愿透露姓名的神秘牛友
07-11 17:10
什么素质,我请问呢,要掉小珍珠了。。。又憋屈又生气
苍蓝星上艾露:给它们能的,一群dinner牛马挥刀向更弱者罢了。我写的开源求职AI co-pilot工具,优化你的简历,找到你匹配的岗位,定制你的简历,并让你做好面试准备https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务