一种逻辑仿真方法.pdf

上传人:r7 文档编号:235342 上传时间:2018-02-04 格式:PDF 页数:14 大小:653.28KB
返回 下载 相关 举报
摘要
申请专利号:

CN03146703.2

申请日:

2003.07.09

公开号:

CN1567874A

公开日:

2005.01.19

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

H04L12/28; H04L12/24; H04L12/26; H04L29/06; H04B17/00; H04M3/22

主分类号:

H04L12/28; H04L12/24; H04L12/26; H04L29/06; H04B17/00; H04M3/22

申请人:

华为技术有限公司;

发明人:

王进成

地址:

518057广东省深圳市南山区科技园科发路1号华为用服大厦

优先权:

专利代理机构:

北京三友知识产权代理有限公司

代理人:

李强

PDF下载: PDF下载
内容摘要

本发明有关于一种用于通讯类逻辑仿真的激励报文产生方法,包括A)在逻辑的一个业务输入端口中定义流并指定流的参数;B)启动逻辑仿真器并以来自仿真器的请求激励报文的事件,触发业务输入端口进行流的调度;C)业务输入端口调度出一个流,并构造出一个激励报文;D)应答仿真器的激励报文请求事件,并将激励报文传递过去;E)返回步骤B),直至仿真结束。本发明将报文构造和报文流调度分离开来,可将报文流调度过程以及报文流的管理定义成一个可以共享的模块,最大程度实现了模块共享;对于不能共享的报文构造功能转交给用户实现,这样,就大大减少了用户编写激励软件的工作量。

权利要求书

1、一种逻辑仿真方法,包括下列步骤:
A)在逻辑的一个业务输入端口中定义流并指定流的参数;
B)启动逻辑仿真器并触发业务输入端口进行流的调度;
C)业务输入端口调度出一个流,并构造出一个激励报文;
D)业务输入端口将激励报文传递给逻辑仿真器;
E)返回步骤B),直至仿真结束。
2、如权利要求1所述的逻辑仿真方法,其特征在于:所述的流的参数,
包括:用于构造报文的参数、流的QOS参数和用于流调度的参数。
3、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤B)中
业务输入端口进行流的调度是由来自仿真器的请求激励报文事件触发的;
所述步骤D)中还包括有应答仿真器的激励报文请求事件的步骤。
4、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤B)中,
流的调度进一步包括:
比较流的发送数据带宽和期望带宽,如果一个流的发送数据带宽小于
其期望带宽,则业务输入端口调度出该流;如果多个流的发送数据带宽均
小于其期望带宽,则计算出各流的发送数据带宽与期望带宽的比值,选择出
比值最小的流;当多个流的比值相当时,随机选择其中的一个流;如果一个流
的发送数据带宽大于其期望带宽,则业务输入端口不再选择该流。
5、如权利要求4所述的逻辑仿真方法,其特征在于:依序调度出来的
流,分别构造出各自的激励报文,汇聚成激励报文序列。
6、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤C)还
包括下列步骤:
C1)取出流的构造报文的参数;
C2)构造报文净荷并插入标签;
C3)将参数传递给外部的报文构造器,由报文构造器内的TCL脚本报
文构造函数构造出激励报文。
7、如权利要求6所述的逻辑仿真方法,其特征在于:所述的报文构造
器是用TCL扩展命令编写的。
8、如权利要求6所述的逻辑仿真方法,其特征在于:所述的标签包括:
特征数据、报文序列号、前5个字节的校验码、净荷长度和净荷的CRC冗
余校验之中至少一个或多个的组合。
9、如权利要求1所述的逻辑仿真方法,其特征在于:所述用于构造报
文的参数,包括:业务输入端口编号、业务输入端口内的子端口编号、流
的编号、流上次产生报文的编号、随机数种子、报文内承载的净荷最小字
节数、报文内承载的净荷最大字节数和报文内承载的净荷模式之中至少一
个或多个的组合。
10、如权利要求1所述的逻辑仿真方法,其特征在于:所述流的QOS
参数,包括:乱序、带宽、延时、突发或报文丢弃率之中至少一个或多个
的组合。

说明书

一种逻辑仿真方法

