模块网表查看
891 字约 3 分钟
2025-01-08
Digital IDE 使用内置的 Yosys 综合前端将可综合的 RTL 模块转换为逻辑网表视图(无需安装第三方综合软件),用于直观检查模块内部逻辑单元与端口连线关系。
1. 操作演示
ch05 以 ch03 已例化 accuml 的 demo_top 为网表顶层:先通过 CodeLens 生成完整层次网表,在层次导航中折叠 u_accuml 并适配视图,再演示悬停聚焦、节点/连线选择以及源码跳转(网表由内置 Yosys 生成,无需安装 Vivado)。
2. 生成与查看步骤
- 启动网表生成:
- 方式一:打开目标 HDL 源文件,点击模块声明上方的 Netlist CodeLens。
- 方式二:在 Architecture 面板中右键目标模块,选择 Netlist。
- 每次生成均以当前选中的模块作为网表顶层,不会修改工程
.vscode/property.json中的srcTop。
- 切换生成模式(可选):
- 在 VS Code 设置中配置
digital-ide.function.netlist.schema-mode,可选值为"before"(默认,综合优化前)、"after"(综合优化后)和"RTL"。切换设置后重新点击 Netlist 即可生效,不会改动 HDL 源码。
- 在 VS Code 设置中配置
3. 网表视图交互功能
初始网表包含完整模块层次,u_accuml 默认展开。点击层次导航中的实例可展开或折叠内部逻辑;使用工具栏的放大、缩小与适应窗口按钮浏览连接图,并通过以下交互查看节点、通路与对应 RTL 源码:
| 交互功能 | 触发操作 | 视图与面板响应 |
|---|---|---|
| 悬停聚焦 | 鼠标悬停(mouseover)在节点、端口或连线上 | 自动高亮关联的 fanout、junction、端口、节点及祖先节点,其余无关通路自动变暗。 |
| 悬停提示 | 鼠标停留在节点或端口上 | 显示名称、可用的方向与位宽信息及源码位置。本片的 clock 提示为 input · 1 bit · demo_top.v:3。 |
| 单选 / 多选节点 | 左键单击(click)单选;按住 Ctrl + click 增减多选 | 右侧检查器显示名称、路径、类型、布局位置、尺寸、layer/order、src 等可用属性与参数;多选时显示最后选中的实例。 |
| 选中连线 | 直接点击连线,或点击连线旁几像素内的空白处 | 自动吸附并选中对应 fanout,检查器显示驱动端与 Route Arc 数量。本片分别选中 clock · clock 和 ~ 1b · Y,均为 1 段。 |
| 跳转源码 | 单击节点(不按 Ctrl)或选中节点后按 Enter | 编辑器自动打开对应源文件并高亮选中该段 RTL 代码。 |
本片选中 not 节点后按 Enter,跳转到 demo_top.v 第 7 行的 ~reset_n;单击 u_accuml 则选中第 17–24 行的例化代码,便于将图中逻辑对应回 RTL。
4. 常见问题排查
若网表生成失败,请查看 Output → Digital-IDE 通道以及工程目录下的 prj/netlist/<模块名>.log:
| 现象 | 常见原因与处理方法 |
|---|---|
| 综合报错找不到子模块、package 或宏 | 确认工程依赖完整,已在 property.json 中正确配置 arch、HDL 库引用(library)和头文件目录(filelist.includeDirs)。 |
| 语法或不可综合结构报错 | 内置 Yosys 仅支持可综合的 RTL 子集;请勿对包含延时语句(#10)、$finish 等行为级语句的 testbench 模块执行网表生成。 |
| 厂商专有原语或 IP 报错 | 厂商黑盒原语或未提供 RTL 源码的封装 IP 无法直接由通用 Yosys 展开,请对纯 RTL 子模块生成网表。 |