通信算法之297 : 时序图绘制-WaveDrom语法描述

WaveDrom Editor

{signal: [
  {name: 'clk', wave: 'p.....|...'},
  {name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']},
  {name: 'req', wave: '0.1..0|1.0'},
  {},
  {name: 'ack', wave: '1.....|01.'}
]}


这段代码是使用WaveDrom语法描述的时序图(波形图),用于直观展示数字电路或信号处理中的信号时序关系。下面逐行解析其含义:
整体结构
这是一个 JSON 格式的数组,每个对象代表一个信号的波形,包含name(信号名)和wave(波形描述),部分信号还有data(数据标注)。
各信号解析
1. 时钟信号(clk)
json





{name: 'clk', wave: 'p.....|...'}

◦ name: 'clk':信号名为时钟(clock)。
◦ wave: 'p.....|...':波形描述,p表示时钟的上升沿(positive edge),后续的.表示时钟周期延续(每个.代表一个周期),|是分隔符(无实际意义,仅用于视觉分段)。
波形含义:第一个周期上升沿触发,之后延续多个周期。
2. 数据信号(dat)
json





{name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']}

◦ name: 'dat':信号名为数据(data)。
◦ wave: 'x.345x|=.x':波形描述:
◦ x:初始状态为未知(不确定值)。
◦ .:第一个周期后保持不变。
◦ 3,4,5:分别对应data数组中的第 3、4、5 个元素(索引从 0 开始),即'head'(3)、'body'(4)、'tail'(5)。
◦ 第二个x:数据变为未知状态。
◦ =:保持前一个值(此处延续x的未知状态)。
◦ .:保持不变。
◦ 最后一个x:再次回到未知状态。
◦ 整体含义:数据信号依次出现head→body→tail,之后变为未知。
3. 请求信号(req)
json





{name: 'req', wave: '0.1..0|1.0'}

◦ name: 'req':信号名为请求(request)。
◦ wave: '0.1..0|1.0':波形描述(数字表示电平):
◦ 0:初始为低电平。
◦ .:第一个周期保持低电平。
◦ 1:变为高电平(请求有效)。
◦ ..:保持高电平 2 个周期。
◦ 0:回到低电平(请求结束)。
◦ |:分隔符。
◦ 1:再次变为高电平。
◦ .:保持 1 个周期。
◦ 0:最终回到低电平。
4. 空行
json





{}

◦ 用于在时序图中插入空白行,分隔不同功能的信号组,提升可读性。
5. 应答信号(ack)
json





{name: 'ack', wave: '1.....|01.'}

◦ name: 'ack':信号名为应答(acknowledge)。
◦ wave: '1.....|01.':波形描述:
◦ 1:初始为高电平(应答有效)。
◦ .....:保持高电平 5 个周期。
◦ |:分隔符。
◦ 0:变为低电平(应答无效)。
◦ 1:再次变为高电平。
◦ .:保持 1 个周期。
时序关系总结
• 时钟(clk)是所有信号的时间基准,每个字符对应一个时钟周期。
• req(请求)有效时,dat(数据)传输head→body→tail。
• ack(应答)在大部分时间保持有效,与req的时序存在交互(通常请求与应答会有因果关系,如请求触发应答)。
通过 WaveDrom 工具可以将这段代码渲染为可视化的时序图,清晰展示信号间的同步关系,常用于数字电路设计、接口协议分析等场景。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋风战士

你的鼓励是我创造的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值