99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

談?wù)凩atch:組合與時(shí)序邏輯的橋梁

冬至子 ? 來(lái)源:FPGA and ICer ? 作者:Vuko ? 2023-06-02 15:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

鎖存器:組合電路與時(shí)序電路的橋梁

在網(wǎng)上看到一個(gè)帖子說(shuō)了這樣一個(gè)說(shuō)辭,我覺(jué)得很不錯(cuò),分享給大家:鎖存器不就是組合邏輯電路與時(shí)序邏輯電路的橋梁么?

其實(shí)仔細(xì)想想也是,之前功利性的學(xué)習(xí)根本沒(méi)有仔細(xì)考慮為什么拿到數(shù)電基礎(chǔ)的書(shū)后,目錄設(shè)計(jì)總是按照組合邏輯、鎖存器、時(shí)序邏輯去安排章節(jié)。

現(xiàn)在思考后我覺(jué)得很有道理(聽(tīng)我開(kāi)始瞎掰)最初數(shù)字電路的組合邏輯解決了很多問(wèn)題,但是卻沒(méi)有很好的解決如何將這個(gè)狀態(tài)做存儲(chǔ),有些設(shè)計(jì)情況下不得不將一些信號(hào)的狀態(tài)存儲(chǔ),所以就使用邏輯門(mén)構(gòu)建了鎖存器的概念,設(shè)計(jì)的靈活性得到進(jìn)一步提升,但是同時(shí)又存在了另外一個(gè)問(wèn)題,鎖存器就像一個(gè)閥門(mén),但是由于這個(gè)閥門(mén)打開(kāi)后內(nèi)部是隨時(shí)可以變化的,這也給如何檢驗(yàn)設(shè)計(jì)的正確性帶來(lái)了難度,所以急需一個(gè)器件或者設(shè)計(jì)去解決這個(gè)問(wèn)題,進(jìn)而有了時(shí)序邏輯電路中觸發(fā)器的概念,觸發(fā)器也就隨著 “需求和發(fā)展” 出現(xiàn)。

因此,組合邏輯、鎖存器、時(shí)序邏輯,這樣安排更像說(shuō)明了數(shù)字電路的發(fā)展和迭代的歷史,雖然鎖存器的一般內(nèi)容比較少,但不可否認(rèn),鎖存器就是組合邏輯電路與時(shí)序邏輯電路的橋梁。

鎖存器概念

鎖存器( latch)是電平觸發(fā)的存儲(chǔ)單元,數(shù)據(jù)存儲(chǔ)的狀態(tài)取決于輸入時(shí)鐘(或者使能)信號(hào)的電平值,僅當(dāng)鎖存器處于使能狀態(tài)時(shí),輸出才會(huì)隨著數(shù)據(jù)輸入發(fā)生變化。

鎖存器不同于觸發(fā)器,鎖存器在不鎖存數(shù)據(jù)時(shí),輸出端的信號(hào)隨輸入信號(hào)變化,就像信號(hào)通過(guò)一個(gè)緩存器一樣;一旦鎖存信號(hào)起鎖存作用,則數(shù)據(jù)被鎖住,輸入信號(hào)不起作用。因此鎖存器也稱(chēng)為透明鎖存器, 指的是不鎖存時(shí)輸出對(duì)輸入是透明的。

鎖存器的分類(lèi)包括 RS 鎖存器、門(mén)控 RS 鎖存器和 D 鎖存器, 此處介紹下 D 鎖存器。

D 鎖存器就是能夠?qū)⑤斎氲膯温窋?shù)據(jù) D 存入到鎖存器中的電路,D鎖存器的電路圖如下圖所示。

圖片

從 D 鎖存器的電路圖中可以看出,該電路主要是由兩個(gè)部分組成,第一個(gè)部分是由 G1、 G2兩個(gè)與非門(mén)組成的 RS 鎖存器,第二個(gè)部分是由 G3、 G4 兩個(gè)與非門(mén)組成的控制電路。C 為控制信號(hào),用來(lái)控制 G3 和 G4 的激勵(lì)輸入。

