怎样写测试自动化测试框架怎么写的testbench

怎样写testbench(内有一个实例分析)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
怎样写testbench(内有一个实例分析)
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢验证平台自动化篇之三:如何定制一款TB自动化工具?(上)
作为QuestaSim10.6(2016年发布)的新特性,UVM Framework受到了不少的关注,这与它旨在于将M家(MentorGraphics)验证套件(QuestaSim、Questa VIP、inFact)做资源整合,发挥testbench建立效率最大化有关,以此来完成资源的深度应用。毫无疑问,如果路粉们所在的公司就在使用M家系列的验证套件,并且事深度绑定用户的话,那就继续深入下去使用这些更高层次的插件,以此能够快速应用VIP、并且可以将激励实现较方便的复用(inFact提供的特性)。
然而,三大厂商的客户都挺广泛,而且经常有验证工具套件几家厂商混用的情况,例如用C家(Cadence)的USB VIP,同时使用S家(Synopsys)家的PCIe VIP和M家的DDR VIP。遇到这种情况,那么上一节介绍的Questa VIP configurator则无法发挥理想的作用,于此同时,UVM Framework也无法快速地集成,同时也不能依赖于inFact实现跨平台、跨层次的复用。除此以外,作为开源或者说一个尽量贴合各位路粉的自动化工具,首先要考虑到不同公司的verifier们面临的情形:
使用的VIP可能是商业的,而且来自于不同的公司。
使用的VIP也可能是自研发的,不同的VIP来自于不同的团队和开发者,有不同的接口标准。
寄存器模型的生成和集成流程也往往不同,这是由于寄存器描述文件的不同标准(可能是自定义的word、excel、xml或者别的格式)还有不同的寄存器访问总线接口(AHB、APB等)
在于DUT在顶层testbench连线时,需要考虑自动化(或者半自动)的连线方式,减少人为错误,也提供连线效率。
公司们基于历史原因,可能无法直接使用基于可移植激励的新型验证方式(例如inFact),但是verifier们仍然有激励复用的需求,即从模块级到子系统级、再到系统级,以及跨平台的需求。
当然,对于TB自动化工具的基本要求,也少不了能够快速实现平台结构搭建、生成基本测试用例、减低调试成本的需要。
如果结合M家的UVM Framework,我们可以说,这个工具的特性,非常适合于M家的纯粹用户,而对于非M家用户、或者在环境中兼容别家VIP或者自研发VIP的情形时,就能力有限了。所以,一句老话运用到自定制的TB自动化工具上面来说,颇有几分契合——金窝银窝不如自己的狗窝。虽然,路桑的Pangu团队都是兼职,都是运用了8小时以外的时间来完成这个工具,但值得高兴的是,我们获得的一线verifier的反馈是没有经过过滤的,而且我们最为自研发团队,可以就公司的实际情况对工具的特性做出添加和调整,这一点很关键,也正是这一点使得这一款TB自动化工具无法被EDA厂商自己的自动化工具所替代。
接下来,我们首先就Pangu可以解决的问题给出一个特性列表:
可以兼容任何公司的VIP和自研发的VIP
可以将自己公司的寄存器模型创建集成到环境中去
可以实现testbench顶层连线自动化
可以实现激励从模块级到系统级的复用
从这些特性来看,Pangu是更广义层次上的TB自动化工具,它的兼容性更强,而且也能够集成公司自身的寄存器创建流程。它解决的问题,同UVM Framework有重合的地方,比如生成一致的验证环境结构、避免结构层面上出现不同的UVM使用习惯、快速集成不同的VIP同时也能够生成对应的文件和makefile,同时它更友好的地方还在于,无论哪家的VIP,在经历一点小的“整容”之后就可以很快地融入到这个结构中来,它还可以集成公司已有的寄存器模型创建的流程(如果没有,也可以在这个框架中实现),更快第完成testbench连线,此外还有一个重要特性,就是在它的机构之上,给出可行的激励跨层次复用(垂直复用)方案。当然,这个工具还有一些要改进的地方,不过这仍然取决于客户实际的使用需求,还是那句话,只要有idea和customer,就没有实现不了的方案。
在接下来的部分,我们就下面几个部分来介绍Pangu的特性:
验证环境的自动化创建
测试框架和测试用例的垂直复用
中心化的功能覆盖率管理
验证环境的自动化创建
在进入Pangu创建的框架之前,我们需要来了解下面这些关键词,这对于稍后了解更多关于Pangu这款自动化工具有帮助:
Pangu:测试平台自动化工具
uTB(unified testbench):这是由Pangu自动化生成的测试平台。
uIF(unified interface):这是一个协议跨接桥,用来将从uNet网络接收到的一致化命令转化为对应的VIP所识别的sequence/item。
uTB command:这是一种一致化的命令集,用来创建测试用例,提高可读性和维护性。
uNet:这是一个AHB的物理传输网络,负责从uTB的master端将uTB command以AHB协议穿过其网络,最终送达uIF接口的输入端。
假设如果要验证一个新的模块,在使用Pangu来自动化创建一个uTB之前,需要从DUT收集这些信息:
标准总线的类型、数目、地址范围、位宽等。
时钟和复位的数目、频率、同步关系等。
非标准总线(自定义总线)的信息。
其它零散接口信息。
寄存器描述文件、基地址等。
在收集到这些信息之后,将这些信息作为Pangu的uTB结构数据输入,继而自动化生成uTB。下面给出的便是一个生成了uTB框架:
结合之前的uTB中的关键词汇,下面的再给出一些组成uTB框架的核心组件:
uTB master:用来充当发送uTB command的角色,由它们来扮演控制各个VIP的角色,如果有两个以上的master则可以实现并行控制VIP的要求。
RGM(register model):这是由之前给入的寄存器信息生成的寄存器模型。
uNet(AHB network):uNet是一个AHB多点传输的物理网络,支持多个master到多个slave的AHB数据传输。在这里,我们复用了Synopsys AMBA验证套件提供的AHB系统总线网络。
uTB slave:这些个uTB slave扮演了协议转换桥接的角色,一方面它们从uNet接收一致化数据包排列的uTB command,另外一方面它们也需要解析这些包,继而将获取的数据转化为不同VIP所识别的sequence/item。
VIP:这些VIP可以是任意公司的VIP和自家开发的VIP,它们与其对应的uTB slave相连接。
在完成了验证结构从上到下的数据传输连接之后,就到了各个VIP的interface一级和DUT的连接,这一部分也可以由Pangu在自动化时生成对应的testbench文件和信号连接。对于这样的一个uTB结构,它最重要的部分是uTB master可以集中化地发送uTB command来控制任意一个VIP master agent,另外一部分这离不开协议的转换,即uTB command在uTB master侧发出,继而转化为标准的AHB网络数据抵达uNet slave端,稍后uNet slave端收到AHB数据包之后传递给uTB slave,经过uTB slave的转换变为各个VIP识别的sequence/item,最后从VIP的sequencer到driver,继而在interface一侧驱动到DUT。
要理解uTB结构的重要性,就需要首先理解数据传输中的协议转化。为了总结不同层次的协议转换,我们将其分为四个层面的转化:
Layer1:从TLM2 socket数据包转为AHB pin。这里的TLM2 socket只是数据包的打包方式,而内在的内容则是uTB command的数据。这种数据必须按照严格的数据格式安排,有它内在的协议要求,通常uTB command需要包含目标uTB slave对应的地址、命令类型、发送数据和其它参数。在uTB master一侧需要将uTB command按照TLM2 socket包格式发送到uNet AHB master一侧,该AHB master接受这种数据格式,并且将其转化为AHB system network上的pin level信号。
Layer2:AHB pin level信号再次转换为uTB command TLM2 socket数据包,这恰好是Layer1转化的反方向形式。具体是发生在有uNet AHB master发起pin level信号驱动,继而数据按照时序关系依次穿过uNet AHB network之后,抵达目标uNet slave端。抵达之后的数据会被AHB收集整合为TLM2 socket形式。
Layer3:TLM2 socket uTB command数据格式转化为VIP可识别的sequence/item。这一层转化是重点转化部分,因为用户需要自己去实现从同一格式的uTB command数据内容提取对应的命令符、传输数据和其它参数,继而创建和发送对应的VIP sequence/item,传递到VIP的sequencer和driver端。
Layer4:VIP sequencer/driver接收到的sequence/item转化为pin level的信号激励。这一层则是由VIP本身实现的。
上面的四层协议转化中,Layer1和Layer2转化完成了uTB command数据从无时序信息的软件对象到AHB pin level的时序转化,或者反向的转化,对于这两层的转化是由中心化维护(Pangu开发者)的,使用者无需关心它们背后的细节。Layer3则是重点,因为它不但提取了uTB command软件对象中的有用信息,而且将其转化为VIP识别的sequence/item。这一层用户可能需要维护,例如一个新的VIP需要加入时,这种转化关系需要提前创建。而对于Layer4则无需关系,它本身在VIP sequencer/driver的实现范围之内。
从上面给出的uTB框架的例子,可以看到它完成了跟testench自动化相关的几个方面:
验证框架的自动化生成
寄存器模型的创建和集成
所需VIP的快速集成
为了使用户能够同上一节UVM Framework给出的示例有一个比较,我们仍然假定有同一款设计:
在给入了一些Pangu所需要的设计信息之后,我们可以将其生成的uTB框架绘制如下:
从图上可以看到,Pangu也可以快速集成各个VIP master或者slave,同时生成空模板的user defined VIP(cpb_in、cpb_out、mem_out)。相比于UVM Framework在结构自动化生成上的优势则是它可以兼容不同源、不同接口标准的VIP,而非M一家的VIP,同时它还可以实现寄存器模型的一体化集成。而在激励复用层面的对比,我们会在后面部分介绍。因此,Pangu在验证结构上的优势即是更开发包容的接口快速搭建和寄存器模型的一体化。针对block_c,Pangu生成的uTB结构可以划分为:
utb_master。这个结构中有两个master端,用来支持并行发送指令,进而要求两个VIP的master可以并行发送数据。
uNet。这个网络的AHB master数量和AHB slave数量由utb_master和utb_slave的数量决定,同时verifier需要给出各个utb_slave对应的地址段。
utb_slave。各个utb_slave需要独立开发,对于标准VIP,Pangu在前期开发中已经实现它们的utb_slave,而对于customized UVC,例如pkt-out agent,则需要用户在后期实现对应的utb_slave,进而将utb command转化为pkt-out agent的sequence/item。
VIP。无论是商业VIP、自研发VIP还是个别新定义的VIP,都需要将这些VIP的agent集成到uTB中。上面图中既包括master agent,用来接收utb_slave的转化指令,进而在interface对DUT做驱动,也包括slave agent,该组件则用来嵌入到uTB环境中,用来模拟对应的总线从端,一般作为外接的memory使用。
顶层的testbench。该模块即是将各个VIP interface同block_c的接口信号进行连接。
那么进入到更深的开发层面,Pangu是如何开发的,需要哪些知识技能和商业资源呢?从下面这张图可以看到,Pangu的脚本开发离不开一些底层资源,它们包括:
uTB common package:这包括了uTB master、uTB slave、uTB command等公共类的定义实现。
可用的VIP资源:商业VIP或者自研发的VIP。
HAS(Hardware Architecture Specification):硬件结构描述文档,该文档随着DUT的不同而不同,verifier需要从该文档中提取必要的输入参数交给Pangu。
在Pangu有了上面这些静态的和动态的底层资源之后,就能够生成不同结构的uTB。
从具体实现层面来看,使用Pangu时需要如何操作呢?Pangu脚本本身的结构如何?从技术层面上而言,Pangu的数据结构解析、操作、逻辑和用户界面由Python/tkinter实现,而文件自动化生成则是由Python/Mako来实现。关于基于Python的Tk和Mako用户可以在下面的网址中得到更多的信息。
对于基于Python的用户界面编程和模板语言,开发者实际上有更多的选择,而Pangu开发的原则则是尽量选择简单地、稳定地、易学习和维护的开发库,毕竟好的木匠和好的瓦工专业有很大的差别,但选择一款足够开发的Python库,将我们需要的特性都能实现,就达到了开发一款工具的目的。
从Pangu的使用流程来看,用户可以通过GUI界面方式、或者表格(或文本)的方式将必要的结构信息作为验证环境参数给入Pangu,继而Pangu会将这些参数解析为内在的数据形式DataPool。在拥有了必要的数据信息之后,各个模板部分(配置模板、环境模板、寄存器模型模板和测试用例模板)会从中心化的数据资源中提取需要的数据,再结合各自以后的Mako模板,在顶层的模板生成调度器(main template generator)的控制下生成所有需要的uTB文件。
在设计验证参数、Pangu Python脚本和Mako模板的帮助下,生成的uTB文件可以覆盖下面的内容:
所有需要的VIP资源的链接
寄存器模型文件
uTB顶层环境文件,它例化了各个uTB master、uNet、uTB slave、register model和VIP agent,完成了它们之间的TLM接口连接,同时还例化了virtual sequencer,将各个VIP的sequencer传递到给组件。
结构化的配置文件,它包含了各个uTB中组件的配置对象,协助中心化的功能配置。
基本的测试文件,例如设置时钟、发起复位、访问寄存器、读写数据的基本测试用例会相应生成,供读者参考。而为什么可以直接生成基本测试用例,这与测试用例的复用离不开,我们将在下面的部分介绍。
自动连接的testbench,将DUT同各个VIP interface连接。
makefile脚本。该脚本提供了DUT、TB的编译和测试用例的调用命令,还包括覆盖率收集等后期应用。
在开发Pangu脚本和uTB测试平台结构原型的时候,这两者之间存在既是独立开发,又是有开发节点的依赖关系。首先,只有在前期可以证明uTB的结构化和可行性,才能够接下来开发Pangu脚本。而当Pangu脚本开发到一定的时间节点,又可以利用Pangu来生成更多与DUT相关的uTB,从而在反向来证明uTB结构的合理和适用,而在Pangu使用的过程中也可以从用户那里得到反馈,进一步修改uTB的结构和Pangu脚本。
因此Pangu同uTB之间是一个相互依赖和促进的关系。下面的这张图给出了Pangu开发和uTB自动化测试平台的层级关系:
在最底层,uTB指令集和uNet通信网络构成了测试标准化的基础,而Mako模板和HAS参数则用来生成结构化的uTB环境。
在上一层中,商业VIP、自开发VIP、和用户自定义的VIP用来提供底层的驱动组件。
通过生成的uTB和复用的VIP,更高一层的中心化配置方法和由通用测试指令构成的测试用例实现了uTB环境的灵活配置和测试用例的标准化。
基于底层的这些资源,Pangu便可以自动生成uTB。
谢谢你对路科验证的关注,也欢迎你分享和转发真正的技术价值,你的支持是我们保持前行的动力。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点Interface Testbench-I/O 接口测试系统-研发工具-恒润科技
&>& Interface Testbench-I/O 接口测试系统
Interface Testbench-I/O 接口测试系统
& & & & I/O 接口测试系统(Interface Testbench,简称ITB) 是一套集多种接口测试为一体的实时测试系统。ITB 提供激励- 响应式测试、自动化测试、实时采集和存储、实时解析监控、数据分析和数据回放等丰富的测试功能,可应用于电子系统的仿真测试、开发调试、集成联试、出厂测试、验收测试、外场测试和系统维护等试验任务中。
& & & & ITB 提供ICD 数据定义和I/O 接口分配等试验构型管理功能,可满足用户对测试环境的灵活性和通用性要求,被广泛应用于航空、航天、兵器和船舶等领域。
1. 产品功能
&&试验资源和构型管理
& &&&支持丰富的接口类型:包括ARINC664(AFDX)、FC-AE、IEEE1394、MIL-STD-1553B、ARINC429、RS232/422/485、CAN、Flexray、RFM、HDLC、以太网、LVDT/RVDT、IMB/ADB、电位计/ 电阻、模拟量、离散量和音视频等
& &&&基于试验任务,对试验配置、测试数据、测试结果进行一体化管理,能够保存并恢复测试构型
& &&&对不同类型的I/O接口资源实行统一管理,支持多总线同时工作
&&ICD数据和测试通道配置
& &&&支持以图形化的方式对总线接口收发的应用层协议数据(ICD)进行按位定义
& &&&支持从ICD管理工具或其他标准数据文件导入ICD数据
& &&&支持用户自主分配I/O通道与ICD数据的关联关系
&&接口数据采集、监控和仿真
& &&&实时采集各类接口数据,并追加高精度时标
& &&&基于ICD定义,自动解析原始数据,在线还原工程值、物理量或状态量
& &&&提供表格、曲线和虚拟控件等多种监控形式,支持用户自定义监控界面
& &&&基于ICD变量编辑仿真报文,支持提供斜坡、方波等常用数字信号源
&&基于脚本的自动化测试
& &&&提供基于关键字的引擎,采用类自然语言的测试脚本实现&激励- 响应&式的测试用例
& &&&提供友好的参数化测试用例编辑界面,支持基于语法的辅助脚本编辑功能
& &&&提供测试用例自动执行、测试结果在线监控和测试报告的自动生成功能
& &&&提供测试用例的配置管理功能,支持用户自定义测试库
&&数据的存储和分析
& &&&对测试数据进行统一存储和管理,支持历史数据的检索和回放分析
& &&&支持标准格式的工程数据文件的导出
2.产品特性
&&开放式模块化的系统架构
& & &&接口资源可扩展,部署灵活,支持分布式、集中式或便携式等物理构型
& &&&&支持不同总线类型数据全通道、全变量在同一界面内的集中监控
& &&&&分布式采集节点间全网时钟同步,支持 IEEE1588 和IRIG-B 时钟同步协议
& &&&&支持接口数据远距离传输,最远传输距离可达120Km
&&基于配置的试验系统构型
& &&&&接口硬件资源可复用,满足通用化平台要求
& &&&&可通过软件配置接口数据与接口资源间的对应关系
& &&&&支持用户自定义测试脚本和监控画面
& &&&&支持多客户端并行操作和分布式人机交互
&&规范化的测试流程和数据管理
& &&&&提供测试数据准备、测试用例实现、测试执行监控、测试结果分析的工作流程管理
& &&&&支持试验人员的权限管理,基于配置库和数据库统一管理各工作阶段的工作成果
& &&&&测试工程可反复加载和执行,保证测试过程的可重复性
& &&&&实现从测试需求到测试用例、从测试用例到测试问题的矩阵式追溯
& &&&&通过自动代码生成和自动文档生成,保证数据的一致性,并提高工作效率
电话:010-
邮箱:market_
用户名请输入您常用的邮箱地址,错误的地址将影响功能使用
汽车主机厂
汽车零部件商
企业中高层
项目(部门)主管
技术/研发工程师
电话输入格式:“区号-电话号码”
你感兴趣内容
汽车电子咨询服务
汽车电子配套产品
军工电子咨询服务I/O 接口测试系统—Interface Testbench-综合电子-恒润科技
&>& I/O 接口测试系统—Interface Testbench
I/O 接口测试系统—Interface Testbench
& & & & I/O 接口测试系统(Interface Testbench,简称ITB) 是一套集多种接口测试为一体的实时柔性测试系统,具有模块化、自动化、可配置和可扩展等柔性特点。ITB 提供激励- 响应式测试、自动化测试、实时采集和存储、实时解析监控、数据分析和数据回灌等丰富的测试功能,可应用于电子设备的仿真测试、开发调试、集成联试、出厂测试、验收测试、装配测试、外场测试和系统维护等阶段。
& & & & ITB 提供ICD 数据定义和I/O 接口分配等试验构型管理功能,可满足用户对测试环境的灵活性和通用性要求,可应用于多个型号产品的测试试验,可覆盖不同接口规模的测试场景,适用于电子系统生命周期中的多个阶段,被广泛应用于航空、航天、兵器和船舶等领域。
&&&测试管理
&&& && 提供集成环境,对实验配置、测试数据、测试结果进行统一管理,确保实验的一致性,支持重复进行实验;
&&& && 支持按照被测型号或被测产品等形式对测试构型进行管理,能够保存、快速恢复测试构型。
&&&方便的实验资源管理
&&& && 支持丰富的接口资源:包括ARINC664(AFDX)、FC-AE、IEEE1394B、MIL-STD-1553B、ARINC429、RS232/422/485、CAN、Flexray、RFM、HDLC、以太网、LVDT/RVDT、IMB/ADB、电位计/ 电阻、模拟量、离散量和音视频等多种接口;
&&& && 自动扫描和识别硬件接口资源,并监视其健康状态;
&&& && 统一管理所有的I/O接口资源,支持多总线、全通道同时工作。
&&&灵活的测试通道配置
&&& && 支持以图形化的方式对总线接口收发的应用层协议数据(ICD)进行在线定义;
&&& && 支持用户自由分配I/O通道与ICD数据的关联关系,支持面向ICD 数据的自动化测试、实时激励、采集和存储。
&&&丰富的监控手段
&&& && 基于ICD定义,自动解析原始数据,实时还原工程值、物理量或状态量;
&&& && 提供表格、曲线和虚拟控件等多种监控形式,用户可定制监控画面和布局,实现所见即所得的效果;
&&& && 提供通道级、ICD级的数据统计和监控,支持多总线数据的集中监控,支持二进制或十六进制原始数据的监控;
&&& && 支持分布式多客户端、多窗口监控。
&&&支持激励-响应测试
&&& && 基于ICD变量编辑激励报文,系统自动打包成完整报文;
&&& && 具有信号发生器功能,提供斜坡、正弦波、方波、三角波等信号源;
&&& && 激励变量值、信号源参数可在线调节;
&&& && 支持固定次数激励和循环激励。
&&&自动化测试
&&& && 支持图形化编辑测试用例,无需编程基础即可灵活应用;
&&& && 支持原生的JavaScript和PythonScript脚本激励;
&&& && 支持测试用例的自动执行和测试报告的自动生成;
&&& && 支持激励-响应结果的自动判读和测试结果统计;
&&& && 支持测试用例的复用,测试库的扩展;
&&& && 支持测试用例的配置管理。
&&&&数据分析
&&& && 基于时间段范围过滤存储的历史数据,进行回放显示;
&&& && 支持各类工程值数据的导出,可生成Txt和CSV等多种格式数据文件,供其它数据分析软件(如Matlab)计算分析。
&&&用户可管理试验构型,构建通用的测试平台
&&& && 支持用户在线定义接口数据;
&&& && 支持用户分配I/O接口资源;
&&& && 支持用户自定义监控画面、激励数据和测试用例。
&&&用户可管理、规范测试过程,提高测试效率
&&& && 根据被测产品需求,基于ICD数据进行测试;
&&& && 试验配置功能与试验测试功能分离,规范不同角色的职责;
&&& && 测试用例可保存、可复用,便于回归测试和问题复现。
&&&系统架构灵活、可靠,可满足不同接口规模的测试场景
&&& && 支持激励/采集、监控、存储的分布式部署,可根据测试需要进行方便的扩充I/O资源,且任一节点发生故障均不影响整个系统的运行;
&&& && 测试通道可灵活组合、分配,可组成高达1000通道的分布式测试系统;
&&& && 提供便携式产品构型,既可单独使用,也可集成到试验室测试系统中;
&&& && 基于以太网构建试验网络,支持IO数据远距离传输,最远传输距离可达120Km;
&&& && 采用实时处理系统和高带宽低延迟实时数据网络,以满足多总线、多接口同时工作的处理性能要求和数据传输带宽要求;
&&& && 采用一致的系统时钟,支持IEEE1588和IRIG-B时钟同步协议。
&&&研制阶段:作为调试工具,辅助研发人员进行系统的调试、半实物仿真测试和功能逻辑验证;
&&&测试阶段:作为测试工具或验收工具,辅助测试人员进行系统的出厂测试或验收测试;
&&&集成阶段:作为集成验证平台,辅助系统工程师进行多设备的集成、功能确认和故障定位;
&&&维护阶段:作为检测验证工具,辅助维护人员进行故障定位、问题确认和复现。
电话:010-
邮箱:market_
用户名请输入您常用的邮箱地址,错误的地址将影响功能使用
汽车主机厂
汽车零部件商
企业中高层
项目(部门)主管
技术/研发工程师
电话输入格式:“区号-电话号码”
你感兴趣内容
汽车电子咨询服务
汽车电子配套产品
军工电子咨询服务}

我要回帖

更多关于 自动化测试脚本怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信