在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

設(shè)計Verilog時為什么要避免Latch的產(chǎn)生呢?

冬至子 ? 來源:數(shù)字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-06-02 11:32 ? 次閱讀

Latch 的含義

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

當(dāng)電平信號無效時,輸出信號隨輸入信號變化,就像通過了緩沖器;當(dāng)電平有效時,輸出信號被鎖存。激勵信號的任何變化,都將直接引起鎖存器輸出狀態(tài)的改變,很有可能會因為瞬態(tài)特性不穩(wěn)定而產(chǎn)生振蕩現(xiàn)象。

鎖存器示意圖如下:

圖片

◆觸發(fā)器(flip-flop),是邊沿敏感的存儲單元,數(shù)據(jù)存儲的動作(狀態(tài)轉(zhuǎn)換)由某一信號的上升沿或者下降沿進(jìn)行同步的(限制存儲單元狀態(tài)轉(zhuǎn)換在一個很短的時間內(nèi))。

觸發(fā)器示意圖如下:

圖片

寄存器(register),在 Verilog 中用來暫時存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果的變量。一個變量聲明為寄存器時,它既可以被綜合成觸發(fā)器,也可能被綜合成 Latch,甚至是 wire 型變量。

但是大多數(shù)情況下我們希望它被綜合成觸發(fā)器,但是有時候由于代碼書寫問題,它會被綜合成不期望的 Latch 結(jié)構(gòu)。

◆Latch 的主要危害有:1)輸入狀態(tài)可能多次變化,容易產(chǎn)生毛刺,增加了下一級電路的不確定性;2)在大部分 FPGA 的資源中,可能需要比觸發(fā)器更多的資源去實現(xiàn) Latch 結(jié)構(gòu);3)鎖存器的出現(xiàn)使得靜態(tài)時序分析變得更加復(fù)雜。

Latch 多用于門控時鐘(clock gating)的控制,設(shè)計時一般應(yīng)當(dāng)避免 Latch 的產(chǎn)生。

if 結(jié)構(gòu)不完整

◆組合邏輯中,不完整的 if - else 結(jié)構(gòu),會產(chǎn)生 Latch。

例如下面的模型,if 語句中缺少 else 結(jié)構(gòu),系統(tǒng)默認(rèn) else 的分支下寄存器 q 的值保持不變,即具有存儲數(shù)據(jù)的功能,所以寄存器 q 會被綜合成 Latch 結(jié)構(gòu)。

module module1_Latch1(
    input       data, 
    input       en ,
    output reg  q) ;

    always @(*) begin
        if (en) q = data ;
    end


endmodule

◆避免此類 Latch 的方法主要有 2 種,一種是補(bǔ)全 if-else 結(jié)構(gòu),或者對信號賦初值。

例如,上面模型中的 always 語句,可以改為以下兩種形式:

// 補(bǔ)全條件分支結(jié)構(gòu)   
    always @(*) begin
        if (en)  q = data ;
        else     q = 1'b0 ;
    end
//賦初值
    always @(*) begin
        q = 1'b0 ;
        if (en) q = data ; //如果en有效,改寫q的值,否則q會保持為0
    end

◆但是在時序邏輯中,不完整的 if - else 結(jié)構(gòu),不會產(chǎn)生 Latch,例如下面模型。

這是因為,q 寄存器具有存儲功能,且其值在時鐘的邊沿下才會改變,這正是觸發(fā)器的特性。

module module1_ff(
    input       clk ,
    input       data, 
    input       en ,
    output reg  q) ;

    always @(posedge clk) begin
        if (en) q <= data ;
    end


endmodule

◆在組合邏輯中,當(dāng)條件語句中有很多條賦值語句時,每個分支條件下賦值語句的不完整也是會產(chǎn)生 Latch。

其實對每個信號的邏輯拆分來看,這也相當(dāng)于是 if-else 結(jié)構(gòu)不完整,相關(guān)寄存器信號缺少在其他條件下的賦值行為。例如:

module module1_Latch11(
    input       data1, 
    input       data2, 
    input       en ,
    output reg  q1 ,
    output reg  q2) ;

    always @(*) begin
        if (en)   q1 = data1 ;
        else      q2 = data2 ;
    end


endmodule

這種情況也可以通過補(bǔ)充完整賦值語句或賦初值來避免 Latch。例如:

always @(*) begin
        //q1 = 0; q2 = 0 ; //或在這里對 q1/q2 賦初值
        if (en)  begin
            q1 = data1 ;
            q2 = 1'b0 ;
        end
        else begin
            q1 = 1'b0 ;
            q2 = data2 ;
        end
    end

case 結(jié)構(gòu)不完整

case 語句產(chǎn)生 Latch 的原理幾乎和 if 語句一致。在組合邏輯中,當(dāng) case 選項列表不全且沒有加 default 關(guān)鍵字,或有多個賦值語句不完整時,也會產(chǎn)生 Latch。例如:

module module1_Latch2(
    input       data1, 
    input       data2, 
    input [1:0] sel ,
    output reg  q ) ;

    always @(*) begin
        case(sel)
            2'b00:  q = data1 ;
            2'b01:  q = data2 ;  //缺少 default 選項
        endcase
    end


