国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么才能寫出高覆蓋率的Verilog代碼?

電子工程師 ? 來源:硅農 ? 作者:硅農 ? 2021-06-01 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

芯片前端工程中,測試驗證的核心理念:以提高覆蓋率為核心。設計工程師需要關心的主要有行覆蓋率(Block),條件覆蓋率(Expression),翻轉覆蓋率(Toggle),狀態機覆蓋率。本文從ASIC設計的角度上來討論,如何寫出高覆蓋率的Verilog代碼。assign慎用按位運算邏輯,& | ^ ^~和三目運算符,慎用。使用這樣的描述方式本身功能并沒有什么問題,而且寫起來很爽,但是在很多情況下覆蓋率是真的不好收。

assign mult_a[3:0] = ({4{mult0_vld}} & mult_a0) | ({4{mult1_vld}} & mult_a1) | ({4{mult2_vld}} & mult_a2)

用或門和與門實現的一個選擇器的功能,前提是vld不能同時有效,相對于下面第二種寫法可能會節省一點門。但是問題我們在收集Expression時需要分析每一個條件是否跑到0/1,上面一共有六個信號,所以0、1隨機組合的情況就有2的6次方種,mult_a0作為數據端,如果沒有出現過全0的情況,通過定向case可以覆蓋到,但如果是參數作為選擇器的輸入端,那么參數本身就是有永遠不為0的情況,定向case也無法通過。

所以這個時候就只能把它waive(放棄)/exclude(排除)掉,并解釋原因。如果只有幾條這樣的寫法還好,如果有成百上千條,那么就需要重復上面的操作上千次。單純的體力活,沒有任何技術含量。但是直接換一種寫法。

always @(*)begin if(mult0_vld) mult_a[3:0] = mult_a0; else if(mult1_vld) mult_a[3:0] = mult_a1; else // if(mult2_vld) mult_a[3:0] = mult_a2;end

這樣寫覆蓋率只會檢查行覆蓋率,基本上哪一行沒跑到一目了然,也并不需要多余的體力勞動。代碼可讀性也很高。第二種可能會消耗更多的邏輯,但是對于整體的系統而言,也是不值一提的。換句話說,扣這一毛兩毛的,要抓大頭。if-else括號中的條件不要太多

always @(*)begin if(data_vld && mode_sel && enable_flag && (data_num[3:0] 》 4‘d7) && (ram_addr[4:0] 》 4’d15) && 。。。)end else 。。。

當然最開始的時候肯定不是這樣的設計,造成如此冗長的邏輯,大概率是后期調試打的補丁,可以把一些條件拿出來專門做一個信號,會讓條件覆蓋率分析容易很多,不然這么長的選擇,真不是給人看的。cur_state不可能同時出現在兩個狀態上在控制上用狀態機中,假如有這樣的邏輯。

assign enable = ((cur_state != STATE_A) && (next_state == STATE_A)) || ((cur_state != STATE_B) && (next_state == STATE_B))

這樣的寫法目的是在狀態跳轉時產生一個脈沖信號,不過在條件覆蓋率中會檢查這兩個選擇條件,cur_state != STATE_A為0與cur_state != STATE_B為0同時滿足的情況。仔細想一下,cur_state != STATE_A為0就代表cur_state現在就是STATE_A狀態,cur_state != STATE_B為0就是代表cur_state現在就是STATE_B狀態,那么,cur_state怎么可能同時為兩個狀態呢。這樣的情況要么就拆開寫要么就別寫。case語句的default分支考慮周全

always @(*)begin case(in[1:0]) 2‘d0 : data[1:0] = 2’d0; 2‘d1 : data[1:0] = 2’d1; 2‘d2 : data[1:0] = 2’d2; default : data[1:0] = 2‘d3; endcase end

case語句不寫default分支會產生鎖存器,如果case中的所有情況都達到,就可以不用寫default分支,但在ASIC設計中可能工具會報lint,所以這樣的寫法是最完美的。這樣的寫法對于in這個變量如果有規定取值范圍,哪一個值沒取到也一目了然。教科書式的反面教材

