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

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

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

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

高覆蓋率的Verilog代碼的編寫(xiě)技巧

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-05-26 17:30 ? 次閱讀

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

assign mult_a[3:0] = ({4{mult0_vld}} & mult_a0)       
     | ({4{mult1_vld}} & mult_a1)    
        | ({4{mult2_vld}} & mult_a2)
用或門(mén)和與門(mén)實(shí)現(xiàn)的一個(gè)選擇器的功能,前提是vld不能同時(shí)有效,相對(duì)于下面第二種寫(xiě)法可能會(huì)節(jié)省一點(diǎn)門(mén)。 但是問(wèn)題我們?cè)谑占疎xpression時(shí)需要分析每一個(gè)條件是否跑到0/1,上面一共有六個(gè)信號(hào),所以0、1隨機(jī)組合的情況就有2的6次方種,mult_a0作為數(shù)據(jù)端,如果沒(méi)有出現(xiàn)過(guò)全0的情況,通過(guò)定向case可以覆蓋到,但如果是參數(shù)作為選擇器的輸入端,那么參數(shù)本身就是有永遠(yuǎn)不為0的情況,定向case也無(wú)法通過(guò)。 所以這個(gè)時(shí)候就只能把它waive(放棄)/exclude(排除)掉,并解釋原因。如果只有幾條這樣的寫(xiě)法還好,如果有成百上千條,那么就需要重復(fù)上面的操作上千次。單純的體力活,沒(méi)有任何技術(shù)含量。但是直接換一種寫(xiě)法。
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
這樣寫(xiě)覆蓋率只會(huì)檢查行覆蓋率,基本上哪一行沒(méi)跑到一目了然,也并不需要多余的體力勞動(dòng)。代碼可讀性也很高。第二種可能會(huì)消耗更多的邏輯,但是對(duì)于整體的系統(tǒng)而言,也是不值一提的。換句話說(shuō),扣這一毛兩毛的,要抓大頭。 if-else括號(hào)中的條件不要太多
always @(*)begin  if(data_vld && mode_sel && enable_flag && (data_num[3:0] > 4'd7) && (ram_addr[4:0] > 4'd15) && ...)end  else ...
當(dāng)然最開(kāi)始的時(shí)候肯定不是這樣的設(shè)計(jì),造成如此冗長(zhǎng)的邏輯,大概率是后期調(diào)試打的補(bǔ)丁,可以把一些條件拿出來(lái)專門(mén)做一個(gè)信號(hào),會(huì)讓條件覆蓋率分析容易很多,不然這么長(zhǎng)的選擇,真不是給人看的。 cur_state不可能同時(shí)出現(xiàn)在兩個(gè)狀態(tài)上 在控制上用狀態(tài)機(jī)中,假如有這樣的邏輯。
assign enable = ((cur_state != STATE_A) && (next_state == STATE_A)) 
   || ((cur_state != STATE_B) && (next_state == STATE_B))
這樣的寫(xiě)法目的是在狀態(tài)跳轉(zhuǎn)時(shí)產(chǎn)生一個(gè)脈沖信號(hào),不過(guò)在條件覆蓋率中會(huì)檢查這兩個(gè)選擇條件,cur_state != STATE_A為0與cur_state != STATE_B為0同時(shí)滿足的情況。 仔細(xì)想一下,cur_state != STATE_A為0就代表cur_state現(xiàn)在就是STATE_A狀態(tài),cur_state != STATE_B為0就是代表cur_state現(xiàn)在就是STATE_B狀態(tài),那么,cur_state怎么可能同時(shí)為兩個(gè)狀態(tài)呢。 這樣的情況要么就拆開(kāi)寫(xiě)要么就別寫(xiě)。 case語(yǔ)句的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語(yǔ)句不寫(xiě)default分支會(huì)產(chǎn)生鎖存器,如果case中的所有情況都達(dá)到,就可以不用寫(xiě)default分支,但在ASIC設(shè)計(jì)中可能工具會(huì)報(bào)lint,所以這樣的寫(xiě)法是最完美的。 這樣的寫(xiě)法對(duì)于in這個(gè)變量如果有規(guī)定取值范圍,哪一個(gè)值沒(méi)取到也一目了然。 教科書(shū)式的反面教材
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
這樣的寫(xiě)法我愿稱之為教科書(shū)式的反面教材。首先,計(jì)數(shù)器的常規(guī)套路是給一個(gè)使能進(jìn)行計(jì)數(shù),記到一個(gè)值然后給清零,上面這樣的寫(xiě)法是直接給一個(gè)使能信號(hào)清零,然后用未記到想要的最大值來(lái)做使能。 第二點(diǎn)是,這樣的寫(xiě)法和上面cur_state同時(shí)出現(xiàn)在兩個(gè)狀態(tài)上,是一樣的。else if里面的條件進(jìn)行條件覆蓋率檢查,會(huì)出現(xiàn)cnt != 3 cnt != 7 cnt != 15 cnt != 31 兩兩之間或者及以上同時(shí)為0的隨機(jī)組合,那么cnt一個(gè)時(shí)刻只能是一個(gè)值,必不可能滿足同時(shí)等于多個(gè)值的情況。 參數(shù)的取值范圍 一個(gè)參數(shù)的取值范圍是0,1,2三個(gè)值,你做了一個(gè)這樣的vld
assign data_vld = (param == 0) || (param == 1) || (param == 2);
條件覆蓋率檢查會(huì)出現(xiàn),上面三個(gè)條件都為0的情況,但是這個(gè)參數(shù)配置只有這三個(gè)值,不可能去其他值,也是一個(gè)典型的情況。換一種寫(xiě)法。
編輯:黃飛

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

    關(guān)注

    28

    文章

    1352

    瀏覽量

    110443

