在验证平台中,常常遇到内含CPU/DSP(以下简称CORE), 却无法打印信息到屏幕的情况。本文介绍一种思路,供各位感兴趣的同学参考。
一般情况下,我们运行CORE相关的case,都有下面几个步骤。
- 编写希望在CORE上运行的c/asm代码
- 使用gcc扩展的专用编译器编译代码,生成bin文件
- 将生成的bin文件preload到instruction memory和data memory中
- 启动CORE,CORE开始从instruction mem中某个地址开始取指执行
CORE在这种情况下只能访问其内部的memory地址空间。即使某些地址被映射到接口上,可以通过接口访问外部设备,其结果还是只能访问到design上的地址空间,别说访问PC的地址,就连访问TB的资源都几乎是不可能完成的任务。这种情况下,一种可以预见的交互方式就是硬件交互了。
为了简便起见,我们以内部mem为例,作为交互的媒介。主体思路如下:
- Case中按照c style直接printf信息
- 将case中需要print的信息提取出来,做成一个table,里面有两项内容,一是待打印的字符串,二是递增的数字label.这个table信息需要与sv侧共享
- 将case中的print函数替换成写内部mem的函数,写入的内容即消息对应的数字label
- sv monitor该地址,一旦发现有写操作,获取写入数据,查table,将对应信息print出来
本质上,就是将打印信息通过硬件地址传递给TB,TB负责打印。原理上很简单,但是实际实现的时候,有很多细节需要处理。下面介绍一个use case.
在最少资