一种基于ISS的软硬件协同验证环境
发布时间:2008/5/27 0:00:00 访问次数:587
软硬件协同验证的概念已经提出多年,但是直到这些年随着soc技术的发展,软硬件协同验证技术才得到更多的关注和重视,并得到发展。软硬件协同验证是一种在硬件流片封装之前,验证soc系统硬件和软件是否能够正确工作的技术。协同验证又可以叫作虚拟原型技术,因为硬件部分的仿真虽然跟真实硬件的运行基本一样,但是硬件仿真其实是通过在工作站上的一个软件程序的运行来实现的。协同验证的基本框架如图1所示。
对比传统的验证方法,协同验证技术使得软件设计工程师能够在设计早期进行调试,可以较早的进行软硬件的整合,缩短上市时问(time-to-market)。另一方面,通过软硬件协同验证,可以为硬件设计工程师提供了一整套非常接近于现实的激励集,有利用于提高验证的质量。
协同验证系统由一个硬件执行环境和一个软件执行环境组成,通过事件和命令,使用一些机制,在这两个环境间进行控制。软件的执行环境用于产生总线周期的序列,协同验证工具将总线周期转换成许多信号事件或者命令集,并驱动这些信号事件命令进入硬件执行环境,然后对总线周期响应进行硬件环境取样,这一响应又被传送回软件环境。同时,保持硬件及软件环境问的同步以便硬件或软件环境都可发现由于错失响应而导致有误的情形。
软硬件协同验证中,软硬件部分都是通过建模的方式实现。其中硬件建模方式有如下几种:采用fpga原型或模拟系统;采用hdl及逻辑仿真器;采用高级程序语言(如c/c++语言)编写的行为模型。软件也可通过几种方式执行:采用iss(指令集仿真器)在cpu上运行;通过编译,并在运行仿真程序的主机上运行。在一般的soc设计中,硬件建模一般用硬件描述语言来实现,软件一般需要编译成针对soc硬件嵌入式核的目标代码,因此在本文中,将采用指令级模拟器加逻辑仿真器(iss with logicsimulator)的方法来构建协同验证环境。
2 进程间通信
软硬件仿真器之间的通信是协同验证中的关键技术。由于软件仿真和硬件仿真使用独立的两个进程,因此可以使用unix下的进程间通信(inter process communication,ipc)技术来实现软硬件仿真器之间的信息交互。常用的几种unix ipc有无名管道,有名管道(fifo)和unix套接字(socket)。无名管道是unix中最常用的ipc方式,优点是非常简洁,弱点是他只能在相关的,有共同祖先的进程间使用;有名管道(fifo)和无名管道的区别在于他是持久稳定的,而且可以让无任何关联的进程问交换数据;套接字是一种抽象数据结构,用以创建一条在没有关联的进程间发送、接收消息的通道(连接点),一旦通道建立之后,被连接起来的进程就可以通过普通的文件系统存取例程来进行通信了。在通信的两方中,一方称为客户程序(client),另一方称为服务程序(server)。建立过程如图2所示。对比上述3种通信方式的特点,这里使用unixsocket来实现两个进程间的通信。
3 消息传递
在本环境中,软硬件间的通信可以看作是一个消息传递的过程,在软件环境和硬件环境中添加数据传输函数,并通过接口实现信息交互,如图3所示。
在两个进程消息传递的过程中,消息可以分为3类:同步的数据传输;异步的数据传输;无数据传输的同步信号。同步的数据传输是指在一种机制下,保证在发送端进程发送数据时,接收端进程处在正确的状态;如果发送端进程发起一次数据传输时,接收端不处在合适的状态,发送端则阻塞这次传输直到接收端准备好。异步的数据传输是指发送端进程在发送数据时,不考虑这次数据或者前一次的数据是否被接收端接收到,数据没有缓冲,每次新发送的数据都会覆盖前一次的数据,因此,在一次传输中,数据可能被接收多次或者接收不到。通常这种传输用来传递状态信息。无数据传输的同步信号,用来同步两个进程的状态,没有数据的交换。一个进程可使用同步信号来通知另外一个进程开始一次任务或者等待其完成一次任务。
软件环境和硬件环境中数据传输函数与接口间的通信方式是不同的。在软件环境中,数据传输函数只包括简单的读写操作,读写操作分为同步和异步两种模式。在硬件环境中,需要定义一些端口来控制数据传输,每一个端口使用不同的协议。进行同步数据传输时,在硬件环境中使用握手端口,同时与软件环境中的同步读写函数配合。握手端口共有4个,分为两个sends(数据从硬件环境
软硬件协同验证的概念已经提出多年,但是直到这些年随着soc技术的发展,软硬件协同验证技术才得到更多的关注和重视,并得到发展。软硬件协同验证是一种在硬件流片封装之前,验证soc系统硬件和软件是否能够正确工作的技术。协同验证又可以叫作虚拟原型技术,因为硬件部分的仿真虽然跟真实硬件的运行基本一样,但是硬件仿真其实是通过在工作站上的一个软件程序的运行来实现的。协同验证的基本框架如图1所示。
对比传统的验证方法,协同验证技术使得软件设计工程师能够在设计早期进行调试,可以较早的进行软硬件的整合,缩短上市时问(time-to-market)。另一方面,通过软硬件协同验证,可以为硬件设计工程师提供了一整套非常接近于现实的激励集,有利用于提高验证的质量。
协同验证系统由一个硬件执行环境和一个软件执行环境组成,通过事件和命令,使用一些机制,在这两个环境间进行控制。软件的执行环境用于产生总线周期的序列,协同验证工具将总线周期转换成许多信号事件或者命令集,并驱动这些信号事件命令进入硬件执行环境,然后对总线周期响应进行硬件环境取样,这一响应又被传送回软件环境。同时,保持硬件及软件环境问的同步以便硬件或软件环境都可发现由于错失响应而导致有误的情形。
软硬件协同验证中,软硬件部分都是通过建模的方式实现。其中硬件建模方式有如下几种:采用fpga原型或模拟系统;采用hdl及逻辑仿真器;采用高级程序语言(如c/c++语言)编写的行为模型。软件也可通过几种方式执行:采用iss(指令集仿真器)在cpu上运行;通过编译,并在运行仿真程序的主机上运行。在一般的soc设计中,硬件建模一般用硬件描述语言来实现,软件一般需要编译成针对soc硬件嵌入式核的目标代码,因此在本文中,将采用指令级模拟器加逻辑仿真器(iss with logicsimulator)的方法来构建协同验证环境。
2 进程间通信
软硬件仿真器之间的通信是协同验证中的关键技术。由于软件仿真和硬件仿真使用独立的两个进程,因此可以使用unix下的进程间通信(inter process communication,ipc)技术来实现软硬件仿真器之间的信息交互。常用的几种unix ipc有无名管道,有名管道(fifo)和unix套接字(socket)。无名管道是unix中最常用的ipc方式,优点是非常简洁,弱点是他只能在相关的,有共同祖先的进程间使用;有名管道(fifo)和无名管道的区别在于他是持久稳定的,而且可以让无任何关联的进程问交换数据;套接字是一种抽象数据结构,用以创建一条在没有关联的进程间发送、接收消息的通道(连接点),一旦通道建立之后,被连接起来的进程就可以通过普通的文件系统存取例程来进行通信了。在通信的两方中,一方称为客户程序(client),另一方称为服务程序(server)。建立过程如图2所示。对比上述3种通信方式的特点,这里使用unixsocket来实现两个进程间的通信。
3 消息传递
在本环境中,软硬件间的通信可以看作是一个消息传递的过程,在软件环境和硬件环境中添加数据传输函数,并通过接口实现信息交互,如图3所示。
在两个进程消息传递的过程中,消息可以分为3类:同步的数据传输;异步的数据传输;无数据传输的同步信号。同步的数据传输是指在一种机制下,保证在发送端进程发送数据时,接收端进程处在正确的状态;如果发送端进程发起一次数据传输时,接收端不处在合适的状态,发送端则阻塞这次传输直到接收端准备好。异步的数据传输是指发送端进程在发送数据时,不考虑这次数据或者前一次的数据是否被接收端接收到,数据没有缓冲,每次新发送的数据都会覆盖前一次的数据,因此,在一次传输中,数据可能被接收多次或者接收不到。通常这种传输用来传递状态信息。无数据传输的同步信号,用来同步两个进程的状态,没有数据的交换。一个进程可使用同步信号来通知另外一个进程开始一次任务或者等待其完成一次任务。
软件环境和硬件环境中数据传输函数与接口间的通信方式是不同的。在软件环境中,数据传输函数只包括简单的读写操作,读写操作分为同步和异步两种模式。在硬件环境中,需要定义一些端口来控制数据传输,每一个端口使用不同的协议。进行同步数据传输时,在硬件环境中使用握手端口,同时与软件环境中的同步读写函数配合。握手端口共有4个,分为两个sends(数据从硬件环境