中文简化版-suite高级培训_第1页
中文简化版-suite高级培训_第2页
中文简化版-suite高级培训_第3页
中文简化版-suite高级培训_第4页
中文简化版-suite高级培训_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Suite高级培训日程数组Array迭代器Iterators多态性联合仿真数组创建CreationAccess使用Manipulations数组相同类型的一维数据列[1,2,3,4];

[true,false,false]

etc.数列[[1,2],[3,4]]数列下标

0...n维度

1...dDon’tint^05^truebool^x(x

非常数)Doint^12bool^4char^Mreal^6^6int^2^(N+M){en:bool,val:real^3}^N(N和M都是常数)数组类型<类型>^<数组长度>任何SCADE类型

有理数常数

>

0创建数组(1/4)Scalar

to

Vector

(标量到矢量)创建一维数组数组的每个元素都被定义为输入标量数组大小定义为操作符的隐藏常量输入ArrayOut

=

ValueIn^5ValueInArray

Out5intint

^5o

=

[1,1,1,1,1]15o1创建数组(2/4)Data

array

(数组)由一组输入数据创建一维数组输入数据可以为任意相同的类型:T*T*...*T->T^NArrayOut

=[In1,In2,In3]Array

OutIn1In2In3realrealrealreal

^3o

=[1.0,2.0,3.0]1o1.02.03.0创建数组(3/4)定义数组类型:Syntax:

T^n(^m^…)n,m是数组大小.数组大小支持+或-操作但结果必须为正整数;e.g.bool^5int^sizecolor^n-3real^vec1size+vec2size[true,false,true](1.2

:

real)^8[[a,b,c],[d,e,f],[g,h,i]]‘b’^(M+N)[[(1.2:real),2.6],[0.0,2.14]][(1.4:real),(1.2:int)]‘c’^(3*a)(a

is

not

a

constant)创建数组(4/4)数组(1/4)Static

Projection

(静态

)T^n*int

->

TValueOut

=

ArrayIn[1];数组的元素在模型检查时必须确定。Array

InValueOut[1]intint

^5o

=

41[1]o[2,

4,

6,

8,

10,

34,

57,

13]数组(2/4)Dynamic

Projection

(动态

)ValueOut

=

(ArrayIn.[Index]

default

0);取得数组第Index个元素,如果Index超出数组范围,则输出操作符的第二个参数作为默认值, 数组的元素可以是输入参数。1[]

0IndexArray

InValueOuto

=

0.01100o[2,

4,

6,

8,

10,

34,

57,

13]数组(3/4)Slice

of

an

array

(数组切片)o

T^M*N*P>

T^(P-N+1)输出数组的一个子集隐藏输入参数定义为输出子集的Index的范围ArrayOut

=

[4,6,8,10,34]Array

Out1

5[2,

4,

6,

8,

10,

34,

57,

13]int

^8int

^((5

-

1)

+

1)Don’ta[15]b[not_constant](a.i

default

5)a[3.5..8]b[20..35]Doa[8]b[25](a.i

default

8.6)(b.32

default

c)a[4..7]数组例子a:real^10b:

int^30i:

intc:

int操作数组(1/3)Concatenate

operator

(数组连接)o

T^N*'T^M*...*'T^X

->

'T^(N+M+...+X)输入为若干一维数组:(A

|

B

|

C

|…|

N)将这些一维数组按次序连接成为一个新的一维数组:[2,

4,

6,

8,

10][34,

57,

13]int

^5int

^3int

^(5

+

3)Array

OutArrayOut

=

[2,4,6,8,10,34,57,13][[2,

3,

4],

[1,

0,

1]][[34,57,13]]OutArrayOut

=

[[2,3,4],[1,0,1],[34,57,13]]int^3

^2int

^3

^(2

+

1)int^3

^1Array操作数组(2/3)Reverse

operator

(数组翻转)T^N->

T^N翻转数组元素的排列次序只对最外维的数组进行翻转:ArrayOut

=

[[1,0,1],[2,3,4]]Array

Out[[2,

3,

4],

[1,

0,

1]]int

^3

^2int

^3

^2操作数组(3/3)Transpose

operation(数组转置)T^N^M^...^X*int*int

->

T^X^M^...^N转置一个二维数组隐藏常量输入定义转置的维度例子:Array

Out1

2转置维度1和2:–

ArrayOut

=

[[2,1],[3,0],[4,1]][[2,

3,

4],

[1,

0,

1]]int

^2

^3int

^3

^2迭代器MAPFOLDMAPFOLDMAPiFOLDiMAPw/wiFOLDw/witt+1t-1a1a2a3a4anRESULTa1a2a3a4an迭代器应用于操作符经过N次循环完成niterationsSCADE迭代器两大类MAP:通过一个操作符将一维数组变换为一维数组FOLD:通过一个操作符将一维数组变换为一个标量输出(积累了所有操作的结果)MAP迭代器同时在每个数组元素上应用定义的操作符OP表示某个操作符:map(OP)可以看作为是OP的扩展:等同于(对每个数组元素应用OP操作符):For