技术领域

本发明涉及测试领域,尤指一种逻辑仿真方法。

背景技术

在进行通讯类大规模逻辑功能验证仿真时,实现激励模块的重用、支持各
种激励通讯报文的产生是一个很复杂艰难的任务。主要难点在于:实际的报文
流是一种无序,但又有一定的流量特征,一般是多个报文流的无序混合,产生
这种无序报文流需要进行报文调度;通讯报文往往是一种协议报文封装另一种
协议报文,实际报文是多种协议报文的层层封装;用户能够任意设置报文各个
域的值,并能设置异常值。激励报文,是在仿真环境下的通讯报文,通常用激
励报文输入给被仿真的数字逻辑,通过仿真检查数字逻辑对通讯报文的处理是
否正确。因此,应尽量使激励报文接近实际的通讯报文。

进行通讯类大规模逻辑仿真时,现有技术中所采用的激励报文产生方法一
般是用C语言或脚本语言直接编程,如以太网报文定义:

  typedef struct{

  sU64 sa:48;//源地址48位

  sU64 da:48;//目的地址48位

  sU16 typelength;//类型长度16位

  VLAN_HDR_ T vlan;//虚拟局域网标签

  sU32 enable:1;//使能位

  }ENET_HDR_T;

  VLAN标签定义:
        <!-- SIPO <DP n="1"> -->
        <dp n="d1"/>
  typedef struct{

  sU16 tag;//虚拟局域网特征字段

  sU16 id;//虚拟局域网数字标号

  sU32 enable:1;//使能位

  }VLAN_HDR_T;

在调用以太网报文构造函数之前,初始化报文字段的值,以太网报文构造
函数将这些字段组合成以太网报文的头部,并附加到报文缓冲区的尾部。

enet.enable=HEADER_ENABLED;

enet.sa=0x123456789abc;

enet.da=0xfeedface33;

enet.typelength=INC[64];

当构造多层协议封装的报文时,如图1中的报文d,先调用ethernet(以太网)
的报文首部构造函数,然后依次调用ipv4、tcp、payload的构造函数。当报文产
生后,报文被放入一个队列。逻辑的一个业务输入口可以有多个报文队列,每
个队列对应一个报文构造程序;一个业务输入口有一个报文队列管理模块,队
列管理模块控制各个报文队列中报文的调度,将报文向逻辑仿真器传递。队列
管理模块同时完成控制报文向逻辑仿真器传递速度。一个逻辑仿真项目,通常
有多个业务输入口,每个口都需要激励报文,用户需要编写程序调用基本的报
文产生程序,为每个业务输入口产生报文。队列管理模块也需要为每个业务输
入口进行编写,这些代码是跟具体的项目密切相关,重用度低,在不同的逻辑
项目中改变也比较大。事实上,这种激励报文产生方法没有技术思想,用户写出
的代码很随意。

现有技术的缺点:激励产生的方法不具有通用性,在不同的逻辑项目中需
要重新编写激励产生程序,代码难以形成共享的模块,在编写测试程序时,代
码编写的工作量大,导致仿真方法复杂。

发明内容

本发明提供一种激励报文产生方法及基于该方法的逻辑仿真方法,以解
决现有技术中仿真方法太复杂的问题。

为解决上述问题,本发明提供如下解决方案:

一种逻辑仿真方法,包括下列步骤:

A)在逻辑的一个业务输入端口中定义流并指定流的参数;

B)启动逻辑仿真器并触发业务输入端口进行流的调度;

C)业务输入端口调度出一个流,并构造出一个激励报文;

D)业务输入端口将激励报文传递给逻辑仿真器;

E)返回步骤B),直至仿真结束。

所述的流的参数,包括:用于构造报文的参数、流的QOS参数和用于
流调度的参数。

所述步骤B)中业务输入端口进行流的调度是由来自仿真器的请求激励
报文事件触发的;所述步骤D)中还包括有应答仿真器的激励报文请求事
件的步骤。

所述步骤B中,流的调度进一步包括:

比较流的发送数据带宽和期望带宽,如果一个流的发送数据带宽小于
其期望带宽,则业务输入端口调度出该流;如果多个流的发送数据带宽均
小于其期望带宽,则计算出各流的发送数据带宽与期望带宽的比值,选择出
比值最小的流;当多个流的比值相当时,随机选择其中的一个流;如果一个流
的发送数据带宽大于其期望带宽,则业务输入端口不再选择该流。

依序调度出来的流,分别构造出各自的激励报文,汇聚成激励报文序
列。

所述步骤C)还包括下列步骤:

C1)取出流的构造报文的参数;

C2)构造报文净荷并插入标签;

C3)将参数传递给外部的报文构造器,由报文构造器内的TCL脚本报
文构造函数构造出激励报文。

所述的报文构造器是用TCL扩展命令编写的。

所述的标签包括:特征数据、报文序列号、前5个字节的校验码、净
荷长度和净荷的CRC冗余校验之中至少一个或多个的组合。

所述用于构造报文的参数,包括:业务输入端口编号、业务输入端口
内的子端口编号、流的编号、流上次产生报文的编号、随机数种子、报文
内承载的净荷最小字节数、报文内承载的净荷最大字节数和报文内承载的
净荷模式之中至少一个或多个的组合。

所述流的QOS参数,包括:乱序、带宽、延时、突发或报文丢弃率之
中至少一个或多个的组合。

本发明将报文构造和报文流调度分离开来,可将报文流调度过程以及
报文流的管理定义成一个可以共享的模块,最大程度实现了模块共享。对
于不能共享的报文构造功能转交给用户实现,这样,就大大减少了用户编
写激励软件的工作量。

另外,由于激励报文的构造是以简单的TCL脚本命令控制,在脚本化
测试活动中,用户可以方便地构造各种激励报文,用于不同的测试项目。
比如构造以太网报文,用户可以在以太网中封装IP报文,在IP报文中封装
TCP报文,也可以在以太网中封装PPP报文,还可以在以太网报文中封装
MPLS报文,在产生激励时,可以是这几种报文的混合或任一组合。用户可
以控制报文数据任一字段的取值,插入错误,在可靠性测试中很有用。

附图说明

图1为现有技术中常见的激励报文。

图2为本发明产生激励报文的过程示意图。

图3为本发明方法的流程图。

图4为本发明方法中激励报文的产生及汇聚成报文序列的过程示意图。

具体实施方式

经过逻辑的业务总线,输送给逻辑的报文,通常是多个报文流的汇聚。在
逻辑仿真中,为了产生符合实际的激励数据,我们在逻辑的业务输入端口定义
多个流(stream)。所述流是指具有一定特征的报文序列,比如具有相同VLANID
(以太网报文中的虚拟以太网标签,4个字节。)的报文可以定义为一条流,
具有相同源MAC地址(表示发出该报文的设备的物理地址,6字节)的报文序
列也可以定义为一条流,或者将同时具有某几个属性的报文序列定义为一条
流。对于一条流可以设置一些QOS属性(服务质量保证属性,包括:乱序、带
宽、延时、突发、报文丢弃率),比如设定属于该流的所有报文经过逻辑的延
时最大不能超过100微秒。逻辑的业务输入端口中定义的多个流,表示该业务
输入端口可以产生的多种不同信息的报文序列。

描述一个报文流需要一组参数,这组参数称为流的定义,不同的报文流只
是参数的值不同。流的参数包括三个部分:用于构造报文的参数、用于分析流
的QOS是否满足的参数、用于流调度的参数。实际实现时,流的参数很多,这
里主要介绍关键参数。

用于构造报文的参数:

  int port_id;//流从属的端口编号。

  int sub_port_id;//流从属的子端口编号

  int flow_sn;//流在所属端口内的序号,从0开始编号。

  int last_txpkt_sn;//该流发送报文的计数,

  int payload_length_min;∥有缺省,需要配置

  int payload_length_max;//有缺省,需要配置

  //净荷数据样式:=0,全0;=1,全FF;=2;55AA;=3,随机;=4,递增。<br/>
缺省=//3,需要配置

  int payload_pattern;
        <!-- SIPO <DP n="5"> -->
        <dp n="d5"/>
  int payload_mode;//=0,长度随机;=1,长度递增。缺省=0,需要配<br/>
