当前位置:首页 > 工作总结 > 通信系统的设计与验证_验证系统 如何设计
 

通信系统的设计与验证_验证系统 如何设计

发布时间:2019-02-16 04:42:48 影响了:

  1引言       如今,3G 无线网络和手持终端设备已经开始大规模部署,下一代无线通信协议标准,俗称4G,也已经基本制定完成。3GPP 的长期演进(LTE) 被大多数国家接受为4G 标准。LTE 的支持者宣称只需对现有的网络基础设施更新部分关键部件就可以完成升级,因此LTE 得到了业界的广泛认同。2008 年12 月11 日,3GPP 批准并冻结了LTE Release 8,这一里程碑式的事件开启了研发兼容新协议的产品的大幕。移动WiMAX(802.16) 作为4G 的另一个候选方案,与LTE 在物理层应用上有许多相同的概念,只是实现细节上存在不同。这也为开发同时支持WiMAX 和LTE 方案的产品提供了可能。在物理层设计上,LTE 和WiMAX 的复杂度相差不多。对LTE 的研究为我们重提调制解调算法设计和验证过程的重要性提供了机会。在算法设计阶段犯下的错误很难在硬件设计或者嵌入式软件开发阶段弥补回来。对算法的验证是为了检测设计能否满足协议标准的要求。例如,需要检测不同信道环境下的最大误包率。协议标准的很大一部分内容都被用来定义测试环境。当选择某种工具或者方法来进行有效的算法设计时,工程设计者需要从整个设计流程的角度来考虑算法复杂度的要求。针对一些简单设计的解决方案对更大更复杂的系统来说可能完全不适用。而如果每一个项目都采用独特的工具和方法,项目的维护就会成为噩梦。一些表面上看成本很小的解决方案,后续可能需要购买其他昂贵的工具。而如果工具某些基础功能缺失,也会耗费工程师更多的时间和精力。本文主要探讨从3G 转向4G 的物理层设计过程中的仿真工具效率问题。这些关于效率的准则也可以用于其他信号处理领域。
  
  2LTE 和WiMAX:物理层关键技术
  
   LTE 和WiMAX 都是基于正交频分复用(OFDM) 的多载波调制方案,通过多输入输出天线(MIMO) 进行信号传输。这与3G基于码分复用(CDMA) 的概念有很大不同。3G 与4G 系统的物理层基带处理算法有着本质区别。
   物理层概念的不同直接导致了仿真复杂度的增加。相比3G而言,4G系统的物理层仿真复杂度大概有100倍的增长。部分原因在于4G系统中,每个数据采样点都需要更多的操作:更复杂的编码/解码算法,需要同时在平行的多个信道上传输,采用了更复杂的信道均衡技术。针对不同频带上的不同信道模型,还有多输入多输出(MIMO)的不同配置(见图1),需要增加大量的测试方案。在此基础上,还需要考虑不同量化精度对系统性能的影响。因此算法的验证工作越来越艰巨也就不足为奇了。
   下文的例子都会以LTE为基础。所有的结论也适用于WiMAX和其他需要大规模仿真的信号处理系统。
  
  3设计和验证流程
  
   制定一个新的通信协议标准的目的,是以最小的成本实现用户和网络运营商对高速信号传输的要求,同时也要符合市场化的预期。一个LTE调制解调系统往往同时包含了ASIC和DSP或者微控制器,整个工程需要实现复杂的硬件设计和软件算法。因此,制定一个覆盖算法设计、软硬件实现、以及系统验证的高效流程显得尤为重要。
   算法设计的初始阶段,一般都需要首先为算法创建一个浮点模型。一旦这个浮点模型验证通过,下一步就会开始对算法的定点转换,最后再移植到硬件及软件平台上进行验证。
  
   3.1 算法的浮点模型
   在设计目标确定以后,系统工程师就需要针对几种备选算法进行测试和优化,然后在蒙特卡洛仿真结果的基础上确定最优的算法。图2给出了以误比特率(BER)或者误块率(BLER)为指标,进行性能仿真的蒙特卡洛仿真平台框图(蒙特卡洛仿真是指激励信号由随机或者伪随机数据源产生的一类仿真)。此时仿真模型并不需要考虑最后的实现细节,所有的算法都可以用浮点模型来表示。
   建模效率是反映创建仿真平台难易程度的一个概念。决定建模效率的一个关键因素就是可重用的模型数量。这些可重用的模型可能来自厂商提供的库,也可能是从以前的项目继承得来(也称为重用效率)。当然并不是所有的模型都能从库里面找到,有些模型也需要用户自己开发。开发的模式有多种,比如可以由一些基本的模型组合成一个复杂的模型(分层设计),或者从零开始,根据新的功能需求创建新的模型。
   仿真时还需要考虑的一个因素是仿真效率。以前面提到的LTE和WiMAX为例,由于涉及到许多设计参数,因此为了得到最优的算法,就需要仿真大量的参数组合。仿真效率成为制约整个过程的关键。
  
   3.2 从浮点算法到定点算法的转换
   考虑到成本的因素,算法的主要部分最后都需要以定点而不是浮点来实现,除非选择浮点DSP。因此,当算法从设计到应用的转换过程中,需要分析量化精度的影响。字长的选择直接关系到实现的性能,字长太短会使系统质量有很大损失。算法本身可能很好理解,但是量化噪声对算法的影响可能很难评估,因此需要小心对待。
   一般来说,对算法进行定点转换是一个递归的过程。首先需要创建一个浮点模型,然后将变量逐个进行转换。每个变量定点化后,都需要将仿真结果与浮点模型进行比较。仿真工具应该仅仅通过修改模型参数就实现这一过程,而不需要每次都重写模型。另外,工具对常用的定点数据类型的支持也很重要。因为如果仅仅依靠以整型位移来实现定点,调试的时候会非常麻烦。仿真工具的选择应该在项目的初期就考虑好。如果在项目开始几个月后才意识到问题,此时要更换工具几乎是不可能的。
   人们往往会低估定点化过程需要的时间。定点转换其实非常繁琐,花费的时间可能并不比算法设计来得短。因此选择合适的仿真工具显得尤其重要。
  
   3.3 软硬件实现和验证
   当算法的定点转换完成以后,定点模型就是系统实现的参考模型,因为它定义了系统的算法性能。一般来说,从算法模型到硬件实现的过程会出现很多错误。这是因为算法开发和硬件实现所遵循的设计原则是不同的,使用的工具也做不到紧密结合。算法工程师往往需要给硬件工程师提供激励信号,作为HDL仿真的输入,然后将HDL仿真的结果与算法仿真做比较。这种方法实现起来会有许多困难:
   ●针对每一组参数配置和测试方案都会有一个仿真结果,为了比较所有的这些参数组合,需要保存大量的激励信号和参考结果文件,既费时又费力
   ●每一个新创建的HDL测试案例都需要算法工程师和硬件工程师一起进行验证,工作量很大
   ●当HDL仿真和参考仿真结果不同时,很难确定错误发生的位置和原因
   这种方法已经逐渐被淘汰。现在流行的方法是不同部门之间通过一个可执行平台来传递设计定义。算法部门、RTL硬件部门、以及采用虚拟平台做软件开发的部门可以共享一个仿真平台。算法部门创建的浮点或定点模型作为一个可执行的参考模型文件,可以直接用到HDL代码和软件验证中去。
   实现这种设计共享存在两种途径。第一,在算法设计工具中直接导入RTL代码,实现RTL和算法模型的联合仿真。第二,由算法设计工具导出算法模型,以标准库的形式集成到硬件验证工具中去。硬件验证工程师往往更愿意采用熟悉的工作环境,所以第二种途径更为常用。SystemC是大多数HDL仿真工具都能识别的一种标准接口,因此算法设计工具导出的模型一般会采用SystemC的格式。这些SystemC模型也可以直接在虚拟平台中表示一个硬件模型或者激励信号源,对开发的软件进行验证。SystemC模型是在软硬件开发中实现算法模型重用的关键。
   图3给出了利用算法设计工具导出的模型来验证接收机实现模块的一个例子。信号源与传输信道模型封装了SystemC接口,产生的激励信号作为定点算法参考模型和实现模型(也采用SystemC封装)的输入。
  
  4算法设计效率
  
   上述的例子表明,从算法设计的角度来看,工具效率是由多个方面组成的。从算法构思到最后的软硬件实现,效率的提升需要工具的各个方面紧密结合,共同完成。
   效率包括多个方面:
   ●建模效率
   ●仿真效率
   ●重用效率
   ●验证效率
   在设计的开始阶段,选择工具时常犯的错误是只注重某一个方面的影响,而忽视了其他。这并不奇怪。首先,面对复杂的应用环境,传统的思维方式往往只考虑设计环节,即创建浮点模型。其次,项目的压力使得人们急于看到成果,迫使工程师们追求尽快获得一个初步的模型。这些因素导致了大家更倾向于选择浮点优化能力强的工具,因为只有这样才能更快的完成一个设计雏形。而当项目逐渐深入,实现变得越来越重要的时候,这种工具选择的短视才会显现出来。
  
   4.1 建模效率
   建模效率是反映创建模型难易程度的一个概念,这其中既包含了创建浮点算法模型,也包含从浮点到定点的转换。算法的最初形式是一些数学表达式,把这些抽象的表达式转换成仿真模型的过程应该是越简单越好。利用标准接口以及遵循一定的代码规则可以提高模型的互操作性。如果工具有好的调试和分析能力,也能改善建模的效率。
   建模效率是衡量浮点到定点转换过程的一个关键因素。浮点到定点的转换要求尽可能的保留设计的关键部分,不对代码做大的改动。因此,工具需要支持一些特殊的数据类型、常用运算符、模板、以及运算符重载等。
  
   4.2 仿真效率
   工具的仿真效率主要体现在仿真速度上。仿真平台的运行速度对项目周期的每一个阶段都有很大影响。比如在算法设计阶段,需要反复测试算法的有效性,而在定点转换过程中,需要不断调整量化字长。这些都需要很高的仿真速度支持,否则整个项目周期会拉长。
   在诸如LTE之类的通信系统接收机设计中,利用接收机算法模型得到衰落信道下的一个误比特率值可能需要好几个小时,有时甚至是几天的仿真时间。而不同的仿真工具之间也可能存在100x的速度差异。如今,通信标准越来越多的采用复杂算法模块,比如多天线发送接收,turbo编解码等等,需要做的一致性测试也大量增加。为了避免项目延迟,保证设计符合预期,我们应该在设计和验证的每一个阶段都仔细考虑工具的仿真效率问题。
   仿真效率的提高还体现在工具的批处理能力和平行仿真能力上。虽然工具仿真效率的重要性不言而喻,但是由于在设计开始阶段往往只有一些简单的测试案例,工具效率的差别无法充分体现,从而导致选择工具时不够慎重。随着项目深入,设计越来越复杂,效率的瓶颈会变得日益明显。所以我们需要在一开始就仔细考虑仿真效率的问题。
  
   4.3 重用效率
   在通信系统的开发过程中,我们可以重用一些以前的设计。这些设计可能来自其他设计部门。为了能有效的将它们整合到现有的系统中,工具需要提供版本控制、标准接口、以及自动管理设计文档的特性。
  
   4.4 验证效率
   从算法设计的角度来讲,验证效率是指算法模型能否直接集成进软硬件架构的验证流程中。理想情况下,算法设计工具应该是从系统到芯片的验证流程中的一个组成部分。这要求设计工具能将算法模型导出为SystemC模型,在HDL仿真器和虚拟平台中重用。
  
  5仿真技术
  
   如今市面上存在很多设计工具,但是所使用的仿真技术可以归为以下三类:
   ●时间驱动的仿真
   ●事件驱动的仿真
   ●数据流驱动的仿真
   这些仿真技术的主要差别在于顶层模块是如何调用子模块与子函数的。在数字通信和信号处理系统中,不同的仿真技术将导致仿真速度的巨大差异。
   在数字通信和信号处理系统中,信号可以分为数据信号和控制信号,也称为数据流和控制流。
   数字通信接收机利用数据信号来检测和解调发送的符号。这些数据信号承载着有用信息,数值在每个采样时间点是变化的。数据信号既可以用无限精度(实数)的离散时间信号来表示,也可以看作有限精度的数字信号。任何一种表示方法都可以附带离散时间索引作为参量。这个参量也可以忽略,因为它仅仅表示信号在时间轴上的位置关系。位置关系要么是已知的,要么可以随时重建。因此离散时间数据信号可以看作是由采样点组成的数据流。
   控制信号则是一些逻辑值或者标志,用来对通信或者信号处理系统中的数据链路进行控制和配置。例如,控制信号可以指示信道解码器采用什么样的码表。控制信号的值一般很少改变。因此控制信号可以看作是低速数据流或者离散的事件。在算法设计的开始阶段,控制信号可以首先以参数的形式存在。在后续过程中,比如架构设计阶段,再重新以信号的形式建模(参看图5的例子)。
   数据流和控制流在系统的设计验证中发挥了重要作用,系统设计工具需要提供对其建模的要求。下文将对三种建模技术做一个比较。
  
   5.1 时间驱动的仿真
   固定步长的时间驱动仿真技术最简单。全局仿真时钟在固定的时间间隔更新,仿真器跟踪全局时钟,在每一次时钟更新后调用模块,读取输入,更新内部状态,计算输出信号。这种方法对所有的模块使用了相同的采样速率。然而,即使在同一个通信系统中,不同信号的带宽也有可能是不同的,扩频系统就是一个例子。此时仿真器需要对低速信号做过采样,这将带来极大的开销,仿真效率也很低。所以固定采用率的仿真方法不适合对通信系统的仿真。
   也有一些改进的措施,比如可以对每个模块都标注采样时间,当全局仿真时钟等于采样时间的某个倍数时,才调用该模块。但是这种方法存在很大的局限性,例如当模块的几个输入或者输出信号采样时间不一致时,就无法实现。因此,利用该方法不能建模既有数据输入又有控制输入的模型。
   其他的改进方法包括以帧为单位来处理信号,这也称为向量化的处理,就是将顺序的采样值用向量来表示。但是这种方法提高了对内存的要求,也不能用于反馈环路。向量化操作是导致仿真死锁的主要原因,而且一旦发生很难定位错误。总之,时间驱动的仿真方法通常很慢,对通信系统中的数据流和控制流建模效率不高。
  
   5.2 事件驱动的仿真
   事件驱动的仿真是指调度算法根据事件序列的发生顺序来指示状态更新的一种仿真技术。当事件发生时,只有那些与事件相关的模块会被调用。对一个事件的处理可能会触发其他的事件,因此事件序列在仿真过程中需要不断调整。当事件的发生在时间轴上分布不均匀时,比如像网络之类的异步系统或者逻辑系统,事件驱动的仿真效率优势才能体现出来。因此这种方法主要用于针对控制流的仿真。
  如果是同步系统,比如基于数据流的通信或者信号处理系统,每产生一个采样点都对应发生一个事件,需要更新事件队列,这在运行时的开销就非常大。因此,基于事件驱动的仿真技术不适用于针对数字通信系统之类的系统级设计工具。
  
   5.3 数据流驱动的仿真
   模块的调度由输入端口的采样数据数量决定,这就是数据流驱动的仿真技术特性。模块被调用时,会从输入端口读取一定数量的采样数据,同时将一定数量的数据输出。消耗和产生的采样点个数分别对应输入输出端口的速率。当输入端口累积的数据量超过端口速率时,模块就会被调用。
   模块的各个端口速率不要求一致,因此建模多速率系统和模块都很方便。
  模块调度的顺序又称为调度算法。如果端口速率恒定,或者说端口速率在仿真时间内不变,调度算法就可以在仿真开始之前确定。这称为静态调度,也叫同步数据流。如果模块的端口速率不是常数,而是在每一次调用时都不相同,调度算法就无法预先确定,需要在仿真运行时动态的调整。这称为动态调度或者动态数据流。动态调度会增加额外的运行时开销,但是比起静态调度更灵活。而且在某些数字信号接收机算法中,比如定时恢复或者不固定的采样速率转换模块,只能采用动态数据流来建模。信号的传输可以用带方向的线网来表示。模块的输出端口会与其他模块的输入端口相连。有些端口连接需要特别关注,因为如果端口速率不匹配,可能会造成调度算法的内存问题。另外,反馈环路中需要包含延迟模块。需要特别说明的是,这些问题并不是数据流驱动的仿真造成的,而是离散信号系统本身不可避免的。比如两个离散信号的加法或者乘法操作需要信号有相同的采样速率,而离散信号系统中的反馈环路必须包含延迟。只有遵循了特定的规则,对离散信号系统的仿真才能保证内存不会溢出。而仿真工具应该提供帮助用户定位速率不匹配和死锁的功能。
  由于离散时间数字信号可以用数据流和多速率模块来表示,因此采用数据流驱动的仿真器对数据信号和控制信号流建模就有很高的效率。图5给出了数据流驱动的仿真模型的例子。图的上半部分是动态多速率模型,带有高速端口的模块主要用来处理数据链路。图的下半部分是低速的控制模块,用来指示每一帧的符号数或者比特数。由此可见,数据流驱动的仿真是数字通信系统中最常用,也是最有效的仿真方法。
  
  6优化的系统级设计解决方案
  
   对于物理层算法的仿真,我们有多种方案可以选择。包括直接利用C/C++编译信号处理函数库,以及采用商业化工具提供的建模和仿真模式。本节以Synopsys System Studio为例,说明在无线设计领域,商业化工具相比C/C++在各方面的优势。
  
   6.1 仿真模式
   上文提及,Synopsys System Studio采用了数据流驱动的仿真模式,能够自动处理静态和动态数据流,特别适合针对复杂通信系统的设计需求。
   时间驱动的仿真技术需要在仿真性能(使用向量处理)和仿真灵活性(反馈回路,时域和频域切换)之间取得折中,而且对动态系统模型仿真的支持不够。
   C/C++没有专门的仿真模式,开发者需要自己设计调度算法。因此在C/C++中可以使用数据流驱动的概念。SystemC仿真器采用事件驱动的方式,考虑到对仿真性能的影响,应该尽量避免使用。
  
   6.2 建模效率
   System Studio对模型接口有严格的定义,支持基于模块的设计方法(见图6),对模型的使用简单明了,文档管理也很清晰。System Studio支持SystemC定点数据类型,允许数据类型重载,从而大大简化了浮点到定点的转换过程。对于商业化的工具,我们需要了解它们的发展历程。一般来说,每种工具及其建模方式都有各自的应用范围。比如针对控制信号的建模方式并不适合通信系统中常见的数据流模型。在浮点到定点的转换过程中,应该避免重复建模,而应采用支持参数的模型,通过参数修改来逐步转换。
   C/C++的建模效率很低,因为除了需要设计功能模块,还需要同时开发专门的调度算法来管理这些模块。一旦修改了设计,调度算法也需要做相应的调整。这不但要求所有的研发人员都遵循严格的代码风格,也加大了项目维护的难度。SystemC建模也存在同样的问题,仅有的改进包括增加了对定点数据类型的支持,模型间可以利用FIFO完成数据交换。
  
   6.3 仿真效率
   System Studio采用了优化的数据流驱动概念,支持自动分析和产生静态调度算法,必要的时候又保持了动态调度的灵活性,因此仿真效率很高。System Studio针对定点仿真还采用了特殊的优化技术,使得包含SystemC定点数据类型的仿真平台有接近浮点平台的运算速度。
   对定点算法的建模与仿真有两种常用的模式。一种是高建模效率(使用一些通用的定点数据类型)加低仿真速度,另一种是低建模效率(使用整型数据类型、移位及与或操作)加高仿真速度。如果选择了适当的调度算法,使用固有的数据类型,C/C++的仿真效率是很高的。从设计复杂度的角度来讲,C/C++仿真的主要工作是设计一个有效的调度算法。商业化的工具由于内置了优化的调度算法,在仿真效率上的优势明显。SystemC仿真内核采用了基于事件驱动的仿真技术,不适用于通信系统的仿真。采用C/C++仿真还需要额外开发的分布式仿真模式和增加数据管理功能,这本身也是一项艰巨的任务。
  
   6.4 重用效率
   System Studio极高的重用效率得益于其严格定义的接口规范,这保证了不同来源的模型可以有效整合在一起。而基于模块的设计输入和自动生成HTML格式文档的能力也使得模型重用效率极大提高。C/C++模型接口没有严格的规范,接口定义有很大的自由度,不支持图形设计界面,也不支持文档生成和管理,因此重用效率很低。
  
   6.5 验证效率
   System Studio的验证效率很高,内置的HDL导入特性支持所有主流的HDL仿真器。同时System Studio可以导出SystemC模型,因此System Studio开发的模型可以在SystemC仿真环境中使用。
   其他的商业化的解决方案多数不提供硬件仿真的接口,或者需要额外购买昂贵的工具。C/C++的验证效率很不错,因为C/C++函数可以与HDL仿真平台或虚拟平台进行集成。SystemC的验证效率也很高,SystemC 模型可以直接在HDL仿真器以及SystemC兼容的虚拟平台中使用。SystemC模型还可以利用时钟和并发的概念来创建适配器,这一点与C/C++不同。
  
  7总结
  
   对于现代通信系统的开发,比如LTE和WiMAX,算法设计验证工具的选择对设计质量和能否早日实现商用都有着非常重要的影响。LTE和WiMAX系统都需要支持极高的数据速率,同时也要满足频谱效率的要求,这些都会导致非常复杂的信号处理算法。4G标准定义了很多应用场景,要求系统在这些场景中都能很好的工作,因此在算法设计阶段需要仿真大量的测试案例。复杂度和项目周期的压力要求算法与结构设计能与软硬件实现工作完全整合在一起。因此,系统设计变成了一项更宽泛的工程,不止需要工程师之间横向的合作,也需要按照项目进展的情况纵向的管理。
   设计流程或者方法的选择对设计效率有很大的影响。对于算法工程师来讲,效率体现在使用的工具上,具体包括四个方面的因素:建模效率,仿真效率,重用效率和验证效率。当选择某种工具或者方法来进行有效的算法设计时,工程设计者需要从整个设计流程的角度来考虑算法复杂度的要求。针对一些简单设计的解决方案对更大更复杂的系统来说可能完全不适用。而如果每一个项目都采用独特的工具和方法,项目的维护就会成为噩梦。一些表面上看成本很小的解决方案,后续可能需要购买其他昂贵的工具。而如果工具某些基础功能缺失,也会耗费工程师更多的时间和精力。
   Synopsys的 System Studio作为业界领先的仿真工具,针对通信系统设计者面临的挑战给出了完善的解决方案。System Studio的特点包括:
   ●支持算法设计的标准化流程:标准模型接口、自动生成和管理文档、代码检查、版本控制系统接口。
   ●极高的仿真性能:数据流驱动的仿真调度内核,支持静态和动态数据流,针对定点仿真的优化。
   ●与实现工具的整合:支持模型导入和导出。

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3