国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

避免latch verilog FPGA 基礎(chǔ)練習(xí)2

這篇具有很好參考價(jià)值的文章主要介紹了避免latch verilog FPGA 基礎(chǔ)練習(xí)2。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

避免latch verilog FPGA 基礎(chǔ)練習(xí)2

發(fā)現(xiàn)問題,用技術(shù)解決問題。興趣是自己的源動(dòng)力 !

前言

本文由如何避免latch的問題場景,來更詳細(xì)的描述verilog中的組合邏輯電路和時(shí)序邏輯電路等等理論知識。由latch這個(gè)問題入手來闡述更多理論知識,有助于更好的理解和記憶。


一、latch是什么?

Latch其實(shí)就是鎖存器,是一種在異步電路系統(tǒng)中,對輸入信號電平敏感的單元,用來存儲信息。鎖存器在數(shù)據(jù)未鎖存時(shí),輸出端的信號隨輸入信號變化,就像信號通過一個(gè)緩沖器,一旦鎖存信號有效,則數(shù)據(jù)被鎖存,輸入信號不起作用。因此,鎖存器也被稱為透明鎖存器,指的是不鎖存時(shí)輸出對于輸入是透明的。

簡單理解latch的核心就是一句話:一旦鎖存信號有效,則數(shù)據(jù)被鎖存,輸入信號不起作用。

二、latch出現(xiàn)的場景和危害

2.1 場景

Latch的問題是因?yàn)?strong>只有組合邏輯才會產(chǎn)生這種問題,產(chǎn)生Latch是我們在同步電路中盡量避免的,但并不表示Latch沒有用的或者說是錯(cuò)誤的,Latch在異步電路中是非常有用的,只是我們設(shè)計(jì)的是同步電路,要盡量避免。

上面這句話說只有組合邏輯才產(chǎn)生latch,又接著說latch在同步電路中要避免,如果不理解組合邏輯、時(shí)序邏輯、異步電路和同步電路,理解起來會有點(diǎn)繞。2.3、2.4節(jié)會對這句話解惑。

2.2 危害

在同步電路中Latch會產(chǎn)生不好的效果

  • 如對毛刺敏感;不能異步復(fù)位,上電后處于不定態(tài);還會讓靜態(tài)時(shí)序分析變得十分復(fù)雜;

理解:從latch本身的特性出發(fā):一旦鎖存信號有效,則數(shù)據(jù)被鎖存,輸入信號不起作用。理解了這句話,就可以明白為什么latch會產(chǎn)生這么多不良效果了

  • 在FPGA的資源中,大部分器件沒有鎖存器這個(gè)東西,所以需要用使用寄存器來組成鎖存器所以會占用更多邏輯資源;在ASIC設(shè)計(jì)中,鎖存器也會帶來額外的延時(shí)和DFT,并不利于提高系統(tǒng)的工作頻 率

簡單理解就是:鎖存器可能會有多個(gè)寄存器組成,浪費(fèi)資源。

2.3 組合邏輯和時(shí)序邏輯

這里先給出組合邏輯和時(shí)序邏輯的概念的簡單理解:

  • 組合邏輯:數(shù)字電路滿足任意時(shí)刻的輸出僅僅取決于該時(shí)刻的輸入,那么該數(shù)字電路為組合邏輯電路。簡單理解就是輸入進(jìn)來立刻輸出*

注意:這里的數(shù)字電路不是僅僅理解為一個(gè)電路與門,如下圖。可能是一個(gè)復(fù)雜的組合邏輯。
避免latch verilog FPGA 基礎(chǔ)練習(xí)2,FPGA verilog編碼實(shí)戰(zhàn)系列,fpga開發(fā)

兩種組合邏輯代碼如下:

always @(*)  
    temp <= A + B;  
assign  temp <= A + B;  
  • 時(shí)序邏輯:如果數(shù)字電路任意時(shí)刻的輸出不僅取決于當(dāng)前時(shí)刻的輸入,而且還取決于數(shù)字電路原來的狀態(tài),那么該數(shù)字電路為時(shí)序邏輯電路。簡單理解就是輸出的值要依賴某個(gè)狀態(tài),這個(gè)狀態(tài)就是時(shí)鐘的上升沿或者下降沿*

下面是時(shí)序邏輯代碼示例

    always @(posedge clk or posedge reset) begin  
        if (reset) begin  
            Q <= 4'b0000;  
        end else begin  
            Q <= Q + 1;  
        end  
    end  

