我是靠谱客的博主 故意早晨,这篇文章主要介绍复位电路设计1.1 概念1.2 为什么需要复位电路1.3 FPGA的复位电路1.4 同步复位和异步复位1.5 异步复位同步释放1.6 案例----按键消抖,现在分享给大家,希望可以做个参考。

复位电路

  • 1.1 概念
  • 1.2 为什么需要复位电路
  • 1.3 FPGA的复位电路
  • 1.4 同步复位和异步复位
  • 1.5 异步复位同步释放
  • 1.6 案例----按键消抖

1.1 概念

复位指的是将寄存器恢复到默认值,一般包括同步复位和异步复位。

1.2 为什么需要复位电路

数字电路中寄存器和RAM在上电之后默认的状态和数据是不确定的,使用复位功能将寄存器复位到初始状态0(寄存器也可以设置上电复位为1)、将RAM的数据复位到初始化0。

1.3 FPGA的复位电路

FPGA中有上电复位功能,也就是POR(power on reset),内部的商店检测模块检测到电源电压超过检测门限后,产生一个上电复位脉冲送给所有的寄存器,来进行复位操作。

1.4 同步复位和异步复位

复制代码
1
2
3
同步复位,指的是当 时钟上升沿 检测到 复位信号,执行复位操作,有效的时钟沿是前提。 异步复位,指的是无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。当时钟上升沿检测到复位信号,执行复位操作。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
`timescale 1ns / 1ps /// 同步复位 如下: always @ (posedge clk) begin if (rst_n == 1'b0) signal <= 1'b0; else signal <= a; 异步复位 如下: always @ (posedge clk or negedge rst_n) begin if (rst_n == 1'b0) signal <= 1'b0; else signal <= a;

1.5 异步复位同步释放

目的是为了防止复位信号撤除时,可能产生亚稳态

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
`timescale 1ns / 1ps /// 异步复位同步释放 如下: always @ (posedge clk or negedge rst_n) begin if (!rst_n) begin rst_1 <= 1'b0; rst_2 <= 1'b0; end else begin rst_1 <= 1'b1; rst_2 <= 1'b0; end end assign rst_n = rst_2 ; always @ (posedge clk or negedge rst_n) if(rst_n == 1'b0) signal <= 1'b0; else signal <= a ;

1.6 案例----按键消抖

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
`timescale 1ns / 1ps /// 按键消抖 如下: module key_debounce( input clk , input key , output rst_n ); reg key_reg ; reg [31:0] delay_cnt ; reg key_value; always @ (posedge clk ) begin key_reg <= key ; if(key_reg != key) delay_cnt <= 32'd1000000 ; else if(key_reg == key) begin if(delay_cnt > 32'd0) delay_cnt <= delay_cnt - 1'b1 ; else delay_cnt <= delay_cnt ; end end always @ (posedge clk) begin if(delay_cnt == 32'd1) begin key_value <= key ; end else begin key_value <= rst_n ; end end assign rst_n = key & key_value ; endmodule 仿真代码: module tb_key(); reg clk ; reg key ; wire rst_n; initial begin clk = 1'b0 ; key = 1'b1 ; #200 key = 1'b0 ; #200 key = 1'b0 ; #200 key = 1'b1 ; #200 key = 1'b1 ; #200 key = 1'b1 ; end always #10 clk = ~clk ; key_debounce key_debounce_inst( .clk (clk), .key (key), .rst_n(rst_n) ); endmodule

最后

以上就是故意早晨最近收集整理的关于复位电路设计1.1 概念1.2 为什么需要复位电路1.3 FPGA的复位电路1.4 同步复位和异步复位1.5 异步复位同步释放1.6 案例----按键消抖的全部内容,更多相关复位电路设计1.1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部