4、Radix ST基础操作:启动界面、加载设计、设置时钟与复位
好,咱们今天聊聊Radix ST最基础的操作。说实话,很多新手拿到工具第一反应就是懵——界面一堆按钮,不知道从哪下手。我当年也一样,对着屏幕发呆了好几分钟。其实说白了,Radix ST的启动和加载设计,跟咱们平时用其他EDA工具差不多,但有几个小细节,不注意就会踩坑。
4.1 启动界面:别被花哨的欢迎页吓到
安装好Radix ST之后,双击图标或者敲命令行启动。我个人习惯用命令行,因为可以带参数,方便后面批量跑脚本。启动后你会看到一个欢迎界面,嗯,这个界面其实没啥用,就是告诉你版本号和许可证信息。
File -> Preferences -> General -> Show Welcome Page,取消勾选就行。
欢迎页关掉之后,主界面就出来了。左边是工程浏览器,中间是代码编辑区,下面是控制台和日志窗口。这个布局跟Verdi有点像,但Radix ST的工具栏更精简。我刚开始用的时候,总觉得少了点什么,后来发现其实常用的功能就那么几个,没必要堆一堆按钮。
4.2 加载设计:两种方式,看你习惯哪种
加载设计,说白了就是把你的RTL代码和网表文件读进来。Radix ST支持两种方式:
- 图形界面加载:点
File -> Import Design,然后选择你的文件。支持 .v、.sv、.vhd 等常见格式。 - 命令行加载:在控制台敲
read_design -f filelist.f。我个人更推荐这种方式,尤其是设计文件多的时候,写个脚本一劳永逸。
这里有个坑,我必须要提醒你。加载设计的时候,Radix ST默认不会自动识别顶层模块。你得手动指定,或者用 -top 参数。我曾经有一次忘了指定顶层,结果工具把所有的模块都当顶层分析了,跑出来的结果乱七八糟,排查了半天才发现问题。
Unresolved reference 错误,八成是文件顺序不对。Radix ST要求被调用的模块先加载,调用者后加载。建议用 filelist 文件,把依赖关系排好。
加载完成后,你可以在工程浏览器里看到所有的模块和实例。双击某个模块,代码就会在编辑区打开。这时候你可以检查一下,看看有没有漏掉文件。
4.3 设置时钟:别小看这一步
时钟设置,是形式化验证里最关键的一步。时钟设错了,后面所有的分析都是白搭。Radix ST里设置时钟有两种方式:
- 自动识别:工具会扫描设计中的时钟信号,然后弹出来让你确认。适合简单的设计。
- 手动指定:用
create_clock命令。比如:
create_clock -name clk -period 10 [get_ports clk]
这条命令的意思是:创建一个名为 clk 的时钟,周期是10ns,端口是 clk。嗯,这里要注意,周期单位默认是纳秒,如果你用皮秒,得加 -unit ps 参数。
我遇到过一种情况:设计里有多个时钟域,比如一个100MHz的主时钟,一个50MHz的从时钟。如果你只设了主时钟,从时钟没设,工具会默认从时钟是常量,导致跨时钟域的分析结果完全不对。所以,所有时钟都要设,一个都不能漏。
period 和 waveform。如果你不指定 waveform,工具默认占空比是50%。如果你的设计用了非50%占空比的时钟,记得用 -waveform {0 3} 这样的参数指定上升沿和下降沿的时间。
4.4 设置复位:异步复位?同步复位?搞清楚
复位设置,跟时钟一样重要。Radix ST里用 set_reset 命令来指定复位信号。比如:
set_reset -name rst_n -value 0 [get_ports rst_n]
这条命令的意思是:复位信号 rst_n 低电平有效(value=0)。如果你的复位是高电平有效,把 value 改成1就行。
这里有个容易混淆的地方:异步复位和同步复位的区别。Radix ST默认把复位当成异步的,如果你的设计用的是同步复位,得加 -type sync 参数。否则工具会认为复位信号在任何时刻都能生效,导致一些不必要的约束冲突。
我记得有一次,一个同事跑形式化验证,结果老是报复位路径上的时序违例。我过去一看,他设的复位是异步的,但设计里明明用的是同步复位。改过来之后,问题就解决了。所以,复位类型一定要跟设计一致。
4.5 验证设置:跑个简单的检查
时钟和复位都设好了之后,我建议你先跑一个简单的检查,看看设置对不对。Radix ST里有个 check_design 命令,可以帮你检查:
- 时钟有没有冲突
- 复位有没有悬空
- 有没有未连接的端口
跑完 check_design 之后,控制台会输出一堆信息。如果有 ERROR 级别的消息,必须解决;如果是 WARNING,可以酌情处理。我个人习惯是把所有的 WARNING 都看一遍,因为很多坑就是从 WARNING 开始的。
check_design,然后保存一个 .tcl 脚本。这样下次重新打开工程,直接 source 脚本就行,不用再手动点来点去。
4.6 知识体系图
下面这张图,是我自己总结的Radix ST基础操作流程。你一看就明白,其实就三步:加载设计、设时钟、设复位。但每一步都有细节,别跳过去。
4.7 避坑指南
最后,我把自己踩过的坑总结一下,你遇到了可以直接翻出来看:
| 常见问题 | 原因 | 解决方法 |
|---|---|---|
加载设计报 Unresolved reference |
文件顺序不对,被调用的模块在后面 | 调整 filelist 顺序,或者用 -work 库 |
| 时钟设了但分析结果不对 | 忘了设从时钟,或者占空比不对 | 用 report_clocks 检查所有时钟 |
| 复位路径时序违例 | 异步复位设成了同步,或者反过来 | 确认设计中的复位类型,用 -type 参数指定 |
| check_design 报 WARNING 没管 | WARNING 可能隐藏着大问题 | 每个 WARNING 都点开看看,别跳过 |
嗯,基础操作就这些。你把这几个步骤走一遍,Radix ST的基本用法就掌握了。后面咱们再聊更高级的调试技巧。