酷我音乐网站架构,室内设计软件培训,蔬菜水果网站建设,wordpress同步到本地Wavedrom 是一款功能强大且简单易用的文本转图表工具#xff0c;被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法#xff0c;使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性#xff0c;…
Wavedrom 是一款功能强大且简单易用的文本转图表工具被广泛应用于生成时序图、波形图等交互式波形。其特点在于使用简单的文本语法使得开发人员能够以可视化的方式表示数字信号和时间序列数据。Wavedrom 的优势在于其高度灵活性和可扩展性使用户能够快速绘制复杂的波形和图表并轻松与其他文档和代码进行整合。
Wavedrom 的基本语法相对简单以 JSON 对象或简洁的文本描述波形和时序信息。开发人员只需编写简短的描述即可生成直观的波形图。通过使用不同的标记和元素用户可以定义时序图中的信号波形、时钟周期、状态转换等内容。Wavedrom 支持自定义样式和布局用户可以根据需求美化波形图增加标签和注释以增强可读性。
时序图是 Wavedrom 最常见的用途之一通过 Wavedrom 绘制的时序图可以清晰地展示数字信号和数据的传输过程。例如在硬件设计中时序图可以用于描述寄存器读写、信号传输和时钟脉冲的情况从而帮助开发人员更好地理解和分析系统的工作状态。
值得一提的是Wavedrom 不仅可以独立使用还可以与 Markdown 等文档格式无缝整合。通过将 Wavedrom 图表代码嵌入文档中开发人员可以直接在文档中呈现交互式的波形图提升文档的可读性和交互性。
总体来说Wavedrom 是一个强大而简便的文本转图表工具适用于各种应用场景如硬件设计、软件开发、文档编写等。其简单的语法和可视化的输出为开发人员提供了一个高效、直观的工具帮助他们更好地表达和展示数字信号和时间序列数据。
用法和示例
WaveDrom 是一个基于 JavaScript 的应用程序。WaveJSON 是一种描述数字时序图的格式。WaveDrom 可以直接在浏览器中渲染这些图表。signal元素是 WaveLane 的数组。每个 WaveLane 都有两个必填字段name和wave。
WaveDrom 是一个强大的工具可用于可视化数字信号和时序数据。通过使用 WaveJSON 格式来描述信号波形用户可以轻松地定义时序图的各个部分包括信号波形的名称、周期和状态。WaveDrom 支持多个 WaveLane可以同时显示多个信号波形从而实现更复杂的时序图表。
wave字段是 WaveLane 的关键部分用于定义信号波形。它由一系列字符组成包括数字 0 和 1代表数字信号的高和低电平以及.代表未定义或无效状态。此外WaveDrom 还支持其他特殊字符如p代表时钟周期n代表一个时钟周期内的半个周期|用于分隔不同的时钟周期。
通过将这些 WaveLane 组合成一个signal数组并为每个 WaveLane 指定名称和波形描述用户可以创建详细且直观的数字时序图。WaveDrom 渲染引擎会将这些描述解析并在浏览器中实时绘制出时序图形。
总的来说WaveDrom 提供了一种简单但强大的方式通过 WaveJSON 格式和 WaveLane 的组织使用户能够在浏览器中生成各种数字时序图。它在硬件设计、嵌入式系统开发、通信协议分析等领域中有着广泛的应用帮助开发人员更好地理解和分析数字信号的行为和传输过程。
信号
从一个简单的例子开始。下面的代码将创建一个名为Alfa的 1 位信号并随时间改变其状态。
{ signal: [{ name: Alfa, wave: 01.zxud.23.456789 }] }在wave字符串中每个字符代表一个时间周期。符号.将前一个状态延续一个周期。现在让我们看一下它的图示 Alfa 1位信号
时钟
数字时钟是一种特殊类型的信号。它在每个时间周期内变化两次可以具有正极性或负极性。此外它还可以在工作边沿上带有可选的标记。时钟的各个块可以与其他信号状态混合以创建时钟门控效果。下面是代码和生成的图示
{ signal: [{ name: pclk, wave: p....... },{ name: Pclk, wave: P....... },{ name: nclk, wave: n....... },{ name: Nclk, wave: N....... },{},{ name: clk0, wave: phnlPHNL },{ name: clk1, wave: xhlhLHl. },{ name: clk2, wave: hpHplnLn },{ name: clk3, wave: nhNhplPl },{ name: clk4, wave: xlh.L.Hx },
]}渲染后的时钟图示如下 时钟信号
合在一起
在典型的时序图中我们通常会包含时钟信号和其他信号线路。对于多位信号我们可以从data数组中获取相应的标签。
下面是一个例子展示了一个包含时钟信号、多位信号和单位信号的典型时序图
{ signal: [{ name: clk, wave: P...... },{ name: bus, wave: x..x, data: [head, body, tail, data] },{ name: wire, wave: 0.1..0. }
]}在这个例子中我们有三个信号clk代表时钟信号bus代表多位信号wire代表单位信号。 时钟信号clk用P表示代表正极性的时钟边沿。 多位信号bus用x..x表示其中x表示未定义的状态表示稳定的高电平或低电平.表示未稳定状态。data数组包含多位信号的标签分别是head、body、tail和data。 单位信号wire用0.1..0.表示表示在时间周期内信号从低电平切换到高电平再切换回低电平。
渲染后的时序图如下 典型时序信号
空白和间隙
在时序图中我们有时需要添加间距和空白以便更好地组织信号和使时序图更易于阅读。下面是一个带有间距和空白的时序图示例
{ signal: [{ name: clk, wave: p.....|... },{ name: Data, wave: x.345x|.x, data: [head, body, tail, data] },{ name: Request, wave: 0.1..0|1.0 },{},{ name: Acknowledge, wave: 1.....|01. }
]}在这个例子中我们添加了一些间距和空白以便更好地分隔不同的信号。 clk信号用p表示代表正极性时钟边沿后面有 3 个间距.然后是|...代表 3 个空白周期。 Data信号由x、、.组成数据数组data提供了多位信号各个部分的标签head、body、tail和data。后面有一个间距|然后是.代表一个空白周期后紧跟着一个稳定高电平。 Request信号由0、1、.组成代表低电平、高电平和未定义状态。后面有一个间距|然后是1.0代表一个高电平后紧跟着一个空白周期。 接着有一个空白行表示两个信号之间的空白。 最后Acknowledge信号由1、.组成后面有一个间距|然后是01.代表一个高电平后紧跟着一个低电平和一个空白周期。
渲染后的时序图如下 带间隙的时序图
在这个时序图中我们可以看到信号之间的间距和空白使得时序图更加整齐和易读。通过添加适当的间距和空白我们可以更好地组织信号和时钟边沿使时序图更具可视化效果。接下来我们将继续探索 WaveDrom 的其他高级功能和实际应用帮助您更好地运用这个强大的文本转图表工具。
分组
在时序图中我们可以将 WaveLane 组合成具有名称的分组分组表示为数组形式。[分组名称, {...}, {...}, ...] 数组的第一个条目是分组的名称。分组之间还可以嵌套。
下面是一个包含分组的时序图示例
{ signal: [{ name: clk, wave: p..Pp..P },[Master,[ctrl,{ name: write, wave: 01.0.... },{ name: read, wave: 0...1..0 }],{ name: addr, wave: x3.x4..x, data: A1 A2 },{ name: wdata, wave: x3.x...., data: D1 },],{},[Slave,[ctrl,{ name: ack, wave: x01x0.1x },],{ name: rdata, wave: x.....4x, data: Q2 },]
]}在这个例子中我们使用了分组来组织不同的信号将它们放在名为Master和Slave的两个分组中。 clk信号用p..Pp..P表示代表正极性时钟边沿和负极性时钟边沿。 Master分组包含了三个子信号它们分别在名称为ctrl的子分组中表示控制信号write和read以及名称为addr的信号data数组提供了信号的标签。 接着有一个空白行表示两个分组之间的空白。 Slave分组包含了两个子信号都在名称为ctrl的子分组中表示控制信号ack以及名称为rdata的信号data数组提供了信号的标签。
渲染后的时序图如下 分组时序图
在这个时序图中我们可以看到不同分组内的信号在不同时间周期内的状态。使用分组可以更好地组织和显示复杂的时序图帮助我们更好地理解和分析数字信号之间的时序关系。通过 WaveDrom 的强大功能我们可以轻松地在时序图中添加分组使其更具可视化效果和清晰度。
周期和相位
在时序图中我们可以使用period和phase参数来调整每个 WaveLane 的周期和相位。
下面是一个 DDR 读取事务的时序图示例
{ signal: [{ name: CK, wave: P......., period: 2 },{ name: CMD, wave: x.3xx4xxxxx, data: RAS NOP CAS NOP NOP NOP NOP, phase: 0.5 },{ name: ADDR, wave: x.x..x........, data: ROW COL, phase: 0.5 },{ name: DQS, wave: z.......0.1010z. },{ name: DQ, wave: z.........5555z., data: D0 D1 D2 D3 }
]}在这个例子中我们使用period参数来设置时钟信号CK的周期为 2 个时间周期。这意味着时钟信号每隔 2 个时间周期变化一次。
同时我们使用phase参数来调整信号CMD和ADDR的相位。相位的值为 0.5表示信号的波形在时间轴上整体向右偏移了 0.5 个时间周期。这样做可以让信号在时钟边沿之前或之后发生状态变化。
CMD信号表示了 DDR 读取事务的命令序列ADDR信号表示了地址序列。data数组提供了每个部分的标签。
DQS信号和DQ信号分别表示数据校验和数据信号。其中DQS信号在时钟边沿之前有一个延迟DQ信号在时钟边沿之后有一个延迟。
渲染后的时序图如下 DDR读时序
在这个时序图中我们可以看到时钟信号CK每隔 2 个时间周期发生一次变化。CMD和ADDR信号的波形整体向右偏移了 0.5 个时间周期以达到与时钟信号的相位差。DQS信号在时钟边沿之前有一个延迟DQ信号在时钟边沿之后有一个延迟。
通过调整period和phase参数我们可以更灵活地控制时序图中各个信号的周期和相位从而更好地表达复杂的数字信号行为。WaveDrom 提供了丰富的功能帮助我们创建详细和直观的数字时序图用于硬件设计、嵌入式系统开发、通信协议分析等领域。
config{}属性
在时序图中config{}属性用于控制渲染的不同方面。
hscale
config:{hscale:#}属性用于调整时序图的水平缩放比例。用户可以设置任何大于 0 的整数值。
下面是一个示例展示了如何使用 config{hscale:#}属性来调整时序图的水平缩放比例
{ signal: [{ name: clk, wave: p.... },{ name: Data, wave: x345x, data: [head, body, tail] },{ name: Request, wave: 01..0 }
],
config: { hscale: 1 }
}在这个例子中我们使用 config{hscale:1}属性将水平缩放比例设置为 1。这意味着时序图将以原始比例进行渲染每个时间周期占据一个单位宽度。
渲染后的时序图如下 水平比例1 水平比例2
skin
在时序图中我们可以使用 config:{skin:...}属性来选择WaveDrom 的皮肤样式[2]。该属性仅在页面上的第一个时序图中起作用。WaveDrom 编辑器包含两种标准皮肤default和narrow。
head/foot
head:{...}和 foot:{...}属性用于定义时序图上方和下方的内容区域。可以在这些属性中添加文本或其他元素。
tick/tock
tick 属性可以添加与垂直标记对齐的时间线标签而 tock 属性可以在垂直标记之间添加时间线标签。
text
text 属性用于添加标题或说明文本。
every
every 属性用于指定仅在每 N 个周期渲染一次标记和时间线标签。
下面是一个示例展示了如何使用这些属性来定义一个时序图
{ signal: [{ name: clk, wave: p.... },{ name: Data, wave: x345x, data: a b c },{ name: Request, wave: 01..0 }
],
head: {text: WaveDrom example,tick: 0,every: 2
},
foot: {text: Figure 100,tock: 9
}
}在这个例子中我们添加了头部head和底部foot的文本内容。头部文本设置为WaveDrom example并使用 tick 属性指定不添加时间线标签。每隔 2 个周期渲染一次标记和时间线标签。底部文本设置为Figure 100并使用 tock 属性在垂直标记之间添加时间线标签。
渲染后的时序图如下 属性示例
在 WaveDrom 中head 和 foot 属性用于定义时序图上方和下方的文本内容这些文本内容支持 SVG text 的所有属性。可以使用 JsonML 标记语言来表示 SVG 文本内容并且可以使用一些预定义的样式来设置文本的字体大小和颜色。除此之外还可以使用其他 SVG tspan 属性来自由地定制文本的样式。
下面是一个示例展示了如何使用不同的样式来设置时序图头部和底部的文本内容
{ signal: [{ name: clk, wave: p.....PPPPp.... },{ name: dat, wave: x....2345x....., data: a b c d },{ name: req, wave: 0....1...0..... }
],
head: { text:[tspan,[tspan, { class: error h1 }, error ],[tspan, { class: warning h2 }, warning ],[tspan, { class: info h3 }, info ],[tspan, { class: success h4 }, success ],[tspan, { class: muted h5 }, muted ],[tspan, { class: h6 }, h6 ],default ,[tspan, { fill: pink, font-weight: bold, font-style: italic }, pink-bold-italic]]
},
foot: { text:[tspan, Emc,[tspan, { dy: -5 }, 2],[tspan, { dy: 5 }, . ],[tspan, { font-size: 25 }, B ],[tspan, { text-decoration: overline }, over ],[tspan, { text-decoration: underline }, under ],[tspan, { baseline-shift: sub }, sub ],[tspan, { baseline-shift: super }, super ]], tock: -5
}
}在这个例子中我们使用 JsonML 标记语言来表示头部和底部的文本内容并为每个文本段落设置了不同的样式。例如我们使用了类名h1、h2、h3等来设置不同的字体大小。使用类名error、warning、info、success、muted等来设置不同的字体颜色样式。我们还可以使用其他 SVG tspan 属性来设置文本的斜体、粗体、填充颜色等。
渲染后的时序图如下 head/foot文本属性示例
箭头
曲线
在 WaveDrom 中我们可以使用箭头和曲线来连接不同的信号以表示它们之间的关联和数据传递。
以下是一些常用的箭头和曲线符号 ~普通曲线 -~从左到右的曲线箭头 ~双向曲线箭头 ~双向曲线箭头 ~从左到右的直线箭头 -~从左到右的实心箭头 ~-从右到左的实心箭头
下面是一个示例展示了如何使用箭头和曲线来连接不同的信号
{ signal: [{ name: A, wave: 01........0...., node: .a........j },{ name: B, wave: 0.1.......0.1.., node: ..b.......i },{ name: C, wave: 0..1....0...1.., node: ...c....h.. },{ name: D, wave: 0...1..0.....1., node: ....d..g... },{ name: E, wave: 0....10.......1, node: .....ef.... }
],
edge: [a~b t1, c-~a t2, c-~d time 3, d~-e,e~f, f-g, g-~h, h~i some text, h~-j
]
}渲染后的时序图如下 箭头和曲线
折线
在 WaveDrom 中我们还可以使用尖锐的线条符号来表示不同信号之间的连接关系。这些尖锐的线条符号可以更直观地展示信号之间的交互和数据传递。
以下是一些常用的尖锐线条符号 -直线连接 -|从左到右的尖锐连接 |-从右到左的尖锐连接 -双向尖锐连接 -|从左到右的双向尖锐连接 |-|从左到右的尖锐连接包含短横线
下面是一个示例展示了如何使用尖锐线条来连接不同的信号
{ signal: [{ name: A, wave: 01..0.., node: .a..e.. },{ name: B, wave: 0.1..0., node: ..b..d., phase: 0.5 },{ name: C, wave: 0..1..0, node: ...c..f },{ node: ...g..h },{ node: ...I..J, phase: 0.5 },{ name: D, wave: 0..1..0, phase: 0.5 }
],
edge: [b-|a t1, a-|c t2, b-|-c t3, c-|-e t4, e-|f more text,e|-d t6, c-g, f-h, g-h 3 ms, IJ 5 ms
]
}在这个例子中我们有 6 个信号A、B、C、D和 4 个连接节点e、g、h、I、J它们之间通过尖锐线条连接起来。每个信号都有相应的波形图而尖锐线条则通过edge属性来定义连接关系。
例如b-|a t1表示从信号 B 到信号 A 的从左到右的尖锐连接并在连接上方添加了文本标签t1。c-|-e t4表示从信号 C 到节点 e 的从左到右的尖锐连接并在连接上方添加了文本标签t4。
渲染后的时序图如下 箭头和折线
一些代码
在 WaveDrom 中我们可以使用 JavaScript 代码来生成复杂的时序图。这些代码可以用来生成特定的信号和波形以及自定义时序图的展示效果。
以下是一个示例代码展示了如何使用 JavaScript 代码生成一个特定的时序图
(function (bits, ticks) {var i, t, gray, state, data [], arr [];for (i 0; i bits; i) {arr.push({name: i , wave: });state 1;for (t 0; t ticks; t) {data.push(t );gray (((t 1) ^ t) i) 1;arr[i].wave (gray state) ? . : gray ;state gray;}}arr.unshift(gray);return {signal: [{name: bin, wave: .repeat(ticks), data: data}, arr]};
})(5, 16)在这个例子中我们使用了一个自执行函数来生成一个包含 5 个信号的时序图。每个信号的波形图都是根据格雷码Gray code生成的其中 bits 参数表示信号的位数ticks 参数表示时间周期数。代码使用循环来生成信号的波形图并将生成的数据存储在 data 数组中。
最终的时序图包含 6 个信号其中一个是用来表示二进制计数的信号(bin)其波形图是一个等号序列。其他 5 个信号的波形图是根据格雷码生成的分别对应 0 位、1 位、2 位、3 位和 4 位格雷码的波形。
渲染后的时序图如下 js代码生成时序图 文章转载自: http://www.morning.mcpby.cn.gov.cn.mcpby.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.dnycx.cn.gov.cn.dnycx.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.qkdbz.cn.gov.cn.qkdbz.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn http://www.morning.kpgft.cn.gov.cn.kpgft.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.lqws.cn.gov.cn.lqws.cn http://www.morning.frtt.cn.gov.cn.frtt.cn http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.dnphd.cn.gov.cn.dnphd.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.qtkfp.cn.gov.cn.qtkfp.cn http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn http://www.morning.bktzr.cn.gov.cn.bktzr.cn http://www.morning.pabxcp.com.gov.cn.pabxcp.com http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.nyzmm.cn.gov.cn.nyzmm.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn http://www.morning.divocn.com.gov.cn.divocn.com http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn http://www.morning.jstggt.cn.gov.cn.jstggt.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn http://www.morning.wqmpd.cn.gov.cn.wqmpd.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.csjps.cn.gov.cn.csjps.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.psgbk.cn.gov.cn.psgbk.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.ksjnl.cn.gov.cn.ksjnl.cn http://www.morning.tgnwt.cn.gov.cn.tgnwt.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.ysfj.cn.gov.cn.ysfj.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.dfkby.cn.gov.cn.dfkby.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.jjhng.cn.gov.cn.jjhng.cn http://www.morning.gl-group.cn.gov.cn.gl-group.cn http://www.morning.hnhgb.cn.gov.cn.hnhgb.cn http://www.morning.phtqr.cn.gov.cn.phtqr.cn http://www.morning.dfygx.cn.gov.cn.dfygx.cn http://www.morning.rbgqn.cn.gov.cn.rbgqn.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn http://www.morning.glncb.cn.gov.cn.glncb.cn http://www.morning.rtpw.cn.gov.cn.rtpw.cn