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

FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除

這篇具有很好參考價(jià)值的文章主要介紹了FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、鎖存器的產(chǎn)生

??鎖存器的產(chǎn)生主要有以下兩種情況:(1)組合邏輯中使用保持狀態(tài);(2)組合邏輯中的if-else語句或case語句未列出所有可能性;

1.1 組合邏輯中使用保持狀態(tài)

assign data_out = valid ? data_in : data_out; //變量保持當(dāng)前值
always @(*) begin
    if(valid)
        data_out = data_in;
    else
        data_out = data_out; //變量保持當(dāng)前值
end

1.2 組合邏輯中的if-else語句或case語句未列出所有可能性

??對于組合邏輯中,如果使用if-else語句,未補(bǔ)全else語句,則默認(rèn)在其他條件下,數(shù)據(jù)均保持為原來的狀態(tài),那么也會產(chǎn)生鎖存器。

//if-else語句缺少else
always @(*) begin
    if(valid)
        data_out = data_in;
end

??而如果在組合邏輯中使用case語句,未列出case中條件所有的可能性,則相當(dāng)于對于未列出的那些情況,數(shù)據(jù)均保持為原來的狀態(tài),也會產(chǎn)生鎖存器。

//case語句未列出所有可能性
always @(*) begin
    case(sel)
        2'b00: data_out = 2'b00;
        2'b01: data_out = data_in;
    endcase
end

1.3 小結(jié)

??那么,總而言之,言而總之。對于鎖存器,其產(chǎn)生的原因可以總結(jié)為一點(diǎn):想要通過組合邏輯保持?jǐn)?shù)據(jù)不變。對于組合邏輯的實(shí)現(xiàn),我們可以認(rèn)為它是用很多門電路搭建而成的,那么,門電路與寄存器不同,其不具有保持當(dāng)前狀態(tài)的功能。也就是說,構(gòu)成當(dāng)前組合邏輯的電路中任何一個信號發(fā)生改變,都會導(dǎo)致輸出結(jié)果發(fā)生改變。如果要通過組合邏輯實(shí)現(xiàn)保持?jǐn)?shù)據(jù)的不變,那就只能產(chǎn)生鎖存器了(可以參考《數(shù)字電子技術(shù)基礎(chǔ)》第五版的SR觸發(fā)器)。

二、鎖存器的避免

??我們知道了鎖存器的產(chǎn)生原因,就可以對癥下藥,在編寫Verilog代碼時(shí)注意編碼風(fēng)格,即可避免鎖存器的產(chǎn)生。

(1)在組合邏輯中使用if-else語句時(shí)補(bǔ)全else語句

always @(*) begin
    if(sel)
        data_out = data_in;
    else
        data_out = 2'b00;
end

(2)在組合邏輯中使用case語句時(shí),設(shè)置默認(rèn)狀態(tài)default,并默認(rèn)狀態(tài)下的數(shù)據(jù)進(jìn)行賦值

always @(*) begin
    case(sel)
        xxx: data_out <= 2'b01;
        xxx: data_out <= data_in;
        default: data_out = 2'b00;
    endcase
end

(3)在組合邏輯中,不可一個變量賦值給變量自身

//錯誤示例
always @(*) begin
    if(sel)
        data_out = data_in;
    else
        data_out = data_out; //變量賦值給變量自身
end

//正確示例
always @(*) begin
    if(sel)
        data_out = data_in;
    else
        data_out = 2'b00; //需要賦值一個準(zhǔn)確的數(shù)值或者其他變量
end

三、鎖存器的消除

??在FPGA設(shè)計(jì)過程中,有可能出現(xiàn)一些情況,必須使用組合邏輯,保證其實(shí)時(shí)性,且需要保持?jǐn)?shù)據(jù)不變,保證其他運(yùn)算的正確性。那么又該如何處理?

3.1 情況一

??假如我們要實(shí)現(xiàn)如下面時(shí)序圖所示功能,輸出data_out在有效信號valid的上升沿處鎖存輸入data_in的值,那么要如何實(shí)現(xiàn)?

FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除

??最開始考慮的是采用時(shí)序邏輯進(jìn)行實(shí)現(xiàn),代碼如下。

always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        data_out <= 'd0;
    else if(valid)
        data_out <= data_in;
    else
        data_out <= data_out;
end

??那么,采用時(shí)序邏輯實(shí)現(xiàn),會導(dǎo)致延遲一怕,無法在有效信號valid的上升沿鎖存數(shù)據(jù),如下圖所示。
FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除

