这一篇在干嘛?

这是《TD User Guide》总览三连的第 1 篇,覆盖原书第 1~3 章:先把 TD 软件的全局地图画出来——一个工程从新建到出比特流要经过哪些环节,再手把手走一遍工程管理与 IP 生成。后续两篇:第 2 篇讲约束、编译流程与时序报告第 3 篇讲仿真下载、调试工具与报错排查

TD 全景:一条龙覆盖设计全流程

工程管理:新建工程、源文件与顶层

IP 生成器:IP Catalog 与常用 IP 配置

TD 全景:一条龙覆盖设计全流程

TD(TangDynasty)是安路 FPGA 的官方一体化开发环境,地位相当于 Xilinx 的 Vivado + Intel 的 Quartus。对移远大赛用的 EG4S20(Eagle 系列)来说,从 RTL 代码到板上运行的完整链条全部在 TD 里完成,不需要装第二套工具。

启动 TD 后先选一个 workspace(工作区)目录,之后所有工程的默认路径、界面布局都记在这里。主界面最核心的是 Design Flow 流程窗口:它把整个开发流程画成一列按钮,从上到下依次是综合(Synthesize)、优化(Syn Opt / Optimize Gate)、物理优化(Phy Opt / Optimize Routing)、布局布线(Place & Route)、位流生成(Bitstream Generation)等,每个按钮左键单击执行、右键还有更多选项。编译到哪一步、成功失败,都通过这列按钮的状态标和下方 Message / Tcl Console 窗口反馈。

学习方法

把 Design Flow 这列按钮当成”进度条”:你写的每行 Verilog、每条约束,最终都要顺着这条流水线变成比特流。哪一步卡住,就去查那一步对应的章节——这正是这套总览笔记的编排顺序。

一个典型工程的完整生命周期是:

新建工程 → 添加 RTL 源文件 → (生成/添加 IP) → 添加约束(引脚+时序)
→ 综合 → 布局布线 → 查看时序报告 → 功能/时序仿真 → 生成位流 → 下载调试

工程管理:新建工程、源文件与顶层

新建工程

菜单 File → New Project 打开向导(对应下图),依次填写:

  1. 工程名与路径:路径不要含中文和空格,否则后续 tcl 脚本容易出幺蛾子;
  2. 工程类型:RTL 工程选 “RTL Project”;只有网表要跑布局布线的场景选门级工程;
  3. 器件选择:在 Part 选择页按 Family = Eagle、Device = EG4S20、Package = BG256 逐级选到大赛器件;
  4. 语言与仿真器:HDL 选 Verilog,仿真器可先保持默认(第 3 篇讲仿真)。

TD 新建工程向导对话框

工程建好后,左侧 Project Manager 会列出 Sources(设计文件)、Constrains(约束文件)、Simulation(仿真文件)等分组,右键分组即可 Add Sources 添加文件。向导支持从别的工程批量导入,也支持直接拖拽文件进来。

Add Sources 添加源文件向导

设顶层与文件管理

多模块工程一定要把最顶层的模块设为 Top:在 Sources 里右键目标文件 → Set As Top,顶层文件图标会变化。顶层选错是新手最常见的问题——综合时报”端口悬空”或者压根不报错但逻辑被整体优化掉,往往就是顶层指错了。

右键 Set As Top 设置顶层模块

语言模板与编辑器

TD 内置代码编辑器带语法高亮、代码补全和例化模板。菜单 Edit → Language Templates 打开语言模板浏览器,里面有 Verilog 常用结构、器件原语(Primitive)的例化骨架,双击即可插入当前文件。写 always 块、例化 IP 时很省事。

Language Templates 语言模板浏览器

导出 Tcl:让工程可复现

工程管理里最值得养成习惯的一招是 导出 Tcl 脚本(File → Export → Tcl)。它会把工程的器件型号、源文件列表、约束引用等全部生成一条条 tcl 命令。换电脑、进版本库、交给队友时,不用拷整个工程目录,只拷源码 + 这份 tcl 就能一键重建工程。这也是后面所有界面操作(约束、编译选项)的”文本化”途径:凡是在界面上能点的,最终都能落到 tcl 上。

常见坑:

① 工程路径含中文/空格 → 综合、IP 生成随机报错,一律用纯英文短路径; ② 顶层没 Set As Top → 逻辑像”消失”了一样,资源占用为 0; ③ 只拷贝 .al 项目文件给队友 → 别人打开全路径报错,正确做法是导出 Tcl + 源码; ④ 源文件加了但忘了勾选加入当前工程 → 文件躺在磁盘上,编译器看不见。

IP 生成器:IP Catalog 与常用 IP 配置

手写 PLL、BRAM 这类专用资源的行为模型既低效又不可综合,正确做法是用 TD 的 IP 生成器:菜单 Tools → IP Compiler(IP Catalog)打开目录窗口,左侧按功能分类,右侧双击具体 IP 新建实例。

IP Catalog 目录窗口

EG4S20 上常用的几类:

类别IP用途
时钟PLL从板载晶振分出系统所需的各路时钟
存储器ERAM / FIFO / DRAM片上块RAM、同步FIFO、分布式RAM
运算Divider / CORDIC / DSP除法、三角函数、乘累加
接口LVDS7_1 / TEMAC高速串行接口、以太网 MAC
校验CRC通信数据校验

以最常用的 PLL 为例:双击新建后进入配置页,第一步设输入时钟频率(EG4S20 开发板常见 50 MHz),第二步逐路配置输出时钟——每一路可独立设频率、相位偏移、占空比,软件会实时校验该频率组合能否实现,配置好一路勾选一路。确认后生成 .v 设计文件、.xco 配置文件和例化模板,把例化模板贴进顶层模块、接上时钟复位就能用。

PLL IP 配置输出时钟频率、相位与占空比

ERAM(Embedded RAM)是写图像行缓存、乒乓缓冲的主力:配置页选单口/双口模式、设数据位宽与深度(注意不要超过 EG4S20 的 ERAM 总量,Design Summary 里能看到用了几成)、按需勾选输出寄存器以改善时序。FIFO IP 的思路相同,多一个几乎空/几乎满(AF/AE)阈值配置。

ERAM IP 配置位宽、深度与工作模式

生成的 IP 一律以文件形式挂在工程 Sources 的 IP 分组下,和手写 Verilog 地位平等,可以随时双击 .xco 重新打开配置页修改。IP 引脚与内部行为以生成出的 .v 文件和手册为准,别凭记忆猜端口。

常见坑:

① PLL 输出频率超出器件范围或不整除 → 配置页报红也不细看,编译才炸; ② ERAM 深度位宽超器件总量 → 布局布线阶段才失败,白白浪费一轮编译; ③ 例化 IP 时端口顺序靠猜 → 一定从生成的例化模板复制; ④ 修改 IP 配置后忘了重新综合 → 顶层和 IP 行为不一致,仿真对、上板错。

通关标准:

① 能 5 分钟内新建一个指向 EG4S20BG256 的工程并添加自己的 Verilog 顶层; ② 会用 Language Templates 快速插入例化骨架,且顶层永远是 Set As Top 后的那个文件; ③ 能用 IP Catalog 生成一个 50 MHz → 自定义频率的 PLL 和一块 ERAM,并在顶层例化通过综合。