You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilator生成仿真程序运行提示Invalid argument错误如何解决

问题原因与解决方案

1. 没有生成教程提及的Makefile的原因

你参考的教程里的Makefile是需要手动编写的项目编译脚本,不是Verilator自动生成的产物。Verilator默认仅会生成obj_dir目录下的Vthruwire.mk这类中间编译用的Makefile,不会生成教程里的通用项目Makefile。

2. 运行./thruwire报Invalid argument的解决方法

按优先级排查以下问题:

2.1 修复磁盘损坏问题

你之前收缩过VirtualBox的VDI磁盘,大概率是操作后虚拟机内的文件系统出现损坏,导致生成的可执行文件结构异常。先执行以下命令检查文件类型:

file thruwire

如果输出不是ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked ...这类正常可执行文件的描述,直接删除所有生成产物后重新编译:

rm -rf obj_dir thruwire

2.2 修复C++代码错误

你当前的C++仿真代码存在几个不符合规范的问题:

  • main函数没有添加返回值,不符合C++语法规范
  • 打印语句没有换行符,输出会出现乱码
  • 没有释放申请的Vthruwire对象内存
    修改后的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include "Vthruwire.h"
#include "verilated.h"

int main(int argc, char **argv)
{
    Verilated::commandArgs(argc, argv);
    
    Vthruwire *tb = new Vthruwire;
    
    for(int k = 0; k < 20; k++)
    {
        tb->i_sw = k&1;
        tb->eval();
        printf("k = %2d, i_sw = %2d, led = %2d\n", k, tb->i_sw, tb->o_led);
    }
    delete tb;
    return 0;
}

2.3 使用Verilator标准编译流程

不要手动编写g++编译命令,用--exe参数的标准流程自动生成可执行文件,避免参数写错:

# 生成编译脚本和中间代码
verilator -Wall -cc --exe thruwire.v thruwire.cpp
# 编译生成可执行文件
make -C obj_dir -f Vthruwire.mk Vthruwire
# 运行仿真
./obj_dir/Vthruwire

2.4 环境兼容性排查

如果以上操作都无效,检查Verilator和GCC版本兼容性,重新安装依赖即可:

sudo apt update
sudo apt install --reinstall verilator gcc g++

内容的提问来源于stack exchange,提问作者Anteino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:45:06