??于是考慮使用組合邏輯進(jìn)行實(shí)現(xiàn),代碼如下。

assign data_out = valid ? data_in : data_out;

??但是組合邏輯要實(shí)現(xiàn)保持狀態(tài),必然會產(chǎn)生鎖存器。綜合后會再M(fèi)essages界面會警告出現(xiàn)鎖存器,同時(shí)在Schematic中也可以看到出現(xiàn)了鎖存器,如下圖所示。而在我們的設(shè)計(jì)中,我們是不希望出現(xiàn)鎖存器的,因?yàn)槠洳焕跁r(shí)序分析。

FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除
FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除

??那么,也可以采用組合邏輯+時(shí)序邏輯的方式實(shí)現(xiàn),通過多使用一部分寄存器資源,來實(shí)現(xiàn)在valid上升沿處進(jìn)行數(shù)據(jù)采樣,且不產(chǎn)生鎖存器,代碼如下。重新綜合后,可見鎖存器消失,同時(shí)可以對齊進(jìn)行仿真,時(shí)序符合前面的要求。

reg     [3:0]    r_data_in;

always @(posedge sys_clk or negedge sys_rst_n)
    if(!sys_rst_n)
        r_data_in <= 'd0;
    else
        r_data_in <= data_in;

assign data_out = valid ? data_in ? r_data_in;

FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除文章來源地址http://www.zghlxwxcb.cn/news/detail-436597.html

