最近在搭建公司的testbench,主要有一下总结:
1.TB主要有两部分:部分一,软件部分主要用C写的,她的作用是写硬件的驱动(其实就是让核的外围设备可以正常工作或工作到特定的环境上)甚至有可能写整个系统的bootloader(嵌入式)。部分二,verilog或systemverilog部分,她的作用可以时gen active / send trans/check /monitor....或者控制整个仿真的流程比如verify start /verify end
2.需要注意一点:如何让自己的软件部分跟.v/.sv部分正常的沟通。起码让verilog/systemverilog 知道.c运行到那个阶段了,时编译成功了,是配置成功了,是写入成功了,还是读取成功了...等等。.v/.sv知道了 .c的进度才可以对整个的仿真流程合理的控制,进一步做check或打印一些提示字符串,以方便进行debug。
3.平台搭建初期要尽可能的简单,代码量要少,机制要简单,这样方便debug.随着平台主要流程正确了,再丰富平台内容,让平台更加智能化,可维护化。
4.在debug时,需要读懂汇编文件(主要是.list文件/.hex文件和编译日志)和AMBA总线时序要完全掌握。还有就是需要一种方法可以立即定位到错误的地方。
我才用的方法是:如何check时发生错误,直接在.c中改变一个不常用的寄存器的值。如果在波形(Nwave)中看到这个reg值发生变化说明此处出错。当然也可以借此把错误的地址直接写入到该register中,跟方便debug 。