关于fpga的复位

转载 2015年11月18日 21:11:28

上电自动复位

原理上很简单,写一个复位模块,等待一段稳定时间,将复位信号拉低一段足够长的时间,再将复位信号拉高。

如下Verilog源码,外部按键复位也将作为模块的一个引脚输入,用于异步的全局复位操作,正常的复位操作要进行,必须要求外部有一个短暂的脉冲作用在rst_n信号上,这可以通过按键电路中的RC电路实现。

/**************************************
*  功能:上电复位模块
*  输入参数:
*         clk: 50M 时钟输入
*         rst_n:外部按键全局复位信号
*  输出参数:
*         sys_rst_n:系统全局同步复位信号
***************************************/
module    reset
(
    input    clk,
    input    rst_n,
    output   sys_rst_n
);

//------------------------------------------
// Delay 100ms for steady state
reg    [22:0] cnt;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt <= 0;
    else
        begin
        if(cnt < 23'd50_00000) //100ms
            cnt <= cnt+1'b1;
        else
            cnt <= cnt;
        end
end

//------------------------------------------
//rst_n synchronism
reg    rst_nr0;
reg    rst_nr1;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        begin
        rst_nr0 <= 0;
        rst_nr1 <= 0;
        end
    else if(cnt == 23'd50_00000)
        begin
        rst_nr0 <= 1;
        rst_nr1 <= rst_nr0;
        end
    else
        begin
        rst_nr0 <= 0;
        rst_nr1 <= 0;
        end
end

assign    sys_rst_n = rst_nr1;

endmodule

按键手动复位电路

不使用专用芯片的参考低电平复位电路如下:

reset1

电路中的复位管脚一端连接到FPGA的某个普通通用管脚,这样电路中的RC电路将产生上面Verilog代码中的rst_n上电低脉冲,这就是本文开头说自动上电复位和硬件按键复位相辅相成。

请注意两个电阻的值,R21要是R22的两个数量级以上,这样才能保证按键按下后被识别为低电平。

手动复位过程中为保证按键复位的稳定性,还可以修改上面的Verilog代码进行按键消抖检测。下面是抓到的按键在闭合的时候的波形:

key_bounce

按键在几个us之内就能达到低电平,该期间触点抖动比较严重。

module RMV_BJ (
    BJ_CLK,    //采集时钟,40Hz
    RESET,     //系统复位信号
    BUTTON_IN, //按键输入信号
    BUTTON_OUT //消抖后的输出信号
);
input B_CLK;
input RESET;
input BUTTON_IN;
output BUTTON_OUT;
reg BUTTON_IN_Q, BUTTON_IN_2Q, BUTTON_IN_3Q;

always @(posedge BJ_CLK or negedge RESET)
begin
    if(~RESET)
    begin
        BUTTON_IN_Q <= 1'b1;
        BUTTON_IN_2Q <= 1'b1;
        BUTTON_IN_3Q <= 1'b1;
    end
    else
    begin
        BUTTON_IN_Q <= BUTTON_IN;
        BUTTON_IN_2Q <= BUTTON_IN_Q;
        BUTTON_IN_3Q <= BUTTON_IN_2Q;
    end
end

wire BUTTON_OUT = BUTTON_IN_2Q | BUTTON_IN_3Q;

endmodule

除了上面简单的复位电路,还可使用CAT811/TPS3823-33等专门的复位芯片,可以免去按键按键消抖的操作。

FPGA经验总结

1 数字电路设计中的几个基本概念: 1.1 建立时间和保持时间: 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿...
  • xl48508600
  • xl48508600
  • 2016-02-15 18:00:42
  • 4111

FPGA之verilog第一天学习(00011101序列产生器)

module serilize_gen( input i_sys_clk, output data_out ); //产生复位; reg [3:0] rst_cnt = 4'd0; ...
  • dongkobe
  • dongkobe
  • 2017-06-22 23:49:32
  • 397

FPGA的复位

关于FGPA的复位 当初开始学FPGA的时候,总是疑惑:FPGA不是没有复位管教么,但总在always看到有复位信号。这个复位信号(我们暂且称为rst_n)从哪里来? 实际上是可以从两个方...
  • xiahouzuoxin
  • xiahouzuoxin
  • 2014-04-06 19:35:55
  • 12524

FPGA常用复位处理比较

原文地址 : http://blog.163.com/qingyu_1984/blog/static/1444145032012620112858498/ 一、介绍:    同步复位:顾名思义,...
  • wu_yi_xiang
  • wu_yi_xiang
  • 2016-12-06 14:41:15
  • 1449

FPGA工程师的个人工作经历总结

很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一些弯路。只是公司里的事情很多,最近经常加班,所以一直...
  • paul123456789io
  • paul123456789io
  • 2017-06-26 13:53:13
  • 1874

FPGA

FIFO的使用非常广泛,一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,假设其AD采集的速率为16位100K SPS,那么每秒的数据量为100K×16b...
  • xiaoqucanyang
  • xiaoqucanyang
  • 2015-12-27 16:57:54
  • 214

在FPGA开发中尽量避免全局复位的使用?

2012-06-24 14:34 最近几天读了Xilinx网站上一个很有意思的白皮书(white paper,wp272.pdf),名字叫《Get Smart About Reset:T...
  • shengzhuzhu
  • shengzhuzhu
  • 2014-06-09 21:38:02
  • 8666

FPGA之同步复位与异步复位(1)

一个简单的异步复位的例子  1 module test 2 ( 3  input clk, 4  input rst_n, 5  input data_in, 6  output re...
  • shshine
  • shshine
  • 2016-09-06 17:42:31
  • 1787

Verilog基础知识3(门控时钟及FPGA时钟使能处理)

需求说明:Verilog设计 内容       :第一部分  门控时钟                   第二部分  门控时钟和时钟使能的理解(附代码) 来自       :时间的诗 ...
  • Times_poem
  • Times_poem
  • 2016-07-13 13:27:05
  • 5334

FPGA100个值得注意的要点

原文来自:http://www.amobbs.com/thread-5483066-1-1.html 1.FPGA不是编程语言,而是一种可综合的硬件描述语言。 2.Verilog 支持两种...
  • skywn
  • skywn
  • 2015-04-06 15:30:08
  • 1896
收藏助手
不良信息举报
您举报文章:关于fpga的复位
举报原因:
原因补充:

(最多只允许输入30个字)