收藏 分享(赏)

SOC课程设计_基于systemC和UML语音备忘器设计_有程序代码_邱郁惠.doc

上传人:春华秋实 文档编号:3291447 上传时间:2018-10-10 格式:DOC 页数:20 大小:2.56MB
下载 相关 举报
SOC课程设计_基于systemC和UML语音备忘器设计_有程序代码_邱郁惠.doc_第1页
第1页 / 共20页
SOC课程设计_基于systemC和UML语音备忘器设计_有程序代码_邱郁惠.doc_第2页
第2页 / 共20页
SOC课程设计_基于systemC和UML语音备忘器设计_有程序代码_邱郁惠.doc_第3页
第3页 / 共20页
SOC课程设计_基于systemC和UML语音备忘器设计_有程序代码_邱郁惠.doc_第4页
第4页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、.页眉.页脚基于 SystemC 的语音备忘器设计摘要:随着VLSI的集成度越来越高,设计也越趋复杂。传统的设计方法如原理图输入、HDL语言描述在进行复杂系统设计时,设计效率往往比较低。特别是在算法由软件转化为硬件的环节上,传统的设计方法的效率不是很高,设计者往往要耗费大量的时间和精力手工进行算法的转化。为解决这些问题,一种新的系统级的设计方法SYSTEM C 被提出。SYSTEM C是一种方法,也是一个C库,用SYSTEM C可以很方便地实现一个软件算法的硬件实现,以及完成一个系统级的设计。关键词:SystemC、语音备忘器、UML一、 SystemC 的开发平台1.1 概述随着VLSI的集

2、成度越来越高,设计也越趋复杂。一个系统的设计往往不仅需要硬件设计人员的参与,也需要有软件设计人员的参与。软件设计人员与硬件设计人员之间的相互协调就变的格外重要,它直接关系到工作的效率以及整个系统设计的成败。传统的设计方法没有使软件设计工作与硬件设计工作协调一致,而是将两者的工作割裂开来。软件算法的设计人员在系统设计后期不能为硬件设计人员的设计提供任何的帮助。同时现在有些大规模集成电路设计中往往带有DSP Core或其它CPU Core。这些都使得单纯地用原理图或硬件描述语言来设计、仿真这么复杂的系统变得十分困难。System C就是在这些矛盾的背景下提出的。它的出现为复杂的系统设计提供了一条有

3、效的解决途径。 System C 是由 Synospy Inc. 提出的,目前最新的版本为V2.0。它提出的目的就是以一种系统设计的思想进行系统设计。它将软件算法与硬件实现很好的结合在一起,提高了整个系统设计的效率和正确性。 System C 是一个C+ 库,也是一种使设计者可以有效地设计出一个软件算法的准确循环模型,硬件结构以及系统级设计的方法。设计者可以用System C开发工具或在标准C+开发工具中加如System C库制作系统级模型,快速地仿真和优化设计,以及研究不同的算法,并且为硬件和软件设计人员提供一个设计系统的可执行规范。可执行规范本质上是一个C+程序,它显示了和设计系统同样的性

4、能,为软件设计人员和硬件设计人员提供了一个设计的标准。 System C 库提供了创造系统结构模型的必须结构,包括那些在C+没有的功能如硬件时序,并行和触发功能。C+这种面对象语言提供了通过增加类来扩展语言的能力,而这种能力是C语言所不具备的。因此,System C使用大家熟悉的C+语言和开发工具。 .页眉.页脚1.2 SYSTEM C的特点System C 支持对硬件和软件的联合设计,支持描述一个既包含硬件部分也包含软件部分的复杂系统结构。它也支持对接口的描述,有以下几个显著的特点: 1System C可以为软件设计人员和硬件设计人员提供一个系统的可执行规范。设计人员使用该可执行规范可以避免

