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

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

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

3天內不再提示

編寫高效Testbench的指南和示例

FPGA研究院 ? 來源:FPGA技術實戰 ? 2024-10-29 16:14 ? 次閱讀

引言:Testbench是驗證HDL設計的主要手段,本文提供了布局和構建高效Testbench的指南以及示例。另外,本文還提供了一種示例,可以為任何設計開發自檢Testbench。

1. 概述

由于FPGA設計規模和復雜性的增加,數字設計驗證已成為一項越來越困難和費力的任務。為了應對這一挑戰,驗證工程師依靠多種驗證工具和方法。對于大型、數百萬門的設計,工程師通常使用一套正式的驗證工具。然而,對于較小的設計,設計工程師通常使用帶有Testbench的HDL仿真器效果最好,如Modelsim、Vivado Simulator等。

Testbench已成為驗證HLL(高級語言)設計的標準方法。通常,Testbench執行以下任務:

?實例化被測設計(DUT) ?通過將測試向量應用于模型來激勵DUT ?將結果輸出到終端或波形窗口進行目視檢查

?可選擇將實際結果與預期結果進行比較

通常,Testbench是用行業標準VHDL或Verilog硬件描述語言編寫的,Testbench調用功能設計,然后對其進行仿真。復雜的Testbench還執行其他功能,例如,將實際結果與預期結果進行比較的邏輯。圖1顯示了遵循上述步驟的標準HDL驗證流程。

43533748-95a9-11ef-a511-92fbcf53809c.png

圖1:使用Testbench的HDL驗證流程 由于Testbench是用VHDL或Verilog編寫的,因此Testbench驗證流程可以跨平臺和供應商工具移植。此外,由于VHDL和Verilog是標準的非專有語言,因此用VHDL或Verilog編寫的驗證套件可以在未來的設計中毫無困難地重用。

2. Testbench構建

由于Testbench僅用于仿真,因此它們不受適用于綜合中使用的RTL語言子集的語義約束的限制。相反,可以使用所有行為構造。因此,Testbench可以更通用地編寫,使其更容易維護。所有Testbench均包含表1所示的基本部分。

表1:Testbench通用構建

436628e4-95a9-11ef-a511-92fbcf53809c.png



2.1 生成時鐘信號

激勵時鐘可以很容易地在VHDL和Verilog源代碼中實現。以下是Testbench中經常使用的時鐘生成VHDL和Verilog示例:

VHDL:

436a052c-95a9-11ef-a511-92fbcf53809c.png

Verilog:

43856c86-95a9-11ef-a511-92fbcf53809c.png

2.2 提供激勵

為了獲得Testbench驗證結果,須向DUT提供激勵。在Testbench上使用并發激勵塊來提供,通常采用兩種方法:絕對時間激勵和相對時間激勵。在第一種方法中,相對于仿真時間零點指定模擬值。相比之下,相對時間激勵提供初始值,然后在重新觸發激勵之前等待事件。根據設計師的需求,這兩種方法可以在Testbench上結合使用。

表2和表3分別提供了VHDL和Verilog源代碼中的絕對時間和相對時間激勵的示例。

表2:絕對時間激勵示例

439cf7ac-95a9-11ef-a511-92fbcf53809c.png

表3:相對時間激勵示例

43a29770-95a9-11ef-a511-92fbcf53809c.png

VHDL過程塊和Verilog初始塊與文件中的其他過程和初始塊同時執行。然而,在每個(進程或初始)塊中,事件是按照寫入的順序執行。這意味著激勵序列在模擬時間零點開始于每個并發塊。推薦使用多個塊將復雜的激勵序列分解為更可讀和可維護的代碼塊。

2.3 結果顯示

Verilog中的$display和$monitor關鍵字用于顯示結果。雖然VHDL沒有等效的顯示特定命令,但它提供了std_textio包,該包允許將文件I/O重定向到顯示終端窗口(有關此技術的示例,請參閱下面的自檢Testbench)。

以下是Verilog示例,其中值顯示在終端屏幕上:

43b3943a-95a9-11ef-a511-92fbcf53809c.png