2.4 同步(時(shí)序)邏輯電路 和 異步(時(shí)序)邏輯電路

  • 同步時(shí)序電路:狹隘的定義就是數(shù)字電路(簡單或者復(fù)雜的與或門組合)被同一個(gè)時(shí)鐘信號驅(qū)動(dòng)。
    避免latch verilog FPGA 基礎(chǔ)練習(xí)2,FPGA verilog編碼實(shí)戰(zhàn)系列,fpga開發(fā)

注意理解:時(shí)序邏輯電路中肯定有組合邏輯的成分存在,但組合邏輯電路中卻不可能有時(shí)序邏輯的成分存在。
這里可以返回到2.1節(jié)去理解,latch只有在組合邏輯中存在。因?yàn)闀r(shí)序電路中存在組合邏輯(這里不要只從verilog代碼層面去考慮,要從verilog代碼映射的電路圖來考慮,如上圖),所以需要在同步電路中去避免latch的產(chǎn)生。

  • 異步時(shí)序電路:簡單理解就是一個(gè)時(shí)序電路(異步也是時(shí)序電路),多個(gè)有差異的時(shí)鐘來決定輸入輸出。

這里總結(jié)一下第二節(jié)的內(nèi)容:組合邏輯、時(shí)序邏輯、同步時(shí)序和異步時(shí)序,理解的關(guān)鍵就是抓住輸入輸出這兩個(gè)關(guān)鍵詞。即:輸入和輸出不依賴其他信號就是組合邏輯,依賴時(shí)鐘就是時(shí)序邏輯。時(shí)序邏輯中又分同步和異步,輸入輸出只依賴一個(gè)時(shí)鐘就是同步,依賴多個(gè)時(shí)鐘就是異步。

理解以上概念了,再回頭看latch發(fā)生的場景,就豁然開朗了。

三、如何避免latch

  • 情況一:組合邏輯中if語句沒有else
