0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)字電路的復(fù)位可分為哪些

FPGA研究院 ? 來(lái)源:FPGA研究院 ? 2023-05-19 09:05 ? 次閱讀

1、復(fù)位的重要性

數(shù)字電路寄存器RAM 在上電之后默認(rèn)的狀態(tài)和數(shù)據(jù)是不確定的,如果有復(fù)位,我們可以把寄存器 復(fù)位到初始狀態(tài) 0,RAM 的數(shù)據(jù)可以通過(guò)復(fù)位來(lái)觸發(fā) RAM 初始化到全 0。那可能很多人會(huì)問(wèn)為什么是全 0呢?其實(shí)一般邏輯起始都是從 0 開始變化的,這個(gè)是根據(jù)設(shè)計(jì)的需要設(shè)定的一個(gè)值,如果設(shè)計(jì)需要寄存器 上電復(fù)位為 1,也是可以的。還有一種情況是邏輯進(jìn)入了錯(cuò)誤的狀態(tài),通過(guò)復(fù)位可以把所有的邏輯狀態(tài)恢復(fù) 到初始值,如果沒有復(fù)位,那么邏輯可能永遠(yuǎn)運(yùn)行在錯(cuò)誤的狀態(tài)。

因此復(fù)位功能是很重要的一個(gè)功能。數(shù)字電路的復(fù)位通??煞譃椋和綇?fù)位與異步復(fù)位。

2、同步復(fù)位

同步復(fù)位:同步復(fù)位指的是當(dāng)時(shí)鐘上升沿檢測(cè)(有效沿)到復(fù)位信號(hào),執(zhí)行復(fù)位操作,有效的時(shí)鐘沿是前提。

Verilog代碼:

//*******************同步復(fù)位模塊**************************

//-----------端口定義-------------------------------

modulerst_test(

inputclk,//工作時(shí)鐘

inputrst_n,//復(fù)位,低電平有效

inputin,//輸入信號(hào)

outputregout//輸出信號(hào)

);

//-----------輸出模塊-------------------------------

always@(posedge clk )begin

if(!rst_n)

out <= 1'b0;//復(fù)位將輸出置零

else

out <= in;//其他時(shí)候?qū)⑤斎胭x值給輸出

end

endmodule

使用Quartus II綜合出的RTL如下:

a14d4c56-f5d4-11ed-90ce-dac502259ad0.png

可以看到,生成的觸發(fā)器并沒有復(fù)位置位端,而是生成了一個(gè)選擇器,同步復(fù)位信號(hào)rst_n用作了選擇器的使能,從而實(shí)現(xiàn)復(fù)位清零的作用。

用如下Testbench進(jìn)行仿真(復(fù)位時(shí)間不足一個(gè)時(shí)鐘周期、復(fù)位時(shí)間超過(guò)一個(gè)時(shí)鐘周期、一個(gè)高頻復(fù)位毛刺):

//------------------------------------------------

//--同步復(fù)位仿真

//------------------------------------------------

