100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用PlantUml绘制逻辑时序图/波形图

使用PlantUml绘制逻辑时序图/波形图

时间:2019-12-17 05:05:40

相关推荐

使用PlantUml绘制逻辑时序图/波形图

AgileWave已支持PlantUml在线画图,Git源码参见:

/cc-hook/agileWave

AgileWave介绍:

1. AgileWave!一款时序图绘制神器

2.好消息 | 源码和验证工具已开源至Github,欢迎围观

使用PlantUml绘制时序图,波形图的简单说明如下。

时钟

时钟信号使用clock关键词声明,使用offset设置相位,使用pulse设置脉宽。默认相位为0,占空比为50%。

@startumlxclock"clk0"asclk0withperiod100clock"clk1"asclk1withperiod100offset20clock"clk2"asclk2withperiod100offset100clock"clk3"asclk3withperiod100pulse30clock"clk4"asclk4withperiod100pulse30offset20@0@1000@enduml

Tips:

plantuml时钟信号上升沿和下降沿都是垂直的,无法设置上升和下降时间,可以使用offset,使时钟和信号边沿错开,来表达采样逻辑时序,如图中clk1和clk4。

plantuml的时钟信号默认都是高电平开始,如果需要低电平开始,可以把offset设置为period,即延后一个周期开始,如图中的clk2。

逻辑信号

plantuml中使用binary,concise和robust声明逻辑变量,

concise:简明的图形化数据表示,可表示数据的移动(非常适合表示信息)。

robust:用信号线表示的状态,便于呈现状态间的转化(可设置多种状态)。

binary:二进制信号,只有两个状态。(binary)。

逻辑信号值使用“is”表达。

@startumlxclockclkwithperiod20offset1binary"en"asenrobust"fsm_state"asfsmconcise"addr"asaddrfsmisidleenishigh@0enislowfsmis"busy"addris{-}@20enishighfsmis"start"addris"0xFF"@30addris"0xA5A5"fsmis{idle,start}@40enis0fsmis"busy"@60enis{0,1}@70enis1fsmis"idle"addris"0xDEAD"@100@enduml

Tips:

初始值设置

在声明变量后,@标注时间前,使用"A is B"的格式,将A的初始值设置为B。不能对时钟信号设置初始值。

不定态设置

使用"A is {X,Y}"的方式,将信号A的值设置在X和Y之间,表示一种不定范围。特殊的"A is {-}"表示A是不定态或高阻。

添加消息

有时某两个变化点代表了一种状态或者场景时序,即一种消息。类似wavedrom中的edge。在两个信号变量之间使用->即可添加消息。

如果需要在不同时刻节点之间添加消息,使用@+时间表示延后的时刻点。

en->fsm@+50:stop now.

表示消息的起点是当前时刻的en信号,终点是50单位以后的fsm信号。

@startumlxclockclkwithperiod20offset1binary"en"asenrobust"fsm_state"asfsmconcise"addr"asaddrfsmisidleenishigh@0enislowfsmis"busy"addris{-}en->addr:startnow!@20enishighfsmis"start"addris"0xFF"en->fsm@+50:stopnow!@30addris"0xA5A5"fsmis{idle,start}@40enis0fsmis"busy"@60enis{0,1}@70enis1fsmis"idle"addris"0xDEAD"@100@enduml

基于时间click描述信号时序

plantuml中可以使用时间click方式描述信号的时序关系,即在每个时刻点,描述各个信号的取值。click方式包括绝对时间和相对时间两种。

绝对时间方式在每个需要描述信号变化的时刻使用"@时刻"声明。

相对时间方式表示在相对前一节点延后一段时间后的时刻节点,使用"@+时间"表示。

@startumlxclockclkwithperiod20offset1binary"en"asenconcise"addr"asaddrenishigh@0enislowaddris{-}@20enishighaddris"0xFF"@+10/'绝对时刻=20+10=30'/addris"0xA5A5"en->addr:@30@+30/'绝对时刻=30+30=60'/enis1addris"0xDEAD"en->addr:@60@+20/'绝对时刻=60+20=80'/en->addr:@80@enduml

基于信号的时序描述

plantuml中可以使用基于信号的描述,即描述单个信号在所有时刻点的变化。

此种方式下,绝对时间的信号取值使用"时刻 is X"的格式描述,相对时间的信号取值使用"@+时间 is X"的格式描述。

在任何一个信号时序描述集合里,可以在任意时间节点添加消息。

@startumlxclockclkwithperiod20offset1binary"en"asenconcise"addr"asaddrenishigh@en0islow20ishigh+30is0addr->en:Alabel+20is0@addr0is{-}10is"0xFF"20is{-}en->addr:Alabel+30is"0xA5A5"@enduml

其他

基于时间click和信号的时序描述可以混合使用

双向约束'<->'在plantuml中表示约束关系,只能在基于信号的时序描述中,并且是同一个信号的不同时刻间使用。

隐藏时间轴。使用:hide-axis声明即可。

高亮区域。使用:'highlight T0 to T1 #Gold;line:DimGrey : Label'方式声明。

改变线条颜色。在信号值描述语句后使用'#颜色'方式设置。

@startumlxhidetime-axisclockclkwithperiod20offset1binary"en"asenconcise"addr"asaddr@en0islow20ishigh#black+30is0@10<->@70:Aconstraint@addr0is{-}10is"0xFF"20is{-}+20is"0xA5A5"#pink@80enis1addris"0xDEAD"@100enis0addris{-}highlight70to90#Gold:HighlightArea@enduml

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。