下面來(lái)分析下 D 鎖存器的工作原理

當(dāng)控制信號(hào) C=0 時(shí),根據(jù)與非門(mén)的邏輯定律,無(wú)論 D輸入什么信號(hào), RD 和 SD 信號(hào)都會(huì)輸出為1。RD 和 SD 都同時(shí)等于 1 的話(huà),鎖存器的輸出端 Q 將維持原狀態(tài)不變。

當(dāng)控制端 C=1 時(shí),如果此時(shí) D=0,SD 就等于1, RD 就等于 0,根據(jù) RS 鎖存器的邏輯規(guī)律,電路的結(jié)果就為 0 狀態(tài);如果 D =1,那么 RD 就等于 1,SD 也就等于 0,鎖存器的結(jié)果就為 1 狀態(tài),也就是說(shuō),此時(shí)鎖存器的狀態(tài)是由激勵(lì)輸入端 D 來(lái)確定的,D 等于什么,鎖存器的狀態(tài)就是什么。

根據(jù)上面的描述,可以推出 D 鎖存器的特性表, Qn 是指觸發(fā)器當(dāng)前邏輯狀態(tài)也即觸發(fā)前的狀態(tài), Qn+1 是指觸發(fā)后的狀態(tài)。

1.jpg

通過(guò)這個(gè)表格,可以看出,當(dāng) C 為 1 時(shí), D 的狀態(tài)和 Qn+1 的狀態(tài)完全一樣,當(dāng) D=0 時(shí), Qn+1=0,當(dāng) D=1 時(shí), Qn+1=1。進(jìn)一步畫(huà)出 D 鎖存器的波形圖。

圖片

從 D 鎖存器的波形圖可以看出, D 是鎖存器的輸入信號(hào), C 是鎖存器的控制信號(hào),Q 是鎖存器的輸出信號(hào)。當(dāng)控制信號(hào) C 為高電平時(shí),輸出信號(hào) Q 將跟隨輸入信號(hào) D 的變化而變化。

為什么要避免鎖存器?(Latch的危害)

前面雖然提到鎖存器是組合邏輯電路與時(shí)序電路的橋梁,但是其靈活性很難保證在設(shè)計(jì)中進(jìn)行精準(zhǔn)分析。在實(shí)際使用中,Latch 多用于門(mén)控時(shí)鐘(clock gating)的控制,在絕大多數(shù)設(shè)計(jì)中我們要避免產(chǎn)生鎖存器。它會(huì)讓設(shè)計(jì)的時(shí)序出問(wèn)題,并且它的隱蔽性很強(qiáng), 新人很難查出問(wèn)題。

  1. 毛刺敏感 :鎖存器最大的危害在于不能過(guò)濾毛刺和影響工具進(jìn)行時(shí)序分析。這對(duì)于下一級(jí)電路是極其危險(xiǎn)的。這也就是為什么寄存器不用電平觸發(fā)而選擇使用邊沿觸發(fā)的原因。所以,只要能用觸發(fā)器的地方,就不用鎖存器。
  2. 不能異步復(fù)位: 由于其能夠儲(chǔ)存上次狀態(tài)的原因,上電后Latch處于不定態(tài)。
  3. 占用更多資源: 對(duì)于絕大多數(shù)當(dāng)前主流的FPGA架構(gòu)資源中,基本是不包含Latch,這也就意味著需要更多的資源去實(shí)現(xiàn)搭建Latch。在早些版本的某些FPGA內(nèi)部包含了Latch。
  4. 使時(shí)序分析變得復(fù)雜: 鎖存器沒(méi)有時(shí)鐘信號(hào),只有數(shù)據(jù)輸入和使能以及輸出 q 端,沒(méi)有時(shí)鐘信號(hào)也就說(shuō)明沒(méi)有辦法對(duì)這種器件進(jìn)行時(shí)序分析, 這個(gè)在時(shí)序電路里面是非常危險(xiǎn)的行為,因?yàn)榭赡芤饡r(shí)序不滿(mǎn)足導(dǎo)致電路功能實(shí)現(xiàn)有問(wèn)題。
  5. 額外的延時(shí):ASIC設(shè)計(jì)中,鎖存器也會(huì)帶來(lái)額外的延時(shí)和DFT,并不利于提高系統(tǒng)的工作頻率。