$display關鍵字將帶引號的括號文本(“…”)輸出到終端窗口。$monitor關鍵字的工作方式不同,因為它的輸出是事件驅動的。在該示例中,$realtime變量(由用戶分配給當前模擬時間)用于觸發信號列表中值的顯示。Verilog提供了額外的格式說明符,例如,%h用于十六進制,%d用于十進制,%o用于八進制格式。格式化的顯示結果如圖2所示。

43b7a890-95a9-11ef-a511-92fbcf53809c.png

圖2:仿真結果輸出到終端 2.4 其他語句結構 (1)force/release

force/release語句可用于覆蓋對寄存器或網絡進行的程序分配。這些構造通常用于強制特定的設計行為。一旦強制值被釋放,信號將保持其狀態,直到新值通過過程賦值傳遞。以下是強制和釋放語句使用的示例:

43c65426-95a9-11ef-a511-92fbcf53809c.png

(2)assign/deassign

賦值和取消賦值語句類似于強制和釋放語句,但賦值和取消指派僅適用于設計中的寄存器。它們通常用于設置輸入值。與強制語句一樣,assign語句會覆蓋過程語句傳遞的值。以下是賦值和取消賦值語句用法的示例。

43ca7e5c-95a9-11ef-a511-92fbcf53809c.png

(3)timescales

時間刻度指令用于指定Testbench的單位時間步長。它也會影響仿真器的精度。此指令的語法為:

`timescale reference_time/precision

reference_time是測量的單位時間。精度決定延遲四舍五入的精度,并設置仿真的單位時間步長。以下是“時間刻度用法”的示例:

43ce8a42-95a9-11ef-a511-92fbcf53809c.png

如果仿真使用定時延遲值,則模擬必須以大于最小延遲的精度運行(以便包含延遲)。例如,如果在仿真庫中使用9ps延遲,則仿真的精度必須為1ps才能適應9ps延遲。

(4)讀取內存初始化文件

Verilog提供$readmemb和$readmemh命令來讀取ASCII文件以初始化內存內容。此命令可用于在模擬中初始化Xilinx BlockRAM或SelectRAM組件。語法如下:

$readmemb(“”,design_instance);
3. 簡單Testbench

簡單的Testbench實例化用戶設計,然后為其提供激勵。Testbench輸出以圖形方式顯示在仿真器的波形窗口上,或作為文本發送到用戶終端或文本文件。

下面是一個代表移位寄存器的簡單Verilog設計:

43e7e4a6-95a9-11ef-a511-92fbcf53809c.png

以下簡單的Testbench示例實例化了移位寄存器設計。

43f81704-95a9-11ef-a511-92fbcf53809c.png

上面的Testbench實例化設計,設置時鐘,然后提供激勵。所有過程塊都從模擬時間零點開始,并且是并發的。符號(#)指定應用下一個激勵之前的延遲。$stop命令指示仿真器停止Testbench仿真(所有Testbench都應包含stop命令)。最后,$monitor語句將ASCII格式的結果返回到屏幕或本編輯器。

下面是一個VHDL Testbench,它實例化并為上述Verilog移位寄存器設計提供激勵。

43fc8f32-95a9-11ef-a511-92fbcf53809c.png

4. 自動驗證

建議自動化Testbench結果驗證,特別是對于較大的設計。自動化減少了檢查設計正確性所需的時間,并最大限度地減少了人為錯誤。通常使用幾種方法來自動化Testbench驗證:

(1)數據庫比較:首先,創建一個包含預期輸出的數據庫文件(“黃金向量”文件)。然后,捕獲仿真輸出并將其與黃金向量文件中的參考向量進行比較。這種方法的缺點是由于沒有提供從輸出到輸入文件的指針,難以將不正確的輸出追蹤到錯誤的來源。

(2)波形比較:波形比較可以自動或手動執行。自動方法采用Testbench比較器將黃金波形與Testbench輸出波形進行比較。Xilinx HDL Bencher工具可用于執行自動波形比較。

(3)Self-Checking Testbench。自檢Testbench在運行時,而不是在仿真結束時,根據實際結果檢查預期結果。由于可以在Testbench上構建有用的錯誤跟蹤信息來顯示設計失敗的地方,因此調試時間大大縮短。

5. Self-Checking Testbench

自檢Testbench是通過在Testbench文件中放置一系列預期向量來實現的。這些向量在定義的運行時間間隔與實際仿真結果進行比較。如果實際結果與預期結果匹配,則仿真成功。如果結果與預期不符,Testbench會報告差異。

對于同步設計來說,實現自檢Testbench更簡單,因為可以在時鐘邊緣或每個“n”個時鐘周期后比較預期和實際結果。比較方法也取決于設計的性質。例如,內存I/O自檢Testbench應在每次向內存位置寫入或從內存位置讀取新數據時檢查結果。同樣,如果一個設計使用了大量的組合塊,在指定預期結果時必須考慮組合延遲。

在自檢自檢Testbench上,以規則的運行時間間隔將預期輸出與實際輸出進行比較,以提供自動錯誤檢查。這種技術在中小型設計中效果很好。然而,由于可能的輸出組合隨著設計復雜性呈指數級增長,為大型設計編寫自檢Testbench變得更加困難和耗時。

以下是用Verilog和VHDL編寫的簡單自檢Testbench的示例: Verilog示例

441342c2-95a9-11ef-a511-92fbcf53809c.png

這種簡單的自檢Testbench設計可以移植到任何測試用例中。如果不需要在每個時鐘沿進行檢查,則可以根據需要修改for循環。如果仿真成功,終端屏幕上會顯示以下信息:

443bd9bc-95a9-11ef-a511-92fbcf53809c.png

VHDL示例:

445f5e1e-95a9-11ef-a511-92fbcf53809c.png

如果檢測到錯誤,則會在仿真器提示下顯示:

44663874-95a9-11ef-a511-92fbcf53809c.png

6. 編寫Testbench指南

本節提供了編寫Testbench的指南,規劃Testbench布局可以提高仿真驗證結果。

(1)在編寫Testbench之前,了解仿真器。

盡管常用的仿真工具符合HDL行業標準,但這些標準并沒有解決幾個重要的仿真特定問題。不同的模擬器具有不同的特性、能力和性能特征,并產生不同的仿真結果。

(2)基于事件的仿真與基于周期的仿真

仿真器器使用基于事件或基于周期的仿真方法。基于事件的仿真器在輸入、信號或門改變值時安排仿真器事件。在基于事件的仿真器中,延遲值可以與門和網絡相關聯,以實現最佳的時序模擬。基于循環的仿真器以同步設計為目標。它們優化組合邏輯,并在時鐘周期內分析結果。此功能使基于循環的仿真器比基于事件的仿真器更快、更節省內存。然而,由于基于循環的仿真器不允許詳細的時序特異性,因此它們的準確性不高。

(3)避免使用無限循環

當一個事件被添加到基于事件的仿真器中時,CPU和內存的使用率會增加,仿真處理速度也會減慢。除非對Testbench至關重要,否則不應使用無限循環來提供設計激勵。通常,時鐘是在無限循環內指定的(例如,Verilog中的“永遠”循環),而不是其他信號事件。

(4)將激勵分解為邏輯塊

在Testbench中,所有初始(Verilog)和過程(VHDL)塊同時運行。如果將無關的激勵分為單獨的塊,則Testbench激勵序列更容易實施和審查。由于每個并發塊都相對于模擬時間零點運行,因此使用單獨的塊更容易傳遞激勵。使用單獨的激勵塊可以使Testbench更容易創建、維護和升級。

(5)避免顯示不重要的數據

大型設計的Testbench可能包含超過100000個事件和大量信號。顯示大量仿真數據會大大減慢仿真速度。最好每“n”個時鐘周期只對相關信號進行采樣,以確保足夠的仿真速度。

7.高級Testbench技術 (1)用task任務和process過程模塊化激勵

在創建更大的Testbench時,應該對激勵進行分區,以幫助代碼清晰并便于修改,并使代碼更具可讀性。以下示例中,Testbench模擬了SDRAM控制器的設計。該設計包括重復激勵塊,因此Testbench通過聲明單獨的任務來劃分激勵,這些任務稍后在Testbench中調用以執行單獨的設計功能。

Verilog示例:

448d0daa-95a9-11ef-a511-92fbcf53809c.png

這些任務指定了設計功能的單獨元素,包括讀寫、數據讀寫或nop(無操作)。一旦指定,這些任務可以在激勵過程中調用,如下所示:

449c530a-95a9-11ef-a511-92fbcf53809c.png

VHDL示例:

44a0eb2c-95a9-11ef-a511-92fbcf53809c.png

(2)仿真中雙向信號的控制

大多數設計使用雙向信號,在Testbench上必須與單向信號區別對待。

VHDL示例:

44a6ce3e-95a9-11ef-a511-92fbcf53809c.png

要訪問上述示例中的雙向DATA信號,可以按如下方式設置Testbench:

44ad5038-95a9-11ef-a511-92fbcf53809c.png

雙向總線由Testbench控制,雙向總線的值通過data_top信號訪問。

Verilog示例:

44c2b14e-95a9-11ef-a511-92fbcf53809c.png

Verilog Testbench可以按如下方式設置:

44c6ca40-95a9-11ef-a511-92fbcf53809c.png

8.編碼風格指南 (1)縮進

始終縮進代碼以使其更具可讀性。建議縮進寬度為三到四個空格。縮進寬度為五個或更多空格通常會在右邊距留下很少的空間,而縮進寬度小于三個空格則會導致縮進太小。

(2)文件命名

在源文件名中始終保持“.v”(Verilog)或“.vhd”(VHDL)文件擴展名。如果這些標準擴展名被更改,一些編輯器和過濾器將無法識別源文件。

(3)信號命名

對所有用戶信號使用相同的大小寫(建議使用小寫)。Verilog是區分大小寫的,錯誤的大寫可能會導致設計在綜合和仿真中失敗。此外,使用一致的信號名稱格式樣式使信號名稱更容易在源文件中定位。使用簡短的描述性信號名稱。短名稱更容易輸入,描述性名稱有助于記錄信號功能。

(4)注釋

自由地注釋Testbench代碼。注釋對于繼承和重用代碼的其他人來說是無價的,注釋代碼填充了重要的細節,大大提高了源代碼的清晰度和可重用性

(5)設計結構

為每個模塊或實體保留一個物理文件。單獨的模塊和實體的單獨文件使設計更容易維護。

本文轉載自FPGA技術實戰公眾號

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

    關注

    1643

    文章

    21982

    瀏覽量

    614542
  • 硬件
    +關注

    關注

    11

    文章

    3464

    瀏覽量

    67242
  • HDL
    HDL
    +關注

    關注

    8

    文章

    330

    瀏覽量

    47843
  • HDL設計
    +關注

    關注

    0

    文章

    2

    瀏覽量

    5679

原文標題:編寫高效的Testbench

文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    NI USB-9234用戶指南和產品規范

    NI USB-9234用戶指南和產品規范
    發表于 06-30 15:55

    TS-5410布線指南和硬件參考

    該布線指南和硬件參考描述了 TS-5410 功能測試系統的系統概覽、互通性和接口電纜。
    發表于 09-06 09:03

    TS-5020布線指南和硬件參考

    該布線指南和硬件參考描述了 TS-5020 功能測試系統的系統概覽、互通性和接口電纜。
    發表于 10-21 10:19

    testbench編寫基本結構

    testbench編寫基本結構
    發表于 09-28 17:43

    編寫高效率的testbench

    編寫高效率的testbench,學習編寫測試文件的小伙伴們。
    發表于 05-11 16:40 ?16次下載

    如何使用VHDL實現testbench編寫

    大多數硬件設計人員對 verilog 的 testbench 比較熟悉,那是因為 verilog 被設計出來的目的就是為了用于測試使用,也正是因為這樣 verilog 的語法規則才被設計得更像 C
    發表于 12-14 08:00 ?17次下載

    AN-1041: iSensor? IMU 快速入門指南和偏置優化技巧

    AN-1041: iSensor? IMU 快速入門指南和偏置優化技巧
    發表于 03-21 13:54 ?0次下載
    AN-1041: iSensor? IMU 快速入門<b class='flag-5'>指南和</b>偏置優化技巧

    AN-1146: ADIS16334安裝/機械設計指南和示例

    AN-1146: ADIS16334安裝/機械設計指南和示例
    發表于 03-21 13:54 ?7次下載
    AN-1146: ADIS16334安裝/機械設計<b class='flag-5'>指南和</b><b class='flag-5'>示例</b>

    AN-1305:ADIS16445 / ADIS16448 機械設計指南和示例

    AN-1305:ADIS16445 / ADIS16448 機械設計指南和示例
    發表于 03-21 14:19 ?7次下載
    AN-1305:ADIS16445 / ADIS16448 機械設計<b class='flag-5'>指南和</b><b class='flag-5'>示例</b>

    FMCOMS8快速啟動指南和軟件

    FMCOMS8快速啟動指南和軟件
    發表于 03-22 21:23 ?8次下載
    FMCOMS8快速啟動<b class='flag-5'>指南和</b>軟件

    Vivado HDL編寫示例

    Vivado 軟件提供了HDL編寫中常用的示例,旨在幫助初學者更好地理解和掌握HDL編程,這里分享一下verilog代碼示例
    的頭像 發表于 05-16 16:58 ?1330次閱讀

    Verilog Testbench怎么寫 Verilog Testbench文件的編寫要點

    熟練了一點、但是整體編寫下來比較零碎不成體系,所以在這里簡要記錄一下一般情況下、針對小型的verilog模塊進行測試時所需要使用到的testbench文件的編寫要點。
    的頭像 發表于 08-01 12:44 ?4867次閱讀
    Verilog <b class='flag-5'>Testbench</b>怎么寫 Verilog <b class='flag-5'>Testbench</b>文件的<b class='flag-5'>編寫</b>要點

    AURACASR藍牙品牌指南和標志文件

    AURACASR藍牙品牌指南和標志文件中文
    發表于 08-23 18:19 ?8次下載

    PCB的DDR4布線指南和PCB的架構改進

    PCB的DDR4布線指南和PCB的架構改進
    的頭像 發表于 12-07 15:15 ?3385次閱讀

    FPGA入門必備:Testbench仿真文件編寫實例詳解

    編寫完HDL代碼后,往往需要通過仿真軟件Modelsim或者Vivadao自帶的仿真功能對HDL代碼功能進行驗證,此時我們需要編寫Testbench文件對HDL功能進行測試驗證。
    發表于 04-29 10:43 ?2880次閱讀
    主站蜘蛛池模板: 国产精品久久1024 | 免费一级毛片在级播放 | 99久久伊人一区二区yy5099 | 四虎影院黄色片 | 亚洲一区免费在线观看 | 中文字幕亚洲一区二区v@在线 | 欧美深深色噜噜狠狠yyy | 在线播放真实国产乱子伦 | 亚洲精品资源在线 | 扒开双腿猛进湿润18p | 一级片视频在线 | 看全色黄大色大片免费久久怂 | 亚洲伊人天堂 | miya亚洲私人影院在线 | 免费视频观看 | 插综合网 | 农村妇女野外一级毛片 | 网站在线观看视频 | 国产国产人免费人成免费视频 | 色视频在线观看免费 | 亚洲精品在线免费观看视频 | 奇米小说 | 色多多福利 | 久久婷婷丁香七月色综合 | 天天色天天 | 在线一区观看 | 午夜网站在线 | 国产黄在线观看 | 天天爱天天干天天 | 18满xo影院视频免费体验区 | bt天堂网在线www资源 | 伊人网视频在线 | 天天拍夜夜添久久精品免费 | 日本理论在线 | 九九国产精品 | 黄色小视频免费 | www.亚洲.com| 一区二区三区在线观看免费 | 精品免费 | 欧美一区二区三区在线观看 | 日韩中文字幕第一页 |