`.ato` bildirimsel DSL için referans: tip sistemi, bağlantı semantiği, kısıtlama modeli ve standart kütüphane. `.ato` kodu yazarken veya incelenirken kullanın.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/ato-language
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/ato-language/SKILL.md \
-o ~/.claude/skills/ato-language/SKILL.md ato, elektronik devreleri tanımlamak için bir deklaratif, kısıtlama tabanlı DSL'dir. Kontrol akışı, mutasyon ve yürütme sırası yoktur — devre ne olduğunu bildirirsiniz ve derleyici + çözücü bunu geçerli bir tasarıma dönüştürür.
Minimal, tam bir .ato dosyası:
#pragma experiment("BRIDGE_CONNECT")
import Resistor
import ElectricPower
import Capacitor
module PowerFilter:
"""A simple decoupled power input with a pull-down resistor."""
power = new ElectricPower
decoupling_capacitor = new Capacitor
pulldown_resistor = new Resistor
power.hv ~> decoupling_capacitor ~> power.lv
power.hv ~> pulldown_resistor ~> power.lv
decoupling_capacitor.capacitance = 100nF +/- 20%
pulldown_resistor.resistance = 100kohm +/- 5%
assert power.voltage within 3.0V to 3.6V
Paket dizininden ato build ile doğrulayın.
Her varlık (bir direnç, bir güç reli, bir I2C veri yolu, bir gerilim parametresi) yazılı bir grafta bir node'dur. Node'lar birbirine kenarlar aracılığıyla ilişkilenir: bileşim (üst–alt), bağlantı (aynı net) ve özellikler (davranışsal metadata). .ato dili, bu grafı deklaratif olarak oluşturmak için bir yüzey sözdizimidir.
ato'nun yeni bir tür tanımlamak için tam olarak üç yolu vardır:
| Anahtar Kelime | Semantik | Tipik Kullanım |
|---|---|---|
module |
Alt öğeler ve bağlantılar içeren bir tasarım birimi | Devre blokları, alt sistemler |
interface |
~ ile bağlanabilir bir sınır; kablolu hale getirilebilir |
Veri yolları, güç raileri, sinyaller |
component |
Footprint/sembol olan fiziksel bir parça | Satıcı IC'leri, konektörler |
Üçü de graf node'larına derlenir. Ayrım, derleyicinin hangi özellikleri eklediğini (is_module, is_interface) ve hangi işlemlerin yasal olduğunu kontrol eder (kural olarak, interface'ler ~ işaretinin her iki tarafında da görünür).
Miras, from kullanır:
module MyRegulator from Regulator:
pass
Türler alt öğeler içerir. Bir blok gövdesi içinde, new bir alt öğeyi örnekler:
module Board:
power = new ElectricPower # interface alt öğesi
sensor = new BME280 # module alt öğesi
caps = new Capacitor[4] # 4 kondansatörün dizisi
Alt öğelere nokta-gösterimi ile erişilir: sensor.power.voltage, caps[0].capacitance.
Kablo operatörü ~ iki interface'in aynı net/veri yolu olduğunu bildirir. Çift yönlüdür ve eşleşen türler gerektirir:
power_3v3 ~ sensor.power # ElectricPower ~ ElectricPower
i2c_bus ~ sensor.i2c # I2C ~ I2C
Köprü operatörü ~> (#pragma experiment("BRIDGE_CONNECT") gerekli) seriye bir bileşen ekler. Bileşen, giriş/çıkış eşlemesini tanımlayan can_bridge özelliğini taşımalıdır:
power_5v ~> regulator ~> power_3v3
i2c.scl.line ~> pullup ~> power.hv
ato'daki değerler birim ve tolerans taşır. Çözücü, gerçek parçaları seçmek için bunları kullanır.
Atama bir parametre için bir değeri bağlar:
power.voltage = 3.3V +/- 5%
resistor.resistance = 10kohm +/- 10%
i2c.frequency = 400kHz
i2c.address = 0x48
İddıalar çözücünün karşılaması gereken kısıtlamaları bildirir:
assert power.voltage within 3.0V to 3.6V
assert i2c.frequency <= 400kHz
assert sensor.i2c.address is 0x50
Üç değer formu vardır:
3.3V10kohm +/- 5%3.0V to 3.6VÖzellikler node'lara yetenekler veya metadata ekler. Bunlar alt öğeler değildir — grafta özellik kenarlarını kullanırlar.
#pragma experiment("TRAITS")
import has_part_removed
import is_atomic_part
module Placeholder:
trait has_part_removed # fiziksel olmayan yer tutucu olarak işaretleyin
trait is_atomic_part # footprint'i olan kullanıcı tanımlı parça
Temel yerleşik özellikler:
| Özellik | Etki |
|---|---|
can_bridge |
~> operatörüyle kullanımı etkinleştirir (giriş/çıkış pin eşlemesini tanımlar) |
has_part_removed |
Fiziksel parça yerleştirilmez (sembolik node) |
is_atomic_part |
manufacturer, partnumber, footprint ile kullanıcı tanımlı parça |
has_datasheet |
Bir teknik datasheet referansı ekler |
has_designator_prefix |
PCB belirteci (R, C, U, vb.) ayarlar |
Basit ithalatlar standart kütüphane türlerine çözümlenir (ithalatçı başına 1 satır):
import ElectricPower
import I2C
import Resistor
Yol ithalatları diğer .ato dosyalarında tanımlanan türlere çözümlenir (ithalatçı başına 1 satır):
from "atopile/vendor-part/vendor-part.ato" import Vendor_Part
Deneysel sözdizimi pragmalar tarafından kapısız tutulur (dosya üstü, ithalatlardan önce):
#pragma experiment("BRIDGE_CONNECT") # ~> operatörü
#pragma experiment("FOR_LOOP") # for döngüleri
#pragma experiment("TRAITS") # trait anahtar kelimesi
#pragma experiment("MODULE_TEMPLATING") # new Foo<p=v>
#pragma experiment("INSTANCE_TRAITS") # örnekler üzerindeki özellikler
Kapılı sözdizimini pragma olmadan kullanmak derleme hatasıdır.
Bir blok gövdesi içindeki her ifade şu ifadelerden birdir:
| İfade | Sözdizim | Amaç |
|---|---|---|
assign |
name = value veya name = new Type |
Bir değeri bağla veya bir alt öğeyi örnekle |
connect |
a ~ b |
İki interface'i birbirine kablola |
bridge |
a ~> b ~> c |
Köprülenebilir bileşenleri seriye ekle |
assert |
assert expr <op> expr |
Bir kısıtlama bildirin |
retype |
name -> NewType |
Devralınan alt öğenin türünü değiştir |
pin |
pin VCC |
Fiziksel bir pin bildirin |
signal |
signal reset |
Elektriksel bir sinyal bildirin |
trait |
trait TraitName |
Bir özellik ekle |
import |
import Type |
Bir türü içe aktar |
for |
for x in arr: |
Bir dizi üzerinde yineleme (pragma-kapılı) |
string |
"""...""" |
Dokumentasyon dizesi |
pass |
pass |
Boş yer tutucu |
Bir blok içindeki ifadeler sıradan bağımsızdır — derleyici ifadelerin tam grafını çözer, bir işlem dizisini değil.
~ veya ~> ile bağlanabilir)| Tür | Alt Öğeler / Parametreler | Amaç |
|---|---|---|
Electrical |
(tek node) | Ham elektriksel bağlantı noktası |
ElectricPower |
.hv, .lv (Electrical); .voltage, .max_current |
Güç raileri |
ElectricLogic |
.line (Electrical), .reference (ElectricPower) |
Gerilim bağlamında dijital sinyaller |
ElectricSignal |
.line (Electrical), .reference (ElectricPower) |
Analog sinyaller |
I2C |
.scl, .sda (ElectricLogic); .frequency, .address |
I2C veri yolu |
SPI |
.sclk, .mosi, .miso (ElectricLogic); .frequency |
SPI veri yolu |
UART / UART_Base |
.tx, .rx (ElectricLogic); flow control hatları |
Seri iletişim |
I2S |
dijital ses veri yolu hatları | Dijital ses |
DifferentialPair |
.p, .n |
Diferansiyel sinyaller |
USB2_0 / USB3 / USB2_0_IF |
USB verisi + gücü | USB arayüzleri |
CAN_TTL |
CAN veri yolu hatları | CAN veri yolu |
SWD / JTAG |
debug hatları | Hata ayıklama arayüzleri |
Ethernet / HDMI / RS232 / PDM / XtalIF / MultiSPI |
protokole özgü | Diğer protokoller |
new ile örneklenebilir)| Tür | Alt Öğeler / Parametreler | Belirteci |
|---|---|---|
Resistor |
.unnamed[0..1]; .resistance, .max_power |
R |
Capacitor |
.unnamed[0..1], .power; .capacitance, .max_voltage, .temperature_coefficient |
C |
CapacitorPolarized |
Kapasitörün polarize türü | C |
Inductor |
.unnamed[0..1]; .inductance |
L |
Fuse |
.unnamed[0..1]; .trip_current, .fuse_type |
F |
Diode |
.anode, .cathode; .forward_voltage, .current |
D |
LED |
.diode; .brightness, .color |
D |
MOSFET |
.source, .gate, .drain; .channel_type, .gate_source_threshold_voltage |
Q |
BJT |
.emitter, .base, .collector; .doping_type |
Q |
Regulator / AdjustableRegulator |
.power_in, .power_out |
— |
Crystal |
.unnamed[0..1], .gnd; .frequency, .load_capacitance |
XTAL |
Crystal_Oscillator |
osilatör modülü | — |
ResistorVoltageDivider |
gerilim bölücü devresi | — |
FilterElectricalRC |
RC filtresi | — |
Net |
.part_of (Electrical) |
— |
TestPoint |
.contact; .pad_size, .pad_type |
TP |
MountingHole / NetTie |
mekanik | — |
SPIFlash |
SPI flash belleği | — |
trait ile eklenebilir)has_part_removed, is_atomic_part, can_bridge, can_bridge_by_name, has_datasheet, has_designator_prefix, has_doc_string, has_net_name_affix, has_net_name_suggestion, has_package_requirements, has_single_electric_reference, is_auto_generated, requires_external_usage
SI-önekli birimler: V, mV | A, mA | ohm, kohm, Mohm | F, uF, nF, pF | Hz, kHz, MHz, GHz | s, ms | W, mW
Sayı biçimleri: ondalık (3.3), bilimsel (1e-6), onaltılık (0x48), ikili (0b1010), alt çizgi ayrılmış (1_000_000)
Booleyanlar: True, False
~ ve ~> eşleşen interface türlerini bağlamalıdır. ElectricPower ~ I2C bir tür uyuşmazlığıdır (zorlama güçlendirilmektedir).~>, for, trait veya <> kullanmak pragma olmadan derleme hatasıdır.resistance = 10kohm (sıfır tolerans) gerçek parçalara uymaz. Her zaman +/- N% kullanın.signal.reference ~ power_rail ayarlayın.if, while, return, fonksiyon, sınıf veya istisna yok.2 veya daha fazla bağımsız görevin paralel olarak yürütülebileceği ve aralarında state paylaşımı ya da sıralı bağımlılık olmadığı durumlarda kullanın.
Ayrı bir oturumda inceleme kontrol noktaları ile yürütülecek yazılı bir uygulama planınız olduğunda kullanın.
Mevcut oturumda bağımsız görevlerle uygulama planlarını yürütürken kullanın
Herhangi bir hata, test başarısızlığı veya beklenmeyen davranışla karşılaştığınızda, çözüm önerisi sunmadan önce kullanın.
Herhangi bir feature ya da bugfix uygulamaya başlamadan önce kullanın.
Yeni beceriler oluştururken, mevcut becerileri düzenlerken veya dağıtımdan önce becerileri doğrularken kullanın.