Public

Thread: Sylvain is working on a ROM compiler

14 Discord messages from ℹ️ - Information/general/threads/sylvain-is-working-on-a-rom-compiler.md.

Category: ℹ️ - Information Parent channel: #general Thread ID: 1528307350790733886

Messages: 14

message-1528320505801871391

2026-07-19T08:40:03.405+00:00 — tnt (@246tnt)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1361349523724570941",
  "guildId": "1361349522684510449",
  "messageId": "1528307350790733886"
}
</details>

Content

<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/88d17af9d19ab43565b0c46751ef7d12-DFEE5.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
        "color": null,
        "discriminator": "0000",
        "id": "323371864074485771",
        "isBot": false,
        "name": "mole99",
        "nickname": "Leo Moser (mole99)",
        "roles": [
          {
            "color": null,
            "id": "1423020172595298314",
            "name": "Mod",
            "position": 4
          }
        ]
      }
    ]
  }
}
</details>

message-1528320511543738368

2026-07-19T08:40:04.774+00:00 — tnt (@246tnt)

Content

Yes, although depending on the content a yosys ROM can be smaller, that's only true if the content can simplify well. If not, it quickly grows and the routing mess it creates also can make P&R a real pain.

I have been drafing how to adapt it to gf180. Some of the tricks and structure I used in sky130 don't really apply here ( actually then end up being counter productive ) but I have a few things up my sleeve that I hope will pan out.

Priority ATM is however to validate the sky130 one. Although it's been silicon proven as far as it outputs the right data, the whole timing validation remains to be done and that's not a small thing 😅

Reactions

<details> <summary>Reactions data</summary>
[
  {
    "count": 2,
    "emoji": {
      "code": "thumbsup",
      "id": "",
      "imageUrl": "2026-07_media/1f44d-27259.svg",
      "isAnimated": false,
      "name": "👍"
    },
    "users": [
      {
        "avatarUrl": "2026-07_media/3-FB033.png",
        "color": null,
        "discriminator": "0000",
        "id": "709384666909507634",
        "isBot": false,
        "name": "egorxe",
        "nickname": "egorxe"
      },
      {
        "avatarUrl": "2026-07_media/67bd670a335a2f955fb2ded57088a2cb-675B3.png",
        "color": null,
        "discriminator": "0000",
        "id": "756011607603019777",
        "isBot": false,
        "name": "anfroholic",
        "nickname": "anfroholic"
      }
    ]
  }
]
</details><details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/88d17af9d19ab43565b0c46751ef7d12-DFEE5.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "inlineEmojis": [
      {
        "code": "sweat_smile",
        "id": "",
        "imageUrl": "2026-07_media/1f605-42B43.svg",
        "isAnimated": false,
        "name": "😅"
      }
    ]
  }
}
</details>

message-1528736051407880202

2026-07-20T12:11:17.198+00:00 — Rob Taylor (@robtaylor_52029)

Content

Thank you both.

I guess a possible sythesis based solution could be to have a librelane step that builds a macro for the rom (cached om rom content), which would give the benefits @Leo Moser (mole99) mentioned without needing to port to every process.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
        "color": null,
        "discriminator": "0000",
        "id": "323371864074485771",
        "isBot": false,
        "name": "mole99",
        "nickname": "Leo Moser (mole99)",
        "roles": [
          {
            "color": null,
            "id": "1423020172595298314",
            "name": "Mod",
            "position": 4
          }
        ]
      }
    ]
  }
}
</details>

message-1528744064969609308

2026-07-20T12:43:07.78+00:00 — tnt (@246tnt)

Content

I don't see how that would work. If you use a normal synthesis process to build a ROM, the size of that macro is heavily dependent  on the ROM content. If you change the rom content, the size would change.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/88d17af9d19ab43565b0c46751ef7d12-DFEE5.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1528745950993059890

2026-07-20T12:50:37.443+00:00 — namibj

Content

I think the idea is to avoid paying the ROM's PnR cost each time?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1528758708761399336

2026-07-20T13:41:19.132+00:00 — Rob Taylor (@robtaylor_52029)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528744064969609308"
}
</details>

Content

true.. isn't that also the case for a ram generator? I guess you could configure a macro block size, pins etc
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/88d17af9d19ab43565b0c46751ef7d12-DFEE5.png",
        "color": null,
        "discriminator": "0000",
        "id": "596068704471482370",
        "isBot": false,
        "name": "246tnt",
        "nickname": "tnt",
        "roles": []
      }
    ]
  }
}
</details>

message-1528758813359083641

2026-07-20T13:41:44.07+00:00 — Rob Taylor (@robtaylor_52029)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528745950993059890"
}
</details>

Content

could cache based on pdk and hash of rom contents
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
        "color": null,
        "discriminator": "0000",
        "id": "262706220073222144",
        "isBot": false,
        "name": "namibj",
        "nickname": "namibj",
        "roles": []
      }
    ]
  }
}
</details>

message-1528759895434854531

