1. Gowin FPGA设计验证概述
第一次接触Gowin FPGA时,最让我头疼的就是如何验证设计的正确性。作为国内主流的FPGA厂商,高云半导体提供了完整的开发工具链,但很多新手在Modelsim仿真环节还是会遇到各种问题。这篇文章将带你完整走一遍从功能仿真到时序仿真的全流程,以UART转总线参考设计为例,手把手教你避开那些我踩过的坑。
功能仿真和时序仿真是FPGA设计验证的两个关键阶段。简单来说,功能仿真就像检查电路逻辑是否正确,而时序仿真则是验证电路在实际运行时能否满足时序要求。我刚开始做FPGA时经常只做功能仿真就烧录,结果板子跑起来各种不稳定,后来才发现是时序没收敛。通过这篇文章,你将学会如何用Modelsim完成这两个关键验证步骤。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 功能仿真实战
2.1 准备工作
首先需要准备好仿真环境。我从高云官网下载了UART转总线参考设计(Gowin_Uart_to_Bus_RefDesign),这个设计非常适合用来学习仿真流程。解压后你会发现项目结构很清晰,包含了RTL代码、测试文件和仿真脚本。
关键文件包括:
- RTL设计文件(如top.v、apb2local.v等)
- 测试激励文件(tb_top.v)
- 功能仿真库prim_sim.v
- 自动化脚本do.bat
高云很贴心地提供了现成的do.bat脚本,直接双击就能启动功能仿真。但我建议你先看看脚本内容,理解每行命令的作用,这对后续调试很有帮助。
2.2 仿真脚本解析
打开do.bat,里面其实调用了Modelsim的do文件。我把关键部分拆解一下:
tcl复制# 创建work库
vlib work
vmap work work
# 编译设计文件
vlog -novopt -incr -work work "../../tb/prim_sim.v"
vlog -novopt -incr -work work "../../tb/tb_top.v"
vlog -novopt -incr -work work "../../project/src/top.v"
# 其他设计文件...
# 启动仿真
vsim -novopt work.tb_top
# 添加波形信号
add wave -group "tb_top" {sim:/tb_top
