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

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

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

全網(wǎng)最實(shí)用的Verdi教程3

jf_78858299 ? 來源:芯片驗(yàn)證日記 ? 作者:芯片驗(yàn)證日記 ? 2023-05-05 14:53 ? 次閱讀

10、使用 Verdi 分析 NBA Delay 的問題

NBA 就是 NonBlocking Assignment,非阻塞賦值 的縮寫。它通常用來描述一個(gè)用時(shí)鐘沿觸發(fā)的寄存器。在 Verilog 普及早期,人們通常會(huì)在 NBA(Nonblocking Assignments) 的<= 之后加個(gè)單位延時(shí)#1來解決早期仿真器行為不一致的問題。

所謂習(xí)慣成自然,NBA Unit Delay 在某些設(shè)計(jì)中一直沿用下來,那么如何去理解這個(gè)延時(shí)的作用呢?SNUG 上的知名作者 Clifford E. Cummings 在 2002 年有篇文章闡述的挺詳細(xì)(Verilog Nonblocking Assignments With Delays, Myths & Mysteries)下面給出一些代碼片斷,同樣感興趣的朋友可以自己完善并用 VCS 仿真生成波形,然后用 Verdi 打開。

首先創(chuàng)建三個(gè)時(shí)鐘,注意兩個(gè)二分頻時(shí)鐘的創(chuàng)建方式不同。

always #(10/2) clk = ~clk;
 always #(20/2) clk_div2_direct = ~clk_div2_direct;

 always @ ( posedge clk or negedge rst_n ) begin
   if ( ~ rst_n ) begin
     clk_div2  <= 1'b0;
   end
   else begin
     clk_div2  <= ~clk_div2;
   end
 end

然后用 clk 觸發(fā)一個(gè)不停翻轉(zhuǎn)的寄存器 d1,再分別用兩個(gè)二分頻時(shí)鐘去采樣,保存在 d5 和 d6 中。

always @ ( posedge clk or negedge rst_n ) begin
  if ( ~ rst_n ) begin
    d1  <= 1'b0;
  end
  else begin
    d1  <= ~d1;
  end
end


always @ ( posedge clk_div2 or negedge rst_n ) begin
  if ( ~ rst_n ) begin
    d5 <= 1'b0;
  end
  else begin
    d5 <= d1;
  end
end


always @ ( posedge clk_div2_direct or negedge rst_n ) begin
  if ( ~ rst_n ) begin
    d6 <= 1'b0;
  end
  else begin
    d6 <= d1;
  end
end

用 VCS 仿真的時(shí)候,加上編譯時(shí)選項(xiàng)+fsdb+region和運(yùn)行時(shí)選項(xiàng)+fsdb+delta

然后用 Verdi 打開生成的 fsdb 波形。正常的話,可以看到 d5 和 d6 的波形是完全不同的,一個(gè)是常0,一個(gè)是常1。

圖片

只從上圖分析的話,兩個(gè)二分頻時(shí)鐘的波形是完全一致的,被采樣的數(shù)據(jù)是同一個(gè),那么采到的數(shù)據(jù)也應(yīng)該是相同的。但我們知道這兩個(gè)二分頻時(shí)鐘的生成方式是不同的,那么不同在什么地方呢?

在 Verdi 的 nWave 窗口中選中 View - Expand Delta - Region Mode,把 Cursor 移動(dòng)到二分頻時(shí)鐘的上升沿,然后點(diǎn)擊Expand/Collapse Time at Cursor,簡(jiǎn)單點(diǎn)的話直接按 w 鍵。

圖片

然后就可以看到這個(gè)仿真時(shí)刻的 Simulation Region,里面展示了各個(gè) Event 和 Region 的關(guān)系。

圖片

這個(gè)例子中,只存在綠色的Active Region 和 紅色的 NBA Region。在某些glitch debug的例子中,還能看到Re-Active Region和Re-NBA Region。

Region的展示可以幫助我們很好的理解Verilog 規(guī)范中的定義的信號(hào)調(diào)度。