endmodule

消除此種 Latch 的方法也是 2 種,將 case 選項列表補(bǔ)充完整,或?qū)π盘栙x初值。

補(bǔ)充完整 case 選項列表時,可以羅列所有的選項結(jié)果,也可以用 default 關(guān)鍵字來代替其他選項結(jié)果。

例如,上述 always 語句有以下 2 種修改方式。

always @(*) begin
        case(sel)
            2'b00:    q = data1 ;
            2'b01:    q = data2 ;
            default:  q = 1'b0 ;
        endcase
    end
always @(*) begin
        case(sel)
            2'b00:  q = data1 ;
            2'b01:  q = data2 ;
            2'b10, 2'b11 : 
                    q = 1'b0 ;
        endcase
    end

原信號賦值或判斷

在組合邏輯中,如果一個信號的賦值源頭有其信號本身,或者判斷條件中有其信號本身的邏輯,則也會產(chǎn)生 Latch。因為此時信號也需要具有存儲功能,但是沒有時鐘驅(qū)動。此類問題在 if 語句、case 語句、問號表達(dá)式中都可能出現(xiàn),例如:

//signal itself as a part of condition
    reg a, b ;
    always @(*) begin
        if (a & b)  a = 1'b1 ;   //a - > Latch
        else a = 1'b0 ;
    end
//signal itself are the assigment source
    reg        c;
    wire [1:0] sel ;
    always @(*) begin
        case(sel)
            2'b00:    c = c ;    //c - > Latch
            2'b01:    c = 1'b1 ;
            default:  c = 1'b0 ;
        endcase
    end
//signal itself as a part of condition in “? expression”
    wire      d, sel2;
    assign    d =  (sel2 && d) ? 1'b0 : 1'b1 ;  //d - > Latch

避免此類 Latch 的方法,就只有一種,即在組合邏輯中避免這種寫法,信號不要給信號自己賦值,且不要用賦值信號本身參與判斷條件邏輯。

例如,如果不要求立刻輸出,可以將信號進(jìn)行一個時鐘周期的延時再進(jìn)行相關(guān)邏輯的組合。上述第一個產(chǎn)生 Latch 的代碼可以描述為:

reg   a, b ;
    reg   a_r ;

    always (@posedge clk)
        a_r  <= a ;

    always @(*) begin
        if (a_r & b)  a = 1'b1 ;   //there is no Latch
        else a = 1'b0 ;
    end

敏感信號列表不完整

如果組合邏輯中 always@() 塊內(nèi)敏感列表沒有列全,該觸發(fā)的時候沒有觸發(fā),那么相關(guān)寄存器還是會保存之前的輸出結(jié)果,因而會生成鎖存器。

這種情況,把敏感信號補(bǔ)全或者直接用 always@(*) 即可消除 Latch。

小結(jié)

總之,為避免 Latch 的產(chǎn)生,在組合邏輯中,需要注意以下幾點:

1)if-else 或 case 語句,結(jié)構(gòu)一定要完整

2)不要將賦值信號放在賦值源頭,或條件判斷中

