Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。

这篇具有很好参考价值的文章主要介绍了Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

碎碎念:

没想到上一篇发出去,前几个小时竟然基本没人看,是我写得太晦涩了吗,这篇介绍个简单但是相当好用的软件WaveDrom,可以非常方便的绘制时序图,简直是数字人的福音啦!

本文将从安装开始,详细介绍涉及到的语法等内容,读者可以收藏起来随时查阅。

P.S. 照这个速度,也不知道多久能把Basic Verilog库中的模块学习完毕哇_(:з)∠)_(已经忘记了是这周第几躺了)。

目录

1 软件安装

2 绘图教程

2.1 创建信号(Signal)

2.2 添加时钟(Adding Clock)

2.3 将时钟与信号结合(Putting all together)

2.4 添加间隙(Spacers and Gaps)

2.5 为信号分组(The groups)

2.6 周期与相位(Period and Phase)

2.7 其他属性配置(The config{} property)

2.7.1 水平比例(hscale)

2.7.2 主题样式(skin)

2.7.3 头尾标注(head/foot)

2.8 标注箭头与线条(Arrows)

2.8.1 曲线(Splines)

2.8.2 折线(Sharp lines)

2.9 利用代码绘图(Some code)

3 图像保存与导出


1 软件安装

官网地址:WaveDrom - Digital timing diagram everywhere

软件本身分为离线版和在线版,由于在线版并不需要安装,因此这里主要介绍离线版的安装过程,与一般软件需要安装包不同,这个软件下载下来的就是整个程序,直接打开对应可执行文件就可以直接运行。

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

在官网点击左下角的“Download editor”即可打开下载界面:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

选择自己系统对应的版本就可以啦,这里我选择Windows 64位版本的,点击右侧按钮就可以下载软件了。(我这里用了edge的插件,所以看起来和原始Github按钮不一样,大家可以忽略)

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

打开压缩包中,点击wavedrom-editor.exe,即可直接运行程序。

可以将文件解压到自己常用的安装目录下,然后将wavedrom-editor.exe发送快捷方式到桌面,方便打开。

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

当出现这样的界面,就说明已经可以成功运行啦,下面开始对绘图功能的教程。

2 绘图教程

WaveDrom提供了官方教程,本绘图教程基于官方教程展开(比官方教程详细多了)。

想要直接进行查阅的可以参考本表格(冲这个可以要一个小小的关注吗?_(:з)∠)_)

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.1 创建信号(Signal)

下面的代码创建了一个名为“Alfa”的信号,“signal”关键字创建了一系列信号,“name”定义了信号名称,“wave”定义了信号波形,其中的每一个字符都表示了一个时间段的信号类型。

{ signal: [{ name: "Alfa", wave: "01.zx=ud.23.456789" }] }

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

具体的信号类型见下表:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.2 添加时钟(Adding Clock)

时钟信号是一种比较特殊的信号,其只有高低电平两种状态。提供了可选的标志来控制是否展示出上升/下降沿。同时,可以与其他信号同时使用,用来实现类似门控时钟的绘制。

注意时钟的h和l与信号的1和0是不同的(变化沿的角度不同)。

下面代码实现了可供参考的时钟样式。

{ 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' },
]}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

具体时钟类型见下表:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.3 将时钟与信号结合(Putting all together)

我们在绘制时序图时,通常需要将时钟与信号放在一起,为了方便查看这两者之间的关系。不仅仅可以直接将时钟与信号结合,同时可以将你想添加的文字或数据名称,利用关键字“data”以标签的形式放入部分符号中,以表示总线的值。值是按先后顺序添加到“23456789=”这些符号中的。

下面的代码给出了使用的例子。

{ signal: [
  { name: "clk",  wave: "P......" },
  { name: "bus",  wave: "x.==.=x", data: ["head", "body", "tail", "data"] },
  { name: "wire", wave: "0.1..0." }
]}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.4 添加间隙(Spacers and Gaps)

在时序图中,有时需要对时钟和信号进行省略,这就需要添加间隙省略掉不需要的部分。

{ 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." }
]}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.5 为信号分组(The groups)

通过分组,可以更好地展示信号之间的层级关系,便于查阅和对比。使用"[ ]",可以实现对信号的分组,分组的名称可以选择性添加。

{ 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'},
    ],  
  ]
]}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.6 周期与相位(Period and Phase)

周期和相位是时序图中重要的属性,可以通过关键字“period”与“phase”来进行编辑修改。

注意period仅支持整数;phase支持整数与小数,且相位的单位1是指一个时段。