此外,Verdi還可以通過點(diǎn)擊Tools - Event Sequence來顯示圖形化的Event序列。

圖片

圖片

11、數(shù)字信號(hào)模擬化呈現(xiàn)

Verdi 提供了既簡(jiǎn)單又直觀的操作,去繪制數(shù)字信號(hào)的模擬變化趨勢(shì)。尤其是在觀察周期性計(jì)數(shù)的數(shù)字信號(hào)時(shí),例如調(diào)制頻率的變化,還有 FIFO 讀寫地址的變化,這種方式基本是可以做到一目了然的。

操作方式:nWave 窗口菜單 - Waveform - Analog Waveform

圖片

對(duì)于 Verdi 這個(gè)工具來說,它對(duì)于數(shù)字信號(hào)本身的含義目前還沒有智能到可以自動(dòng)識(shí)別。所以我們需要指定特定數(shù)字信號(hào)的表示方式(Notation),是無符號(hào)、二補(bǔ)碼還是補(bǔ)碼等等。

操作方式:nWave 窗口菜單 - Waveform - Set Notation

圖片

12、手動(dòng)調(diào)節(jié)模擬波形的顯示范圍

還有一個(gè)可能遇到的局限性就是模擬波形的顯示范圍,Verdi 在繪制數(shù)字信號(hào)的模擬波形時(shí),默認(rèn)會(huì)按照整個(gè)波形的動(dòng)態(tài)范圍來繪圖。如果一個(gè)數(shù)字信號(hào)的初始值和工作時(shí)實(shí)際的動(dòng)態(tài)范圍差別很大,那么觀察實(shí)際工作時(shí)的模擬波形時(shí),波形變化的幅度相比整個(gè)動(dòng)態(tài)范圍就會(huì)太小,無法明了的看到小動(dòng)態(tài)范圍的變化趨勢(shì)。

還好Verdi提供了手動(dòng)調(diào)節(jié)顯示范圍的功能。

操作方式:nWave 窗口菜單 - Analog - Zoom Value...

圖片

根據(jù)需要調(diào)節(jié)上限和下限,調(diào)節(jié)過程中波形是實(shí)時(shí)更新的。

圖片

對(duì)比效果如下圖,第一個(gè)信號(hào)是默認(rèn)范圍的,動(dòng)態(tài)變化縮成一條直線了,沒有觀察價(jià)值。第二個(gè)信號(hào)是調(diào)整了范圍的,可以清楚的看到變化趨勢(shì)。第三個(gè)是原始的數(shù)字信號(hào)。

圖片

13、自動(dòng)調(diào)節(jié):切換 FSDB 文件

還有一個(gè)比較笨的解決方法是,寫出FSDB 文件時(shí),根據(jù)特定信號(hào),從數(shù)字信號(hào)開始動(dòng)態(tài)變化的時(shí)候,做一個(gè)文件切換。這樣就把數(shù)字信號(hào)初始化部分的波形分離出去。當(dāng)我們著重分析動(dòng)態(tài)變化的部分時(shí),就不需要加載初始化部分的波形。Verdi在繪制模擬波形的時(shí)候,只會(huì)看到小動(dòng)態(tài)范圍的數(shù)值,繪制出來的變化趨勢(shì)就足夠清楚了。

$fsdbDumpfile("tb_000.fsdb");
$fsdbDumpvars(0, tb);
@(posedge some_trigger_signal);
$fsdbSwitchDumpfile("tb_001.fsdb");

14、自動(dòng)調(diào)節(jié):加載特定時(shí)間范圍

當(dāng)然作為團(tuán)隊(duì)項(xiàng)目的螺絲釘,有時(shí)候不方便控制FSDB 文件的產(chǎn)生方式,那么在加載FSDB 文件的時(shí)候,可以選擇指定一個(gè)時(shí)間范圍。感謝讀者 @Erik Li 提供的這個(gè)技巧。

操作方式:nWave窗口菜單 - Open,選擇 FSDB 文件到 Target Name 后,點(diǎn)擊左下方的 Options... 按鈕。