5、设计中矛盾和错误的产生,并确保设计的完备性。这是应为在设计可执行规范时,系统设计者必须设计出也一个和系统具有同样工作状态的程序,通过这个程序可以发掘出潜在的矛盾和错误,并将这些矛盾和错误消除在整个设计的开始阶段,而不是在整个系统进行调试阶段才发现和解决这些矛盾和错误。这个程序还可以帮助设计者确保整个系统设计的完备性。 2设计人员利用这个可执行的系统规范,还可以发现设计中概念模糊的地方。无论什么时候,设计人员对设计产生疑惑,就可以运行这个可执行程序以明确在这个问题上系统设计人员是如何处理的,从而确保系统设计的正确性。而现在的设计方法不能使设计人员方便迅速的解决这些疑惑。甚至这些疑惑是系统设计人员

6、也不曾考虑过,这可能导致系统要重新进行设计。 3在系统设计被实现以前,设计人员还可以通过用System C设计的系统可执行规范来验证整个系统设计。这样可以避免由于在系统设计上的失误,而使系统实现不能达到要求。现在的设计方法不能提供这样的手段在设计完成前进行系统的验证,对系统的验证必须是在系统设计完后。即使在完成前进行验证,由于不能完全模拟实际系统的工作,其结果也只能作为一种参考。 4System C设计的可执行规范所使用的TESTBENCH文件可以通过小范围的修改或直接用在实现后的系统仿真。这就为设计实现人员带来很大的好处,他们不必花很多的时间去编写用来验证实现后系统正确性的TESTBENCH

7、文件。而现在采用的设计方法所使用的TESTBENCH文件却没有提供这样的便利条件。这是应为软件设计人员和硬件设计人员两者的设计思想和设计手段都是不同的,一个软件设计人员所使用的TESTBENCH文件并不能被硬件设计人员使用,甚至不能给硬件设计人员任何帮助。1.3 SYSTEM C设计与传统设计比较现在的系统设计一般是由系统工程师用C语言或C+语言设计出一个系统模型,并在系统级层次上检验概念和算法。当这些概念和算法被检验为正确无误时,C/C+模块被分解为功能相对独立的子模块。这些相对对立的子模块由硬件设计人员手工地转化为VHDL或Verilog语言用以硬件实现。这一个设计流程被显示在图1中。.页

8、眉.页脚图 1 传统设计流程从图1所示的设计流程中我们可以发现以下几个问题: 1、人工将CC+程序转换为HDL程序容易产生错误。在现在的这种设计方法中,系统工程师先按期望的设计要求设计出一个C模块,并验证这个模块使其达到期望的设计要求。然后系统工程师所设计的C模块被硬件设计人员手工转换为HDL模块。这个转换过程不仅容易产生错误,而且还很浪费时间。这是因为CC+语言和HDL语言有着显著的区别。首先,HDL的处理方式比CC+的复杂。CC+程序采用顺序执行的处理方式,而HDL程序中既有顺序执行也有并行执行的处理方式。要将CC+程序转化为HDL程序必然要引入一些控制信号,由这些信号控制HDL程序的运行

9、,但这样也容易产生错误。其次,CC+语言不涉及到时序关系。由于CC+语言不支持对时序的描述,系统工程师设计的系统模型只是验证了概念和算法,而只能对时间耗费上有一个大概的估计。这就使得硬件实现时,为满足系统在时间上的要求,硬件设计人员必须对软件算法进行一定的改造或优化。而这些改造或优化也有可能引入各种错误。 2、系统模块和HDL模块间缺乏联系。当系统模块被转换为HDL模块后,HDL模块成为整个系统设计的焦点。为适应硬件实现的特点,硬件设计人员会更改系统设计人员的设计,但这种更改只是在HDL模块中进行,而系统设计人员设计的C模块并没有因此更改。这就使得系统工程师设计的C模块和当前硬件设计人员设计的