{ signal: [
  { name: "CK",   wave: "P.......",                                              period: 2  },
  { name: "CMD",  wave: "x.3x=x4x=x=x=x=x", 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" }
]}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.7 其他属性配置(The config{} property)

属性配置可以修改图像很多地方,增加绘图的灵活性,利用关键字“config”来对属性进行控制。

2.7.1 水平比例(hscale)

水平比例修改的是整幅图的水平宽度,直观理解为单位时段的绘图长度。

{ signal: [
  { name: "clk",     wave: "p...." },
  { name: "Data",    wave: "x345x",  data: ["head", "body", "tail"] },
  { name: "Request", wave: "01..0" }
  ],
  config: { hscale: 1 }
}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

 当修改config: { hscale: 2 }时:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.7.2 主题样式(skin)

通过“skin”关键字,可以修改图的整体主题样式。在离线版v2.9.1版本中提供了四种可选的参数“default”、“dark”、“lowkey”、“narrow”;在线版目前提供了两种可选参数“default”、“narrow”。

{ signal: [
  { name: "clk",     wave: "p...." },
  { name: "Data",    wave: "x345x",  data: ["head", "body", "tail"] },
  { name: "Request", wave: "01..0" }
  ],
  config: { hscale: 2 ,
            skin: "lowkey"
          }
}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.7.3 头尾标注(head/foot)

关键字“head”与“foot”,可以通过头尾标注来对整幅图进行标注,包括text(标题文本)、tick(与垂直标记对其的标签)、tock(垂直标记之间的标签)、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
 },
}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

  • text

text具有SVG文本的所有属性,可以通过“tspan”关键字对其属性进行修改,可以使用预定义的字体样式(包括下面表格中的类型,可以组合出需要的字体与颜色)、也可以使用SVG tspan的其他属性构成自由样式。

SVG tspan其他属性配置可以参考:tspan - SVG | MDN (mozilla.org)

{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
}
}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

预定义的样式见下表:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.8 标注箭头与线条(Arrows)

有时需要对时序图进行连接与标注,WaveDrom提供了相对应的实现。利用“edge”关键字,可以实现包括“曲线”与“折线”,同时都提供了有向与无向的配置方式;“折线”中提供了一种平角式箭头样式,便于对时间段长度进行标注。

共有三种线的类型,可以在使用中体会:

符号 曲线类型
~ S型曲线
-与~组合 弧线
-或| 直线

提供一个小tips:可能会认为连线只能是蓝色的,但是其实可以通过错误的语法,来实现红色连接线的绘制(但是均为无向)。

2.8.1 曲线(Splines)

下面的代码展示了曲线连接的案例,可以看到首先利用“node”关键字定义了需要连接的点,之后使用“edge”关键字对这些点进行了连接,通过使用不同的连接符号,可以实现不同的连接效果。

下面的代码给出了一个简单的使用案例。

{ 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,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

具体的曲线定义见下表:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.8.2 折线(Sharp lines)

下面的代码展示了折线连接的案例,可以看到首先利用“node”关键字定义了需要连接的点,之后使用“edge”关键字对他们进行了连接,通过使用不同的连接符号,可以实现不同的连接效果。

下面的代码给出一个简单的使用案例。

{ 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', 'I+J 5 ms'
  ]
}

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

具体的折线定义见下表:

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

2.9 利用代码绘图(Some code)

WaveDrom提供了使用代码进行绘图的方式。例如可以通过循环迭代的方式生成依次递增的总线信号(如下面代码),将你从重复的劳动中解放出来。

简单分析一下这里的代码,通过使用关键字“function”,构建了函数,并在结尾进行调用,从而绘制了下面的图。

但我猜测对于大多数人来说,可能用不到这个功能,包括我自己还是更喜欢所见即所得的方式,所以就不作为本文的重点啦(我也没看太懂_(:з)∠)_)。

(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)

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

至此就是WaveDrom的绘图教程啦,下一步,就是要将生成的图进行导出了(不会有人还在使用截图吧?)

3 图像保存与导出

WaveDrom提供了图像数据的保存以及导出方式,无论是离线版还是在线版,只需要点击右下角的“≡”按钮,即可找到。

wavedrom,Basic Verilog 修炼足迹,Quartus与ModelSim,时序图,数字IC,集成电路,Verilog,fpga

分别介绍一下这几个按钮的功能:

按钮

功能
Load... 读取存储的图形数据文件
Save As... 将当前的图形数据文件存储为json
Export SVG... 导出矢量图
Export PNG... 导出PNG图
Rotate Layout... 旋转代码区与绘图区
Proportions 修改代码区与绘图区比例
Expand URL 拓展网址(不太明白)
WaveDrom Guide 打开官方使用指导(看这篇博客就够啦)
on GitHub 打开GitHub项目官网

至此,你学会WaveDrom了吗?没学会再看一遍(手动沟头)。 


这就是本期的全部内容啦,如果你喜欢我的文章,不要忘了点赞+收藏+关注,分享给身边的朋友哇~文章来源地址https://www.toymoban.com/news/detail-778606.html