圖片

在彈出的對(duì)話框中選中 Open File By Time Range,然后點(diǎn)擊 OK 按鈕。

圖片

再點(diǎn)擊 OK 按鈕,在彈出的對(duì)話框中就可以選擇感興趣的時(shí)間起止范圍了。

圖片

再分享一個(gè)最近才發(fā)現(xiàn)的 Verdi 調(diào)用參數(shù)

verdi -preTitle "some text"

螺絲釘做久了,需要同時(shí)打開的 Verdi 窗口數(shù)量與日俱增。怎么從密密麻麻的任務(wù)欄圖標(biāo)中找到要找的那個(gè),是個(gè)麻煩但不緊急的問題。除了貫徹?cái)嗌犭x、及時(shí)關(guān)閉短期內(nèi)不需要的窗口之外,用上面的選項(xiàng)為每一個(gè) Verdi 窗口做個(gè)簡(jiǎn)潔唯一的命名,也是一個(gè)不那么有效的解決之道。

15、跳轉(zhuǎn)到指定行號(hào)

其實(shí)日常的頻繁、快速地查看 Verilog 源代碼,一般是在獨(dú)立的文本編輯器中完成的。比如,VCS 編譯產(chǎn)生的 log 文件中,對(duì)應(yīng)的 Warning、Error 的后面會(huì)跟著相關(guān)源文件的路徑、行號(hào)。如果用的編輯器是版本比較新的 Vim,那么簡(jiǎn)單的 gF 指令就可以迅速的從 log 文件跳轉(zhuǎn)到對(duì)應(yīng)源文件,而且光標(biāo)會(huì)體貼的定位在出錯(cuò)行。如果是仍未默認(rèn)支持的舊版 Vim,那么自己可以添加一個(gè)函數(shù),可以參考這篇文章。

這種方式在門級(jí)仿真的場(chǎng)景中會(huì)不太靈光。因?yàn)殚T級(jí)網(wǎng)表通常都非常巨大,用 Vim 類的編輯器打開一次會(huì)非常緩慢,頻繁跳轉(zhuǎn)造成的等待就更難以接受了。

瀏覽門級(jí)網(wǎng)表諸如此類的超大文件,用 Verdi 是個(gè)不錯(cuò)的選擇。在 Verdi 的 Source 窗口中,如何快速跳轉(zhuǎn)到指定的行呢?

用鼠標(biāo)拖動(dòng)當(dāng)然是種辦法。但更快捷的是,在 Source 窗口下,按 g 鍵。會(huì)彈出一個(gè)小窗口,輸入行號(hào),點(diǎn)擊確定即可。

圖片

16、源文件之間或不同邏輯層次的切換

有時(shí)候在 Verdi 中需要頻繁的在兩個(gè) Verilog module 之間做切換,做一些對(duì)比的工作。如果這兩個(gè) module 所處的層次距離比較遠(yuǎn),那么快捷的切換就顯得特別重要了。這里介紹兩個(gè)小技巧。

第一個(gè)是利用 Verdi 支持多 Source Tab 的功能。在兩個(gè)不同的 Source Tab 中分別打開不同的 module,通過鼠標(biāo)切換 Source Tab 來實(shí)現(xiàn)源文件或者邏輯層次的切換。

打開新的 Source Tab 的比較方便的方法是,在感興趣的 Instance 上點(diǎn)擊右鍵,然后在右鍵菜單上點(diǎn)擊 Display Source Code in New Tab.

圖片

效果類似下圖:

圖片

第二個(gè)技巧是利用 VC Apps 中的Find Instance with Module Def Name。

首先打開 Tools 菜單中的 VC Apps Toolbox。

圖片

在 Design Exploration 目錄中找到上述名字的 App,然后雙擊執(zhí)行。

圖片

圖片

在出現(xiàn)的對(duì)話框中輸入感興趣的 module 名字,支持通配符。然后點(diǎn)擊確定。

圖片