all

i

in

[0,n-1],

O1[i]

=

OP(I1[i],I2[i],I3[i])I1:T1I2:T2I3:T3O1

:

T4I1:

T1^NI2:

T2^NI3:

T3^NO1

:

T4^NOP(I10,

I20,

I30)OP(I11,

I21,

I31)OP(I12,

I22,

I32)I1I2I3OPOPOP1OP1OPmap<<N>>MAP迭代器使用范例对两个数组的元素依次相加并输出:node

SumScalar

(A:int;B:int)

returns

(C:int)letC

=

A

+

B;node

SumArray(T:int^5;U:int^5)

returns

(V:int^5)letV

=

(map

SumScalar

<<5>>)

(T,U);SumArray([1,2,3,-1,4],[2,-4,0,1,1])

[3,-2,3,0,5]);TUint

^5map<<5>>1SumScalarint

^5int

^5VT[0]U[0]U[1]T[1]U[2]T[2]T[3]U[3]T[4]U[4]2SumScalar3SumScalar4SumScalar5SumScalar7SumScalarintintintintintintintintintintintintintintintVint

^5a

:T1FOLD迭代器对数组的每个元素应用操作符并输出一个累积结果OP表示为某操作符:fold(OP)应用操作符OP计算初始值,输入数组I2的元素,输入数组I3的元素,并将输出值作为下一次计算的初始值,经过N轮(数组维度)循环后输出累积值。I2:

T2I3:T3o1

:

T1OP(

.

,

I21,

I31)OP(

.

,

I22,

I32)I1I2aOP

(

.

,

I20,

I30)Result

O11OPa

:T1I2:

T2^NI3:

T3^No1

:

T11OPfold<<N>>a累积参数作为输入FOLD应用范例数组元素累加(初始值设为0):node

AccumulatedSum(T:int^5)

returns

(V:int)letV

=

(fold

SumScalar

<<5>>)

(0,T);AccumulatedSum([1,2,3,4,5])

15;TV0intfold<<5>>a1SumScalarintint

^50T[0]T[1]T[2]T[3]T[4]1SumScalar2SumScalar3SumScalar4SumScalar5SumScalarVintintintintintintintintintintint累积参数初始值练习创建一个点操作符输入参数为两个一维数组

a=[a1,a2,...,an]和b=[b1,b2,...,bn],输出定义如下:a

&b是一个大小为10的real数组思路

1:使用

Map+Fold思路2:使用only

a

Foldna.b

aibii1使用MAPFOLD迭代器结合map和fold:node

SumDup

(A:int;B:int)returns

(S1:int;S2:int)letS1

=

A+

B;

S2

=

S1;node

EnumInt()

returns

(EnumArray:int^5)var

Aux:

int;let(Aux,

EnumArray)

=

(mapfold

SumDup

<<5>>)

(0,1^5);EnumInt(0,

1^5)

5,

[1,2,3,4,5];1SumDupmapfold<<5>>aEnumArray0intint

^5Auxint1

^

5int

^50111111SumDup2SumDup3SumDup4SumDup5SumDupintintintintintintintintintintEnumArrayAuxintintintintintintint

^5累积参数初始值中间值MAPFOLD使用范例

(1/3)累加函数ModCount变量incr控制是否继续累加当累加数到达阈值Modulo时,从0开始重新计数,并输出rippleclock为trueincrFBY1

01ModuloMODcountrippleclock中间值rippleclock,即下一次循环的累积值incr累积值输入值输出值MAPFOLD使用范例

(2/3)对ModCount使用mapfold

:Time[0]:

hundredth

of

secondTime[1]:

secondsTime[2]:

minutesTime[3]:

hoursHundredthSecond[100,

60,

60,

24]TimeTimeOutboolmapfold<<4>>a1ModCountboolint

^4int

^4执行计数器毫秒级,即每次执行增加1毫秒阈值数组分别为毫秒,秒,分,小时累积参数初始值中间值MAPFOLD使用范例(3/3)等价的扩展模型TimeTimeOuttrue1002460605ModCount4ModCount3ModCount2ModCountmap

componentfold

componentrippleclockincr练习05-2创建工程Chrono

和包Chrono设计操作符

ModCount

以及根操作符

Chrono仿真

Chrono

操作符并检查数组4个元素的变化incr

FBY1

01Modulo

MODcountrippleclock1ModCountmapfold<<4>>aHundredthSecondbool[100,

60,

60,

24]int

^4TimeTimeOutboolint

^4MAPFOLD迭代器扩展多迭代子(Multiple

Accumulator)允许设置1个以上的迭代累积参数同时适用于所有MapFold类迭代器MAPFOLD迭代器扩展(续)查找数组中的最大最小值1FindMinMaxElement_f