always @(*)begin if(start) cnt 《= ’d0; else if(((para == 3) && (cnt != 3)) || ((para == 4) && (cnt != 7)) || ((para == 5) && (cnt != 15)) || ((para == 6) && (cnt != 31))) cnt 《= cnt + 1‘d1;。。.end

這樣的寫法我愿稱之為教科書式的反面教材。首先,計數器的常規套路是給一個使能進行計數,記到一個值然后給清零,上面這樣的寫法是直接給一個使能信號清零,然后用未記到想要的最大值來做使能。第二點是,這樣的寫法和上面cur_state同時出現在兩個狀態上,是一樣的。else if里面的條件進行條件覆蓋率檢查,會出現cnt != 3 cnt != 7 cnt != 15 cnt != 31 兩兩之間或者及以上同時為0的隨機組合,那么cnt一個時刻只能是一個值,必不可能滿足同時等于多個值的情況。參數的取值范圍一個參數的取值范圍是0,1,2三個值,你做了一個這樣的vld

assign data_vld = (param == 0) || (param == 1) || (param == 2);

條件覆蓋率檢查會出現,上面三個條件都為0的情況,但是這個參數配置只有這三個值,不可能去其他值,也是一個典型的情況。換一種寫法。最后很多的代碼寫法,工具有smart exclude也會自動waive一些分支,不過工具也沒那么smart,還是需要自己在編碼的時候注意,盡量避免很多體力活。評論區支持互動回復蓋樓了,關于這個問題你還有什么想法,歡迎評論區留言交流。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    463

    文章

    53949

    瀏覽量

    465116
  • asic
    +關注

    關注

    34

    文章

    1273

    瀏覽量

    124436
  • 鎖存器
    +關注

    關注

    8

    文章

    956

    瀏覽量

    44517
  • 選擇器
    +關注

    關注

    0

    文章

    111

    瀏覽量

    15122

