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

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

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

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

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

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

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

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

首先創(chuàng)建三個時鐘,注意兩個二分頻時鐘的創(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ā)一個不停翻轉的寄存器 d1,再分別用兩個二分頻時鐘去采樣,保存在 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 仿真的時候,加上編譯時選項+fsdb+region和運行時選項+fsdb+delta。

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

圖片

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

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

圖片

然后就可以看到這個仿真時刻的 Simulation Region,里面展示了各個 Event 和 Region 的關系。

圖片

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

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

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

圖片

圖片

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

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

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

圖片

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

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

圖片

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

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

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

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

圖片

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

圖片

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

圖片

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

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

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

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

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

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

圖片

在彈出的對話框中選中 Open File By Time Range,然后點擊 OK 按鈕。

圖片

再點擊 OK 按鈕,在彈出的對話框中就可以選擇感興趣的時間起止范圍了。

圖片

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

verdi -preTitle "some text"

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

15、跳轉到指定行號

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

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

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

用鼠標拖動當然是種辦法。但更快捷的是,在 Source 窗口下,按 g 鍵。會彈出一個小窗口,輸入行號,點擊確定即可。

圖片

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

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

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

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

圖片

效果類似下圖:

圖片

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

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

圖片

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

圖片

圖片

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

圖片

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

圖片

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

17、計數(shù)

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

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

圖片

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

圖片

[2] 自動計數(shù)

右擊AXI_WVALID信號,選擇Add Counter Signal by,選擇上升沿、下降沿、任意沿中的一個。

圖片

選擇AXI_WVALID信號的上升沿為例子,波形中自動添加一個counter用于統(tǒng)計。

圖片

[3] 還有個fsdb轉文本的功能:fsdbreport

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

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

注:覆蓋率文件為.vdb文件;.hier文件為對應工程目錄的層級結構文件,對整理覆蓋率有幫助

19 查看包含的設計架構

圖片

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

    關注

    30

    文章

    4722

    瀏覽量

    68236
  • Verdi
    +關注

    關注

    0

    文章

    22

    瀏覽量

    8755
  • 芯片驗證
    +關注

    關注

    5

    文章

    34

    瀏覽量

    47180
  • DEBUG
    +關注

    關注

    3

    文章

    89

    瀏覽量

    19849
收藏 人收藏

    評論

    相關推薦

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

    最近要用到VCS仿真后生成FSDB文件,然后在Verdi中進行自動偵錯,請問我怎么安裝Verdi這個軟件以及如何啟動license,并且怎么寫testbench文件才可以產(chǎn)生FSDB文件。請懂得人給我支支招,我也是剛開始學習這個軟件的使用。
    發(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卡住了一直沒有反應,這是什么情況有大佬知道嗎?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ā)表于 04-19 17:28 ?7次下載

    Verdi使用技巧 連續(xù)有效信號量測方法

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

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

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

    分享《verdi用法小結》的pdf

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

    Verdi使用技巧(三)

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

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

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

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

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

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

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

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

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