置。

  int rand_seed_init;//第一个报文的随即数种子。第一<br/>
个报文构造完成后,Rand_seed_mid参数被刷新到一个新的值。

  iht rand_seed_mid;//产生当前报文的随即数种子。当前报文构<br/>
造完成后,该参数被刷新到一个新的值。

流的QOS参数如下:

  float tx_bandwidth;//设定发送带宽。

  float burst_factor;//突发因子,缺省无。

  float real_tx_bandwidth;//实际发送带宽。

  int drop_rate_max;//接收报文丢弃率上限,缺省无丢包。

  float drop_rate;//实际的接收报文丢弃率。

  float max_delay;//报文最大延时保证。缺省=0,无延时要求。

  int disorder_num;//乱序的允许值,=0不允许乱序,缺省=10,<br/>
表示与前一个报文的序号之差最大不超过10。

  int last_rcvpkt_seq_number;//最近一个接收报文的在该报文流内的排序<br/>
号,用于分析逻辑输出的报文是否乱序,以及乱序是否在disorder_num限定的<br/>
范围内。

  char*disorder_window;//用于产生可控乱序报文的参数。

用于流调度的参数如下:(也是QOS参数的一部分)

float tx_bandwidth;//设定发送带宽。

float burst_factor;//突发因子,缺省无。

float real_tx_bandwidth;//实际发送带宽。

定义好流后,如果业务输入端口收到来自仿真器的激励报文请求,则按照
一定的调度算法对这些流进行调度,具体为:在仿真进行时,设有一个虚拟的
时钟,它从0开始计时,这里称为仿真时间。业务输入端口的流会记录它产生
的数据量,比如当前仿真时间为100us,一条流产生了2K字节数据,产生的数
据量的比特位数除以当前仿真时间就得到了流的数据产生速率(即流的发送数
据带宽),如果该流的数据产生速率(发送数据带宽)小于期望速率(期望带
宽),业务输入端口就应该让这条流再产生一些数据,但可能有多个流的数据
产生速率(发送数据带宽)都小于期望速率(期望带宽),业务输入端口计算
出各流的发送数据带宽与期望带宽的比值,选择出比值最小的流;当多个流的
比值相当时,随机选择其中的一个流,让选择出的流产生数据。如果流的数据
产生速率大于期望速率,业务输入端口就不再选择它。这里提到的流,是对某
个报文序列的概括描述,比如这个报文序列的带宽,报文之间的间隔控制,报
文内的数据模式,报文的长短等等。用户在业务输入端口定义的多个流,就是
对这些描述信息的数据化,定义流的时候,并没有真正的报文序列存在。流的
调度算法,是根据这些描述信息而进行的,跟具体的报文数据没有关系,所以
流的调度是通用化的,可以做成一个通用模块来实现共享。

流是从属于逻辑的一个业务输入端口的,可以很容易地为一个业务输入端
口定义任意多条流。流的一部分QOS参数记录逻辑对报文的处理,当报文经过
逻辑处理后,相关信息被记录到报文所从属的流中,以分析QOS是否满足。

逻辑的一个业务输入端口,在C语言中可以描述为一个对象,业务输入端
口拥有数目可以设定的流,业务输入端口对流进行调度,每次调度出一个流。

用调度出来的流,产生一个激励报文的过程如图2所示。

首先,取出流中用于构造报文的参数。这些参数包括:port_sn表示业务输
入接口编号;subport_sn表示业务输入接口内的子端口编号(如果业务输入接
口内没有子端口,该参数总是为0);flow_sn表示流的编号,last_txpkt_sn表示
流上次产生报文的编号,流每次产生报文将该参数加1;rand_seed_mid表示随
机数种子;payload_length_min,表示在报文内承载的净荷最小字节数;
payload_length_max,表示在报文内承载的净荷最大字节数;payload_pattern,
表示在报文内承载的净荷模式:净荷数据是随机、递增、全0、全1。

然后,构造报文静荷payload并插入了一个标签,标签定义如下:

特征数据2个字节(F55F)+报文序列号FSN(3字节)+前5个字节的校验
码(1个字节)+后面净荷长度(2字节)+后面净荷的CRC32(4字节)。

