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