全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

FPGA学习系列:12. 边沿检测设计

时间:2018-06-13 11:20

人气:

作者:admin

标签:

导读:设计背景: 在我们工程设计中,有时会需要到上升沿和下降沿这么一个说法,通过上升沿和下降沿来驱动一个电路,那么学习边沿检测就非常的重要了。 设计原理 : 在学习边沿检测前我...

设计背景:

在我们工程设计中,有时会需要到上升沿和下降沿这么一个说法,通过上升沿和下降沿来驱动一个电路,那么学习边沿检测就非常的重要了。

设计原理:

在学习边沿检测前我们先学习一下下面的电路,这样方便我们学习,边沿检测。







image.png

这个电路的意思就是,输入一个信号后我们经过一个寄存器,然后把这个寄存器的输出,和下次输出的值取反后相与,那么我们就可以这么想,如果一个高平的值经过这个寄存器后延迟一个上升沿后输出也为高电平,那么当输出的时候会有一个新的电平值,也就是一个电平的到来,然后通过低电平的值取反后和寄存器输出的高电平值得与得到一个高电平的脉冲值,然后对低电平转化为高电平也是一样的道理,这样我们就可以得到时钟上升沿和下降沿的高脉冲,这样就得到了我们设计的目的。

设计架构图:

image.png

设计代码:

设计模块

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

仿真:

我们模拟的上升沿和下降沿在仿真中可以清楚的看到,然后我们通过边沿检测电路,可以得出我们一个高电平的上升沿,和一个低电平的下降沿。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信