异步复位同步释放

一:同步复位

1、代码

module system_ctrl
//==================<端口>==================================================
(
//globel clock ----------------------------------
input  wire                 clk                 , //时钟,50Mhz
input  wire                 rst_n               , //复位,低电平有效
//user interface --------------------------------
input  wire                 a                   , //输入信号
output reg                  b                     //输出信号
);

//==========================================================================
//==    同步复位,rst_n作为外部信号输入,clk全局时钟称为“同步时钟”
//==========================================================================
always @(posedge clk) begin
    if(!rst_n)
        b <= 0;
    else
        b <= a;
end



endmodule

2、RTL视图

3、优点

①降低了亚稳态的出现概率;

②可以使所设计的系统成为100%的同步时序电路,这将大大有利于时序分析,并且综合出来的fmax一般较高;

③因为它只有在时钟有效沿到来时才有效,所以可以滤除高于时钟频率的毛刺。

4、缺点

①复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务,同时还要考虑clk skew、组合逻辑路径延时、复位延时等因素;

②由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以倘若采用同步复位,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费较多的逻辑资源。

二:异步复位

1、代码

module system_ctrl
//==================<端口>==================================================
(
//globel clock ----------------------------------
input  wire                 clk                 , //时钟,50Mhz
input  wire                 rst_n               , //复位,低电平有效
//user interface --------------------------------
input  wire                 a                   , //输入信号
output reg                  b                     //输出信号
);

//==========================================================================
//==    异步复位,rst_n信号和clk全局时钟信号共同称为“异步时钟”
//==========================================================================
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        b <= 0;
    else
        b <= a;
end



endmodule

2、RTL视图

3.优点

①大多数目标器件的DFF都有异步复位端口,因此采用异步复位可以节省资源;

②设计相对简单;

③异步复位信号识别方便,并且可以很方便地使用FPGA的全局复位端口。

4.缺点

①在复位信号释放(Release)时容易出现问题。具体来说,倘若复位释放时恰好在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致不稳定;

②复位信号容易受到毛刺的影响。这是由于时钟抖动或按键触发时的硬件原因造成的

三、异步复位的同步化设计

1、代码

module system_ctrl
//==================<端口>==================================================
(
//globel clock ----------------------------------
input  wire                 clk                 , //时钟,50Mhz
input  wire                 rst_n               , //复位,低电平有效
//user interface --------------------------------
input  wire                 a                   , //输入信号
output reg                  b                     //输出信号
);

//==========================================================================
//==    异步复位的同步化设计
//==========================================================================
reg        sys_rst_n;

always @(posedge clk) begin
    if(!rst_n)
        sys_rst_n <= 0;
    else
        sys_rst_n <= rst_n;
end

always @(posedge clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        b <= 0;
    else
        b <= a;
end



endmodule

 2、RTL视图

3.理解

①所谓“异步复位”是针对D触发器的复位端口,它是异步的,但是设计中已经同步了异步复位信号,所以这只是某种意义上的“异步复位”。

②所谓“同步释放”,实际上是由于我们设计了同步逻辑电路,外部复位信号不会在出现释放时与clk信号竞争,整个系统将与全局时钟clk信号同步

四:异步复位同步释放

所谓异步复位和同步释放,是指复位信号是异步有效的,即复位的发生与clk无关。后半句“同步释放”是指复位信号的撤除(释放)则与clk相关,即同步的

module system_ctrl
//==================<端口>==================================================
(
//globel clock ----------------------------------
input  wire                 clk                 , //时钟,50Mhz
input  wire                 rst_n               , //复位,低电平有效
//user interface --------------------------------
input  wire                 a                   , //输入信号
output reg                  b                     //输出信号
);

//==========================================================================
//==    异步复位的同步化设计
//==========================================================================
reg        sys_rst_n_r;
reg        sys_rst_n;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        sys_rst_n_r <= 0;
        sys_rst_n   <= 0;
    end
    else begin
        sys_rst_n_r <= 1;
        sys_rst_n   <= sys_rst_n_r;
    end
end

always @(posedge clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        b <= 0;
    else
        b <= a;
end



endmodule

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值