結(jié)構(gòu)完整就能避免Latch?

關(guān)于如何避免,可能大多數(shù)的人首先想到的是組合邏輯電路中,在if-else結(jié)構(gòu)中缺少else或case結(jié)構(gòu)中缺少default所導(dǎo)致,所以中要求if-else結(jié)構(gòu)和case結(jié)構(gòu)要寫(xiě)完整。但結(jié)構(gòu)完整就真能完全避免Latch的產(chǎn)生嗎?

module demo(
    input  wire [1:0] en,
    output reg[3:0] latchtest
);

always @(*) begin
    if (en ==1) begin
        latchtest = 'd6;
    end
    else if (en ==2) begin
        latchtest = 'd3;
    end 
    else begin
        latchtest = latchtest;
    end
end
endmodule

圖上示例這種情況,雖然邏輯完整但也會(huì)生成latch,其原因是針對(duì)該邏輯信號(hào)進(jìn)行了保持,構(gòu)成了邏輯環(huán)路。

圖片

latch測(cè)試

同樣下圖中的設(shè)計(jì)也會(huì)產(chǎn)生鎖存器,原因是雖然邏輯完備但是沒(méi)有針對(duì)單一信號(hào)進(jìn)行完備邏輯的處理,在部分邏輯信號(hào)進(jìn)行了保持,所以邏輯仍生成了latch。

//demo1
reg latchtest1,latchtest2;
always @(*)begin
 if(enable)
  latchtest1 = in;
    else
     latchtest2 = in;
end

下面的設(shè)計(jì)是我認(rèn)為比較隱晦的latch。乍一看,分支完備,case語(yǔ)句也有default,但在EDA工具進(jìn)行分析后仍出現(xiàn)latch

module demo(
    input  wire [1:0] en,
    output reg[3:0] latchtest
);

always @(*) begin
    case (en)
      0:latchtest[0] = 'd1;
      1:latchtest[1] = 'd1;
      2:latchtest[2] = 'd1; 
      3:latchtest[3] = 'd1;
      default:latchtest = 'd1;
    endcase
end

分析其根本原因仍然是,針對(duì)相關(guān)的分支條件該信號(hào)的部分bit位進(jìn)行了保持。

圖片

隱晦的latch設(shè)計(jì)

此外,三目運(yùn)算符在組合邏輯設(shè)計(jì)時(shí)進(jìn)行邏輯保持,同樣會(huì)引入latch。

鎖存器產(chǎn)生的根本原因

生成latch的例子很多,從例子來(lái)看不論是單個(gè)信號(hào)或者是一個(gè)信號(hào)某些位,只要在組合邏輯設(shè)計(jì)時(shí)他存在邏輯保持都有可能生成latch,但說(shuō)鎖存器產(chǎn)生的根本原因,即為代碼設(shè)計(jì)時(shí)的邏輯:需要在組合邏輯中避免保持的操作。當(dāng)組合邏輯需要保持時(shí),就會(huì)綜合出鎖存器。

避免Latch的解決方法

整理常見(jiàn)出現(xiàn)組合邏輯保持的情況,也即能得到避免生成latch的相關(guān)方法。

  1. if else分支結(jié)構(gòu)不完整
  2. 組合邏輯中case結(jié)構(gòu)不完整
  3. 組合邏輯設(shè)計(jì)時(shí)使用三目運(yùn)算符存在邏輯保持
  4. 使用原信號(hào)進(jìn)行賦值或者使用原信號(hào)進(jìn)行條件判斷
  5. 敏感信號(hào)列表不完整