在 Verdi 下部的調(diào)試窗口中會(huì)出現(xiàn)一個(gè)新的大概叫做 SmartLog 的頁面,其中列出了按照 module 名字搜索出來的所有 Instance。單擊某個(gè) Instance,Source 頁面就會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的地方。

圖片

重復(fù)執(zhí)行上述過程,但搜索不同的 module name,會(huì)形成獨(dú)立的 SmartLog 頁面。這樣通過切換 SmartLog 頁面,也可以很方便的在多個(gè)設(shè)計(jì)中切換。

17、計(jì)數(shù)

[1] Grid Options網(wǎng)格計(jì)數(shù)

可以指定在波形窗中繪制網(wǎng)格線。選項(xiàng)包括Rising Edge, Falling Edge和 Both Edges。View -> Grid Options 選中Grid on勾選 Grid Count with Start Number,默認(rèn)是0,也可以按需設(shè)置

圖片

如圖,以AXI_AWVALID上升沿為例,網(wǎng)格線下方出現(xiàn)了計(jì)數(shù),用于統(tǒng)計(jì)上升沿個(gè)數(shù)。

圖片

[2] 自動(dòng)計(jì)數(shù)

右擊AXI_WVALID信號(hào),選擇Add Counter Signal by,選擇上升沿、下降沿、任意沿中的一個(gè)。

圖片

選擇AXI_WVALID信號(hào)的上升沿為例子,波形中自動(dòng)添加一個(gè)counter用于統(tǒng)計(jì)。

圖片

[3] 還有個(gè)fsdb轉(zhuǎn)文本的功能:fsdbreport

18 verdi打開覆蓋率文件查看覆蓋率

打開一個(gè)verdi——>tools——>coverage;在新打開的界面中選擇——>file——>open/add database——>選擇相應(yīng)的.vdb文件——>more options——打開cov.hier文件

注:覆蓋率文件為.vdb文件;.hier文件為對(duì)應(yīng)工程目錄的層級(jí)結(jié)構(gòu)文件,對(duì)整理覆蓋率有幫助

19 查看包含的設(shè)計(jì)架構(gòu)

