verilator初次使用

ysyx需要使用verilator进行仿真以及波形绘制。所以昨天完成verilator的安装之后今天就开始使用verilator完成ysyx任务,具体任务是根据如下博客进行的

【一生一芯】Verilator上手 - 老吴家的小阿哲 - 博客园 (cnblogs.com)

基本上跟着做全流程差不多能对verilator有一个大概了解,对于基本的流程能够掌握

首先就是最简单的Hello World。新建文件夹之后再给他显示出来,这具有verilog以及c++版本。

verilator官方手册也给出了具体例子

随后跟着流程做一个cmake跑通verilator的文件CMakeLists.txt(这里对于文件名要求很高,只能是按照这个格式,否则会报错

make_minimum_required(VERSION 3.22)   #手册中没有这一行,但是Cmake要求每个Cmakelists开头必须添加这一行,否则报错,
#具体版本要看每个人安装的cmake版本,我是3.16.03,所以把版本改成了3.16
project(cmake_example)
find_package(verilator HINTS $ENV{VERILATOR_ROOT})
add_executable(Vour sim_main.cpp)
verilate(Vour SOURCES our.v)

这里也用到了一些github上的例子

 https://github.com/n-kremeris/verilator_basics

这上面是一个基本的DUT案例。已经将。sv以及tb.cpp文件给出了,只需要按照流程跑一遍即可

跑的时候也是会出现问题的,比如代码中有一处枚举赋值语句

typedef enum logic [1:0] {
     add     = 2'h1,
     sub     = 2'h2,
     nop     = 2'h0
} operation_t /*verilator public*/;

operation_t  op_in_r;
if(rst)
op_in_r     <= 0;

op_in_r是不能这么赋值的,上网搜索后有以下几种方法

Errors and Warnings — Verilator Devel 5.021 documentation

经过实测只有第三种方法是有用的,或者可以直接改成

op_in_r     <= nop;

 这样就可以完成对于verilog文件的修改了

随后就是tb文件,在verilator中,测试文件是以cpp的形式存在的。如果是较为简单的测试文件,他的形式是大体相近的

#include <stdlib.h>
#include <iostream>
#include <verilated.h>
#include <verilated_vcd_c.h>
#include "Valu.h"
#include "Valu___024unit.h" #这两个文件就是通过将.v文件转换为cpp文件所生成的

#define MAX_SIM_TIME 20
vluint64_t sim_time = 0;

int main(int argc, char** argv, char** env) {
    Valu *dut = new Valu; #dut算是一个设备的名称,具有普遍性,即Vexample *dut =new Vexample

    Verilated::traceEverOn(true);
    VerilatedVcdC *m_trace = new VerilatedVcdC;
    dut->trace(m_trace, 5);
    m_trace->open("waveform.vcd");

    while (sim_time < MAX_SIM_TIME) {
        dut->clk ^= 1;
        dut->eval();
        m_trace->dump(sim_time);
        sim_time++;
    }

    m_trace->close();
    delete dut;
    exit(EXIT_SUCCESS);
}

在流程中,完成.v文件的编写后,要把.v文件进行由.v文件向cpp文件的转换,通过以下命令实现

verilator -Wall --trace -cc alu.sv --exe tb_alu.cpp

随后在完成之后就可以进行编译

#编译
make -C obj_dir -f Valu.mk Valu
#运行可执行文件
./obj_dir/Valu
#查看波形
gtkwave waveform.vcd

至此流程就都结束了

这里再推荐一个比较好的verilator进阶教学

Verilator Pt.2: Basics of SystemVerilog verification using C++ :: It's Embedded! (itsembedded.com)

可以有空读一读 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值