`timescale 1ns/1ns//時(shí)間單位/精度

//------------<模塊及端口聲明>----------------------------------------

module tb_rst_test();

reg clk;

reg rst_n;

regin;

wireout;

//------------<例化被測(cè)試模塊>----------------------------------------

rst_testrst_test_inst(

.clk(clk),

.rst_n(rst_n),

.in(in),

.out (out)

);

//------------<設(shè)置初始測(cè)試條件>----------------------------------------

initial begin

clk = 1'b0;

rst_n <= 1'b0;

in <= 1'b1;

#5

rst_n <= 1'b1;

#6

rst_n <= 1'b0;?

#18

rst_n <= 1'b1;

#39

rst_n <= 1'b0;

#21

rst_n <= 1'b1;

#25

rst_n <= 1'b0;

#3

rst_n <= 1'b1;?

end

//------------<設(shè)置時(shí)鐘>----------------------------------------------

always #10 clk = ~clk;//系統(tǒng)時(shí)鐘周期20ns

endmodule

仿真結(jié)果如下:

a187fcde-f5d4-11ed-90ce-dac502259ad0.png

從仿真結(jié)果可以看到:

第1個(gè)復(fù)位時(shí)間不足一個(gè)時(shí)鐘周期,導(dǎo)致復(fù)位不成功

第2個(gè)復(fù)位時(shí)間超過(guò)一個(gè)時(shí)鐘周期,復(fù)位成功

最后一個(gè)復(fù)位信號(hào)上的高頻毛刺信號(hào)沒有對(duì)系統(tǒng)造成誤復(fù)位

輸出信號(hào)在第一個(gè)時(shí)鐘上升沿到來(lái)之前是未知狀態(tài)

同步復(fù)位電路的優(yōu)點(diǎn):

有利于仿真器的仿真

基本上沒有亞穩(wěn)態(tài)問(wèn)題

可以使所設(shè)計(jì)的系統(tǒng)成為 100%的同步時(shí)序電路,有利于時(shí)序分析

由于只在時(shí)鐘有效電平到來(lái)時(shí)才有效,所以可以濾除高于時(shí)鐘頻率的復(fù)位毛刺

同步復(fù)位電路的缺點(diǎn):

復(fù)位信號(hào)的有效時(shí)長(zhǎng)必須大于時(shí)鐘周期,才能真正被系統(tǒng)識(shí)別并完成復(fù)位任務(wù)。同時(shí)還要考慮延時(shí)因素

大多數(shù)的FPGA的DFF都只有異步復(fù)位端口,采用同步復(fù)位的話,綜合器就會(huì)在寄存器的數(shù)據(jù)輸入端口插入組合邏輯,這樣會(huì)耗費(fèi)邏輯資源

3、異步復(fù)位

異步復(fù)位:異步復(fù)位指的是無(wú)論時(shí)鐘沿是否到來(lái),只要復(fù)位信號(hào)有效,就對(duì)系統(tǒng)進(jìn)行復(fù)位。當(dāng)時(shí)鐘上升沿檢測(cè)到復(fù)位信號(hào),執(zhí)行復(fù)位操作。

Verilog代碼:

//*******************同步復(fù)位模塊**************************

//-----------端口定義-------------------------------

modulerst_test(

inputclk,//工作時(shí)鐘

inputrst_n,//復(fù)位,低電平有效

inputin,//輸入信號(hào)

outputregout//輸出信號(hào)

);

//-----------輸出模塊-------------------------------

always@(posedge clk or negedge rst_n)begin

if(!rst_n)

out <= 1'b0;//復(fù)位將輸出置零

else

out <= in;//其他時(shí)候?qū)⑤斎胭x值給輸出

end

endmodule

使用Quartus II綜合出的RTL如下:

a19f3264-f5d4-11ed-90ce-dac502259ad0.png

可以看到,異步復(fù)位信號(hào)rst_n直接接入了觸發(fā)器的異步復(fù)位端,從而實(shí)現(xiàn)復(fù)位清零的作用。

依然使用之前用的Testbench進(jìn)行仿真,結(jié)果如下:

a1c8c106-f5d4-11ed-90ce-dac502259ad0.png

從仿真結(jié)果可以看到:

只要復(fù)位信號(hào)被置為低電平,就執(zhí)行復(fù)位操作,與時(shí)鐘無(wú)關(guān)

高頻毛刺信號(hào)會(huì)對(duì)系統(tǒng)造成誤復(fù)位

在不考慮亞穩(wěn)態(tài)的前提下,復(fù)位時(shí)間沒有要求

a、在復(fù)位信號(hào)釋放(release)的時(shí)候容易出現(xiàn)問(wèn)題。具體就是說(shuō):倘若復(fù)位釋放時(shí)恰恰在時(shí)鐘有效沿附近,就很容易使寄存器輸出出現(xiàn)亞穩(wěn)態(tài),從而導(dǎo)致亞穩(wěn)態(tài)。

b、復(fù)位信號(hào)容易受到毛刺的影響

異步復(fù)位電路的優(yōu)點(diǎn):

大多數(shù)目標(biāo)器件庫(kù)的dff都有異步復(fù)位端口,因此采用異步復(fù)位可以節(jié)省資源

設(shè)計(jì)相對(duì)簡(jiǎn)單,異步復(fù)位信號(hào)識(shí)別方便,而且可以很方便的使用FPGA的全局復(fù)位端口GSR

異步復(fù)位電路的缺點(diǎn):

復(fù)位信號(hào)容易受到毛刺的影響

因?yàn)槭钱惒竭壿?,無(wú)法避免地存在亞穩(wěn)態(tài)問(wèn)題

關(guān)于異步復(fù)位還需要考慮:

恢復(fù)時(shí)間(Recovery Time)是指異步控制信號(hào)(如寄存器的異步清除和置位控制信號(hào))在“下個(gè)時(shí)鐘沿”來(lái)臨之前變無(wú)效的最小時(shí)間長(zhǎng)度。這個(gè)時(shí)間的意義是,如果保證不了這個(gè)最小恢復(fù)時(shí)間,也就是說(shuō)這個(gè)異步控制信號(hào)的解除與“下個(gè)時(shí)鐘沿”離得太近(但在這個(gè)時(shí)鐘沿之前),沒有給寄存器留有足夠時(shí)間來(lái)恢復(fù)至正常狀態(tài),那么就不能保證“下個(gè)時(shí)鐘沿”能正常作用,也就是說(shuō)這個(gè)“時(shí)鐘沿”可能會(huì)失效。

去除時(shí)間(Removal)是指異步控制信號(hào)(如寄存器的異步清除和置位控制信號(hào))在“有效時(shí)鐘沿”之后變無(wú)效的最小時(shí)間長(zhǎng)度。這個(gè)時(shí)間的意義是,如果保證不了這個(gè)去除時(shí)間,也就是說(shuō)這個(gè)異步控制信號(hào)的解除與“有效時(shí)鐘沿”離得太近(但在這個(gè)時(shí)鐘沿之后),那么就不能保證有效地屏蔽這個(gè)“時(shí)鐘沿”,也就是說(shuō)這個(gè)“時(shí)鐘沿”可能會(huì)起作用。

換句話來(lái)說(shuō),如果你想讓某個(gè)時(shí)鐘沿起作用,那么你就應(yīng)該在“恢復(fù)時(shí)間”之前是異步控制信號(hào)變無(wú)效,如果你想讓某個(gè)時(shí)鐘沿不起作用,那么你就應(yīng)該在“去除時(shí)間”過(guò)后使控制信號(hào)變無(wú)效。如果你的控制信號(hào)在這兩種情況之間,那么就沒法確定時(shí)鐘沿是否起作用或不起作用了,也就是說(shuō)可能會(huì)造成寄存器處于不確定的狀態(tài)。而這些情況是應(yīng)該避免的。所以恢復(fù)時(shí)間和去除時(shí)間是應(yīng)該遵守的。

4、異步復(fù)位、同步釋放

結(jié)合兩種復(fù)位的優(yōu)點(diǎn),可以使用異步復(fù)位、同步釋放設(shè)計(jì),Verilog代碼如下:

//*******************同步復(fù)位模塊**************************

//-----------端口定義-------------------------------

modulerst_test(

inputclk,//工作時(shí)鐘

inputrst_n,//復(fù)位,低電平有效

inputin,//輸入信號(hào)

outputregout//輸出信號(hào)

);

//-----------reg定義-------------------------------

reg arst_n_r;

reg arst_n;

//-----------復(fù)位信號(hào)同步模塊-------------------------------

always@(posedge clk or negedge rst_n)begin

if(!rst_n)begin

arst_n_r <= 1'b0;//復(fù)位將輸出置零

arst_n <= 1'b0;//復(fù)位將輸出置零?

end

else begin

arst_n_r <= 1'b1;//跟接rst_n是一樣的,都是邏輯1

arst_n <= arst_n_r;??

end

end

//-----------輸出模塊-------------------------------

always@(posedge clk or negedge arst_n)begin

if(!arst_n)

out <= 1'b0; ? ?//復(fù)位將輸出置零

else

out <= in; ? ?//其他時(shí)候?qū)⑤斎胭x值給輸出

end

endmodule

綜合出來(lái)的RTL視圖:

a1e4bff0-f5d4-11ed-90ce-dac502259ad0.png

實(shí)際的電路圖如下:

a210c910-f5d4-11ed-90ce-dac502259ad0.png

復(fù)位信號(hào) rst_sync_n 由高拉低時(shí)實(shí)現(xiàn) y 寄存器的異步復(fù)位。同步釋放,這個(gè)是關(guān)鍵,即當(dāng)復(fù)位信號(hào) rst_async_n 撤除時(shí)(由低拉高),由于雙緩沖電路(雙觸發(fā)器)的作用,rst_sync_n 不會(huì)隨著rst_async_n 的 撤除而撤除。假設(shè) rst_async_n 撤除時(shí)發(fā)生在 clk 上升沿,如果不加此電路則可能發(fā)生亞穩(wěn)態(tài)事件,但是加上此電路以后,假設(shè)第一級(jí) D 觸發(fā)器 clk 上升沿時(shí) rst_async_n 正好撤除,(第一個(gè) DFF 此時(shí)是處于亞穩(wěn)態(tài) 的;假設(shè)此時(shí)識(shí)別到高電平;若是識(shí)別到低電平,則增加一個(gè) Delay)則 DFF1 輸出高電平,此時(shí)第二級(jí)觸發(fā)器也會(huì)更新輸出,但是輸出值為前一級(jí)觸發(fā)器 clk 來(lái)之前時(shí)的 Q1 輸出狀態(tài),顯然 Q1 之前為低電平,所以第二級(jí)觸發(fā)器輸出保持復(fù)位低電平,直到下一個(gè) clk 來(lái)之后,才隨著變?yōu)楦唠娖?,即同步釋放?/p>

使用如下Testbench進(jìn)行仿真:


//------------------------------------------------
//--同步復(fù)位仿真
//------------------------------------------------
`timescale 1ns/1ns//時(shí)間單位/精度

