Skip to content
الرئيسيةWebالتطبيقاتالمستنداتحول
🌐 Auto English 简体中文 繁體中文 Español Français Русский العربية Português Deutsch 日本語 한국어 हिन्दी

WaveDrom

WaveDrom هي مكتبة JavaScript تعرض مخططات التوقيت الرقمي من أوصاف JSON. تُستخدم على نطاق واسع في توثيق تصميم العتاد وتطوير FPGA وهندسة الأنظمة المدمجة لتوضيح سلوك الإشارات وبروتوكولات الناقل ونطاقات الساعة.

في Moraya، ضع كود WaveDrom بصيغة JSON داخل كتلة أكواد محاطة بعلامة اللغة 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........" }
  ]
}
```

إشارات منطقية أساسية — توقيت بوابة AND

يوضح إشارتي إدخال وناتج بوابة AND، حيث يرتفع الخرج فقط عندما يكون كلا الإدخالين مرتفعين.

```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"
  }
}
```