Public

Thread: Not bad for starters

29 Discord messages from ℹ️ - Information/general/threads/not-bad-for-starters.md.

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

Messages: 29

message-1408386638404648991

2025-08-22T09:45:41.154+00:00 — Leo Moser (mole99) (@mole99)

Reply/reference

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

Content

<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408386641407770734

2025-08-22T09:45:41.87+00:00 — Leo Moser (mole99) (@mole99)

Content

PDN is not yet connected between the pad ring and the core. Routing is also currently erroring out.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408386672558604409

2025-08-22T09:45:49.297+00:00 — Leo Moser (mole99) (@mole99)

Content

This includes several hacks on top of the PDK that need to be upstreamed, as well as changes to the LibreLane padring generation script, which needs to be made more generic to support gf180mcu by default.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408386737935224861

2025-08-22T09:46:04.884+00:00 — Leo Moser (mole99) (@mole99)

Content

Other than that you can simply set the die size and the I/O cells on each side.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408386839353622571

2025-08-22T09:46:29.064+00:00 — Tholin (@tholin)

Content

What is exactly it that I’m looking at here?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408386901622263870

2025-08-22T09:46:43.91+00:00 — Tholin (@tholin)

Content

I mean
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408386930634395648

2025-08-22T09:46:50.827+00:00 — Tholin (@tholin)

Content

I see TT pin names
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408387591421820978

2025-08-22T09:49:28.371+00:00 — Leo Moser (mole99) (@mole99)

Content

Yes, the padring uses the same pinout as a tiny tapeout project. You could basically just drop it in there and produce a very expensive TT project/chip.

I ported the padring from my IHP LibreLane workshop, see the bonus exercise: https://github.com/FPGA-Research/heichips25-workshop/tree/main
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408400767206817834

2025-08-22T10:41:49.723+00:00 — Tholin (@tholin)

Content

Oh, that’s an interesting repo in general!
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408401365507637288

2025-08-22T10:44:12.369+00:00 — Tholin (@tholin)

Content

You say this requires changes to both the PDK and the padring script. Are you working on getting those upstreamed right now?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408402611589353492

2025-08-22T10:49:09.458+00:00 — htamas (@h.tamas)

Content

Fyi, I have a preliminary padframe setup for the Synopsys shuttle in this repo: https://github.com/htfab/ttgf0p1-poc
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408403710274441287

2025-08-22T10:53:31.405+00:00 — Tholin (@tholin)

Content

Oh
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408403719908884602

2025-08-22T10:53:33.702+00:00 — Tholin (@tholin)

Content

Very good
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408403827765411912

2025-08-22T10:53:59.417+00:00 — Tholin (@tholin)

Content

Is the total die size of that compatible with wafer.space, though? Or do we not know that yet?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408439292555956264

2025-08-22T13:14:54.882+00:00 — Tholin (@tholin)

Content

I tried going through the IHP LibreLane workshop repo, but using the gf180 PDK. Only a few slight tweaks to the configs were required. Can follow the instructions fine otherwise. Good stuff.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408486738703286436

2025-08-22T16:23:26.925+00:00 — urish

Content

The Synopsys shuttle die size is not compatible with wafer.space, it's smaller
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/2b6c3aac0ae09fc8a72a4b2e17d7f9c9-39032.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408487361393856573

2025-08-22T16:25:55.386+00:00 — Leo Moser (mole99) (@mole99)

Content

Eventually, this all needs to be upstreamed.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408487524141371494

2025-08-22T16:26:34.188+00:00 — Leo Moser (mole99) (@mole99)

Content

@htamas  How did you deal with Yosys not reading in the I/O cell Verilog? As a workaround I created a separate blackbox library. Or did you just read the liberty?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas",
        "roles": []
      }
    ]
  }
}
</details>

message-1408487593204781116

2025-08-22T16:26:50.654+00:00 — Leo Moser (mole99) (@mole99)

Content

For wafer.space,  we will probably keep the same die size as Caravel, since we have all the dimensions for the reticle. (And you could still tapeout Caravel if you want.)
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {}
}
</details>

message-1408487745927647454

2025-08-22T16:27:27.066+00:00 — Leo Moser (mole99) (@mole99)

Content

@Tholin Glad to hear you like it! You can even have separate sections for each PDK in the config.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
        "color": null,
        "discriminator": "0000",
        "id": "220639106915368960",
        "isBot": false,
        "name": "tholin",
        "nickname": "Tholin",
        "roles": []
      }
    ]
  }
}
</details>

message-1408490054388678788

2025-08-22T16:36:37.446+00:00 — htamas (@h.tamas)

Reply/reference

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

