回调(callback)是一种在很多编程语言中都会使用的编程技巧。这算是一个感性的印象。
关于回调函数,很多地方会用这句话来描述:“If you call me, I will call you back”。这句话说起来既形象又片面,毕竟不是简单的两者之间的关系,了解具体内容还得继续往下看。
本文将进一步厘清回调函数的概念和术语,并给出SV和UVM使用回调函数的代码示例,最后例举一些在芯片验证中的使用场景。
01 概念和术语
例举一个场景,假设CC是个中国合法公民,今天CC的身份证丢了,然后到派出所去补办身份证,选择了“补办身份证”这个业务。在填信息信息表的时候,需要选择身份证制作完成之后的取送方式:要么邮寄要么本人来取。
场景类比:类比到函数调用流程来,“补办身份证”这个业务是派出所对象对外开放的API。通过这个API,CC可以触发“制作身份证”这个流程。而“信息表”就是这个流程所需要的参数,包括一系列的个人信息,以及流程最后新身份证的取送方式。如果选择邮寄,则身份证制作完成之后会调用“快递邮寄”这个新的动作流程;如果选择本人来取,则会调用“等待本人到来”这个流程。但最后不管是哪种方式,只有这个新动作流程成功返回结果,“制作身份证”这个流程才会结束。
阻塞与非阻塞: 以上的类比就是典型的阻塞式的回调,我们在使用SV时会经常用到。回调的执行可以是阻塞(blocking)和非阻塞(non-blocking)两种方式,有的地方会将它们叫做同步(synchronous)和异步(Asynchronous&#x