Verilator詳解

一、Verilator官網

Verilator是一種高速的組合邏輯模擬器,它將Verilog HDL編寫的硬體描述代碼轉換為C++或SystemC的模擬代碼。Verilator在很多方面都比其他模擬器更快、更準確。Verilator官網提供了完整的文檔、教程和安裝指南等資料,方便用戶使用。

下面是Verilator的官方網址:

https://www.veripool.org/projects/verilator/wiki/Intro

二、Verilator Windows

Verilator可以在Windows系統上安裝使用。不過,官方並沒有提供Windows版本的二進位包,需要手動編譯。在Windows上編譯Verilator,需要先安裝Cygwin,然後使用Cygwin終端進入Verilator的源代碼目錄,運行如下命令進行編譯:

perl scripts/make_verilator.pl

編譯完成後,將生成verilator.exe可執行文件,將其加入系統環境變數中,即可在Windows上使用Verilator進行硬體描述語言的模擬。

三、Verilator模擬

使用Verilator進行模擬,需要先將Verilog HDL代碼轉換為C++代碼。在Linux系統上,可以使用如下命令進行轉換:

verilator --cc [Verilog HDL文件名]

上述命令將生成一個C++文件(默認為verilated.cpp)和一個頭文件(默認為[Verilog HDL文件名]_top.h),可以在C++文件中調用頭文件中定義的模擬函數進行模擬。

在模擬過程中,需要設置一些模擬參數,如模擬的時鐘周期和模擬時間等,可以在C++文件中使用如下代碼進行設置:

#include "verilated.h"
VL_PRINTF("[INFO] Starting simulation\\n");
//初始化Verilog模塊
top = new Vtop;
//設置時鐘周期
Verilated::timeunit(-9);
Verilated::timeprecision(-12);
//模擬時間
vluint64_t sim_time = 0;
while (!Verilated::gotFinish()) {
    //設置模擬時間
    sim_time += 10;
    top->i_clk = 0;
    //更新輸入埠
    top->eval();
    //模擬時鐘上升沿
    top->i_clk = 1;
    top->eval();
    //輸出模擬結果
    if (sim_time % (10*1000*1000) == 0) {
        VL_PRINTF("[INFO] sim_time=%lu ns\\n", sim_time);
    }
}

四、Verilator VCS

Verilator支持VCS格式的模擬,可以將轉換後的C++代碼與VCS聯合編譯。在Linux系統上,可以使用如下命令進行聯合編譯:

vlogan [Verilog HDL文件名]
verilator --vpi --cc [Verilog HDL文件名]
cd obj_dir
make -f V[Verilog HDL文件名]_top.mk
vcs V[Verilog HDL文件名]_top.cpp [其他C++文件] -o [模擬可執行文件名]
./[模擬可執行文件名]

該命令將生成一個可執行文件,可以直接運行進行模擬。

五、Verilator教程

Verilator官網提供了完整的教程,涵蓋了從入門到精通的各個方面,包括Verilog HDL語言基礎、Verilator的基本應用、Verilator與其他模擬器的比較等內容。

下面是Verilator官方提供的教程地址:

https://www.veripool.org/projects/verilator/wiki/Tutorial

六、Verilator中文文檔

Verilator中文文檔由Verilator中文社區翻譯並維護,其中包括了Verilator的基本概念、使用方法、應用案例等內容。

下面是Verilator中文文檔的地址:

https://www.osdv.org/docs/verilator/index.html

七、Verilator手冊

Verilator官方提供了完整的手冊,包括了Verilog HDL語言的基本知識、Verilator的基本原理、Verilator的使用方法、調試技巧等內容。

下面是Verilator官方提供的手冊地址:

https://www.veripool.org/projects/verilator/wiki/Manual-verilator

八、Verilator多線程

Verilator可以在多核CPU上進行多線程模擬,提高模擬效率。在Linux系統上,可以使用如下命令進行多線程模擬:

verilator --cc [Verilog HDL文件名] --threads [線程數]

上述命令將根據指定的線程數,自動進行多線程模擬。

九、Verilator tb

Verilator支持使用C++編寫測試代碼對硬體進行單元測試。在C++測試代碼中,需要調用Verilator生成的頭文件中定義的函數進行模擬,測試某個特定的問題。

下面是一個使用Verilator進行單元測試的例子:

// C++測試代碼
#include "verilated.h"
#include "Vtop.h"
#include "testbench.h"

class Testbench : public VerilatedTestbench {
public:
    Vtop* u_DUT;

    Testbench() {
        u_DUT = new Vtop;
    }

    ~Testbench() {
        delete u_DUT;
    }

    virtual void op() {
        // 進行模擬
        u_DUT->eval();
        // 測試完成後調用finish
        if (Verilated::gotFinish()) {
            (*log_os) <addClock(1, 10);
    // 開始模擬
    tb->run(argc, argv);
    return 0;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286275.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:07
下一篇 2024-12-22 16:07

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和演算法 C語言貪吃蛇主要運用了以下數據結構和演算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論