在传统的设计中,软件似乎不是硬件设计和验证工程师一开始就关心的事情。RTL设计就是硬件设计,而Testbench的设计目的就是激励、响应、检查硬件的RTL设计的行为是否正确。Testbench是为验证RTL代码而设计,因此很多时候Testbench所完成的工作大部分都是软件工作,在SoC 设计中更是如此。因此,实际上,采用C/C++等软件语言更适合Testbench。Testbench大都是行为模型,所有的硬件描述语言都支持行为级建模。对于SystemC,行为级建模似乎更加重要。为了强调行为建模的重要性,在SystemC和 SystemVerilog逐渐流行的同时,transaction level modeling事务处理级建模(TLM)被越来越多的使用。TLM建模从整体考虑现代电子系统,从一开始就迅速完成的高层次系统行为的描述,确定最佳系统架构。此后,在该模型的基础上,逐步将模型从更加抽象改进为更加细化,软件和硬件设计可以同时展开,混合验证,从而在保证设计优化的情况下减少仿真时间以加速设计收敛。
Transaction,即事务,是一个比较抽象的概念。在笔者看来,一个事务就是只一次原子的操作或者通信行为,比如一次读取存储器的操作、一次写存储器的操作、一个读改写操作,甚至一次DMA操 作。原子在这里的含义是不能被打破或者中断。 在一个总线系统中,总线的一次读或者一次写操作通常会被认为是事务;在一个包通信系统中,发送一个包通常被认为是一个事务。因此,从硬件的角度,一个事务是两个实体(进程、模块、通道等)间的一次控制或者数据传输。从软件的角度,一次事务通常被理解为一个函数调用。该调用的结果通常是参数被传到被调用函 数,返回值被传回到调用函数,该调用过程可能立刻返回,也可能因为发生阻塞在后来的某一个系统时间点返回。