WaveDrom----学绘画数字时序图

WaveDrom

什么是WaveDrom

WaveDrom是一个画数字电路时序图的插件,可以集成到HTML中,如何集成,暂时没有试过,使用json格式,格式正确能显示效果,格式不正确,不能显示效果

VScode安装插件

在VSCode的扩展插件中安装Waveform Render,写完代码保存后,快捷键的使用在扩展插件中有说明,我默认使用快捷键Ctrl + k,然后使用Ctrl + d在vscode的右边会有效果图

怎么使用WaveDrom

新建一个文件,命名为test.txt或者test.json,二者皆可,我更倾向于test.txt,使用也很简单,官网给出了7步学会,其中最重要的只有2个字段,其他字段属于特别的时候会用到。

代码总测试示例

{ 
	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..........." },
  { name: "test",        wave: "npPN0x|1=23456zud...", data: ["1","2","1","2","1","2"]},
  { name: "test1",       wave: "p.....|.......", data: ["1","2","3","4","5","6"]},
  { name: "ts",          wave: "N....", period: 4 },
  { name: "ts1",         wave: "P....", period: 1, phase: 0.5 },
  { name: "ts2",         wave: "23456", period: 1, phase: 0.9 },
  { name: 'A',           wave: '01.01......0....',  node: '.a.Kl.m...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....' },
  
    ['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'   },
  ],

],
  edge: ["a-b label1", "b-|-c label2","a~>h", "K#e >",
],
 config: { hscale: 2},

}

效果图:
在这里插入图片描述
红色那根线是错误的使用方法

代码讲解

