设计背景:
在我们工程设计中,有时会需要到上升沿和下降沿这么一个说法,通过上升沿和下降沿来驱动一个电路,那么学习边沿检测就非常的重要了。
设计原理:
在学习边沿检测前我们先学习一下下面的电路,这样方便我们学习,边沿检测。
这个电路的意思就是,输入一个信号后我们经过一个寄存器,然后把这个寄存器的输出,和下次输出的值取反后相与,那么我们就可以这么想,如果一个高平的值经过这个寄存器后延迟一个上升沿后输出也为高电平,那么当输出的时候会有一个新的电平值,也就是一个电平的到来,然后通过低电平的值取反后和寄存器输出的高电平值得与得到一个高电平的脉冲值,然后对低电平转化为高电平也是一样的道理,这样我们就可以得到时钟上升沿和下降沿的高脉冲,这样就得到了我们设计的目的。
设计架构图:
设计代码:
设计模块
0moduleedge_jiance(clk,rst_n,signle,nege_dge,pose_dge);
1
2 inputclk;
3 inputrst_n;
4 inputsignle;//输入信号
5
6 outputnege_dge;//输出下降沿的脉冲
7 outputpose_dge;//输出上升沿的脉冲
8
9 reg[1:0]signle_s;
10 always@(posedgeclk ornegedgerst_n)
11 if(!rst_n)
12 begin
13 signle_s <=2'b11;
14 end
15 else
16 begin
17 signle_s[0]<=signle;//把输入信号给一个寄存器
18 signle_s[1]<=signle_s[0];
19 end
20
21 assignpose_dge =signle_s[0]&&~signle_s[1];//取反相与得到上 升沿的高脉冲
22 assignnege_dge =~signle_s[0]&&signle_s[1];//取反相与得到下 降沿的高脉冲
23endmodule
测试模块
0`timescale1ns/1ps
1
2moduleedge_tb();
3
4 regclk;
5 regrst_n;
6 regsignle;
7
8 wirenege_dge;
9 wirepose_dge;
10
11 initialbegin
12 clk =1'b1;
13 rst_n =1'b0;
14 signle <=1'b1;//复位赋值
15
16 #100.1rst_n =1'b1;
17
18 #36signle <=1'b1;//模拟下降沿
19 #36signle <=1'b0;
20
21 #100
22 #36signle <=1'b0;//模拟上升沿
23 #36signle <=1'b1;
24
25 #100
26 $stop;
27 end
28
29 always#10clk =~clk;//产生晶振时钟
30
31 edge_jiance edge_dut(//模块例化
32 .clk(clk),
33 .rst_n(rst_n),
34 .signle(signle),
35 .nege_dge(nege_dge),
36 .pose_dge(pose_dge)
37 );
38endmodule
仿真图:
我们模拟的上升沿和下降沿在仿真中可以清楚的看到,然后我们通过边沿检测电路,可以得出我们一个高电平的上升沿,和一个低电平的下降沿。
-
FPGA
+关注
关注
1629文章
21729浏览量
603007
发布评论请先 登录
相关推荐
评论