10、HDL模块缺乏必要的联系。当硬件设计人员遇到概念模糊或理解错误的地方时,往往不能马上从C模块中得到明确的解答。此时,C模块的设计人员也不一定能为HDL设计人员提供有效的帮助。 3、多系统测试。不但C模块要转换为HDL模块,对C模块的测试也要人工转换为在HDL环境下的测试。这种转换也很复杂,而且浪费时间。HDL设计人员是根据他所设计的HDL模块和系统要求来设计TESTBENCH,这使得硬件设计人员不可能利用软件设计人员所使用的测试文件。同时,HDL人员要设计出一个好的TESTBENCH也需要比较长的时间。为解决在现在设计流程中所带来的种种弊端,一种全新的设计流程被提出,这就是System C设计

11、流程。它能很好的解决上面所提到的各种设计弊端,大大提高设计效率。图2是System C的硬件设计流程。.页眉.页脚图 2 System C 设计流程这种设计方法与现在常用的设计方法相比有很多优点: 1、精炼的设计方法。使用System C设计系统,系统设计人员不必花费很大的精力将整个系统设计由C语言描述转换为HDL描述。系统设计人员可以通过在C模块中很小的区域范围内加入必要的硬件和时序结构描述,从而将C模块方便准确地转化为一个有效的硬件设计,而避免将另行设计一个硬件模块。利用System C设计方法,设计人员可以很轻松地实现一个设计的更改,或在优化算法时检测出一些设计错误并及时修改。2、单一语

12、言书写。使用System C设计系统,整个设计都用一种语言设计系统,降低了对设计人员的要求,减少了语言转换时所造成的错误。这一优点也使得设计人员可以在一个比较高的层次上进行系统模块设计。在较高层次的设计会导致产生小的设计代码,使设计和仿真的速度比传统的设计方法要快很多。这一点是很显著的。1.4 SystemC的开发流程用SystemC可以在抽象层次的不同级别描述系统。在系统最高层的系统级可以用C/C+描述系统的功能和算法。在系统的硬件实现部分可以在行为级到RTL级用SystemC的类来进行描述。系统的软件部分自然可以用C/C+ 语言描述。由此可见针对系统的不同部分,SystemC都可以在不同的

13、抽象层次对其进行描述,而且这些描述在系统仿真时可以协同工作。用SystemC不仅可以描述要开发的系统本身,还可以描述系统的测试平台以提供测试信号用于系统的仿真。一个熟悉C+语言的用户只要了解类库中各种类引入的语义就可以用SystemC编程。SystemC由一组描述类的头文件和一个包含仿真核的连接库所组成,在用户的描述程序中必须包括相应的头文件,然后可以用通常的ANSI C+编译器编译该程序。在连接时要调用SystemC的连接库产生可执行的系统仿真程序。整个开发流程如图3所示。.页眉.页脚S y s t e m C 类头 文 件库编 译 器连 接 器C + + 开 发 环 境系 统 、 模 型

14、测 试平 台M a k e系 统 设 计 可 执 行仿 真 器图3 SystemC开发流程1.5 SystemC的建模特点SystemC语言的特点就是能够支持对复杂系统的设计。一个复杂的系统设计一般都要涉及软件和硬件两个方面,SystemC 在这两个方面都有其独到之处。它可以在任何C+集成环境中描述硬件和软件,以及它们之间的接口。SystemC 语言平台提供的建模元素和建模能力主要包括以下内容: 模块语句:SystemC 中定义了 “模块”类,它相当于 C+中的类定义。它是一个层次式设计的入口,一个模块可以嵌套其他模块; 进程语言:进程被包含在模块中,用来描述模块的功能。在 SystemC 中

15、有三种不同类型进程以满足不同软、硬件设计人员的需求; 端口语句:用来描述模块和外界通信的端口。SystemC 中支持单向和双向的端口; 信号语句:信号主要用来实现模块间以及模块内部各进程间的通讯。SystemC 支持单驱动和多驱动的信号。多驱动的信号可以有多个驱动,就是通常说的总线(BUS); 丰富的数据类型:SystemC 提供丰富的数据类型以满足多种抽象模型,固定精度的数据类型可用于快速仿真,任意精度的数据类型可用于大量数据的计算,定点数据类型可用来实现 DSP; 时钟语句:时钟在同步电路设计中是一个非常重要的角色,而 C/C+在描述系统时却很难表达时钟。SystemC 中对时钟进行了描述