//------------<模塊及端口聲明>----------------------------------------
module tb_rst_test();

reg clk;
reg rst_n;
regin;

wireout;

//------------<例化被測(cè)試模塊>----------------------------------------
rst_testrst_test_inst(
.clk(clk),
.rst_n(rst_n),
.in(in),

.out (out)
);

//------------<設(shè)置初始測(cè)試條件>----------------------------------------
initial begin
clk = 1'b0;
rst_n <= 1'b0;
in <= 1'b1;
#25
rst_n <= 1'b1;
#6
rst_n <= 1'b1;
#18
rst_n <= 1'b1;
#39
rst_n <= 1'b0;
#21
rst_n <= 1'b1;
end
//------------<設(shè)置時(shí)鐘>----------------------------------------------
always #10 clk = ~clk;//系統(tǒng)時(shí)鐘周期20ns

endmodule
仿真結(jié)果如下:

a2586392-f5d4-11ed-90ce-dac502259ad0.png



可以看到:復(fù)位是異步進(jìn)行的,一旦復(fù)位信號(hào)為低電平,則輸出復(fù)位,而復(fù)位的撤除則被同步到了時(shí)鐘域下。如此一來(lái),既解決了同步復(fù)位的資源消耗問(wèn)題,也解決了異步復(fù)位的亞穩(wěn)態(tài)問(wèn)題。其根本思想,也是將異步信號(hào)同步化。