圖片

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

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68625
  • Verdi
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    8782
  • 芯片驗(yàn)證
    +關(guān)注

    關(guān)注

    5

    文章

    34

    瀏覽量

    47230
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    94

    瀏覽量

    19923
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)教VCS和verdi怎么聯(lián)合使用

    最近要用到VCS仿真后生成FSDB文件,然后在Verdi中進(jìn)行自動(dòng)偵錯(cuò),請(qǐng)問我怎么安裝Verdi這個(gè)軟件以及如何啟動(dòng)license,并且怎么寫testbench文件才可以產(chǎn)生FSDB文件。請(qǐng)懂得人給我支支招,我也是剛開始學(xué)習(xí)這個(gè)軟件的使用。
    發(fā)表于 01-22 14:53

    Verdi工具怎么安裝?如何破解?

    本文介紹Verdi工具的安裝及破解過程
    發(fā)表于 06-21 07:15

    VCS+Verdi如何安裝?怎么破解?

    VCS+Verdi如何安裝?怎么破解?
    發(fā)表于 06-21 06:11

    VCS仿真卡住,為什么無法生成verdi波形文件呢?

    在make com編譯成功后,terminal卡住了一直沒有反應(yīng),這是什么情況有大佬知道嗎?VCS仿真卡住,為什么無法生成verdi波形文件呢?
    發(fā)表于 06-21 08:14

    Verdi 54v7 LINUX

    Verdi 54v7 LINUX
    發(fā)表于 03-25 13:19 ?9次下載

    紅米Note3 全網(wǎng)通版原理框圖

    紅米Note3 全網(wǎng)通版原理框圖
    發(fā)表于 04-25 10:07 ?0次下載

    verdi-SP2軟件下載

    本文檔內(nèi)容提供了verdi-SP2軟件免費(fèi)下載,供有需要的朋友參考
    發(fā)表于 04-19 17:28 ?7次下載

    Verdi使用技巧 連續(xù)有效信號(hào)量測(cè)方法

    Verdi自動(dòng)化調(diào)試系統(tǒng)是Verdi SoC調(diào)試平臺(tái)的核心,它支持對(duì)所有設(shè)計(jì)和驗(yàn)證流程進(jìn)行全面的調(diào)試。它包括強(qiáng)大的技術(shù),幫助您理解復(fù)雜和不熟悉的設(shè)計(jì)行為,讓困難和乏味的調(diào)試過程自動(dòng)化,并能讓多樣和復(fù)雜的設(shè)計(jì)環(huán)境一致化。
    的頭像 發(fā)表于 05-15 15:46 ?9901次閱讀
    <b class='flag-5'>Verdi</b>使用技巧 連續(xù)有效信號(hào)量測(cè)方法

    如何通過自動(dòng)化腳本實(shí)現(xiàn)Questasim和Verdi的聯(lián)合仿真

    Verdi是用來仿真以及debug波形的工具,但它不能夠用來編譯verilog和systemverilog文件,所以需要借助第三方EDA工具去做編譯的工作。 這里主要分享一下使用questasim
    的頭像 發(fā)表于 06-13 17:00 ?4583次閱讀
    如何通過自動(dòng)化腳本實(shí)現(xiàn)Questasim和<b class='flag-5'>Verdi</b>的聯(lián)合仿真

    分享《verdi用法小結(jié)》的pdf

    分享Verdi用法小結(jié)的pdf文檔
    的頭像 發(fā)表于 02-18 20:21 ?1224次閱讀
    分享《<b class='flag-5'>verdi</b>用法小結(jié)》的pdf

    Verdi使用技巧(三)

    前一段時(shí)間IC君比較忙,沒有更新文章,最近稍微閑下來點(diǎn),繼續(xù)更新Verdi相關(guān)的文章。
    的頭像 發(fā)表于 04-25 14:44 ?4721次閱讀
    <b class='flag-5'>Verdi</b>使用技巧(三)

    全網(wǎng)最實(shí)用的Verdi教程1

    Verdi是一個(gè)功能強(qiáng)大的debug工具,可以配合不同的仿真軟件進(jìn)行debug,很多企業(yè)常用VCS+Verdi或者Xcelium/xrun+Verdi的方式進(jìn)行代碼的仿真與檢查。Verdi
    的頭像 發(fā)表于 05-05 14:49 ?1.7w次閱讀
    <b class='flag-5'>全網(wǎng)</b>最實(shí)用的<b class='flag-5'>Verdi</b>教程1

    全網(wǎng)最實(shí)用的Verdi教程2

    Verdi是一個(gè)功能強(qiáng)大的debug工具,可以配合不同的仿真軟件進(jìn)行debug,很多企業(yè)常用VCS+Verdi或者Xcelium/xrun+Verdi的方式進(jìn)行代碼的仿真與檢查。Verdi
    的頭像 發(fā)表于 05-05 14:53 ?8659次閱讀
    <b class='flag-5'>全網(wǎng)</b>最實(shí)用的<b class='flag-5'>Verdi</b>教程2

    Verdi環(huán)境配置、生成波形的方法

    Verdi是一個(gè)功能強(qiáng)大的debug工具,可以配合不同的仿真軟件進(jìn)行debug,很多企業(yè)常用的就是VCS+Verdi或或者Xcelium(xrun)+Verdi的方式進(jìn)行代碼的仿真與檢查
    的頭像 發(fā)表于 05-29 09:48 ?3963次閱讀
    <b class='flag-5'>Verdi</b>環(huán)境配置、生成波形的方法

    Verdi連續(xù)波激光器-Coherent

    描述: Verdi系列激光器,是基于OPSL專利技術(shù),是高功率的532nm綠光激光器。常用于鈦寶石激光器泵浦、全息、干涉、冷原子等領(lǐng)域。 Verdi系列激光器,是久負(fù)盛名的激光器,具有非常出色
    的頭像 發(fā)表于 06-30 09:47 ?542次閱讀
    <b class='flag-5'>Verdi</b>連續(xù)波激光器-Coherent