16、,并把它当作一种特殊的信号。时钟为仿真过程提供了时间基准,SystemC 同时还支持在同一系统中的多个时钟,以及任意相位的时钟; 通讯协议:SystemC 支持多层通讯协议,用来描述各种抽象级别的模型和系统 I/O 协议; 波形跟踪:SystemC 支持 VCD、WIF 和 ISDB 格式波形的跟踪。二、 UML 统一建模语言2.1 概论.页眉.页脚UML与SystemC的绝妙搭配形成一股新式的芯片设计风潮。他们都可以用来呈现软硬件设计,最大的不同之处在于,UML是一种图形语言,而SystemC则是程序语言。当芯片设计的复杂度不断增高时,SystemC代码机会变得越来越难以掌握,所以会需要通过

17、UML的图形式设计来呈现真题的设计,再对应生成SystemC代码以得出更细致的设计。UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分

18、析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间需要协作,这可以用UML动态模型来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通讯和并行性等问题的类) 。这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详细的规格说明。编程(构造)是一个独立的阶段,其任务是用面向对象编程语言将来自设计阶段的类转换成实际的代码。在用UML建立分析和设计模型时,应尽量避免考虑把模型转换成某种特定的编程语言。因为在早期阶段,模型仅仅是理解和分析系

19、统结构的工具,过早考虑编码问题十分不利于建立简单正确的模型。UML模型还可作为软件测试阶段的依据。系统通常需要经过单元测试、集成测试、系统测试和验收测试。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。总之,标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。2.2 UML 的特点标准建模语言UML的主要特点可以归结为三点:(1) UML统一了Booch、

20、OMT和OOSE等方法中的基本概念。(2) UML还吸取了面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。因此,在UML中汇入了面向对象领域中很多人的思想。这些思想并不是UML的开发者们发明的,而是开发者.页眉.页脚们依据最优秀的OO方法和丰富的计算机科学实践经验综合提炼而成的。(3)UML在演变过程中还提出了一些新的概念。在UML标准中新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms

21、)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口(Interfaces)和组件(Components)等概念。因此可以认为,UML是一种先进实用的标准建模语言,但其中某些概念尚待实践来验证,UML也必然存在一个进化过程。三、 语音备忘器设计3.1 设计目的及意义人们经常会有重短暂忘记的感觉,比如正在

22、运动场上跑步,突然想到回去时顺便买瓶酸奶带回家,这样的念头一闪而过,没有赶快记录下来,跑完步回家时, 会这样想“记得跑完步我要做什么的”,但总是想不起来。等回到家后要喝酸奶时才想起没有买。如果有语音备忘器在口袋里,就可以在计划要做什么的时候录下音。3.2 用 UML 开始图形化设计3.2.1 用例设计语音备忘器的用例图包括两个模块,录制语音和播放语音。在starUML中新建工程更名为Recorder,Add-Model新建模块更名为用例,选择Add Diagram -Use Case Diagram。然后建立如图4所示的语音备忘器的用例.图4 语音备忘器的用例3.2.2 模块设计在模块设计中,

23、画两种类图,一种是展现全部模块的整体类图,如图5所示为整体类图。另一种是个体.页眉.页脚类图,特别用来展现单一模块设置端口及接口的情况,如图6-图10所示为。在Recorder工程中新建模块,更名为模块设计,选择Add Diagram -Class Diagram。建立如图5-图10的类图:图5 整体类图图6 Recorder个体类图图7 Memory个体类图.页眉.页脚图8 Controller个体类图图9 ADC个体类图图10 DAC个体类图3.2.3 结构设计在进行结构设计时,通过组合结构图来展现对象内部,数个部件之间的整合组装细节。在Recorder工程中新建模块,更名为结构设计,选择