基础语法
  1. Json的语法会用大括号 {对象1:[{键值对1}, {键值对2}, ], } 表示,每个对象使用数组进行赋值,键值对之间的间隔使用 , 表示,字段表示键名,字段后面使用 : 进行赋值。
  2. WaveDrom对象中最重要的是signal,用法就是 signal:[{ name : "clk", wave: "p...}], ,我经常会在对象或者键值对后面添加 , 添加上不会有错误,不添加上会有错误,防止经常犯错,在signal中重要的是name和wave的键值对,如果有两个signal对象,会显示最后一个signal的波形
  3. name 字段是用来表示这个波形的名称,会在波形的头部显示,其中clk就是这个波形的名称
  4. wave 字段是用来绘制波形的,一个波形图可以表示多种波形,每一种符号是一个周期内的波形
    • p - 起始边沿是上升沿的时钟周期
    • n - 起始边沿是下降沿的时钟周期
    • P - 起始边沿是上升沿箭头的时钟
    • N - 起始边沿是下降沿箭头的时钟
    • 0 - 一个周期低电平
    • 1 - 一个周期高电平
    • = - 双线
    • 2 - 颜色1
    • 3 - 颜色2
    • 4- 颜色3
    • 5 - 颜色4
    • x - 未定义的数据
    • . - 扩展1周期数据
    • z - 高组态
    • u - 前半周期上升沿
    • d - 前半周期下降沿
    • | - 延长前一个周期并在中间添加间隙
  5. { name: "test", wave: "2..", data: ["1","2","3","4","5","6"]},data字段作用于信号通道的标签,就是双线或者是数字2,3,4,5…的标签
  6. { name: "test", wave: "p..", period: 2},period字段作用是分频,默认以1个时钟周期为单位,代码解释:2分频,起始是上升沿的时钟,2个时钟周期单位为一个test字段的周期
  7. { name: "ts1", wave: "P....", period: 1, phase: 0.5 },phase字段的值:波形移位,正数向左移位,负数向右移位,代码解释:起始边沿向左移动0.5周期,
  8. { name: 'A', wave: '01.01......0....', node: '.a.Kl.....j' },node字段的值:在每个周期开始时的一个标号,缺少的位置没有标签
    • .,表示没有标号
    • a~z,表示可见字母标号
    • 大写字母表示不可见标号
特殊语法
  1. edge: ["a->b label1", "b<-~>c label2","a~~h",],edge对象,以数组的方式存放键值对,与signal并列关系,用于每个标号进行连线,其中字值是根据node中的标号,连线有曲线~和直线-等区分,箭头<,箭头>。中间的箭头可以使用连线中的文字表示,其中字段内容是起始标号 连接线类型 终止标号 连线中间的文字,其中的连线类型可以是多个

    • - - 水平线连接
    • | - 垂直线连接,一般会搭配水平线连接
    • ~ - 曲线连接
    • / - 添加对角线,不知道怎么使用
    • # - 指示箭头标签位置,也不知道怎么使用
    • + - 线段连接
  2. group 概念,signal中的每个键值对,都可以是属于不同的组,需要把键值对放在一个数组里 ['Mater',{键值对a} ],键值对a属于Master组中

  3. config 对象

    • hscale:#字段是用来控制水平的刻度,#表示数字
    • skin:'...'字段是用来控制第一个时序的形状

效果图:
在这里插入图片描述

  1. head/foot:{test:'a', tick:0, tock:9, every:2}对象,其中tick添加与垂直标记对齐的时间线标签,test添加标题/说明文字,tock在垂直标记中间添加时间线标签。every每 N 个周期仅渲染一次 tick 和 tocks,官网还有一段代码,很神奇,有时间可以研究研究,不是很常用,用的是tspan属性,其中h1 h2 h3 h4 h5 h6是预定义字体大小
{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', 'E=mc',
    ['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
}
}

效果图:
在这里插入图片描述

完成个I2C数字时序

{
    signal:[
        ['address',
            { name:"SCL", wave:"10.101010101010101010.", period:1, phase:0 },
            { name:"SDA", wave:"1023456789=1", period:2, phase:1.5, data:["A6", "A5", "A4", "A3", "A2", "A1", "A0", "R/W", "ACK"], },
        ],
        ['data',
            { name:"SCL", wave:"10.101010101010101010.", period:1, phase:0 },
            { name:"SDA", wave:"1023456789=1", period:2, phase:1.5, data:["D7", "D6", "D5", "D4", "D3", "D2", "D1", "D0", "ACK"], },
       ],
    ],
    head:{ test:'I2C',  tick:0, every:2 },
    foot:{ test:'I2C', tick:0 },
}

在这里插入图片描述

Wavedrom-editor是一款用于编辑和生成波形图的工具。要下载Wavedrom-editor,首先需要打开Wavedrom官方网站。在网站上,找到并点击下载页面,然后找到Wavedrom-editor的下载链接。 点击下载链接后,会开始下载Wavedrom-editor的安装文件。下载完成后,可以打开安装文件进行安装。根据安装向导的指示,选择安装路径和其他相关选项。等待安装程序完成即可。 安装完成后,可以在电脑的开始菜单或桌面上找到Wavedrom-editor的快捷方式。双击打开该快捷方式,即可启动Wavedrom-editor。 打开Wavedrom-editor后,可以看到一个用户友好的界面。在该界面上,可以创建新的波形图、打开已有的波形图文件,并进行编辑和保存等操作。 在Wavedrom-editor中,可以通过简单的拖拽和点击操作,添加信号、设置波形的周期、时序关系、颜色和标注等。同时,Wavedrom-editor还提供了丰富的功能和选项,如合并和拆分波形、添加注释、导出为图片和生成代码等。 通过Wavedrom-editor,用户可以轻松地创建和编辑各种类型的波形图,包括时序图、状态图、状态机图等。通过这个工具,可以提高波形图的可视化水平,并方便地与他人分享和合作。 总之,下载和使用Wavedrom-editor是非常简单的,只需要访问官方网站并按照指示进行下载和安装。通过Wavedrom-editor,可以方便地创建、编辑和共享各种波形图,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值