关于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开发中尽量避免全局复位的使用?

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

小梅哥fpga学习笔记之NIOS II CPU复位异常的原因及解决方案

http://bbs.ednchina.com/BLOG_ARTICLE_3029418.HTM?source=sina 近期在用nios ii做项目时,发现一个奇怪的现象,在N...
  • zd_2010
  • zd_2010
  • 2015年05月27日 10:31
  • 1476

FPGA基础之异步复位和同步释放电路的详细解释

如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。 电路目的:方式复位信号撤除时产生亚稳态事件。 所谓异...
  • lg2lh
  • lg2lh
  • 2013年01月13日 13:12
  • 13960

FPGA异步复位同步释放的详细解释

假设rst_async_n撤除时发生在clk上升沿,如果如下电路则可能发生亚稳态事件。 如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的...

xilinx FPGA复位浅析

复位在FPGA设计中的重要性不言而喻, Altera的FPGA,xilinx 7系列的FPGA 同步复位,异步复位,建立时间,保持时间,恢复时间,撤销时间 硬件乘法器,BlockRAM,srl16,s...

FPGA异步复位同步释放解析

原文URL:http://blog.csdn.net/verylogic/article/details/14482267 FPGA开发中,一种最常用的复位技术就是“异步复位同步释放”,这个...

FPGA设计中的复位问题

复位在FPGA设计中占有重要地位,典型的FPGA设计中复位可以分为异步复位,同步复位,异步复位同步置位异步复位  完全的异步复位是指在异步地对触发器复位和置位,完全不顾时钟的存在,异步复位举例如下:m...

Xilinx FPGA复位逻辑处理小结

Xilinx FPGA复位逻辑处理小结 1. 为什么要复位呢? (1)FPGA上电的时候对设计进行初始化; (2)使用一个外部管脚来实现全局复位,复位作为一个同步信号将所有存储单...

Xilinx FPGA嵌入式开发(二) - XPS中的时钟模块和复位模块

Clock Generator模块: 端口说明:CLKIN为外部输入时钟,如果是外部差分时钟信号,在MHS文件的PORT行指定*_p、*_n管脚均为同样的Net,如dcm_clk_s,差分极...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于fpga的复位
举报原因:
原因补充:

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