原文標題:如何寫出高覆蓋率的Verilog代碼?

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    芯片測試覆蓋率99%就夠了嗎?給DFT設計提個醒

    字邏輯的此項覆蓋率要求通常高于99%。但覆蓋率數字并不等同于高質量。故障模型本身有局限,無法覆蓋所有實際物理缺陷,如跨電源域的泄漏、少數晶體管單元的潛在性能衰退等。 模擬/混合信號測
    發表于 02-06 11:06

    汽車軟件質量躍遷的系統性路徑:基于ISO 26262標準的單元測試體系重構與中日實踐深度對比(2026學術研究報告

    豐田、本田等日本車企與比亞迪、蔚來等中國企業的實證數據,構建“單元測試覆蓋率-OTA召回成本-管理認知偏差”三維模型。研究發現: 日本車企通過CoverageMaster winAMS工具實現
    的頭像 發表于 01-05 15:21 ?452次閱讀

    汽車軟件質量躍遷的系統性路徑:基于ISO 26262標準的單元測試體系重構與中日實踐深度對比(2026學術研究報告)

    單元測試 集成后補測,30%模塊無覆蓋 覆蓋率目標 ASIL-D: ≥95%(2025年平均93.5%) ASIL-D:平均38%(頭部企業≤50%) 管理認知 質量總監具代碼否決權 項目經理以交付
    發表于 01-05 14:58

    嵌入式軟件單元測試中AI自動化與人工檢查的協同機制研究:基于專業工具的實證分析

    ? ?摘要****? 本文系統探討嵌入式軟件相較于通用軟件在單元測試層面的特殊性,分析其對覆蓋率、可追溯性與實時性驗證的嚴苛需求,并以專業工具winAMS為技術載體,深入研究AI驅動的自動化測試在
    發表于 12-31 11:22

    C語言單元測試在嵌入式軟件開發中的作用及專業工具的應用

    編譯器生成的中間代碼(如GCC/LLVM的IR層) 實現代碼結構與硬件行為的精準映射 可檢測寄存器位操作異常、中斷服務程序(ISR)時序沖突等深層缺陷 ?目標代碼覆蓋率驗證****
    發表于 12-18 11:46

    【產品介紹】Questa One Sim軟件

    優勢與平臺支持優勢行業領先的高性能多語言仿真器用于可測性設計(DFT)向量驗證的最快仿真器高性能、高容量的集成調試環境覆蓋率加速功能,助力更快實現覆蓋率收斂智能編譯(SmartCompile)和多核
    的頭像 發表于 11-17 10:39 ?662次閱讀
    【產品介紹】Questa One Sim軟件

    光譜成像用于草地可燃物含水估測的研究進展

    、空間覆蓋有限等問題。光譜成像技術(Hyperspectral Imaging, HSI)通過捕捉地物在可見光至短波紅外波段(400–1700 nm)的連續光譜信息,結合光譜特征與含水的物理關聯,為草地可燃物含水
    的頭像 發表于 10-20 11:44 ?250次閱讀

    AI賦能標準化流程:智能汽車軟件CI/CT最佳實踐新范式

    環節依然嚴重依賴人工用例,導致效率與覆蓋率難以滿足高頻迭代的需求。人工智能(AI)的引入,為這一困境提供了全新的最佳實踐范式:AI能夠基于需求自動生成覆蓋率的測
    的頭像 發表于 10-15 10:01 ?977次閱讀
    AI賦能標準化流程:智能汽車軟件CI/CT最佳實踐新范式

    嵌入式軟件測試與專業測試工具的必要性深度解析

    系統化解決方案,其必要性體現在多個維度:滿足行業合規要求汽車電子ISO 26262、航空DO-178C等標準強制要求代碼覆蓋率指標達到C1(分支覆蓋)≥100%、MC/DC(修正條件判定覆蓋
    發表于 09-28 17:42

    HarmonyOSAI編程單元測試用例

    根據選中的ArkTS方法名稱,CodeGenie支持自動生成對應單元測試用例,提升測試覆蓋率。 在ArkTS文檔中,光標放置于方法名稱上或框選完整的待測試方法代碼塊,右鍵選擇CodeGenie
    發表于 08-27 14:33

    AI的未來,屬于那些既能寫代碼,又能焊電路的“雙棲人才”

    AI的未來,屬于那些既能寫代碼,又能焊電路的“雙棲人才”——來自WAIC 2025的一線觀察2025年7月,上海世博中心,**第七屆世界人工智能大會(WAIC 2025)**上,我們看到一個格外清晰
    發表于 07-30 16:15

    太陽光模擬器關鍵參數 | 光譜匹配度、光譜覆蓋率及光譜偏離

    太陽光模擬器作為模擬太陽輻射環境的核心設備,其性能直接關系到諸多領域實驗數據的可靠性。光譜匹配度(SMD)、光譜覆蓋率(SPC)和光譜偏離(SPD)作為評估其性能的關鍵指標,從不同維度決定了模擬
    的頭像 發表于 07-24 11:26 ?1113次閱讀
    太陽光模擬器關鍵參數 | 光譜匹配度、光譜<b class='flag-5'>覆蓋率</b>及光譜偏離<b class='flag-5'>率</b>

    太陽光模擬器性能的影響參數:光譜匹配度、光譜覆蓋率及光譜偏離

    (SPC)用于評估太陽光模擬器對 AM1.5G 標準光譜的覆蓋程度,重點關注模擬器是否能完整復現標準光譜的各個波段,不同材料對光譜覆蓋的需求存在顯著差異。 光譜覆蓋率對太陽光模擬器性能的影響
    發表于 07-21 15:35

    HarmonyOS AI輔助編程工具(CodeGenie)代碼測試

    本功能從DevEco Studio 5.1.0 Release版本開始支持。 根據選中的ArkTS方法名稱,CodeGenie支持自動生成對應單元測試用例,提升測試覆蓋率。 在ArkTS文檔中,光標
    發表于 07-14 17:33

    智行者蝸小白SC80地庫版開啟地下空間清潔新紀元

    在流動的車位與交錯的車道間,傳統清潔總在追逐"覆蓋率"與"安全性"的平衡。如今,智行者用算法給出了新答案。
    的頭像 發表于 04-09 15:47 ?1039次閱讀