低功耗编码之“复位”

文章详细讨论了同步复位和异步复位在电路设计中的优缺点,指出同步复位需要额外的逻辑资源且功耗较大,而异步复位更节省资源但可能导致亚稳态。通过Vivado综合后的实例,展示了两者在功耗上的显著差异:同步复位4.246Wvs异步复位0.362W。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

典型的复位电路,同步复位和异步复位。

同步复位指的是时钟有效沿来临的时候进行复位操作,同步复位使得电路为同步电路,能够利于仿真,缺点是要求复位信号要大于一个周期,否则无法保证成功复位,此外综合出来的电路实际上并没有利用器件的复位端,而是在输入端插入额外的逻辑电路,这样增加了额外的逻辑资源消耗。

异步复位是指的在任何时候只要复位信号有效即可复位,不占用额外的逻辑资源,充分利用器件的复位引脚,但是由于来临和结束时间未知,容易引起亚稳态现象。

二者相比较,同步复位需要引入额外的 MUX 电路控制 RST/S,对资源有一定的占用。因此同步复位的功耗相比较大。

举例代码,通过vivado综合后,比较二者的功耗。

同步复位:

module vld_cnt #(
    parameter CNT_WIDTH = 8
)
(
    input                           clk     ,
    input                           rst_n   ,
    input                           vld_in  ,
    output  reg [CNT_WIDTH-1:0]     cnt_out
);


reg [CNT_WIDTH-1:0] cnt_tmp;

always @ (posedge clk) begin
    if (!rst_n) begin
        cnt_tmp <= {CNT_WIDTH{1'b0}};
    end
    else if (vld_in) begin
        cnt_tmp <= cnt_tmp + 1'b1;
    end
    else if (cnt_tmp >= 8'd8) begin
        cnt_tmp <= {CNT_WIDTH{1'b0}};
    end
    else;
end

always @ (posedge clk) begin
    if (!rst_n) begin
        cnt_out <= {CNT_WIDTH{1'b0}};
    end
    else if (cnt_tmp >= 8'd8) begin
        cnt_out <= cnt_out + 1'b1;
    end
    else;
end

以上代码,8个有效vld_in为一组进行计数,返回有效的组数。信号量都是采用同步复位。

综合后,电路的功耗如下:

异步复位:

module vld_cnt #(
    parameter CNT_WIDTH = 8
)
(
    input                           clk     ,
    input                           rst_n   ,
    input                           vld_in  ,
    output  reg [CNT_WIDTH-1:0]     cnt_out
);


reg [CNT_WIDTH-1:0] cnt_tmp;

always @ (posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt_tmp <= {CNT_WIDTH{1'b0}};
    end
    else if (vld_in) begin
        cnt_tmp <= cnt_tmp + 1'b1;
    end
    else if (cnt_tmp >= 8'd8) begin
        cnt_tmp <= {CNT_WIDTH{1'b0}};
    end
    else;
end

always @ (posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt_out <= {CNT_WIDTH{1'b0}};
    end
    else if (cnt_tmp >= 8'd8) begin
        cnt_out <= cnt_out + 1'b1;
    end
    else;
end

综合后,电路的功耗如下:

同步复位电路总功耗:4.246W,异步复位电路总功耗:0.362W。二者比较明显异步复位电路功耗低于同步复位电路。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值