24、Add Diagram -Composite Structure Diagram。如图11-15所示。.页眉.页脚图11 Recorder模块对象的组合结构图图12 Memoryr模块对象的组合结构图图13 Controller模块对象的组合结构图.页眉.页脚3.2.4 线程设计在Recorder工程中新建模块,更名为进程设计,在选择Add Diagram -Activity Diagram新建活动图。然后开始绘制如下活动图。图16 Memory模块的ReadIn活动图图14 ADC模块对象的组合结构图图15 DAC模块对象的组合结构图.页眉.页脚图17 Memory模块的ReadIn活动图图

25、18 ADC模块的Convert活动图图19 DAC模块的Convert活动图3.3 编写 System 代码下载systemC 后在Microsoft Visual Studio 10.0 中编译出systemc.lib文件。新建工程Recorder。在工程的properties中设置如下选项:选项 值Genneral Additional Include DierctoriesD:Program FilesMicrosoft Visual Studio 0.0systemc-2.2.0-0221srcCode Generatin Runtime Library Multi-threaded

26、 Debug (/MTd)Language Enable Run-Time Information Yes (/GR)C/C+Command Line Additional options 键入“/vmg”Genneral Additional Library DierctoriesD:Program FilesMicrosoft Visual Studio 10.0systemc-2.2.0-0221 msvc71SystemCDebugLinkerInput Additional Dependencies systemc.lib.页眉.页脚设置完后选择菜单栏的Build- Build So

27、lution.开始在工程中编写.h文件和.cpp文件,包括有main.cpp、Recorder.h、Recorder.cpp、Controller .h、Controller.cpp、Memory.h、Memory.cpp、ADC.h、ADC.cpp、DAC.h,DAC.cpp。 (具体SyatemC的代码则分置于附件)四、 仿真结果案例的一开始,外界会通过xpiOpCode端口,传送操作吗给Recoder模块对象;操作码1是仿真录音功能,2是仿真播放功能。模拟录音已经启动,外界会通过xpiAudioIn端口,将四组8位字符串“00000000” ,“00000001”, “00000010”

28、, “000000011”写进sc_fifo通道,路经Recorder、Controller、ADC模块对象,最后存到Memory模块对象,内部bvSample4数组(Array)里。在创建Memory模块对象的同时,我们先预存了四组8位字符串“11111111” 、 “11111110”、 “11111101”、“11111100”到bvSample4数组里。一旦执行仿真录音的功能后,将会从外界写进“00000000” ,“00000001”, “00000010”, “000000011”字符串取代预存字符串。这样一来,如果录音动作有误的话,执行画面的录音数字会跟播放数字不一致。图20是模

29、拟录音的执行画面,图21是模拟播放的执行画面。.页眉.页脚.页眉.页脚附件:/- main.cpp : Defines the entry point for the console application.-#include “stdafx.h“#include “systemc.h“#include “Recorder.h“int sc_main(int argc, char* argv)Recorder *myRecorder= new Recorder(“myRecorder“);coutiOp;switch(iOp) case 1:coutxpiOpCode-write(1);myR

30、ecorder-xpiAudioIn-write(“00000000“);myRecorder-xpiAudioIn-write(“00000001“);myRecorder-xpiAudioIn-write(“00000010“);myRecorder-xpiAudioIn-write(“00000011“);sc_start();coutxpiOpCode-write(2);sc_start();for(int i=0;ixpoAudioOut-num_available()=0)wait(myRecorder-xpoAudioOut-data_written_event();coutxp

31、oAudioOut-read() xpiOpCode;sc_export xpiAudioIn;sc_export xpoAudioOut;SC_HAS_PROCESS(Recorder);Recorder(sc_module_name mn);private:Memory* myMemory;Controller* myController;sc_signal chOpCode;/- Recorder.cpp-#include “stdafx.h“#include “systemc.h“#include “Recorder.h“Recorder:Recorder(sc_module_name

32、 mn) : sc_module(mn)myMemory =new Memory(“myMemory“);myController = new Controller(“myController“);xpiOpCode(chOpCode);xpiAudioIn(myController-xpiAudioIn);xpoAudioOut(myController-xpoAudioOut);myMemory-piOpCode(chOpCode);myMemory-piSampleIn(myController-xpoDataOut);myMemory-poSampleOut(myController-

33、xpiDataIn);/- Controller.h -#pragma once#include “ADC.h“#include “DAC.h“class Controller :public sc_modulepublic:sc_port piOpCode;sc_export xpiAudioIn;sc_export xpoDataOut;sc_export xpiDataIn;.页眉.页脚sc_export xpoAudioOut;SC_HAS_PROCESS(Controller);Controller(sc_module_name mn);private:ADC* myADC;DAC*