到了这里,关于Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python SQL 数据库操作利器:SQLAlchemy 库详解(看这一篇文章就够了)

    引言: Python 是一门广受欢迎的编程语言,而 SQL 则是用于管理和操作数据库的标准查询语言。SQLAlchemy 是一个功能强大的 Python 库,它提供了一种与多种数据库进行交互的灵活方式。本文将介绍 SQLAlchemy 库,并以九个重要的要点详细解释其功能和用法。 SQLAlchemy 简介 SQLAlchem

    2024年02月07日
    浏览(63)
  • MSP432速成教程(看这一篇就够了)

    (一)GPIO输出 打开芯片数据手册(msp432p401r)第17页的表详细描述了对应引脚的GPIO功能 1.库函数 配置GPIO模式: 设置高低电平 配置驱动强度 只有P2.0、P2.1、P2.2、P2.3引脚可以配置为高驱动程度 This I/O can be configured for high drive operation with up to 20-mA drive capability. 此I/O可配置为高达

    2024年02月13日
    浏览(53)
  • Vue3超详细的ref()用法,看这一篇就够了

    ref( ) 接受一个内部值,返回一个 ref 对象 ,这个对象是 响应式 的 、 可更改 的,且只有一个指向其内部值的属性 .value 。 ref() 将传入参数的值包装为一个带 .value 属性的 ref 对象。 举例: 查看打印结果: ref()方法允许创建可以使用 任何值类型的响应式 ref ref 的 .value 属性也

    2024年02月17日
    浏览(42)
  • 【Linux】shell编程基础(超详细,入门看这一篇就够了)

    🥇🥇【Liunx学习记录篇】🥇🥇 篇一:【Linux】VMware安装unbuntu18.04虚拟机-超详细步骤(附镜像文件) 篇二:【Linux】ubuntu18.04系统基础配置及操作 篇三:【Linux】用户与组的操作详细介绍 篇四:【Linux】管理Linux文件权限属性介绍 篇五:【Linux】使用数字表示法和文件表示法修

    2024年02月04日
    浏览(44)
  • 【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

    A: 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。 消除类型之间的耦合关系 可替代性 可扩充性 接口性 灵活性 简化性 重载式多态在编译时已经确定好了。方法名相同而参数

    2024年01月20日
    浏览(66)
  • Linux Vim的使用(超详细,只看这一篇就足够了!)

    开篇先上 vim 键盘神图 1)Vim 中的5种编辑模式 在命令行中执行 vim filename ,若 filename 已存在,则 filename 被打开显示其内容;若 firename 不存在,则Vim在第一次存盘时自动在硬盘上新建filename文件。 vim有5种模式:命令模式、输入模式、末行模式、可视化模式、查询模式。 1.命令

    2024年02月06日
    浏览(49)
  • Git 教程--分支管理,全网最全,看这一篇就够了

    1、创建与合并分支 创建和合并分支是Git中重要的工作流程之一。下面是关于如何创建和合并分支的详细教程: 创建分支: 在命令行或终端中,导航到你的Git项目目录。 使用以下命令创建一个新的分支,其中 分支名 是你希望创建的新分支的名称: 例如,可以使用命令 git

    2024年02月03日
    浏览(55)
  • 【排序算法】 快速排序(快排)!超详细看这一篇就够了”保姆级教学“

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 什么是快排?快排的速度到底有多快呢?它们的思想和实现是什么样的? 本文会对这快速排序进行详解,绝对细致入微!让你彻底搞懂快排! 英国计算机科学家Tony Hoare在1960年为了解决计算

    2024年02月05日
    浏览(51)
  • Python操作Excel教程(全网最全,只看这一篇就够)

    目录 Python Excel库对比 1 Python xlrd 读取 操作Excel 1.1 xlrd模块介绍 1.2 安装xlrd模块 1.3 使用介绍 1.4 实战训练 2 Python xlwt 写入 操作Excel(仅限xls格式!) 2.1 pip安装xlwt 2.2 使用xlwt创建新表格并写入 2.3 xlwt 设置字体格式 2.4 xlwt 设置列宽 2.5 xlwt 设置行高 2.6 xlwt 合并列和行 2.7 xlwt 添加

    2024年02月15日
    浏览(47)
  • RabbitMQ教程大全看这一篇就够了-java版本

    目录 什么是RabbitMQ? RabbitMQ 核心概念 Docker 安装 RabbitMQ  RabbitMQ 控制台页面介绍 RabbitMQ 交换机 Exchange 介绍 Direct Exchange 定向、直连交换机 Fanout Exchange 发布/订阅、广播、扇形交换机 Topic Exchange 主题、通配符交换机 Headers Exchanges(少用) RabbitMQ 代码 Java版 1:简单队列 2:工作

    2023年04月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包