module latch_one
(
input wire in1 , //輸入信號in1
input wire in2 , //輸入信號in2
input wire in3 , //輸入信號in3

output reg [7:0] out //輸出信號out
);

 //out:根據(jù)3個(gè)輸入信號選擇輸出對應(yīng)的8bit out信號
 always@(*)
 if({in1, in2, in3} == 3'b000)
 out = 8'b0000_0001;
 else if({in1, in2, in3} == 3'b001)
 out = 8'b0000_0010;
 else if({in1, in2, in3} == 3'b010)
 out = 8'b0000_0100;
 else if({in1, in2, in3} == 3'b011)
 out = 8'b0000_1000;
 else if({in1, in2, in3} == 3'b100)
 out = 8'b0001_0000;
 else if({in1, in2, in3} == 3'b101)
 out = 8'b0010_0000;
 else if({in1, in2, in3} == 3'b110)
 out = 8'b0100_0000;
 else if({in1, in2, in3} == 3'b111)
 out = 8'b1000_0000;
 // else 把最后一個(gè)if的else注釋掉,就會產(chǎn)生latch
 // out = 8'b0000_0001;

 endmodule
  • 情況二:組合邏輯中case的條件不能夠完全列舉且不寫default
module latch_two
(
input wire in1 , //輸入信號in1
input wire in2 , //輸入信號in2
input wire in3 , //輸入信號in2

output reg [7:0] out //輸出信號out
);

 //out:根據(jù)3個(gè)輸入信號選擇輸出對應(yīng)的8bit out信號
 always@(*)
 case({in1, in2, in3})
 3'b000 : out = 8'b0000_0001;
 3'b001 : out = 8'b0000_0010;
 3'b010 : out = 8'b0000_0100;
 3'b011 : out = 8'b0000_1000;
 3'b100 : out = 8'b0001_0000;
 3'b101 : out = 8'b0010_0000;
 3'b110 : out = 8'b0100_0000;
 //把最后一種情況和default都注釋掉,使case的條件不能夠完全列舉
 //3'b111 : out = 8'b1000_0000;
 //default: out = 8'b0000_0001;
 endcase

 endmodule

 endmodule
  • 情況三:組合邏輯中輸出變量賦值給自己
module latch_three
(
input wire in1 , //輸入信號in1
input wire in2 , //輸入信號in2
input wire in3 , //輸入信號in3

output reg [7:0] out //輸出信號out
);

 //out:根據(jù)3個(gè)輸入信號選擇輸出對應(yīng)的8bit out信號
 always@(*)
 if({in1, in2, in3} == 3'b000)
 out = 8'b0000_0001;
 else if({in1, in2, in3} == 3'b001)
 out = 8'b0000_0010;
 elseif({in1, in2, in3} == 3'b010)
 out = 8'b0000_0100;
 elseif({in1, in2, in3} == 3'b011)
 out = 8'b0000_1000;
 elseif({in1, in2, in3} == 3'b100)
 out = 8'b0001_0000;
 elseif({in1, in2, in3} == 3'b101)
 out = 8'b0010_0000;
 elseif({in1, in2, in3} == 3'b110)
 out = 8'b0100_0000;
 elseif({in1, in2, in3} == 3'b111)
 out = 8'b1000_0000;
 else
 out = out;//輸出變量賦值給自己

總結(jié)

核心思想:在拋出latch這個(gè)問題的情況下,去理解一些基礎(chǔ)的理論概念,大致理解就行。知道在編寫代碼的時(shí)候,如何去避免latch。

  • 歡迎一起交流學(xué)習(xí),如有錯(cuò)誤之處,還請各位指正。

參考資料

[1] FPGA之組合邏輯與時(shí)序邏輯、同步邏輯與異步邏輯的概念文章來源地址http://www.zghlxwxcb.cn/news/detail-758269.html

到了這里,關(guān)于避免latch verilog FPGA 基礎(chǔ)練習(xí)2的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【FPGA Verilog開發(fā)實(shí)戰(zhàn)指南】初識Verilog HDL-基礎(chǔ)語法

    【FPGA Verilog開發(fā)實(shí)戰(zhàn)指南】初識Verilog HDL-基礎(chǔ)語法

    就是用代碼來描述硬件結(jié)構(gòu) 語言有VHDL與Verilog HDL Verilog HDL 是從C語言來的,學(xué)的快 ###例子 也叫保留字,一般是小寫 module 表示模塊的開始 endmodule 模塊的結(jié)束 模塊名 一般與.v文件的名字一致 輸入信號 input 輸出信號 output 既做輸入也做輸出 inout 需要一些變量和參數(shù)對輸

    2024年02月21日
    瀏覽(27)
  • 【FPGA】Verilog:鎖存器 Latch | RS Flip-Flop 與 D Flip-Flop 的實(shí)現(xiàn)

    【FPGA】Verilog:鎖存器 Latch | RS Flip-Flop 與 D Flip-Flop 的實(shí)現(xiàn)

    ?? 寫在前面: 本章將理解 RS/D 鎖存器的概念,了解 RS/D/JK 觸發(fā)器的概念,使用 Verilog 實(shí)現(xiàn)各種鎖存器 (Latch) 和翻轉(zhuǎn)器 (Flip-Flop),并通過 FPGA 驗(yàn)證用 Verilog 的實(shí)現(xiàn)。 ?? 本章目錄: Ⅰ. 前置知識回顧 0x00 鎖存器(Latch)

    2024年02月05日
    瀏覽(18)
  • 好的FPGA編碼風(fēng)格(1)--盡量避免組合邏輯環(huán)路(Combinational Loops)

    好的FPGA編碼風(fēng)格(1)--盡量避免組合邏輯環(huán)路(Combinational Loops)

    ???????? 組合邏輯環(huán)路 (Combinational Loops):指組合邏輯的輸出信號 不經(jīng)過任何時(shí)序邏輯電路 (FF等),而直接 反饋到輸入節(jié)點(diǎn) ,從而構(gòu)成的電路環(huán)路。 ????????此外,如果 直接將寄存器的輸出端通過組合邏輯反饋到該寄存器的異步端口 (異步復(fù)位或異步置位),

    2024年02月08日
    瀏覽(15)
  • 什么是好的FPGA編碼風(fēng)格?(1)--盡量避免組合邏輯環(huán)路(Combinational Loops)

    什么是好的FPGA編碼風(fēng)格?(1)--盡量避免組合邏輯環(huán)路(Combinational Loops)

    ???????? 組合邏輯環(huán)路 (Combinational Loops):指組合邏輯的輸出信號 不經(jīng)過任何時(shí)序邏輯電路 (FF等),而直接 反饋到輸入節(jié)點(diǎn) ,從而構(gòu)成的電路環(huán)路。 ????????此外,如果 直接將寄存器的輸出端通過組合邏輯反饋到該寄存器的異步端口 (異步復(fù)位或異步置位),

    2024年02月05日
    瀏覽(18)
  • 【FPGA】Verilog:編碼器 | 實(shí)現(xiàn) 4 到 2 編碼器

    【FPGA】Verilog:編碼器 | 實(shí)現(xiàn) 4 到 2 編碼器

    0x00 編碼器(Encoder) 編碼器與解碼器相反。當(dāng)多臺設(shè)備向計(jì)算機(jī)提供輸入時(shí),編碼器會為每一個(gè)輸入生成一個(gè)與設(shè)備相對應(yīng)的信號,因此有多少比特就有多少輸出,以數(shù)字形式表示輸入的數(shù)量。 例如,如果有四個(gè)輸入,就需要一個(gè)兩位二進(jìn)制數(shù)來表示 0 至 3,這樣就有四個(gè)輸

    2024年02月04日
    瀏覽(27)
  • Verilog基礎(chǔ):避免混合使用阻塞和非阻塞賦值

    Verilog基礎(chǔ):避免混合使用阻塞和非阻塞賦值

    相關(guān)閱讀 Verilog基礎(chǔ) https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482 ? ? ? ? “避免在一個(gè)always塊中混雜阻塞賦值和非阻塞賦值”,這條原則是著名的Verilog專家Cliff Cummings在論文SUNG2000中提出的,這個(gè)觀點(diǎn)在公眾討論時(shí)受到了廣泛的質(zhì)疑。有人認(rèn)為可以在時(shí)鐘

    2024年02月05日
    瀏覽(17)
  • Verilog編程:8線-3線優(yōu)先編碼器FPGA

    Verilog編程:8線-3線優(yōu)先編碼器FPGA 基于FPGA的數(shù)字電路設(shè)計(jì)是當(dāng)前領(lǐng)域中的關(guān)鍵技術(shù)之一,因?yàn)檫@種設(shè)計(jì)具有高速、可編程、可重構(gòu)等優(yōu)點(diǎn)。在數(shù)字電路設(shè)計(jì)中,編碼器是常見的模塊,尤其是8線-3線優(yōu)先編碼器,可以實(shí)現(xiàn)將八個(gè)輸入信號中最先出現(xiàn)的一個(gè)編碼輸出到三位二進(jìn)制

    2024年02月08日
    瀏覽(26)
  • 【FPGA】Verilog 實(shí)踐:優(yōu)先級編碼器 | Priority encoder

    【FPGA】Verilog 實(shí)踐:優(yōu)先級編碼器 | Priority encoder

    0x00 優(yōu)先級編碼器(Priority encoder) \\\"能將多個(gè)二進(jìn)制輸入壓縮成更少數(shù)目輸出的電路或算法的編碼器\\\" 優(yōu)先級編碼器是一種編碼器,它考慮了兩個(gè)或更多輸入位同時(shí)變?yōu)?1 但沒有收到輸入的情況。當(dāng)輸入進(jìn)來時(shí),優(yōu)先級編碼器會按照優(yōu)先級順序進(jìn)行處理。 通常,它按升序或降

    2024年01月18日
    瀏覽(35)
  • 【FPGA】Verilog 編碼實(shí)現(xiàn):與非門 | 或非門 | 異或門 | NAND/NOR/XOR 行為驗(yàn)證

    【FPGA】Verilog 編碼實(shí)現(xiàn):與非門 | 或非門 | 異或門 | NAND/NOR/XOR 行為驗(yàn)證

    寫在前面: 本章主要內(nèi)容為了解和確認(rèn) NAND/NOR/XOR 門的行為,并使用Verilog實(shí)現(xiàn),生成輸入信號后通過模擬,驗(yàn)證每個(gè)門的操作,并使用 FPGA 來驗(yàn)證 Verilog 實(shí)現(xiàn)的電路的行為。 本章目錄: Ⅰ. 前置知識 0x00 與非門(NAND) 0x01 或非門(NOR) 0x02 異或門(XOR) Ⅱ. 練習(xí)(Assignmen

    2024年02月03日
    瀏覽(21)
  • Verilog編程基礎(chǔ)練習(xí)

    Verilog編程基礎(chǔ)練習(xí)

    目錄 一、3-8譯碼器的實(shí)驗(yàn)與仿真 1.3-8譯碼器的logsim電路仿真實(shí)現(xiàn) 2.3-8譯碼器的邏輯真值表 3.3-8譯碼器的Verilog實(shí)現(xiàn) (1)代碼實(shí)現(xiàn) (2)RTL的電路生成 (3)QUartus的波形圖實(shí)現(xiàn) (4)ModelSim的波形圖實(shí)現(xiàn) 4.問題分析 二、全加器電路的實(shí)驗(yàn)與仿真 1.1-bit全加器電路的仿真實(shí)現(xiàn) (1)

    2024年02月04日
    瀏覽(10)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包