oreachmapfold

2

<<N>>aarray

[0]arraymaxValueminValue1minOld

<=

xminOldxminmax2xmaxOld

<

xmaxOld积累值1积累值2当MAPFOLD迭代器的函数不设置第二数组输出参数时,MAPFOLD自动为FOLD迭代器MAPi操作符与MAP操作符类似第一输入参数是index,即与数组顺序相关的操作符例子:在Index(从0开始)为偶时对元素取反iFlagOutArray[true,

f

alse,

f

alse,

true,

true]1ToggleEv

enmapi<<5>>ibool

^5bool

^5indexMOD20f

laginf

lagout[false,false,true,true,false][true,false,false,true,true]对外不可见输入参数FOLDi操作符与FOLD操作符类似第一输入参数为Index,第二输入参数为上一次的累积输出值范例:

当Index为奇数时进行逻辑或操作true[false,true,false,true,true]iaindexMOD20v

alueoroutaccin对外不可见输入参数累积参数MA

APwi操作符mapw是在某条件(w)下使用MAP操作符mapwi条件也可取决于

index,作为操作符第一输入参数范例:将数组中第一个为3的元素替换为5退出循环时的Index值第一输出参数,即(w),对外不可见,也不会传递给下一次操作,而由MAPw判断,表示循环继续的条件

true,则继续下一次计算

false,则退出循环,输出数组的剩余元素都置为默认值输出默认值(w)初始循环条件true表示开始执行

false表示不执行Input1

1Input1Input2

1OutputCond3[1,

2,

3,

4]1Findmapw<<4>>5

^

4trueOutputArrayIndex11int

^4intboolint

^4int

^4intInput1:[1,2,3,

4]Input2:[5,5,5,

5]output:[1,2,5,

11]FOLDw/FOLDwi操作符在某条件(w)下使用FOLD操作符FOLDwi条件也可取决于

index,作为第一输入参数范例:在数组中搜索为5的元素Input14Foundfoldw<<10>>aint

^105

^

10int

^10f

alsebooltrueboolIndexOutputboolintInput1OutputInput2accuintintbool

Contbool

bool

退出循环前的Index值循环继续的条件,第一输出参数初始条件,true表示开始执行false表示不执行操作符第一输入参数迭代器+数组操作符Scalar

to

vector帮助生成一维数组列以符合FOLDi操作符的定义要求优化代码不会产生冗余的中间数组1Findfoldi<<N>>ai-1array

1f

indf

ind_f

wd_indexNintintint

^Nintint

^N迭代器+数组操作符Reverse

array使用翻转操作符以便对数组进行反向遍历优化代码不会产生冗余的中间数组Narray

12Findfoldi<<N>>aif

ind-1f

ind_bwd_indexintintint

^Nint

^Nint

^Nint迭代器+数组操作符Slice

of

an

array提取数组的一部分后进行迭代器操作优化代码不会产生冗余的中间数组Input1Input2Output11Dif

f

Vectormap<<N

-

1>>0

(N

-

2)1

(N

-

1)real

^2

^(N

-

1)real

^2

^((N

-

1)

-

1

+

1)real

^2

^((N

-

2)

-

0

+

1)real

^2

^Nreal

^2

^N迭代器+数组操作符Transpose对数组进行转置后再进行迭代器操作优化代码不会产生冗余的中间数组Input13Dif

f

Vectormap<<3>>Input2Output1Output22Dif

f

Vector3map<<2>>Input1Input21

21

2int

^2

^3int

^2

^3int

^2

^3int

^2

^3int

^2

^3int

^3

^2int

^3

^2int

^3

^2多态性参数化操作符特化多态性:参数化的操作符操作符可以定义为带参数的参数只能是正整数当数组大小是一个参数时,可以采用带参数的操作符如何

参数:在Frameworkview

操作符,选择Insert

-

ParameterParameter多态性:参数化的操作符示例Max:返回整数数组的最大值MaxParametric:返回大小

为N的数组中元素的最大值,这里

N

是一个参数在Size

Parameter

处填写参数值1Maxfold<<N>>a0intintArrayint

^NmaxintintintArraymaxint2MaxParametric<<5>>int

^5intintVal1intVal2boolVal1boolVal21GenericToggintint2GenericToggleboolbooloutintoutbobool多态性:特化多态的操作符,其输入输出类型被定义为'amenode

GenericToggle(Input1

:

'T;

Input2

:

'T)returns

(Output1

:

'T)Input1Input2'T'TFBY1

fals多态性:特化将参考操作符拖拽至另一个图表,各个实例与其他包含兼容类型的模型连接将参考操作符特化允许根据实例的不同接口类型,为多态操作符定义不

为必须是导入操作符参考操作符 为导入操作符(至少有一个输入是通用类型‘T)特化操作符多态性:参考操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论