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

仿真(3):do文件写法

Q:来教我写.do文件~

A:好的,.do文件就是 ModelSim/QuestaSim 的批处理脚本。它把你手动点击鼠标或逐条输入命令的操作,全部写在一个文件里,一次性跑完。

它本质上是Tcl 脚本(扩展名是.do),核心命令就那么几个。我教你写一个最通用的模板。

第一步:一个最通用的.do文件模板(适用于任何项目)

用文本编辑器(如 gedit、Notepad++)新建一个文件,命名为simulate.do,输入以下内容:

tcl

# ============================================ # 1. 清除上次仿真环境(避免冲突) # ============================================ quit -sim # ============================================ # 2. 创建并映射工作库 # ============================================ vlib work vmap work work # ============================================ # 3. 编译所有 .v 和 .sv 文件 # ============================================ # 方法 A:如果当前目录下全是你的文件,直接全部编译 vlog *.v *.sv # 方法 B:如果只想编译指定的几个文件(把注释去掉,把方法A注释掉) # vlog full_adder.v # vlog tb_full_adder.v # ============================================ # 4. 加载仿真(指定顶层模块) # ============================================ # 注意:这里要加载的是 Testbench(顶层),而不是被测试的模块 vsim work.tb_full_adder # ============================================ # 5. 添加波形信号 # ============================================ # -r 表示递归添加所有子模块的信号 # * 表示添加该层级所有信号 add wave -r sim:/tb_full_adder/* # ============================================ # 6. 运行仿真 # ============================================ # -all 表示一直运行到遇到 $stop 或 $finish run -all # 或者你可以指定固定时间(如果 TB 里没有自动结束的话) # run 100ns # ============================================ # 7. 查看波形(可选) # ============================================ # 这行通常不用写,因为图形界面会自动弹出 # view wave

第二步:如果你不想写 Testbench,想手动给激励(纯命令行方式)

如果你只有一个full_adder.v,没有tb_full_adder.v,那么.do文件需要手动force信号:

tcl

quit -sim vlib work vmap work work vlog full_adder.v # 加载模块 vsim work.full_adder # 添加信号 add wave -position insertpoint sim:/full_adder/* # 手动施加激励(每隔10ns变化一次) force a 0 force b 0 force cin 0 run 10ns force a 0 force b 1 force cin 0 run 10ns force a 1 force b 0 force cin 0 run 10ns force a 1 force b 1 force cin 0 run 10ns # 最后退出 run 10ns quit -sim

第三步:如何在 ModelSim 里运行这个文件?

  1. 打开 ModelSim。

  2. 在 Transcript(底部的命令行窗口)里,切换到你的文件所在目录:

    tcl

    cd D:/your_project_folder
  3. 输入命令执行你的脚本:

    tcl

    do simulate.do

第四步:最常用的几条命令解释(直接记这几句就够了)

命令作用示例
quit -sim关闭当前仿真会话(相当于重置环境)quit -sim
vlib work创建一个名为work的库文件夹vlib work
vlog *.v编译所有.v文件vlog full_adder.v
vsim work.模块名加载某个模块进行仿真vsim work.tb_top
add wave *添加当前层级所有信号到波形图add wave sim:/tb_top/*
add wave -r *递归添加所有子模块的信号add wave -r /*
run -all一直运行到仿真结束($stop)run -all
run 100ns只运行100纳秒run 100ns
restart重置仿真时间为0,不清除信号restart
force强制给信号赋值(命令行方式)force a 1

第五步:一个你马上就能用起来的终极版

既然你刚写完Full_adder,在项目文件夹里新建sim.do,直接复制粘贴这个:

tcl

quit -sim vlib work vmap work work vlog *.v vsim work.tb_full_adder add wave -position insertpoint sim:/tb_full_adder/* run -all

然后在你写好的Full_adder.vtb_Full_adder.v所在的文件夹下启动 ModelSim,输入do sim.do,波形就会自动出来。以后你跑任何实验,只要把tb_full_adder改成你的顶层 TB 名字就行了。

http://www.jsqmd.com/news/1297737/

相关文章:

  • 2026年精选:长沙湘当经典——一站式解锁地道湖南味 - 装修教育财税推荐2026
  • 国产8位MCU深度对比:中微SC8F6790与泰芯TX8C1260实战选型指南
  • 2026年7月佛山市联通2000M融合宽带申请办理避坑全攻略 - 找卡家园
  • 2026年成都隐形车衣贴膜推荐榜:TPU材质/防刮增亮/无痕施工,高端漆面保护门店精选! - 优企名品
  • [具身智能-700]:通俗完整讲解:步进驱动器 + 电机如何实现细分 + 接口时序 + 底层原理
  • 创作者素材深耕指南|写作素材归集与知识管理工具深度测评(百度文库/语雀/Notion)
  • 电脑自动化解决方案 OpenClaw 小龙虾 Windows 部署实操文档(含安装包)
  • OpenClaw多模态AI代理框架部署与应用指南
  • 基于MATLAB与雷诺方程的滑靴油膜仿真:从理论到工程实践
  • 从Il2Cpp逆向到DLL注入:构建游戏安全分析实战框架
  • 绕过手机验证的实用指南:环境依赖与风险控制
  • 2026 年现阶段,苏州诚信的通风设备加工厂哪家好,别让闷热毁了你的换季家,选对这玩意儿竟能省大半电费? - 鉴选官
  • PyTorch 深度学习笔记(一)PyTorch 入门——深度学习框架的选择与安装
  • Grok排队机制解析与提示词优化:提升AI服务响应效率
  • 基于STM32的厨房安全检测系统:从传感器到物联网报警的嵌入式实践
  • STM32驱动OLED屏幕:从硬件原理到图形界面实战指南
  • 运算放大器与比较器:从内部结构到电路设计的本质区别与应用指南
  • Skills框架:AI编程防幻觉的端到端工作流解决方案
  • GEO效果验收标准缺失误区测评:投入产出模糊化的排行与对比解析
  • LangChain入门指南:快速构建AI应用
  • QtScrcpy技术实现深度解析:Android屏幕镜像与控制的底层架构剖析
  • 完全信息动态博弈和不完全信息静态博弈【中】
  • Steger算法:亚像素级光条中心线提取原理与工程实践
  • React Native Module 注册流程
  • 2026年7月台车挡头/四川台车高分子堵头板厂家推荐分析_四川皓德斯新材料科技有限公司 - 品牌宣传支持者
  • 17-定时任务(Cron)-设置自动化工作流
  • 完全二叉树判断:从BFS层序遍历到堆结构应用的算法精解
  • [具身智能-698]:步进电机的细分可以减小单个脉冲对应的旋转角度,提升角度分辨率;同时改变旋转一圈所需脉冲总数。脉冲输出频率不变时,细分越高,转动一圈所需时间越长;细分无法改变电机转动一圈的最小时间
  • Aspose Java 25.10破解实战:解决META-INF签名与Javassist版本冲突
  • DNS解析原理与BIND9服务器配置实战指南