作者:Ivy Guo
SEM IP在上板调试过程中有时会出现一些错误, 比如无法执行IP的插错纠错功能; 或者自身的初始化无法完成等等, 需要对SEM IP本身进行调试定位. 我们最推荐客户去查看IP从上电开始打印出来的串口信息. 这里面的log不仅包含了IP从初始化开始经历的一系列状态, 还能清楚地显示出一些事件的时间戳:
但是很多客户反应, 实际调试的硬件板上没有连接串口,没办法查看log, 只能靠抓取SEM IP Status Interface的 status_*信号, 通过其可以查看 IP有无心跳, 或者IP是否进入了正确的状态等. 困难的是, 很多问题需要同时查看所有的status_*信号组合, 并且综合分析status_*的历史状态以及当前状态, 复杂且需要较多的调试经验。
解决方法其实很简单, 我们只要在设计里面添加一个FIFO, 将SEM IP Monitor Interface输出的ASCII字符 log全部存入FIFO. 需要定位的时候, 用ILA+VIO控制读出来并直接显示就行了。
这里以VCU118 (VU9P) 开发板为例说明; 步骤如下:
1. 生成适配VCU118开发板的SEM IP example design。
2. 按照开发板的构造, 按需修改icap_clk的频率及管脚位置. 也可以添加其他想要查看的信号. 比如,可以绑定6个status_*信号到LED管脚上方便查看。
3. 顶层引入FIFO读写时钟clk300p/n (300MHz)。
XDC里面做好相应的约束:
4. 生成并添加用于存储log的FIFO, 读取显示FIFO字符的ILA和用于控制的VIO。
至于FIFO的大小, SEM IP 正常情况下除了最开始会打印出初始化过程和基本信息, 进入工作状态Observation后就基本没有输出了. 只有发生了SEU事件或者其他异常, 才会在串口推送出对应的报告. 由于SEU事件是极为偶发的罕见事件, 报告字符也不会多. 所以这里设定500 bytes已经能满足绝大多数应用需求:
5. 保存设计并生成配置文件, 下载到板卡上。
6. 通过example自带的ILA和VIO, 可以看到IP正确初始化后已进入Observation工作状态, status_observation信号置1:
7. 使FIFO read ILA进入捕获信号状态, 等待读FIFO读指令发出:
8. 通过VIO, 发出FIFO读取指令fifo_read:
9.可以看到FIFO已经捕捉到了log, 展开即可直接查看ASCII码格式的内容:
10. 同样, 尝试一下插错纠错动作, log也可用同样方法捕捉:
在实验室调试阶段, 这是一个很常用的定位SEM IP错误的方法. 即使产品阶段, 我们也推荐保留此FIFO, 对于分析现场SEU事件非常有帮助。