当前位置: 首页 > news >正文

FPGA基础 -- Verilog 命令行参数变量(Command-line Plusargs)

Verilog 命令行参数变量(Command-line Plusargs)

一、概述:什么是 Plusargs?

Plusargs 是仿真运行时通过命令行传入的键值对参数,用于控制 Verilog/SystemVerilog 仿真行为,例如:控制仿真模式、设置参数值、指定波形路径等。

典型形式如下:

vsim +MODE=debug +dumpfile=wave.vcd

在仿真时通过 $test$plusargs()$value$plusargs() 在 RTL 中读取。


二、两种读取方式

方法功能使用场景
$test$plusargs("key")检测某个 plusarg 是否存在,返回布尔值标志位、模式选择
$value$plusargs("key=%d", var)获取 plusarg 的数值赋给变量配置数值、参数传递

2.1 $test$plusargs 示例

initial beginif ($test$plusargs("DEBUG")) begin$display("Debug mode enabled.");end
end

运行命令:

vsim +DEBUG

2.2 $value$plusargs 示例

integer freq;
initial beginif (!$value$plusargs("FREQ=%d", freq)) beginfreq = 100; // 默认值end$display("Frequency is %d MHz", freq);
end

运行命令:

vsim +FREQ=200

结果:

Frequency is 200 MHz

三、常见应用场景

场景示例
配置寄存器宽度+DATA_WIDTH=32,设置仿真参数
选择测试场景+CASE=tx_only,选择测试模块或行为
指定波形文件名+dumpfile=output.vcd
调试开关+DEBUG,启用调试输出
多测试用例复用通过 plusargs 指定 DUT 配置

四、Verilog 示例:模块参数可配置化

module test;integer mode, depth;initial beginif (!$value$plusargs("MODE=%d", mode))mode = 0;if (!$value$plusargs("DEPTH=%d", depth))depth = 16;$display("Running in mode %0d with depth %0d", mode, depth);endendmodule

命令行运行:

vsim test +MODE=2 +DEPTH=64

输出:

Running in mode 2 with depth 64

五、工具支持差异

仿真器支持 plusargs说明
ModelSim支持 $test$plusargs $value$plusargs
VCS同上
Verilator✅(不同写法)C++ 接口中读取 plusargs
XSIM (Vivado)通过 Tcl 脚本传入

六、使用技巧

  1. 默认值保护:使用 if (!$value$plusargs(...)) 写法防止未传参时异常。
  2. 组合多个参数构建测试平台
  3. 配合参数化模块(parameter)灵活仿真多个配置组合
  4. 避免在合成代码中使用$value$plusargs$test$plusargs系统函数,不能综合

七、进阶拓展(SystemVerilog)

SystemVerilog 支持结构体封装参数:

typedef struct {int mode;int freq;
} config_t;config_t cfg;initial beginvoid'($value$plusargs("MODE=%d", cfg.mode));void'($value$plusargs("FREQ=%d", cfg.freq));
end

八、实战建议

  • 开发验证平台时,使用 plusargs 控制模块行为(如 AXI 配置、传输模式、波形选项)。
  • 约定命名规则:如 +TESTCASE=xxx+DUMP=1 等提升项目一致性。
  • 集成自动化仿真脚本(Makefile/Tcl) 中自动拼接参数,构建可移植的仿真平台。

相关文章:

  • HarmonyOS应用开发——层叠布局
  • 2025高考志愿填报核心策略
  • 使用SRv6访问5G网络中的边缘应用
  • 【原创】【3】【辅助工具】基于视觉模型+FFmpeg+MoviePy实现短视频自动化二次编辑+多赛道
  • DAY33神经网络
  • /var/lib/docker/overlay2目录过大怎么办
  • c++IO类
  • Frida Hook Android App 点击事件实战指南:从进程识别到成功注入
  • 程序包androidx.fragment.app不存在 import androidx.fragment.app
  • STM32连接阿里云物联网平台
  • 【51单片机2个外部中断控制流水方向与引脚电平】2022-5-4
  • 基于PostgreSQL的百度或高德等POI多层级分类的数据库设计
  • 云原生 CAD 让制造业设计协同更便捷
  • Docker快速部署可视化防火墙工具:使用go语言开发,底层是iptables,提供API调用
  • 动手用 Web 实现一个 2048 游戏
  • 基于分布式部分可观测马尔可夫决策过程与联邦强化学习的低空经济智能协同决策框架
  • 【MySQL基础】MySQL复合查询全面解析:从基础到高级应用
  • 前端依赖升级完全指南:npm、pnpm、yarn 实践总结
  • python系列教程245——为什么需要继承
  • Linux——7.如何理解 shell
  • 做商城网站需要备案吗/美国婚恋网站排名
  • 网站开发 wenzhou/湖南正规seo优化
  • 自己的网站怎么做/seo入口
  • 广州响应式网站建设/公司网络营销实施计划
  • 天猫建设网站的目的/今日头条新闻手机版
  • 怎么做网站流量/软文写作营销