Skip to content
ГлавнаяWebПриложенияДокументацияО проекте
🌐 Auto English 简体中文 繁體中文 Español Français Русский العربية Português Deutsch 日本語 한국어 हिन्दी

WaveDrom

WaveDrom — это JavaScript-библиотека для рендеринга диаграмм цифровых временных сигналов из JSON-описаний. Она широко используется в документации по проектированию аппаратного обеспечения, разработке FPGA и инженерии встраиваемых систем для иллюстрации поведения сигналов, протоколов шин и тактовых доменов.

В Moraya оберните JSON-описание WaveDrom в огороженный блок кода с языковым тегом wavedrom, и редактор автоматически отрендерит интерактивную временную диаграмму.

Полное описание синтаксиса см. в официальной документации WaveDrom.

Обзор синтаксиса

Диаграмма WaveDrom определяется как JSON-объект. Основной ключ — signal, который содержит массив определений сигналов. Каждый сигнал имеет:

Символы формы сигнала

СимволЗначение
0Низкий логический уровень
1Высокий логический уровень
xНеопределённое состояние / не имеет значения
zВысокий импеданс
=Значение данных (использует следующий элемент из массива data)
2-9Именованные значения данных с различными цветами
pТактовый сигнал по переднему фронту
nТактовый сигнал по заднему фронту
PТактовый сигнал по переднему фронту со стрелкой
NТактовый сигнал по заднему фронту со стрелкой
.Продолжение предыдущего состояния
|Разрыв / пропуск во времени

Примеры

Простой тактовый сигнал

Базовый тактовый сигнал по переднему фронту, работающий в течение 8 циклов.

```wavedrom
{
  "signal": [
    { "name": "clk", "wave": "p........" },
    { "name": "clk_n", "wave": "n........" }
  ]
}
```

Основные логические сигналы — временная диаграмма вентиля И

Демонстрирует два входных сигнала и результирующий выход И, показывая, что выход переходит в высокое состояние только тогда, когда оба входа находятся в высоком состоянии.

```wavedrom
{
  "signal": [
    { "name": "clk",    "wave": "p........" },
    { "name": "input_a", "wave": "0.1..0.1." },
    { "name": "input_b", "wave": "0..1..1.." },
    {},
    { "name": "output",  "wave": "0...0.1.0" }
  ]
}
```

Многоразрядная шина с метками данных

Шина данных, передающая последовательные значения байтов, синхронизированная с тактовым сигналом и управляемая сигналом валидности.

```wavedrom
{
  "signal": [
    { "name": "clk",   "wave": "p........" },
    { "name": "valid", "wave": "0.1....0." },
    { "name": "data",  "wave": "x.=.=.=.x", "data": ["0xA0", "0xB1", "0xC2"] },
    { "name": "ready", "wave": "1........" }
  ]
}
```

Временная диаграмма протокола SPI

Полная транзакция SPI, показывающая линии выбора микросхемы, тактовый сигнал, MOSI и MISO при обмене байтом данных.

```wavedrom
{
  "signal": [
    { "name": "CS_n",  "wave": "10......1" },
    { "name": "SCLK",  "wave": "0.p.....0" },
    { "name": "MOSI",  "wave": "x.=.=.=.x", "data": ["MSB", "...", "LSB"] },
    { "name": "MISO",  "wave": "x..=.=.=x", "data": ["MSB", "...", "LSB"] }
  ],
  "config": { "hscale": 2 }
}
```

Цикл чтения памяти

Операция чтения SRAM-памяти: настройка адреса, разрешение микросхемы, разрешение выхода и появление данных на шине после задержки чтения.

```wavedrom
{
  "signal": [
    { "name": "clk",     "wave": "p.........." },
    { "name": "addr",    "wave": "x.=........", "data": ["0x4000"] },
    { "name": "ce_n",    "wave": "1.0........" },
    { "name": "oe_n",    "wave": "1..0......." },
    { "name": "we_n",    "wave": "1.........." },
    { "name": "data",    "wave": "z...=......", "data": ["0xFF"] },
    { "name": "ready",   "wave": "0....1....." }
  ],
  "head": {
    "text": "SRAM Read Cycle"
  }
}
```

Группы сигналов с маркерами фронтов

Группировка сигналов по логическим категориям с использованием маркеров фронтов для отображения причинно-следственных связей между сигналами.

```wavedrom
{
  "signal": [
    ["CPU",
      { "name": "req",   "wave": "0.1..0.|.." },
      { "name": "addr",  "wave": "x.3..x.|..", "data": ["A5"] },
      { "name": "wr",    "wave": "0.1..0.|.." }
    ],
    {},
    ["Memory",
      { "name": "ack",   "wave": "0..1.0.|.." },
      { "name": "data",  "wave": "z..4.z.|..", "data": ["D3"] },
      { "name": "ready", "wave": "0...10.|.." }
    ]
  ],
  "edge": [
    "req~>ack", "wr~>data", "ack~>ready"
  ],
  "head": {
    "text": "CPU-Memory Bus Transaction"
  }
}
```