Content

Yes, I just added `"EXTRA_LIBS": ["pdk_dir::libs.ref/gf180mcu_fd_io/lib/gf180mcu_fd_io__tt_025C_5v00.lib"]` to the config (as well as similar `EXTRA_LEFS` and `EXTRA_GDS_FILES` entries for later steps in the flow)
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_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-1408496900893708429

2025-08-22T17:03:49.78+00:00 — Tholin (@tholin)

Reply/reference

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

Content

Trying to make something based off of this. Struggling my way through, one flow error at a time!
Currently making it to Generate PDN before error.
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas",
        "roles": []
      }
    ]
  }
}
</details>

message-1408534789035921518

2025-08-22T19:34:23.017+00:00 — Leo Moser (mole99) (@mole99)

Reply/reference

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

Content

I see, thanks! In the padring branch the I/O cell views are set up directly in the PDK config similar to the standard cells.

Reactions

<details> <summary>Reactions data</summary>
[
  {
    "count": 1,
    "emoji": {
      "code": "thumbsup",
      "id": "",
      "imageUrl": "2025-08_media/1f44d-27259.svg",
      "isAnimated": false,
      "name": "👍"
    },
    "users": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas"
      }
    ]
  }
]
</details><details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/3c7c17f3225f6e56f4dccd83f14383f2-73F83.png",
    "discriminator": "0000",
    "isBot": false,
    "roles": [
      {
        "color": null,
        "id": "1423020172595298314",
        "name": "Mod",
        "position": 4
      }
    ]
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas",
        "roles": []
      }
    ]
  }
}
</details>

message-1408853815037263942

2025-08-23T16:42:04.743+00:00 — Tholin (@tholin)

Reply/reference

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

Content

Quick question. How did you derive these values? I get flow errors if I try to mess with the die size or any of these, but I kinda need to.

Attachments

<details> <summary>Attachments data</summary>
[
  {
    "fileName": "image.png",
    "fileSizeBytes": 3655,
    "id": "1408853814827683991",
    "url": "2025-08_media/image-5D781.png"
  }
]
</details><details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas",
        "roles": []
      }
    ]
  }
}
</details>

message-1408860405421572106

2025-08-23T17:08:16.013+00:00 — htamas (@h.tamas)

Reply/reference

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

Content

`IO_LENGTH` & `IO_WIDTH` come from the io cells in the `gf180mcu_fd_io` library
`IO_OFFSET`, `MAX_NUM_PADS_HORIZONTAL` and `MAX_NUM_PADS_VERTICAL` are to reproduce the exact pad locations of Mehdi's padframe as they are constraints of the Synopsys shuttle
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
        "color": null,
        "discriminator": "0000",
        "id": "220639106915368960",
        "isBot": false,
        "name": "tholin",
        "nickname": "Tholin",
        "roles": []
      }
    ]
  }
}
</details>

message-1408861089848102933

2025-08-23T17:10:59.193+00:00 — htamas (@h.tamas)

Content

(there is also `DIE_AREA` from `build.py` that factors into the calculations)
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408861295201222778

2025-08-23T17:11:48.153+00:00 — htamas (@h.tamas)

Content

Do you only get flow errors if you change the values?
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {}
}
</details>

message-1408959567743942708

2025-08-23T23:42:18.153+00:00 — Tholin (@tholin)

Reply/reference

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

Content

Yep. It goes "Unable to fill gap completely in row IO_NORTH".
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/1-B2132.png",
        "color": null,
        "discriminator": "0000",
        "id": "543162393413287956",
        "isBot": false,
        "name": "h.tamas",
        "nickname": "htamas",
        "roles": []
      }
    ]
  }
}
</details>

message-1409040299665133631

2025-08-24T05:03:06.143+00:00 — htamas (@h.tamas)

Reply/reference

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

Content

The space between two pads has to be completely filled with filler cells. In my case it was 25 microns so it was enough to use "fill10" and "fill5". If the free space between your pins is not divisible by 5 microns you might have to add "fill1" as well (1 micron wide) and possibly "fillnc" (0.1 micron wide).
<details> <summary>Other message metadata</summary>
{
  "author": {
    "avatarUrl": "2025-08_media/1-B2132.png",
    "discriminator": "0000",
    "isBot": false
  },
  "message": {
    "mentions": [
      {
        "avatarUrl": "2025-08_media/edae5aadf146133e0448bfb1f0fa91c4-62B19.png",
        "color": null,
        "discriminator": "0000",
        "id": "220639106915368960",
        "isBot": false,
        "name": "tholin",
        "nickname": "Tholin",
        "roles": []
      }
    ]
  }
}
</details>