34、 myDAC;/- Recorder.cpp -#include “stdafx.h“#include “systemc.h“#include “Controller.h“Controller:Controller(sc_module_name mn) : sc_module(mn)myADC =new ADC(“myADC“);myDAC = new DAC(“myDAC“);myADC-piOpCode(piOpCode);xpiAudioIn(myADC-xpiAudioIn);xpoDataOut(myADC-xpoDataOut);myDAC-piOpCode(piOpCode);x

35、piDataIn(myDAC-xpiDataIn);xpoAudioOut(myDAC-xpoAudioOut);/- Memory.h -#pragma onceclass Memory : public sc_modulepublic:sc_port piOpCode;sc_port piSampleIn;sc_port poSampleOut;SC_HAS_PROCESS(Memory);Memory(sc_module_name mn);void ReadIn(void);void WriteOut(void);private:sc_bv bvSample4;/- Memory.cpp

36、 -#include “stdafx.h“#include “systemc.h“#include “Recorder.h“Memory:Memory(sc_module_name mn) : sc_module(mn)bvSample0=“11111111“;bvSample0=“11111110“;bvSample0=“11111101“;bvSample0=“11111100“;SC_THREAD(ReadIn);.页眉.页脚SC_THREAD(WriteOut);void Memory:ReadIn(void)for( ; ;)if(piOpCode-read()=1) for(int

37、 i=0;inum_available()=0)wait(piSampleIn-data_written_event();bvSamplei=piSampleIn-read();coutvalue_changed_event();/end for;void Memory:WriteOut(void)for( ; ;)if(piOpCode-read()=2) for(int i=0;iwrite(bvSamplei);/end for/end ifwait(piOpCode-value_changed_event();/end for;/- ADC.h -#pragma onceclass A

38、DC : public sc_modulepublic:sc_port piOpCode;sc_export xpiAudioIn;sc_export xpoDataOut;SC_HAS_PROCESS(ADC);ADC(sc_module_name mn);void Convert(void);private:sc_fifo chAudioIn;sc_fifo chDataOut;/- ADC.h -.页眉.页脚#pragma onceclass ADC : public sc_modulepublic:sc_port piOpCode;sc_export xpiAudioIn;sc_exp

39、ort xpoDataOut;SC_HAS_PROCESS(ADC);ADC(sc_module_name mn);void Convert(void);private:sc_fifo chAudioIn;sc_fifo chDataOut;/- DAC.h -#pragma onceclass DAC : public sc_modulepublic:sc_port piOpCode;sc_export xpiDataIn;sc_export xpoAudioOut;SC_HAS_PROCESS(DAC);DAC(sc_module_name mn);void Convert(void);p

40、rivate:sc_fifo chDataIn;sc_fifo chAudioOut;- DAC.cpp -#include “stdafx.h“#include “systemc.h“#include “DAC.h“DAC:DAC(sc_module_name mn) : sc_module(mn)xpiDataIn(chDataIn);xpoAudioOut(chAudioOut);SC_THREAD(Convert);void DAC:Convert(void)for( ; ;)if(piOpCode-read()=2) for(int i=0;ivalue_changed_event();/end for;

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

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报