资讯动态

ModelSim 仿真从入门到精通:一份让你少走 3 年弯路的完整实战教程

发布时间:2026/10/23 4:24:28 来源:尧图企业网站定制
目录1. 为什么你一定要学会 ModelSim 仿真2. ModelSim 是什么它能做什么3. 环境准备安装与配置详解3.1 获取安装包3.2 安装步骤3.3 环境变量配置4. 第一个仿真工程从创建到运行4.1 创建工程目录与源文件4.2 在 ModelSim 中创建工程4.3 编译设计文件4.4 启动仿真4.5 添加波形并运行4.6 实战例程带使能的可逆计数器4.7 两种计数器例程对比5. 深入理解 ModelSim 的仿真流程5.1 编译Compile阶段5.2 仿真Simulate阶段5.3 波形查看与调试6. 使用 Tcl 脚本实现自动化仿真7. 常见问题与解决方案7.1 编译报错速查8. 进阶技巧让仿真效率翻倍8.1 使用 Do 文件管理复杂流程8.2 利用断点调试8.3 批量回归测试9. 总结与学习建议9.1 SystemVerilog 断言SVA入门参考资料前言本教程专为 FPGA 初学者和数字电路相关专业的学生编写旨在帮助你从零开始系统掌握 ModelSim 这一业界主流 HDL 仿真工具。阅读本文前建议你已熟悉 Verilog 基础语法了解模块、信号与 always 块等基本概念。学完本文后你将能够独立完成 ModelSim 的安装配置、工程创建、编译仿真与波形调试并掌握使用 Tcl 脚本实现自动化仿真的能力为后续深入学习 SystemVerilog 断言与功能覆盖率打下坚实基础。TL;DR 速览ModelSim业界主流 HDL 仿真器。安装免费版随 Quartus 提供。流程编译、仿真、波形调试。自动化Tcl 脚本一键执行。排障常见问题有对应方案。1. 为什么你一定要学会 ModelSim 仿真在数字电路与 FPGA 开发领域仿真验证是保证设计正确性的第一道也是最重要的一道关卡。ModelSim 作为业界最成熟的 HDL 仿真工具之一凭借其强大的调试能力、灵活的脚本支持和广泛的器件库兼容性长期占据 FPGA 开发者工具链的核心位置。无论你是刚接触 Verilog/VHDL 的学生还是正在从事复杂 SoC 验证的工程师掌握 ModelSim 都能显著提升你的开发效率和设计可靠性。本教程将带你从零开始系统性地掌握 ModelSim 的完整使用流程。内容涵盖环境搭建、工程创建、仿真执行、波形调试、脚本自动化等核心环节每一步都配有可复现的操作说明和代码示例确保你能够边学边练、快速上手。2. ModelSim 是什么它能做什么ModelSim 是由 Mentor Graphics现属 Siemens EDA开发的 HDL 仿真器支持 Verilog、SystemVerilog 和 VHDL 语言的编译、仿真与调试。它可以在代码编写阶段就发现逻辑错误、时序冲突和功能缺陷避免将问题带到后续的综合与布局布线阶段从而大幅降低开发成本和返工风险。ModelSim 的核心能力包括多语言支持同时支持 Verilog、SystemVerilog、VHDL 以及混合语言仿真。波形调试提供直观的波形窗口可查看信号随时间变化的详细过程。脚本自动化通过 Tcl 脚本实现编译、仿真、波形输出的全流程自动化。覆盖率分析支持代码覆盖率与功能覆盖率统计帮助评估验证完整性。性能优化支持编译优化、增量编译和并行仿真提升大型设计的仿真速度。3. 环境准备安装与配置详解在开始仿真之前你需要先完成 ModelSim 的安装与基础配置。以下是完整的操作步骤。3.1 获取安装包ModelSim 的官方发行版本分为 ModelSim SE商业版和 ModelSim Intel FPGA Starter Edition免费版随 Quartus Prime Lite 一起提供。对于个人学习和中小规模项目免费版已经足够使用。你可以从 Intel 官网下载 Quartus Prime Lite安装时勾选 ModelSim 组件即可。3.2 安装步骤双击安装包选择安装目录建议使用默认路径避免中文路径导致编译异常。在组件选择界面勾选 ModelSim 相关组件完成安装。安装完成后打开 ModelSim 软件确认主界面正常启动。3.3 环境变量配置为了方便在命令行中调用 ModelSim 命令建议将 ModelSim 的 bin 目录添加到系统 PATH 环境变量中。以 Windows 系统为例右键「此电脑」→「属性」→「高级系统设置」→「环境变量」。在「系统变量」中找到 Path点击编辑新增 ModelSim 的 bin 目录路径例如 C:\intelFPGA_lite\20.1\modelsim_ase\win32aloem。保存后重新打开命令行输入 vsim 命令验证是否生效。4. 第一个仿真工程从创建到运行下面我们通过一个最简单的计数器示例完整走一遍 ModelSim 的仿真流程。这个示例虽然简单但涵盖了工程创建、编译、仿真、波形查看的全部核心步骤。4.1 创建工程目录与源文件首先在本地磁盘新建一个文件夹例如 counter_demo并在其中创建两个文件counter.v设计文件和 counter_tb.v测试文件。counter.v 的代码如下module counter ( input wire clk, input wire rst_n, output reg [3:0] count ); always (posedge clk or negedge rst_n) begin if (!rst_n) count 4b0000; else count count 1b1; end endmodulecounter_tb.v 的测试代码如下timescale 1ns / 1ps module counter_tb; reg clk; reg rst_n; wire [3:0] count; counter uut ( .clk(clk), .rst_n(rst_n), .count(count) ); initial begin clk 0; rst_n 0; #100; rst_n 1; #500; $finish; end always #10 clk ~clk; endmodule4.2 在 ModelSim 中创建工程打开 ModelSim选择菜单 File → New → Project。在 Project Name 中输入 counter_demo选择工程保存路径点击 OK。在弹出的 Add Items to the Project 对话框中点击 Add Existing File将 counter.v 和 counter_tb.v 添加到工程中。4.3 编译设计文件在 ModelSim 主界面的 Project 窗口中右键点击 counter.v选择 Compile。同样右键点击 counter_tb.v选择 Compile。观察 Transcript 窗口确认编译无错误、无警告。4.4 启动仿真在 Library 窗口中找到 work 库展开后可以看到编译生成的模块。右键点击 counter_tb选择 Simulate。仿真启动后ModelSim 会自动进入仿真界面此时可以在 Objects 窗口中看到所有信号。4.5 添加波形并运行在 Objects 窗口中全选所有信号CtrlA右键选择 Add Wave。在 Wave 窗口中可以看到信号波形已添加。在命令行Transcript 窗口底部输入 run 1us回车执行仿真。观察 Wave 窗口中的波形变化可以看到 count 信号从 0 开始递增验证计数器功能正确。运行仿真后Wave 窗口中的波形大致如下图所示此处以文字描述替代实际截图下面结合上图逐一对 clk、rst_n、count 三个信号的变化规律进行说明clk时钟信号由测试文件中的always #10 clk ~clk;语句驱动周期为 20ns占空比 50%。波形上表现为高低电平交替的方波每个上升沿触发计数器递增一次。rst_n异步复位信号仿真开始后的前 100ns 内保持低电平复位有效此时 count 被清零为 0。第 100ns 时 rst_n 拉高复位释放计数器开始正常工作。count计数输出在 rst_n 为低电平期间保持 4b0000rst_n 拉高后每个 clk 上升沿 count 加 1依次变为 1、2、3……直到仿真结束。由于仿真运行 1us而 clk 周期为 20ns共产生 50 个时钟上升沿count 会从 0 递增到 15 后循环回 0再继续递增。通过观察这段波形可以直观验证计数器的两个核心功能一是复位信号有效时输出被清零二是复位释放后每个时钟上升沿计数递增。这正是 4.1 节中 counter.v 设计代码所描述的行为波形与代码逻辑完全吻合。4.6 实战例程带使能的可逆计数器为了进一步巩固 ModelSim 的使用流程下面再给出一个带使能控制的可逆计数器例程。该例程在原有计数器基础上增加了方向控制信号 up_down 和使能信号 en当 en 为高电平时计数器根据 up_down 的值递增或递减。counter_updown.v 的设计代码如下module counter_updown ( input wire clk, input wire rst_n, input wire en, input wire up_down, output reg [3:0] count ); always (posedge clk or negedge rst_n) begin if (!rst_n) count 4b0000; else if (en) begin if (up_down) count count 1b1; else count count - 1b1; end end endmodulecounter_updown_tb.v 的测试代码如下timescale 1ns / 1ps module counter_updown_tb; reg clk; reg rst_n; reg en; reg up_down; wire [3:0] count; counter_updown uut ( .clk(clk), .rst_n(rst_n), .en(en), .up_down(up_down), .count(count) ); initial begin clk 0; rst_n 0; en 0; up_down 1; #100; rst_n 1; #20; en 1; #200; up_down 0; #200; $finish; end always #10 clk ~clk; endmodule仿真步骤与 4.2 至 4.5 完全一致创建工程、添加上述两个文件、编译、启动仿真、添加波形并运行。运行后可以观察到 count 信号先递增到 4再递减回 0从而验证可逆计数功能正确。4.7 两种计数器例程对比下表对比了基础计数器与可逆计数器两个例程在设计要点、测试激励和仿真观察点上的差异帮助你理解不同场景下如何选择与扩展。对比维度基础计数器counter可逆计数器counter_updown功能描述每个时钟上升沿递增 1复位后清零。使能有效时根据 up_down 信号递增或递减。控制信号仅 clk 和 rst_n。额外增加 en 使能信号和 up_down 方向信号。测试激励重点验证复位清零和连续递增行为。验证使能关闭时保持、递增与递减切换行为。波形观察要点观察 count 从 0 到 15 循环递增。观察 en 为高时 count 递增up_down 拉低后 count 递减。适用场景分频、定时、简单计数。加减法运算、方向控制、可逆计数应用。5. 深入理解 ModelSim 的仿真流程上面的示例虽然简单但背后涉及 ModelSim 的核心工作流程。理解这些底层机制能帮助你在面对复杂设计时更加从容。5.1 编译Compile阶段编译阶段将 HDL 源代码转换为仿真器可识别的中间表示。ModelSim 的编译器会检查语法错误、类型错误和模块引用关系。编译产物存放在库Library中默认库名为 work。5.2 仿真Simulate阶段仿真阶段由仿真内核执行编译后的设计。仿真器按照时间轴推进在每个时间点计算信号值的变化并触发相应的 always 块或 process 语句。仿真时间由 timescale 指令控制例如 timescale 1ns / 1ps 表示时间单位 1ns精度 1ps。5.3 波形查看与调试Wave 窗口是 ModelSim 最常用的调试界面。你可以通过以下操作提升调试效率缩放波形使用工具栏的放大/缩小按钮或按住 Ctrl 键滚动鼠标滚轮。添加光标在波形上点击即可添加光标用于测量信号变化的时间点。信号分组将相关信号拖入同一个 Group便于观察总线信号。保存波形配置通过 File → Save Format 保存当前波形窗口配置下次仿真可直接加载。6. 使用 Tcl 脚本实现自动化仿真对于需要反复执行的仿真任务手动点击操作效率太低。ModelSim 提供了强大的 Tcl 脚本接口可以将编译、仿真、波形输出等步骤固化为脚本实现一键执行。下面是一个完整的自动化仿真脚本示例sim.do 文件# 清理旧工程退出当前仿真会话 # 作用结束上一次仿真进程释放内存和文件句柄避免残留进程干扰本次仿真。 # 注意如果当前没有正在运行的仿真该命令会提示错误但不会影响后续执行。 quit -sim # 检查 work 库目录是否存在 # 作用判断当前目录下是否已有 work 工作库ModelSim 编译产物的存放目录。 # 语法if {[file exists work]} 是 Tcl 的条件判断语句[file exists work] 返回 1存在或 0不存在。 if {[file exists work]} { # 删除 work 库中的所有编译产物确保干净环境 # 作用彻底清空 work 库中的旧编译结果防止旧版本模块残留导致仿真结果异常。 # 注意vdel -all 会删除 work 库内所有已编译的设计单元执行后需要重新编译全部源文件。 vdel -all } # 创建库并编译vlib 创建名为 work 的工作库 # 作用新建一个名为 work 的库目录用于存放后续编译生成的中间文件。 # 说明如果 work 库已存在vlib 会报错因此通常配合上面的删除逻辑一起使用。 vlib work # vlog 编译 Verilog 源文件 counter.v 和测试文件 counter_tb.v # 作用将 Verilog 设计文件counter.v和测试文件counter_tb.v编译进 work 库。 # 说明编译顺序很重要——必须先编译设计模块counter.v再编译测试模块counter_tb.v # 因为测试文件中的实例化需要引用设计模块。若文件较多可逐个列出或用通配符。 vlog counter.v counter_tb.v # 启动仿真vsim 加载 work 库中的 counter_tb 测试模块-voptargsacc 保留信号访问权限 # 作用启动仿真器加载 work 库中编译好的 counter_tb 测试模块顶层模块。 # 参数说明 # -voptargsacc关闭优化对信号访问的限制允许在仿真过程中读取/写入所有内部信号 # 便于后续 add wave 添加波形和调试。若省略该参数部分内部信号可能无法访问。 # work.counter_tb指定要仿真的顶层模块格式为 库名.模块名。 vsim -voptargsacc work.counter_tb # 添加波形add wave 将 clk 信号以十六进制格式添加到波形窗口 # 作用把顶层模块中的 clk 时钟信号添加到 Wave 波形窗口便于观察其电平变化。 # 参数说明 # -hex以十六进制格式显示信号值对单 bit 信号影响不大但对多 bit 总线信号很有用。 # /counter_tb/clk信号路径格式为 /顶层模块/信号名必须以 / 开头。 add wave -hex /counter_tb/clk # 添加波形将 rst_n 复位信号以十六进制格式添加到波形窗口 # 作用把异步复位信号 rst_n 添加到波形窗口用于观察复位时序是否正确。 # 说明rst_n 是低电平有效的复位信号波形中低电平段表示复位有效。 add wave -hex /counter_tb/rst_n # 添加波形将 count 计数输出信号以十六进制格式添加到波形窗口 # 作用把 4 位计数输出信号 count 添加到波形窗口这是验证计数器功能的核心信号。 # 说明count 是 [3:0] 总线信号使用 -hex 可直观显示 0~F 的十六进制计数值。 add wave -hex /counter_tb/count # 运行仿真run 1us 表示仿真运行 1 微秒的仿真时间 # 作用让仿真器向前推进 1 微秒的仿真时间期间所有信号按设计逻辑变化。 # 修改仿真时间的方法直接修改本行的数值即可例如 # run 10us —— 延长到 10 微秒可观察计数器多次循环count 从 0 到 15 再回 0。 # run 500ns —— 缩短到 500 纳秒快速验证复位和初始计数行为。 # 提示也可在脚本开头用 set sim_time 1us 定义变量再写 run $sim_time 引用便于统一管理。 run 1us # 保存波形wave write 将波形数据以 WLF 格式导出到指定文件 # 作用把当前 Wave 窗口中的波形数据保存到磁盘供后续查看或对比。 # 参数说明 # -format wlf指定输出格式为 WLFWave Log Format这是 ModelSim 的原生波形格式 # 文件体积小、加载速度快可用 ModelSim 直接打开回放。 # -output counter_wave.wlf指定输出文件名。修改文件名即可改变保存路径或名称 # 例如 -output ./result/my_wave.wlf 可保存到子目录。 wave write -format wlf -output counter_wave.wlf脚本中的仿真时间由run 1us这一行控制其中1us表示仿真运行 1 微秒。你可以通过修改这个时间变量来适应不同的测试场景例如将run 1us改为run 10us可以延长仿真时间观察计数器在更长时间内的循环行为改为run 500ns则可以缩短仿真时间快速验证复位和初始计数功能。此外你也可以在脚本开头使用set sim_time 1us定义变量然后通过run $sim_time引用它这样只需修改一处变量即可调整整个脚本的仿真时长便于在不同测试场景间快速切换。在 ModelSim 命令行中执行 do sim.do 即可运行整个流程。脚本中的每条命令都有明确含义vlib 创建库vlog 编译源文件vsim 启动仿真add wave 添加波形run 执行仿真wave write 保存波形文件。7. 常见问题与解决方案在使用 ModelSim 的过程中你可能会遇到一些常见问题。这里整理了高频问题及其解决方法帮助你快速排障。下表汇总了各类问题的可能原因、解决方法和预防建议。问题描述可能原因解决方法预防建议编译报错无法打开文件文件路径包含中文或空格文件名含特殊字符。将工程目录改为纯英文路径并确保文件名不含特殊字符。创建工程时统一使用英文目录和文件名避免中文路径和特殊字符。仿真无波形输出测试文件中没有正确初始化信号、仿真时间不够长、信号未添加到 Wave 窗口。检查测试文件的 initial 块并适当延长 run 的时间。编写测试文件时先初始化所有信号仿真前确认信号已添加到 Wave 窗口。时序仿真与功能仿真结果不一致功能仿真不考虑门延迟和布线延迟时序仿真会加入这些延迟信息设计中存在竞争冒险或时序约束不完整。检查代码中的组合逻辑路径并完善时序约束。在设计阶段就关注时序约束避免组合逻辑中的竞争冒险。仿真速度过慢大型设计未做优化波形记录过多未使用编译优化选项。使用增量编译、关闭不必要的波形记录、使用 -O3 优化选项、将仿真拆分为多个阶段并行执行。对大型设计提前规划仿真策略合理使用编译优化和并行仿真。编译警告代码中存在未使用的信号、隐式声明、位宽不匹配或时序敏感列表不完整等问题。查看 Transcript 窗口中的警告信息定位到对应代码行修复未使用信号、补齐敏感列表、显式声明信号类型。编译后养成查看警告的习惯及时修复潜在问题避免警告累积成隐患。仿真结果与预期不符测试激励错误如 initial 块中信号初始化或时序设置不当、时序竞争多个 always 块同时驱动同一信号、未初始化信号reg 变量未赋初值导致 X 态传播。检查测试文件的 initial 块确认激励时序正确在源码窗口设置断点逐步检查中间状态查看 Wave 波形定位信号异常变化的时刻。编写测试文件时先初始化所有信号避免多个 always 块驱动同一信号仿真前确认信号已添加到 Wave 窗口。7.1 编译报错速查编译阶段是 ModelSim 使用中最容易出错的环节。下面整理了 3 个最常见的编译错误每个错误都给出错误信息示例、原因分析和修复代码片段帮助你快速定位并解决问题。错误一vlog 无法打开文件错误信息示例# ** Error: (vlog-19) Failed to open design unit file counter.v in read mode. # No such file or directory. (errno ENOENT)原因分析该错误通常由以下原因引起文件路径包含中文或空格、文件名拼写错误、文件不在当前工作目录下或者编译时使用了错误的相对路径。修复代码片段确保文件路径正确且为纯英文并在编译前切换到文件所在目录# 切换到源文件所在目录 cd C:/fpga_projects/counter_demo # 确认文件存在 ls counter.v # 重新编译 vlog counter.v错误二端口连接不匹配错误信息示例# ** Error: (vlog-2110) Illegal reference to net count. # ** Error: (vlog-13069) Port count (output) of counter has illegal connection.原因分析该错误通常发生在测试文件中实例化模块时端口连接的数量、顺序或类型与设计模块的端口定义不一致。例如将 output 端口连接到 reg 类型变量或者端口顺序写错。修复代码片段使用显式端口连接按名称连接并确保端口类型匹配// 错误端口顺序和类型不匹配 // counter uut (clk, rst_n, count); // count 是 wire但这里可能误用 // 正确使用显式端口连接count 声明为 wire module counter_tb; reg clk; reg rst_n; wire [3:0] count; // 输出端口必须用 wire 接收 counter uut ( .clk(clk), .rst_n(rst_n), .count(count) ); endmodule错误三未声明信号错误信息示例# ** Error: (vlog-2163) Signal data_out is not declared. # ** Error: (vlog-2163) Signal clk_tb is not declared.原因分析该错误通常是因为在代码中使用了未声明的信号可能是拼写错误、遗漏了 reg/wire 声明或者信号名与模块端口名不一致。修复代码片段在模块或测试文件中显式声明所有信号module counter_tb; reg clk; // 声明时钟信号 reg rst_n; // 声明复位信号 wire [3:0] count; // 声明计数输出信号 // 其他信号在使用前必须声明 // reg data_out; // 如果用到 data_out必须先声明 counter uut ( .clk(clk), .rst_n(rst_n), .count(count) ); endmodule8. 进阶技巧让仿真效率翻倍当你掌握了基础操作后以下进阶技巧能进一步提升你的仿真效率。8.1 使用 Do 文件管理复杂流程将常用的编译、仿真、波形操作写入 Do 文件配合参数传递可以实现不同测试场景的快速切换。例如通过变量控制仿真时间set sim_time 2us run $sim_time8.2 利用断点调试在 ModelSim 中你可以在源码窗口设置断点仿真运行到断点处会暂停方便你检查中间状态。这对于定位复杂逻辑错误非常有帮助。8.3 批量回归测试对于需要验证多个测试用例的场景可以编写脚本循环执行不同测试向量并自动比对输出结果实现回归测试的自动化。9. 总结与学习建议ModelSim 是数字电路验证的基石工具掌握它不仅能提升你的开发效率更能帮助你建立严谨的验证思维。本教程从环境搭建到脚本自动化覆盖了 ModelSim 的核心使用场景。建议你按照教程中的示例亲手操作一遍再尝试修改代码、增加测试用例逐步加深理解。后续你可以进一步学习 SystemVerilog 断言、功能覆盖率建模、以及 ModelSim 与 Quartus 的联合仿真流程这些都是在实际项目中非常实用的进阶技能。希望这份教程能成为你 FPGA 开发之路上的有力助手。9.1 SystemVerilog 断言SVA入门SystemVerilog 断言SVA是验证数字设计行为的重要工具它允许你在仿真过程中自动检查信号之间的时序关系。在 ModelSim 中启用 SystemVerilog 语法非常简单只需在编译时加上-sv选项即可。例如在命令行中执行vlog -sv counter.v counter_tb.sv下面以第 4 节中的 counter 模块为例编写一个简单的断言检查复位释放后 count 在每个时钟上升沿递增 1。首先将测试文件保存为 counter_tb.sv并在其中添加断言代码timescale 1ns / 1ps module counter_tb; reg clk; reg rst_n; wire [3:0] count; counter uut ( .clk(clk), .rst_n(rst_n), .count(count) ); // 断言复位释放后每个时钟上升沿 count 递增 1 property count_increment; (posedge clk) disable iff (!rst_n) count $past(count) 1; endproperty assert property (count_increment) else $error(断言失败count 未按预期递增); initial begin clk 0; rst_n 0; #100; rst_n 1; #500; $finish; end always #10 clk ~clk; endmodule上述断言使用assert property语句在时钟上升沿检查 count 是否等于上一个时钟周期的 count 加 1。其中disable iff (!rst_n)表示复位有效时禁用该断言避免在复位期间误报。当断言失败时$error会在 Transcript 窗口中输出错误信息。在 ModelSim 中查看断言报告的方法如下编译并仿真使用vlog -sv counter.v counter_tb.sv编译然后vsim work.counter_tb启动仿真。运行仿真在命令行输入run 1us执行仿真。查看断言结果仿真结束后在 Transcript 窗口中可以看到断言通过或失败的报告。若断言通过通常不会输出额外信息若断言失败会显示Error: 断言失败count 未按预期递增以及对应的仿真时间。使用断言窗口在 ModelSim 菜单栏选择 View → Assertions可以打开断言窗口查看所有断言的通过/失败状态、触发次数等详细信息。通过上述方法你可以在 ModelSim 中轻松启用 SystemVerilog 断言并利用断言报告快速定位设计中的功能缺陷提升验证效率。参考资料以下整理了与 ModelSim 仿真、Verilog 设计以及 SystemVerilog 断言相关的官方文档、书籍和高质量教程供你在学习过程中按需查阅。ModelSim Users Manual官方用户手册Siemens EDA 官方发布的完整参考手册涵盖编译、仿真、波形调试、Tcl 脚本等全部功能适合作为日常查证的工具书。访问官方手册Intel Quartus Prime 与 ModelSim 联合仿真指南Intel 官方文档介绍如何在 Quartus Prime 中配置并调用 ModelSim 进行 RTL 仿真适合需要与 Quartus 联动的 FPGA 开发者。访问官方指南IEEE 1800-2017 SystemVerilog 标准SystemVerilog 语言的权威规范其中包含断言SVA的完整语法与语义定义适合需要深入理解断言机制的验证工程师。访问 IEEE 标准Verilog HDL: A Guide to Digital Design and Synthesis书籍Samir Palnitkar 所著的 Verilog 入门经典系统讲解语法、建模与仿真方法适合刚接触 Verilog 的初学者。查看书籍信息SystemVerilog Assertions and Functional Coverage书籍Ashok Mehta 撰写的 SVA 与功能覆盖率专著结合大量实例讲解断言编写与覆盖率建模适合希望系统提升验证能力的工程师。查看书籍信息ModelSim Tcl 脚本自动化教程社区整理的 Tcl 脚本入门教程通过可复现的示例讲解 do 文件编写、变量控制与批量回归适合希望用脚本提升仿真效率的开发者。访问教程Verilog 与 SystemVerilog 在线参考手册提供 Verilog 与 SystemVerilog 语法速查、常用系统任务与断言示例的在线资源适合编写代码时快速查阅。访问在线手册

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