12-18 1,748PVs
NED语言描述网络结构。很简单,语法直白。和C语言一样的注释,大小写敏感。@display()的参数叫做显示字符串,它定义了模块在图形环境下的渲染效果;”i=…”定义了默认图标。在NED中带@前缀的词陈伟属性,这个和Python一样。一个节点有很多模块构成,是一个符合模块。模块一般具有参数和门。门就是模块的端口,可以是in,out,inout(双向)。可以用@class属性明确地指定C++类。同样功能可以使用一个@namespace的属性导入C++类。前提是所有的子模块都在一个命名空间里。举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
simpale Queue { parameters: int capacity; @class(mylib::Queue); @display("i=block/queue"); gates: input in; output out; } @namespace(mylib); simple APP{ ... } simple Router{ ... } simple Queue{ } //通过参数设置固定值从而指定一个模块,不改变C++的类。 simple Queue { int capacity; } simple BoundedQueue extends Queue { capacity = 10; } |
复合模块的声明可以包括若干段,所有段都是可选的。关键词有types,parameters,gates,submodules,connections。信道封装了与连接相关联的参数和行为。信道是由C++类构成的。类型有IdealChannel,DealyChannel,DatarateChannel,分别表示理想信道,延时信道,带宽信道。
@loose特性可以作为门的连接检查。@directIn用于对输入门注释。
仿真时间可以由SimTime()函数得到,用C++类型simTime_t表示,SimTime类可以存储的仿真时间为64bit整形数。精度指数范围可以在10^-18到0之间。也就是1as到1s之间。 SimTime转换成双精度并不是默认的,需要是用dbl()函数进行转换。有些函数不用进行转换,可以直接使用SimTime,例如fabs(),fmod(),ceil(),floor(),uniform(),exponential(),normal()。转换为双精度会造成精度丢失,因为双精度只有52bit的尾数。