原文標(biāo)題:如何寫(xiě)出高覆蓋率的Verilog代碼?

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文詳解Modelsim代碼覆蓋率功能使用

    作者:默宸? Modelsim代碼覆蓋率功能Code coverage,能報(bào)告出statement(語(yǔ)句)、branch(分支)、condition(條件)、expression(表達(dá)
    的頭像 發(fā)表于 12-09 11:45 ?5965次閱讀

    怎么用Vivado做覆蓋率分析

    在做仿真的時(shí)候往往會(huì)去做代碼覆蓋率和功能覆蓋率的分析,來(lái)保證仿真是做的比較充分完備的。
    的頭像 發(fā)表于 01-03 12:34 ?1849次閱讀
    怎么用Vivado做<b class='flag-5'>覆蓋率</b>分析

    如何改善5G覆蓋率

    改善5G覆蓋率的方法
    發(fā)表于 12-15 07:52

    嵌入式仿真平臺(tái)SkyEye的覆蓋率分析相關(guān)資料下載

    代碼執(zhí)娜行覆蓋情況的功能,來(lái)檢測(cè)代碼中未執(zhí)行覆蓋情況。在覆蓋率分析時(shí)需要分析嵌入式軟件的指令覆蓋率
    發(fā)表于 12-17 07:27

    關(guān)于SpinalHDL中的驗(yàn)證覆蓋率收集簡(jiǎn)單說(shuō)明

    在做RTL仿真驗(yàn)證時(shí),覆蓋率收集往往是我們?cè)隍?yàn)證中需要注意的地方,本篇就SpinalHDL中的驗(yàn)證覆蓋率收集做一個(gè)簡(jiǎn)單說(shuō)明。sbt配置在SpinalHDL里進(jìn)行仿真驗(yàn)證時(shí),我們的待測(cè)試代碼會(huì)生
    發(fā)表于 06-24 15:56

    重點(diǎn)厘清覆蓋率相關(guān)的概念以及在芯片開(kāi)發(fā)流程中跟覆蓋率相關(guān)的事項(xiàng)

    全盤(pán)考量。而覆蓋率,就是芯片工程中,評(píng)審體系需要重點(diǎn)參考的一項(xiàng)技術(shù)指標(biāo),但也只是驗(yàn)證相關(guān)的其中一項(xiàng)。目前被業(yè)界廣泛采用的覆蓋率指標(biāo)有功能覆蓋率(Function Coverage)和代碼
    發(fā)表于 09-14 11:57

    Verilog代碼覆蓋率檢查

    Verilog代碼覆蓋率檢查是檢查驗(yàn)證工作是否完全的重要方法,代碼覆蓋率(codecoverge)可以指示
    發(fā)表于 04-29 12:35 ?8494次閱讀

    嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通常基于測(cè)試過(guò)程中已檢查的程序源代碼比例計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 01-06 15:06 ?3239次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    嵌入式代碼覆蓋率如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通常基于測(cè)試過(guò)程中已檢查的程序源代碼比例 計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 01-09 11:12 ?3138次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)

    統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通常基于測(cè)試過(guò)程中已檢查的程序源代碼比例計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 03-29 11:58 ?2014次閱讀
    統(tǒng)計(jì)嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的方法和經(jīng)驗(yàn)

    怎么才能寫(xiě)出覆蓋率Verilog代碼

    設(shè)計(jì)的角度上來(lái)討論,如何寫(xiě)出覆蓋率Verilog代碼。assign慎用按位運(yùn)算邏輯, | ^ ^~和三目運(yùn)算符,慎用。使用這樣的描述方式本身功能并沒(méi)有什么問(wèn)題,而且寫(xiě)起來(lái)很爽,但是
    的頭像 發(fā)表于 06-01 10:13 ?2688次閱讀

    更好地測(cè)量代碼覆蓋率的 9 個(gè)技巧

    測(cè)量代碼覆蓋率對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)越來(lái)越重要,但需要一些經(jīng)驗(yàn)。這是因?yàn)橛幸恍┱系K需要克服,尤其是小目標(biāo)。但是,使用正確的方法和合適的工具,無(wú)需過(guò)多努力即可測(cè)量測(cè)試覆蓋率。九個(gè)實(shí)用技巧可幫助您入門(mén)
    的頭像 發(fā)表于 07-14 15:58 ?3089次閱讀
    更好地測(cè)量<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的 9 個(gè)技巧

    代碼覆蓋率工具的重要性

    測(cè)試覆蓋率是軟件質(zhì)量的重要指標(biāo),也是軟件維護(hù)的重要組成部分。它通過(guò)提供不同承保項(xiàng)目的數(shù)據(jù)來(lái)幫助評(píng)估測(cè)試的有效性。這種洞察力允許通過(guò)為未經(jīng)測(cè)試的代碼定義新的測(cè)試用例來(lái)改進(jìn)測(cè)試,從而提高代碼質(zhì)量,最終增加
    的頭像 發(fā)表于 12-08 15:13 ?1529次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>工具的重要性

    Vivado仿真器和代碼覆蓋率簡(jiǎn)析

    編寫(xiě) HDL 通常是 FPGA 開(kāi)發(fā)中耗時(shí)最少的部分,最具挑戰(zhàn)性和最耗時(shí)的部分可能是驗(yàn)證。根據(jù)最終應(yīng)用程序,驗(yàn)證可能非常簡(jiǎn)單,也可能非常復(fù)雜,簡(jiǎn)單的話只需對(duì)大多數(shù)功能進(jìn)行檢查或執(zhí)行完全獨(dú)立開(kāi)發(fā)的測(cè)試平臺(tái)來(lái)演示功能和代碼覆蓋率
    的頭像 發(fā)表于 08-03 09:23 ?2140次閱讀
    Vivado仿真器和<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>簡(jiǎn)析

    代碼覆蓋率記錄

    為確保具體的產(chǎn)品(例如,醫(yī)療或航空電子市場(chǎng))質(zhì)量合格, 通常需要提供語(yǔ)句覆蓋與判定覆蓋認(rèn)證證明。對(duì)于各種嵌 入式系統(tǒng),規(guī)范要求高度優(yōu)化的代碼需要實(shí)時(shí)測(cè)試。禁止 代碼插裝和運(yùn)行時(shí)篡
    發(fā)表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>記錄
    主站蜘蛛池模板: 免费视频在线播放 | 性视频在线 | 91中文在线| 日本a级三级三级三级久久 日本a级影院 | 色偷偷成人网免费视频男人的天堂 | 美女一级牲交毛片视频 | 一级片免费视频 | 大尺度很肉污的古代小说 | 国产一级特黄aaa大片 | semimi亚洲综合在线观看 | 天天射天天摸 | 天天舔天天干天天操 | 一级毛片aaaaaa免费看 | 奇米四色777亚洲图 奇米影视四色首页手机在线 | 在线天堂资源 | 超刺激gay腐文h文 | 亚洲成av人片在线观看无码 | 欧美性xxxx极品高清 | 美国色综合| 久久国产高清字幕中文 | 国产色婷婷精品免费视频 | 高清一级做a爱视频免费 | 手机在线看片国产日韩生活片 | 日本a级片在线播放 | 午夜69成人做爰视频网站 | 欧洲性开放大片免费观看视频 | 中出丰满大乳中文字幕 | 特黄视频 | 欧美性生交xxxxx久久久 | 啪啪午夜视频 | 天天干 夜夜操 | 亚州一级毛片在线 | 操到喷水 | 一区三区三区不卡 | 色老头网址 | 成人av.com| 亚洲免费观看视频 | 黄色一级片在线观看 | 毛片新网址 | 国产精品久久久久久久久久影院 | 国模精品视频一区二区三区 |