最后,将参数传递给外部的报文构造器,产生出激励报文。

可以看出,传递给外部报文构造器(TCL脚本语言编写)的参数是一种通
用化的参数,与具体的报文结构没有关系。产生什么样的报文完全由外部报文
构造器决定。

综上所述,本发明的激励报文产生方法,其流程图如图3所示,包括下列
步骤:

步骤一:用户在逻辑的业务输入端口定义多条流,指定流的相关参数;

步骤二:使用商业软件仿真器开始仿真;

步骤三:来自仿真器的请求激励报文事件触发业务输入端口进行流的调
度;

步骤四:调度出一个流,产生相应的激励报文;

步骤五:应答仿真器的激励报文请求事件,同时将激励报文传递过去;

不断重复步骤三至步骤五,产生出激励报文序列,如图4所示,为流a和流
b经过流调度算法,产生激励报文序列的过程。

实际中,为了仿真逻辑的一个业务输入端口的报文流,产生报文数据的模
块由两部分组成,一个是用C语言写的模块,称为C模块,主要包含流的定义
并完成流的调度。另外一个模块是由脚本语言TCL写的报文构造器,报文构造
器内是一些TCL过程函数,由前述C模块调用。

本发明方法中产生报文的TCL代码示例如下:

  #-----------------------------------------

  #port_sn端口编号,假定编号1和2的端口是两个MII口,向逻辑发送以太网<br/>
报文;

  #last_txpkt_sn是报文在流内的序号;
        <!-- SIPO <DP n="8"> -->
        <dp n="d8"/>
  #flow_sn是流在端口内的序号;

  #port_sn、last_txpkt_sn、flow_sn定义为TCL脚本全局变量,并和C模块内<br/>
的变量进行连接。

  #------------------------------------------

  proc mii_pkt_build{}{

  if($port_sn<3){

  #to_hex扩展命令用于将输入的十进制参数,形成16进制字符串,返回的<br/>
字符个数,由第二个参数控制。

  set temp1[to_hex$last_txpkt_sn 6]

  set temp2[to_hex$flow_sn 6]

  set dmac$temp2$temp1

  set smac[to_hex$port_sn 12]

  #create_mac是扩展的报文构造命令,未指定的参数,按照缺省规则构造<br/>
报文。产生后的报文保存在C模块的报文缓冲区中。

  create_mac-dmac Ox$dmac-smac Ox$smac

  #如果将create_mac产生的报文封装为AAL5,则继续:

  create_aa15

  #create_aa15扩展命令能够识别create_mac产生的报文类型,并产生合适的<br/>
封装。

使用TCL脚本编写报文构造器,关键是使用了报文构造扩展命令,这些扩
展命令使用时可以指定参数(可以指定错误的参数),也可以不指定,并且能
够根据报文内封装的净荷自动设定参数的值。在构造复杂的多层协议封装的报
文时,这种报文构造方法很简洁。

使用TCL扩展命令编写的报文构造器,主要特点是,输入参数是统一的,
而构造出的报文可以是多种多样的,并且可以在一个报文构造脚本中为不同激
励模块(或不同的逻辑业务输入端口)和不同的流程编写各自的报文构造函数
(产生不同类型的报文)。

一种逻辑仿真方法.pdf_第1页
第1页 / 共14页
一种逻辑仿真方法.pdf_第2页
第2页 / 共14页
一种逻辑仿真方法.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《一种逻辑仿真方法.pdf》由会员分享,可在线阅读,更多相关《一种逻辑仿真方法.pdf(14页珍藏版)》请在专利查询网上搜索。

本发明有关于一种用于通讯类逻辑仿真的激励报文产生方法,包括A)在逻辑的一个业务输入端口中定义流并指定流的参数;B)启动逻辑仿真器并以来自仿真器的请求激励报文的事件,触发业务输入端口进行流的调度;C)业务输入端口调度出一个流,并构造出一个激励报文;D)应答仿真器的激励报文请求事件,并将激励报文传递过去;E)返回步骤B),直至仿真结束。本发明将报文构造和报文流调度分离开来,可将报文流调度过程以及报文流。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1