2026-07-20T13:46:02.057+00:00 — Rob Taylor (@robtaylor_52029)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528758708761399336"
}
</details>

Content

I wonder if there's a way to calculate what the max area could be for a given rom size. I'm finding it hard to think about that though 😅
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "inlineEmojis": [
      {
        "code": "sweat_smile",
        "id": "",
        "imageUrl": "2026-07_media/1f605-42B43.svg",
        "isAnimated": false,
        "name": "😅"
      }
    ]
  }
}
</details>

message-1528787193852727588

2026-07-20T15:34:30.507+00:00 — namibj

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528758708761399336"
}
</details>

Content

The benefit of synthesis (via abc) ROM would be to be smaller than a mask ROM.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/3-FB033.png",
        "color": null,
        "discriminator": "0000",
        "id": "1498420485531111548",
        "isBot": false,
        "name": "robtaylor_52029",
        "nickname": "Rob Taylor",
        "roles": []
      }
    ]
  }
}
</details>

message-1528787305341518056

2026-07-20T15:34:57.088+00:00 — namibj

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528759895434854531"
}
</details>

Content

Design a mask ROM.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/3-FB033.png",
        "color": null,
        "discriminator": "0000",
        "id": "1498420485531111548",
        "isBot": false,
        "name": "robtaylor_52029",
        "nickname": "Rob Taylor",
        "roles": []
      }
    ]
  }
}
</details>

message-1529162555023691786

2026-07-21T16:26:03.584+00:00 — Rob Taylor (@robtaylor_52029)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1528787305341518056"
}
</details>

Content

cool. let me know if you do anything in this space 🙂
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "inlineEmojis": [
      {
        "code": "slight_smile",
        "id": "",
        "imageUrl": "2026-07_media/1f642-83E8A.svg",
        "isAnimated": false,
        "name": "🙂"
      }
    ],
    "mentions": [
      {
        "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
        "color": null,
        "discriminator": "0000",
        "id": "262706220073222144",
        "isBot": false,
        "name": "namibj",
        "nickname": "namibj",
        "roles": []
      }
    ]
  }
}
</details>

message-1529162679690723418

2026-07-21T16:26:33.307+00:00 — namibj

Content

I'm not expecting to 🙁
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "inlineEmojis": [
      {
        "code": "slight_frown",
        "id": "",
        "imageUrl": "2026-07_media/1f641-E1429.svg",
        "isAnimated": false,
        "name": "🙁"
      }
    ]
  }
}
</details>

message-1529164396448841748

2026-07-21T16:33:22.614+00:00 — namibj

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1529162555023691786"
}
</details>

Content

(Though I am looking towards perhaps a RAM setup that would allow mapping a short history of nominal transmit symbols to a DAC code; and that in a way that can efficciently be run with a good amount of interleaving/C-slowed action applied, like 4 or 8 or so times slower RAM-bitline-action than the symbol rate of the stream.)
(Such approach is highly capable of mitigating data-dependent output waveform distortion, even in ways that are non-trivial interactions with a particular instance's bond wire inductance and PVT variations, notably having rather little penalty for multi-level signalling (e.g. PAM3/4/5) compared to classic binary "virtual" shift register approaches to the task of mitigating data-dependent waveform distortion.)

Reactions

<details> <summary>Reactions data</summary>
[
  {
    "count": 1,
    "emoji": {
      "code": "heart",
      "id": "",
      "imageUrl": "2026-07_media/2764-A3D25.svg",
      "isAnimated": false,
      "name": "❤️"
    },
    "users": [
      {
        "avatarUrl": "2026-07_media/3-FB033.png",
        "color": null,
        "discriminator": "0000",
        "id": "1498420485531111548",
        "isBot": false,
        "name": "robtaylor_52029",
        "nickname": "Rob Taylor"
      }
    ]
  }
]
</details><details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2026-07_media/3-FB033.png",
        "color": null,
        "discriminator": "0000",
        "id": "1498420485531111548",
        "isBot": false,
        "name": "robtaylor_52029",
        "nickname": "Rob Taylor",
        "roles": []
      }
    ]
  }
}
</details>

message-1529836775453757460

2026-07-23T13:05:10.261+00:00 — Rob Taylor (@robtaylor_52029)

Reply/reference

<details> <summary>Reference data</summary>
{
  "channelId": "1528307350790733886",
  "guildId": "1361349522684510449",
  "messageId": "1529162679690723418"
}
</details>

Content

ah well 🙂
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2026-07_media/3-FB033.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "inlineEmojis": [
      {
        "code": "slight_smile",
        "id": "",
        "imageUrl": "2026-07_media/1f642-83E8A.svg",
        "isAnimated": false,
        "name": "🙂"
      }
    ],
    "mentions": [
      {
        "avatarUrl": "2026-07_media/f885abc0dddd0a33e4d4991b3c99091d-7ACD2.png",
        "color": null,
        "discriminator": "0000",
        "id": "262706220073222144",
        "isBot": false,
        "name": "namibj",
        "nickname": "namibj",
        "roles": []
      }
    ]
  }
}
</details>