搭建verilator仿真环境 实例:双控开关

Verilator的安装请点这个链接

1、模块准备

首先,我们先写好一个模块,如our_OnOff.v:

module our_OnOff(
    input a,
    input b,
    output f
);
  assign f = a ^ b;
endmodule

2、测试模块

main.c 如下:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "Vour_OnOff.h"  //因为创建的是our_OnOff.v 所以头文件要包含Vour_OnOff.h(把V放在前面)


int main(int argc,char **argv)
{
  Verilated::commandArgs(argc,argv);
  Vour_OnOff *top = new Vour_OnOff("top");
  while(!Verilated::gotFinish())
{                                                                                                                                 
  int a = rand() & 1;
  int b = rand() & 1;
  top->a = a;
  top->b = b;
  top->eval();
  printf("a = %d, b = %d, f = %d\n",a,b, top->f);
  assert(top->f == a ^ b);
 }
  delete top;
  return 0;
}

在一次循环中, 代码将会随机生成两个1比特信号, 用来驱动两个输入端口, 然后通过eval()函数更新电路的状态, 这样我们就可以读取输出端口的值并打印. 为了自动检查结果是否正确, 我们通过assert()语句对输出结果进行检查.

3、运行仿真

运行仿真分成三步:

a、生成目标文件夹

verilator -Wall --cc --exe --build main.cpp our_OnOff.v
  1. -Wall so Verilator has stronger lint warnings enabled.

  2. --cc to get C++ output (versus e.g. SystemC or only linting).

  3. --exe, along with our sim_main.cpp wrapper file, so the build will create an executable instead of only a library.

  4. --build so Verilator will call make itself. This is we don’t need to manually call make as a separate step. You can also write your own compile rules, and run make yourself as we show in Example SystemC Execution.)

  5. An finally, our_OnOff.v which is our SystemVerilog design file.    

运行完后会在当前目录生成obj_dir文件夹,这么多文件不需要深究。 

b、编译

make -C obj_dir -f Vour_OnOff.mk Vour_OnOff
  • Vour_OnOff.mk 也是生成出来的一个文件,在 obj_dir 文件夹里面,用于自动化的编译控制
  • 最后一个参数是输出可执行文件的文件名,最好不要乱改,就"V" + "design_name"

c、运行

./obj_dir/Vour_OnOff

 

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值