聲明: 本文轉(zhuǎn)載自csdn:孤獨(dú)的單刀,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)于聯(lián)系工作人員微(in0723mango),我們將在第一時(shí)間和您對(duì)接刪除處理! 投稿/招聘/廣告/課程合作/資源置換請(qǐng)加微信:13237418207

a27de2d4-f5d4-11ed-90ce-dac502259ad0.jpg

Xilinx FPGA的約束設(shè)計(jì)和時(shí)序分析總結(jié)

a2a198b4-f5d4-11ed-90ce-dac502259ad0.jpg

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120362
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1368

    瀏覽量

    114689
  • 數(shù)字電路
    +關(guān)注

    關(guān)注

    193

    文章

    1605

    瀏覽量

    80622

原文標(biāo)題:FPGA同步復(fù)位、異步復(fù)位、異步復(fù)位同步釋放

文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    調(diào)制器原理是什么? 按電路形式可分為哪幾種?

    調(diào)制器原理是什么?調(diào)制器按電路形式可分為哪幾種?
    發(fā)表于 04-13 06:17

    IC測(cè)試可分為哪幾種

    根據(jù)被測(cè)的器件類型不同,IC測(cè)試可分為數(shù)字電路測(cè)試、模擬電路測(cè)試和混合電路測(cè)試。其中,數(shù)字電路測(cè)試是IC測(cè)試的基礎(chǔ),除少數(shù)純模擬IC如運(yùn)算放
    發(fā)表于 07-23 06:30

    Intel 8086的寄存器可分為哪幾類

    Intel 8086是什么?有多少個(gè)寄存器?Intel 8086的寄存器可分為哪幾類?
    發(fā)表于 08-09 06:38

    傅里葉變換可分為哪幾類

    傅里葉變換是什么?傅里葉變換可分為哪幾類?
    發(fā)表于 10-08 06:11

    什么是測(cè)功機(jī)?測(cè)功機(jī)可分為哪幾類

    什么是測(cè)功機(jī)?測(cè)功機(jī)可分為哪幾類?負(fù)載的控制方式有哪幾種?
    發(fā)表于 10-11 08:59

    PLC的應(yīng)用可分為哪幾類

    PLC的應(yīng)用可分為哪幾類?PLC控制系統(tǒng)與繼電器控制系統(tǒng)的區(qū)別在哪?
    發(fā)表于 10-11 09:20

    STM32F系列的芯片可分為哪幾類

    STM32F系列的芯片可分為哪幾類?STM32F系列的芯片有哪些特性?
    發(fā)表于 10-22 09:22

    總線是如何分類的?可分為哪幾類

    總線是如何分類的?可分為哪幾類?為什么要設(shè)置總線的判優(yōu)控制呢?
    發(fā)表于 11-08 06:29

    手指檢測(cè)心跳設(shè)計(jì)可分為幾個(gè)部分呢

    手指檢測(cè)心跳設(shè)計(jì)可分為幾個(gè)部分呢?
    發(fā)表于 12-20 07:58

    高速數(shù)字電路設(shè)計(jì)

    高速數(shù)字電路設(shè)計(jì) 關(guān)于高速數(shù)字電路的電氣特性,設(shè)計(jì)重點(diǎn)大略可分為三項(xiàng) : Ø 正時(shí) (Timing) :由于數(shù)字電路大多依據(jù)時(shí)脈信號(hào)來(lái)做信號(hào)間的同
    發(fā)表于 10-16 17:22 ?3253次閱讀

    數(shù)字電路設(shè)計(jì)

    數(shù)字電路設(shè)計(jì) 關(guān)于高速數(shù)字電路的電氣特性,設(shè)計(jì)重點(diǎn)大略可分為三項(xiàng): 正時(shí)(Timing) :由于數(shù)字電路
    發(fā)表于 08-26 19:08 ?2834次閱讀

    加密貨幣可分為哪些類型

    比特幣是一種加密貨幣,乙太幣同樣也是;但二者的屬性不同。加密貨幣可分為二大類:Coins 與Tokens。被做為「貨幣」使用的加密貨幣,即為Coins。應(yīng)用在數(shù)字資產(chǎn)(Digital Assets)的加密貨幣則是Tokens(通證)。
    發(fā)表于 05-24 11:39 ?8468次閱讀

    電容的種類可分為哪幾種?

    按介質(zhì)材料可分為:氣體介質(zhì)電容,液體介質(zhì)電容,無(wú)機(jī)固體介質(zhì)電容,有機(jī)固體介質(zhì)電容電解電容。
    發(fā)表于 03-17 10:10 ?1.1w次閱讀

    數(shù)字溫度傳感器按照不同形式分可分為哪幾類

    數(shù)字溫度傳感器是一種可以感受溫度同時(shí)轉(zhuǎn)換成可用輸出信號(hào)的一種傳感器,在工業(yè)、農(nóng)業(yè)、庫(kù)房等領(lǐng)域廣泛運(yùn)用。 溫度傳感器分類 按測(cè)量方式可分為: 接觸式 ? 非接觸式 按照傳感器材料及電子元件特性可分為
    的頭像 發(fā)表于 10-05 10:42 ?3077次閱讀

    示波器大致可分為模擬、數(shù)字和組合三類

    示波器大致可分為模擬、數(shù)字和組合三類。
    的頭像 發(fā)表于 04-19 16:19 ?1522次閱讀