3)敏感信號列表建議多用 always@(*)

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

    關(guān)注

    9

    文章

    428

    瀏覽量

    26561
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120792
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    8

    文章

    906

    瀏覽量

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

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61255
收藏 人收藏

    評論

    相關(guān)推薦

    CMOS的閂鎖效應(yīng):Latch up的原理分析

    電路無法正常工作,甚至燒毀電路。 Latch up是指CMOS晶片中,在電源VDD和地線GND(VSS)之間由于寄生的PNP和NPN雙極性BJT相互影響而產(chǎn)生的一低阻抗通路,它的存在會使VDD和GND之間產(chǎn)生大電流; 隨著IC制
    的頭像 發(fā)表于 12-23 16:06 ?5.7w次閱讀
    CMOS的閂鎖效應(yīng):<b class='flag-5'>Latch</b> up的原理分析

    芯片設(shè)計都不可避免的考慮要素—閂鎖效應(yīng)latch up

    閂鎖效應(yīng),latch up,是個非常重要的問題?,F(xiàn)在的芯片設(shè)計都不可避免考慮它。我今天就簡單地梳理一下LUP的一些問題。
    的頭像 發(fā)表于 12-01 17:11 ?3216次閱讀
    芯片設(shè)計都不可<b class='flag-5'>避免</b>的考慮要素—閂鎖效應(yīng)<b class='flag-5'>latch</b> up

    #硬聲創(chuàng)作季 【4.2】——D-LatchVerilog表述

    fpgaVerilog
    Mr_haohao
    發(fā)布于 :2022年09月08日 09:11:17

    [4.2.1]--4-2D-LatchVerilog表述

    Verilog
    李開鴻
    發(fā)布于 :2022年11月12日 14:49:30

    Latch UP

    的PNP和NPN雙極性BJT相互影響而產(chǎn)生的一低阻抗通路, 它的存在會使VDD和GND之間產(chǎn)生大電流隨著IC制造工藝的發(fā)展, 封裝密度和集成度越來越高,產(chǎn)生Latch up的可能性會越
    發(fā)表于 12-16 16:37

    GSM教你理解verilog HDL語言的一些概念

    表:Always過程中,所有被讀取的數(shù)據(jù),即等號右邊的變量都要應(yīng)放在敏感表中,不然,綜合時不能正確地映射到所用的門。12、IF:如果變量沒有在IF語句的每個分支中進(jìn)行賦值,將會產(chǎn)生latch。如果
    發(fā)表于 02-24 10:37

    Verilog綜合遇到的這樣的警告如何處理

    大家好:請教個問題 我是個初學(xué)者 對Verilog運(yùn)用不是很熟悉。我定義了一個輸出寄存器output reg[15:0] INT_PWM_BLOCK,當(dāng)條件滿足,把這個寄存器的第0位置0,否則為1
    發(fā)表于 03-05 15:29

    【鋯石科技】關(guān)于 Verilog HDL 語言的一些關(guān)鍵問題解惑【免費下載】

    設(shè)計③ 如何給端口選擇正確的數(shù)據(jù)類型④ Verilog語言中latch產(chǎn)生⑤ 組合邏輯反饋環(huán)⑥ 阻塞賦值與非阻塞賦值的不同⑦ FPGA的靈魂狀態(tài)機(jī)⑧ 代碼風(fēng)格的重要性[hide][/hide]
    發(fā)表于 08-17 05:56

    寄生電路的效應(yīng):Latch-Up(鎖定)

    了解電路設(shè)計技巧之后,這種效應(yīng)已經(jīng)可以被控制了。CMOS電路之所以會產(chǎn)生Latch-Up效應(yīng),我們可以用圖2.29來表示。在圖中我們以剖面圖來看一個CMOS反相器如何發(fā)生此效應(yīng),而且它是用P型阱制造
    發(fā)表于 08-23 06:06

    請問Latch到底是什么?

    (Address Latch Enable)。描述是這樣的,ALE是一個脈沖信號,用來鎖?。?b class='flag-5'>Latch)AD0~AD7的地址。這里Latch又是動詞。請問Latch到底是什么意思
    發(fā)表于 12-06 10:35

    Verilog基本功--flipflop和latch以及register的區(qū)別

    消耗的門資源比ff少。但是你用的如果是 fpga,那么內(nèi)部一般帶DFF單元,反而用觸發(fā)器更好。3、latch與register的區(qū)別,為什么現(xiàn)在多用register.行為級描述中latch如何
    發(fā)表于 08-27 08:30

    怎么知道產(chǎn)生的PWM波形對不對

    前言在做嵌入式開發(fā)的過程中,不可避免的會用到PWM的功能,但是我們怎么知道產(chǎn)生的PWM波形對不對,這個時候可能就需要一臺示波器來測量一下了,但是這始終有點麻煩。于是我嘗試著使用STM32的定時器
    發(fā)表于 08-16 09:06

    為什么C語言避免使用Null指針

    為什么C語言避免使用Null指針?指針作為數(shù)組的應(yīng)用有哪些?
    發(fā)表于 12-20 07:19

    verilog中if與case語句不完整產(chǎn)生鎖存器的原因分析

      在很多地方都能看到,verilog中if與case語句必須完整,即if加上else,case后加上default語句,以防止鎖存器的發(fā)生,下載內(nèi)容中就談到了其中原因。
    發(fā)表于 09-16 09:29 ?24次下載

    安全光幕避免在哪些環(huán)境下使用

    安全光幕避免在哪些環(huán)境下使用
    的頭像 發(fā)表于 06-28 14:38 ?452次閱讀
    安全光幕<b class='flag-5'>要</b><b class='flag-5'>避免</b>在哪些環(huán)境下使用
    主站蜘蛛池模板: 亚洲欧美日韩高清mmm777| 色窝视频| 午夜影院性| 男人的天堂久久精品激情| 亚洲已满18点击进入在线观看| 老师下面很湿很爽很紧| 久久影视免费体验区午夜啪啪 | 色com| 这里只有精品在线| 日本xxxxx69| 68日本xxxxxxxxx xx| 26uuu另类亚洲欧美日本一| 午夜操一操| 视频一区 中文字幕| 伊人精品久久久大香线蕉99| 天堂一区二区在线观看| 伊人久久大香线蕉综合电影| 亚洲大尺度视频| 日韩色爱| 韩国在线免费视频| 一级片在线播放| 女同在线视频| 免费看啪啪网站| 一卡二卡卡四卡无人区中文| 三级在线观看视频| 黄色片啪啪| 午夜无遮挡怕怕怕免费视频| 国产亚洲欧美成人久久片| 美女黄色毛片| 黄色h视频| 伊人久久天堂| 人人爽人人爱| 俺去啦网婷婷| 永久免费在线看| 黄黄视频在线观看| 亚1洲二区三区四区免费| 五月婷婷丁香花| 六月婷婷网| 午夜影院免费在线观看| 在线观看网站国产| 一级日本高清视频免费观看|