日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog如何避免Latch

發布時間:2024/10/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog如何避免Latch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鎖存器(Latch)產生的原因:

  • 目錄

    1.if結構不完整

    2.case結構不完整

    3.敏感信號列表不完整


  • Latch的危害:

  • 輸入狀態可能多次變化,容易在輸入信號產生毛刺,會增加電路的不穩定性;
  • 使得靜態時序變得更難分析。
  • 1.if結構不完整

    例如: module module_Latch1 (input in,en,output reg q );always @(*) beginif (en)?q=in;end? ? ?? endmodule

    由于if語句中缺少else,系統會默認else分支下的輸出q會保持不變,即具有寄存器的功能,所以寄存器q會被綜合成Latch。

    避免方法:

    補全if-case結構

    module module_Latch1 (input in,en,output reg q );always @(*) beginif (en)?q=in;elseq=1'b0;end endmodule

    賦初值

    module tmodule_Latch1 (input in,en,output reg q );always @(*) beginq=1'b0;? //給q賦初值0if (en)?q=in;end endmodule

    如果en為真,in賦值給q,否則q會保持為0。

    2.case結構不完整

    case語句產生Latch的原理和if語句幾乎一致。當case列表不完整且沒有在末尾加default,或者有多個賦值語句不完整時會產生Latch。

    例子:

    module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;endcaseendendmodule

    避免方法也是兩種:

    補全case列表

    module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;2'b10,2'b11:y=1'b0;endcaseendendmodule

    或者在末尾加default

    module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;default:y=1'b0;endcaseendendmodule

    建議就算列出所有的case列表,也在末尾加上default關鍵詞,這樣不僅可以在寫Verilog的時候避免Latch的出現,在修改的時候也可以避免每次都要驗證是否列出了所有case列表。

    3.敏感信號列表不完整

    如果組合邏輯內的always@()括號內的敏感列表沒有列全,該觸發的時候會觸發不了,那么相關的寄存器還是會保存之前的結果,因而會產生Latch。

    解決方法也很簡單,就是直接用always @(*)。

    總結

    以上是生活随笔為你收集整理的Verilog如何避免Latch的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。