所以避免latch的方法就是,要對(duì)以上或者其他未列舉的組合邏輯中存在邏輯保持的情況進(jìn)行改寫(xiě)和規(guī)避,即可避免頭疼的latch生成。簡(jiǎn)單來(lái)說(shuō)就是:優(yōu)化代碼邏輯,避免組合邏輯的邏輯保持。 當(dāng)遇到邏輯保持的情況時(shí),要對(duì)存在邏輯保持的分支進(jìn)行補(bǔ)全,或者使用賦初值的方法進(jìn)行覆蓋邏輯保持時(shí)的情況。

// 補(bǔ)全條件分支結(jié)構(gòu)    
    always @(*) begin
        if (en)  
            dout = in ;
        else     
            dout = 'd0 ;
    end

    //賦初值
    always @(*) begin
        dout = 'd0 ;
        if (en) 
            dout = data ; //如果en有效,改寫(xiě)q的值,否則q會(huì)保持為0
    end

必要的邏輯保持怎么處理?

可能對(duì)于有些情況無(wú)法完全避免掉組合邏輯設(shè)計(jì)的邏輯保持,對(duì)于這種情況,可以在這個(gè)組合邏輯路徑中插入一級(jí)寄存器,寄存器的輸出替代原來(lái)邏輯保持的部分,示例如下:

wire [DATA_WIDTH-1:0] accsum_in = (ab_sum_valid)?sum_in:dout;
   always @(posedge clk or negedge rst_n) begin
     if(rst_n == 'd0)begin
       dout <= 'd0;
     end
     else if(adder1_outvld == 1)begin
       dout <= sum_in ;
     end
   end
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    27376
  • EDA工具
    +關(guān)注

    關(guān)注

    4

    文章

    273

    瀏覽量

    32890
  • 鎖存器
    +關(guān)注

    關(guān)注

    8

    文章

    926

    瀏覽量

    42413
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2039

    瀏覽量

    62162
  • DFT
    DFT
    +關(guān)注

    關(guān)注

    2

    文章

    234

    瀏覽量

    23415
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文解析FPGA的片上資源使用情況(組合邏輯時(shí)序邏輯

    本文主要介紹的是FPGA的片上資源使用情況,分別是從組合邏輯時(shí)序邏輯來(lái)詳細(xì)的分析。
    發(fā)表于 04-18 09:06 ?1.8w次閱讀
    一文解析FPGA的片上資源使用情況(<b class='flag-5'>組合</b><b class='flag-5'>邏輯</b>及<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>)

    FPGA之組合邏輯時(shí)序邏輯、同步邏輯與異步邏輯的概念

    數(shù)字電路根據(jù)邏輯功能的不同特點(diǎn),可以分成兩大類(lèi):一類(lèi)叫做組合邏輯電路,簡(jiǎn)稱(chēng)組合電路或組合邏輯;另
    發(fā)表于 12-01 09:04 ?1181次閱讀

    RTL時(shí)序邏輯的綜合要求

    數(shù)字門(mén)級(jí)電路可分為兩大類(lèi):組合邏輯時(shí)序邏輯。鎖存器是組合邏輯
    的頭像 發(fā)表于 01-13 13:57 ?2653次閱讀
    RTL<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>的綜合要求

    FPGA中何時(shí)用組合邏輯時(shí)序邏輯

    數(shù)字邏輯電路分為組合邏輯電路和時(shí)序邏輯電路。時(shí)序邏輯
    發(fā)表于 03-21 09:49 ?1181次閱讀

    soc中的組合邏輯時(shí)序邏輯應(yīng)用說(shuō)明

    芯片設(shè)計(jì)是現(xiàn)代電子設(shè)備的重要組成部分,其中組合邏輯時(shí)序邏輯是芯片設(shè)計(jì)中非常重要的概念。組合邏輯
    的頭像 發(fā)表于 08-30 09:32 ?1558次閱讀

    勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載25:組合邏輯時(shí)序邏輯

    ```勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載25:組合邏輯時(shí)序邏輯特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUD 數(shù)
    發(fā)表于 11-17 18:47

    【技巧分享】時(shí)序邏輯組合邏輯的區(qū)別和使用

    根據(jù)邏輯電路的不同特點(diǎn),數(shù)字電路分為組合邏輯時(shí)序邏輯,明德?lián)P粉絲里的同學(xué)提出,無(wú)法正確區(qū)分,今天讓我跟一起來(lái)學(xué)習(xí)一下兩種
    發(fā)表于 03-01 19:50

    在FPGA中何時(shí)用組合邏輯時(shí)序邏輯

    的。話(huà)不多說(shuō),上貨。 在FPGA中何時(shí)用組合邏輯時(shí)序邏輯 在設(shè)計(jì)FPGA時(shí),大多數(shù)采用Verilog HDL或者VHDL語(yǔ)言進(jìn)行設(shè)計(jì)(本文重點(diǎn)以verilog來(lái)做介紹)。設(shè)
    發(fā)表于 03-06 16:31

    FPGA中組合邏輯時(shí)序邏輯的區(qū)別

    數(shù)字電路根據(jù)邏輯功能的不同特點(diǎn),可以分成兩大類(lèi),一類(lèi)叫組合邏輯電路(簡(jiǎn)稱(chēng)組合電路),另一類(lèi)叫做時(shí)序邏輯
    發(fā)表于 11-20 12:26 ?9059次閱讀

    組合邏輯電路和時(shí)序邏輯電路比較_組合邏輯電路和時(shí)序邏輯電路有什么區(qū)別

    組合邏輯電路和時(shí)序邏輯電路都是數(shù)字電路,組合邏輯電路在邏輯
    發(fā)表于 01-30 17:26 ?9.5w次閱讀
    <b class='flag-5'>組合</b><b class='flag-5'>邏輯</b>電路和<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>電路比較_<b class='flag-5'>組合</b><b class='flag-5'>邏輯</b>電路和<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>電路有什么區(qū)別

    基本邏輯電路、時(shí)序電路、組合電路設(shè)計(jì)

    從今天開(kāi)始新的一章-Circuits,包括基本邏輯電路、時(shí)序電路、組合電路等。
    的頭像 發(fā)表于 10-10 15:39 ?1800次閱讀

    組合邏輯電路和時(shí)序邏輯電路的區(qū)別和聯(lián)系

    數(shù)字電路根據(jù)邏輯功能的不同特點(diǎn),可以分成兩大類(lèi),一類(lèi)叫組合邏輯電路(簡(jiǎn)稱(chēng)組合電路),另一類(lèi)叫做時(shí)序邏輯
    的頭像 發(fā)表于 03-14 17:06 ?7855次閱讀
    <b class='flag-5'>組合</b><b class='flag-5'>邏輯</b>電路和<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>電路的區(qū)別和聯(lián)系

    時(shí)序邏輯電路有哪些 時(shí)序邏輯電路和組合邏輯電路區(qū)別

    產(chǎn)生相應(yīng)的輸出信號(hào)。本文將詳細(xì)介紹時(shí)序邏輯電路的分類(lèi)、基本原理、設(shè)計(jì)方法以及與組合邏輯電路的區(qū)別。 一、時(shí)序
    的頭像 發(fā)表于 02-06 11:18 ?1.3w次閱讀

    什么是組合邏輯電路和時(shí)序邏輯電路?它們之間的區(qū)別是什么

    什么是組合邏輯電路和時(shí)序邏輯電路?時(shí)序邏輯電路和組合
    的頭像 發(fā)表于 03-26 16:12 ?5515次閱讀

    時(shí)序邏輯會(huì)產(chǎn)生鎖存器嗎

    時(shí)序邏輯電路本身并不直接“產(chǎn)生”鎖存器,但鎖存器是時(shí)序邏輯電路中的重要組成部分。時(shí)序邏輯電路(S
    的頭像 發(fā)表于 08-28 11:03 ?900次閱讀