Skip to content

ๅ่ฎฎ v0.2

ไบ‹ไปถๅ่ฎฎ / SHM ABI / UDP


๐Ÿ“ก ๅค–้ƒจไบ‹ไปถ (API)

EV_FLASH(tag_u32)

ๅ‚ๆ•ฐ ๆ่ฟฐ
็”จ้€” ไธ€ไธช็กฎๅฎšๆ€ง READโ†’WRITE ๅ‘จๆœŸ
่ฟ”ๅ›ž readout (R0/R1), FLAGS ๅ•็‹ฌ่ฏปๅ–
ๆกไปถ ไป…ๅฝ“ BAKE_APPLIED==1 ๆ—ถๅ…่ฎธ
if BAKE_APPLIED == 0:
  return NotBaked  # ็Šถๆ€ไธๅ˜

# ๆ‰ง่กŒ PHASE_READ โ†’ TURNAROUND โ†’ PHASE_WRITE โ†’ READOUT_SAMPLE
return readout, FLAGS32

EV_RESET_DOMAIN(mask16)

ๅ‚ๆ•ฐ ๆ่ฟฐ
็”จ้€” ๅŸŸ้‡็ฝฎ (thr_cur16=0, locked=0)
ๆกไปถ ไป…ๅœจ EV_FLASH ไน‹้—ด
ๆกไปถ ไป…ๅฝ“ BAKE_APPLIED==1

EV_BAKE()

ๅ‚ๆ•ฐ ๆ่ฟฐ
็”จ้€” ๅŽŸๅญๅบ”็”จ staging BakeBlob
ๆกไปถ ไป…ๅœจ EV_FLASH ไน‹้—ด
ๆ•ˆๆžœ ๅบ”็”จๅŽ้‡็ฝฎ่ฟ่กŒๆ—ถ

๐Ÿ”„ EV_FLASH ๅ†…้ƒจๅญ้˜ถๆฎต

  1. PHASE_READ โ€” ๅ›พๅ—้‡‡ๆ ท่พ“ๅ…ฅ
  2. TURNAROUND โ€” Conductor: Hi-Z
  3. PHASE_WRITE โ€” Island ้ฉฑๅŠจ BUS16
  4. READOUT_SAMPLE โ€” Conductor ่ฏปๅ– BUS
  5. INTERPHASE_AUTORESET โ€” ๅฏ้€‰ๅŸŸ้‡็ฝฎ

๐ŸŒ UDP ๅ่ฎฎ (packet_v1)

ๆœบๅ™จ็บง่”

ๆ•ฐๆฎๅŒ…ๆ ผๅผ (37 ๅญ—่Š‚)

Offset ๅญ—ๆฎต ็ฑปๅž‹ ๆ่ฟฐ
0 magic u32 'D8UP' (0x50553844)
4 version u16 1
6 flags u16 has_winner, has_bus, has_cycle, has_flags
8 frame_tag u32 ๅธงๆ ‡็ญพ
12 domain_id u8 ๅŸŸ ID
13 pattern_id u16 ๆจกๅผ ID
15 reset_mask16 u16 ้‡็ฝฎๆŽฉ็ 
17 collision_mask16 u16 ็ขฐๆ’žๆŽฉ็ 
19 winner_tile_id u16 ่Žท่ƒœ่€… ID
21 cycle_time_us u32 ๅ‘จๆœŸๆ—ถ้—ด
25 flags32_last u32 ไธŠไธ€ๅ‘จๆœŸ FLAGS
29 bus16[8] u8ร—8 ๆ€ป็บฟๅ€ผ

Flags (u16)

ๆฏ”็‰น ๆ ‡ๅฟ— ๆ่ฟฐ
bit0 has_winner winner_tile_id/pattern_id ๆœ‰ๆ•ˆ
bit1 has_bus bus16[8] ๆœ‰ๆ•ˆ
bit2 has_cycle cycle_time_us ๆœ‰ๆ•ˆ
bit3 has_flags flags32_last ๆœ‰ๆ•ˆ

๐ŸŽฏ COLLIDE: ๅŸŸๅ’Œ่Žท่ƒœ่€…

ๅฎšไน‰

FIRE(t) = (locked_before[t]==0 && locked_after[t]==1)
FIRED_SET(d) = { t | domain_id(t)=d && FIRE(t)=1 }
cnt(d) = |FIRED_SET(d)|

่ง„ๅˆ™

cnt(d) ่Žท่ƒœ่€… COLLIDE(d)
0 ๆ—  0
1 ๅ•ไธช 0
โ‰ฅ2 ้€‰ๆ‹ฉ 1

่Žท่ƒœ่€…้€‰ๆ‹ฉ (cntโ‰ฅ2)

1. max priority8
2. ๅนณๅฑ€ๆ—ถ min tile_id

Bake the Future. Build the Substrate. ๐Ÿ› ๏ธโšก๏ธ