到了這里,關(guān)于FPGA設(shè)計(jì)中鎖存器產(chǎn)生、避免與消除的文章就介紹完了。如果您還想了解更多內(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」基本時(shí)序電路元件——鎖存器和觸發(fā)器

    「FPGA」基本時(shí)序電路元件——鎖存器和觸發(fā)器

    FPGA是一種數(shù)字電路實(shí)現(xiàn)的方式,它是基于小型查找表(16X1)設(shè)計(jì)的,它的兄弟CPLD是基于高密度復(fù)雜組合邏輯設(shè)計(jì)的。FPGA的一個優(yōu)點(diǎn)是觸發(fā)器資源豐富,適合實(shí)現(xiàn)復(fù)雜的時(shí)序設(shè)計(jì)。本文將從 門級電路 的角度來介紹時(shí)序電路的基本結(jié)構(gòu),鎖存器(Latch)和觸發(fā)器(flip-flop)。

    2024年02月11日
    瀏覽(21)
  • FPGA結(jié)構(gòu):LATCH(鎖存器)和 FF(觸發(fā)器)介紹

    FPGA結(jié)構(gòu):LATCH(鎖存器)和 FF(觸發(fā)器)介紹

    如果你想學(xué)習(xí)有關(guān)FPGA的專業(yè)術(shù)語,可以參考這一篇:FPGA專業(yè)術(shù)語介紹 一句話概括,能夠存儲一個狀態(tài)的數(shù)字電路叫做鎖存器。 以下是最為基本的一個RS鎖存器的具體結(jié)構(gòu): 以下是它的真值表,其中X表示不確定/無效: R {R} R (清零) S {S} S (置位) Q ( t ) {Q(t)} Q ( t ) (上一時(shí)刻的

    2024年01月25日
    瀏覽(19)
  • FPGA中鎖存器(latch)、觸發(fā)器(flip-flop)以及寄存器(register)詳解

    FPGA中鎖存器(latch)、觸發(fā)器(flip-flop)以及寄存器(register)詳解

    1 定義 1.1 鎖存器(latch) ????鎖存器是一種由電平觸發(fā)的存儲單元,為異步電路,數(shù)據(jù)存儲的動作取決于輸入信號的電平值,只要輸入發(fā)生變化,輸出即隨之發(fā)生變化。 1.2 觸發(fā)器(flip-flop) ????觸發(fā)器是邊沿敏感的存儲單元,數(shù)據(jù)存儲的動作由某一信號的上升或者下降

    2024年02月12日
    瀏覽(28)
  • 什么是好的FPGA編碼風(fēng)格?(3)--盡量不要使用鎖存器Latch

    什么是好的FPGA編碼風(fēng)格?(3)--盡量不要使用鎖存器Latch

    在FPGA設(shè)計(jì)中,幾乎沒人會主動使用 鎖存器Latch ,但有時(shí)候不知不覺中你的設(shè)計(jì)莫名其妙地就生成了一堆Latch,而這些Latch可能會給你帶來巨大的麻煩。 Latch,鎖存器,一種可以存儲電路狀態(tài)信息的組合邏輯元件,和同樣可以保存電路狀態(tài)的時(shí)序邏輯元件–觸發(fā)器(Flip-Flop,

    2024年02月05日
    瀏覽(18)
  • 【IC設(shè)計(jì)】時(shí)序邏輯的基礎(chǔ)—鎖存器、觸發(fā)器

    【IC設(shè)計(jì)】時(shí)序邏輯的基礎(chǔ)—鎖存器、觸發(fā)器

    波形圖中,表達(dá)時(shí)序邏輯時(shí)如果時(shí)鐘和數(shù)據(jù)是對齊的,則默認(rèn)當(dāng)前時(shí)鐘沿采集到的數(shù)據(jù)位在該時(shí)鐘上升沿前一時(shí)刻的值。表達(dá)組合邏輯時(shí)如果時(shí)鐘和數(shù)據(jù)是對齊的,則默認(rèn)當(dāng)前時(shí)鐘沿采集到的數(shù)據(jù)為該始終上升沿同一時(shí)刻的值。 組合邏輯和時(shí)序邏輯的區(qū)別 : 主要是看 數(shù)據(jù)工

    2024年02月03日
    瀏覽(50)
  • educoder數(shù)字邏輯實(shí)訓(xùn):鎖存器和觸發(fā)器設(shè)計(jì)(Logisim)

    educoder數(shù)字邏輯實(shí)訓(xùn):鎖存器和觸發(fā)器設(shè)計(jì)(Logisim)

    第1關(guān):基本SR鎖存器的設(shè)計(jì) 任務(wù)描述 本關(guān)任務(wù):在Logisim中,構(gòu)建由兩個或非門構(gòu)成的基本SR鎖存器。 第2關(guān):門控SR鎖存器的設(shè)計(jì)? 任務(wù)描述 本關(guān)任務(wù):在Logisim中,在基本鎖存器的基礎(chǔ)上構(gòu)建門控SR鎖存器。 第3關(guān):與非門構(gòu)成的門控SR鎖存器的設(shè)計(jì)? 任務(wù)描述 本關(guān)任務(wù):在

    2024年02月04日
    瀏覽(40)
  • 【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)
  • 鎖存器、D觸發(fā)器、寄存器理解

    鎖存器、D觸發(fā)器、寄存器理解

    1、鎖存器 ? ? ? ?鎖存器對脈沖的電平敏感,也就是電平觸發(fā),在有效的電平下,鎖存器處于使能狀態(tài),輸出隨著輸入發(fā)生變化,此時(shí)它不鎖存信號,就像一個緩沖器一樣;在鎖存器沒有使能時(shí),則數(shù)據(jù)被鎖住,輸入信號不起作用,此時(shí)輸出一直為鎖存的狀態(tài)信息(鎖存最后

    2024年02月09日
    瀏覽(28)
  • 數(shù)字電路基礎(chǔ)---鎖存器

    數(shù)字電路基礎(chǔ)---鎖存器

    目錄 鎖存器 1、簡介 2、實(shí)驗(yàn)任務(wù) 3、程序設(shè)計(jì) 3.1、缺少 else 分支的鎖存器代碼 3.2、補(bǔ)齊?else 分支 3.3、缺少 default 的 case 語句的鎖存器代碼 3.3、補(bǔ)齊 default 的 case 語句 4、本章總結(jié) ? ? ? ?鎖存器(俗稱 Latch) 是數(shù)字電路中的一種具有記憶功能的邏輯元件。鎖存器對脈沖電

    2024年02月10日
    瀏覽(14)
  • 【STM32】鎖存器

    【STM32】鎖存器

    在學(xué)習(xí)FSMC控制外部NOR存儲器時(shí),看到在NOR復(fù)用接口模式下,AD信號[15:0]是復(fù)用的。也就是說,若不使用鎖存器:當(dāng)NADV為低時(shí),ADx(x=0…15)上出現(xiàn)地址信號Ax,當(dāng)NADV變高時(shí),ADx上出現(xiàn)數(shù)據(jù)信號Dx。若使用鎖存器:可同時(shí)在ADx上得到Ax和Dx。 復(fù)用模式:低16位數(shù)據(jù)/地址線復(fù)用。在該模

    2024年02月10日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包