Skip to content

Commit 2c62ee0

Browse files
authored
examples: Improve mesh sizing for DemoQPU17 (#74)
1 parent 5bfa88d commit 2c62ee0

File tree

9 files changed

+33
-18
lines changed

9 files changed

+33
-18
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ Manifest.toml
1010
.vscode/
1111
.DS_Store
1212
.gitlab-ci-local
13-
coverage/
13+
coverage/
14+
*.xao
15+
*.msh2

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The format of this changelog is based on
88

99
- `SolidModels.check_overlap` now skips empty groups
1010
- Built-in components `Spacer`, `ArrowAnnotation`, and `WeatherVane` now default to coordinate type `typeof(1.0UPREFERRED)` if no coordinate type is specified in the constructor
11+
- Improvements to ExamplePDK/DemoQPU17 component mesh sizing
1112
- Minor documentation improvements
1213

1314
## 1.4.0 (2025-07-01)

docs/src/examples/qpu17.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ LINE_SPECIFICATIONS = [# Manual port assignment, we'll just list them out
380380
("Z", (3, 5), [Point(5000, -1800)]μm),
381381
("XY", (3, 4), [Point(4600, -2300)]μm),
382382
("Z", (3, 4), [Point(4600, -3000)]μm),
383-
("XY", (4, 4), [Point(4200, -3000)]μm),
383+
("XY", (4, 4), [Point(3300, -2100)]μm),
384384
# SE corner
385385
("Z", (4, 4), [Point(4100, -4200)]μm),
386386
("XY", (5, 4), [Point(4100, -4600)]μm),
@@ -704,7 +704,7 @@ Many quantum devices fill the ground plane with small holes to reduce loss assoc
704704
```julia
705705
#### Autofill with ground plane holes
706706
hole_cs = CoordinateSystem("gnd_hole") # Coordinate system for a single hole
707-
place!(hole_cs, Circle(GROUND_HOLE_RADIUS), METAL_NEGATIVE)
707+
place!(hole_cs, not_simulated(Circle(GROUND_HOLE_RADIUS)), METAL_NEGATIVE)
708708
bnds = bounds(schematic, find_components(ExampleChip, schematic)...) # bounds of the chip node
709709
exclusion = make_halo(50μm; ignore_layers=[CHIP_AREA]) # function to create exclusion area
710710
x_grid = (lowerleft(bnds).x + 600μm):GROUND_HOLE_SPACING:(upperright(bnds).x - 600μm) # raster x-coordinates

examples/DemoQPU17/DemoQPU17.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ function qpu17_demo(; savegds=true, dir=pwd())
152152

153153
#### Autofill with ground plane holes
154154
hole_cs = CoordinateSystem("gnd_hole") # Coordinate system for a single hole
155-
place!(hole_cs, Circle(GROUND_HOLE_RADIUS), METAL_NEGATIVE)
155+
place!(hole_cs, not_simulated(Circle(GROUND_HOLE_RADIUS)), METAL_NEGATIVE)
156156
bnds = bounds(schematic, find_components(ExampleChip, schematic)...) # bounds of the chip node
157157
exclusion = make_halo(50μm; ignore_layers=[CHIP_AREA]) # function to create exclusion area
158158
x_grid = (lowerleft(bnds).x + 600μm):GROUND_HOLE_SPACING:(upperright(bnds).x - 600μm) # raster x-coordinates

examples/DemoQPU17/Project.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[deps]
2+
DeviceLayout = "ebf59a4a-04ec-49d7-8cd4-c9382ceb8e85"
3+
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
4+
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
5+
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

examples/DemoQPU17/params.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ function qpu_params()
149149
("Z", (3, 5), [Point(5000, -1800)]μm),
150150
("XY", (3, 4), [Point(4600, -2300)]μm),
151151
("Z", (3, 4), [Point(4600, -3000)]μm),
152-
("XY", (4, 4), [Point(4200, -3000)]μm),
152+
("XY", (4, 4), [Point(3300, -2100)]μm),
153153
# SE corner
154154
("Z", (4, 4), [Point(4100, -4200)]μm),
155155
("XY", (5, 4), [Point(4100, -4600)]μm),

src/schematics/ExamplePDK/components/ChipTemplates/ChipTemplates.jl

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ A `Component` with rectangular geometry in the CHIP_AREA layer and uniformly spa
5252
end
5353

5454
function SchematicDrivenLayout._geometry!(cs::CoordinateSystem, c::ExampleChip)
55-
return place!(
56-
cs,
57-
OptionalStyle(DeviceLayout.NoRender(), DeviceLayout.Plain(), :artwork, false)(
58-
centered(Rectangle(c.length_x, c.length_y))
59-
),
60-
CHIP_AREA
61-
)
55+
chip_rect = centered(Rectangle(c.length_x, c.length_y))
56+
# only_simulated would make these invisible to `bounds`, which we don't want
57+
# so these render by default and ignore for artwork
58+
not_artwork =
59+
OptionalStyle(DeviceLayout.NoRender(), DeviceLayout.Plain(), :artwork, false)
60+
place!(cs, not_artwork(chip_rect), CHIP_AREA)
61+
return place!(cs, not_artwork(chip_rect), WRITEABLE_AREA)
6262
end
6363

6464
function SchematicDrivenLayout.hooks(c::ExampleChip)
@@ -89,10 +89,11 @@ end
8989
"""
9090
example_launcher(port_spec)
9191
92-
Create a coplanar-waveguide "launcher" in `METAL_NEGATIVE` created using `launch!` with its defaults.
92+
Create a coplanar-waveguide "launcher" in `METAL_NEGATIVE` created using `launch!`.
9393
9494
Returns a `Path` named `"launcher_\$role_\$target"`, where `role` and `target` are the first two
95-
elements of `port_spec`. Hooks are given by [`hooks(::Path)`](@ref).
95+
elements of `port_spec`. Hooks are given by [`hooks(::Path)`](@ref). Uses default parameters
96+
for `launch!` with rounding turned off.
9697
9798
This method exists for use in demonstrations. The launcher design is not optimized
9899
for microwave properties.
@@ -101,7 +102,11 @@ function example_launcher(port_spec)
101102
isnothing(port_spec) && return nothing
102103
path =
103104
Path(nm; name="launcher_$(port_spec[1])_$(port_spec[2])", metadata=METAL_NEGATIVE)
104-
launch!(path)
105+
launch!(path, extround=0μm)
106+
port_cs = CoordinateSystem(uniquename("launcherport"))
107+
gap0 = path[1].sty.gap # Launcher pad gap
108+
render!(port_cs, only_simulated(centered(Rectangle(gap0, gap0))), PORT)
109+
attach!(path, sref(port_cs), path[1].sty.gap / 2, i=1)
105110
return path
106111
end
107112
###

src/schematics/ExamplePDK/components/ClawCapacitors/ClawCapacitors.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ function SchematicDrivenLayout._geometry!(
8787
path = _path(cc)
8888
place!(cs, path)
8989
claw_cutout = RotationPi(1 // 2)(_series_claw(cc))
90-
place!(cs, Align.rightof(claw_cutout, path, centered=true), METAL_NEGATIVE)
90+
ms = MeshSized(critical_dimension(cc))
91+
place!(cs, ms(Align.rightof(claw_cutout, path, centered=true)), METAL_NEGATIVE)
9192

9293
return cs
9394
end
@@ -261,7 +262,8 @@ function SchematicDrivenLayout._geometry!(
261262
# Align claw below tap before attaching bridge, which may extend below tap
262263
claw_cutout = Align.below(claw_cutout, tap; centered=true)
263264
!isnothing(cc.bridge) && attach!(tap, sref(cc.bridge), pathlength(tap[end]) / 2)
264-
place!(cs, claw_cutout, METAL_NEGATIVE)
265+
ms = MeshSized(critical_dimension(cc))
266+
place!(cs, ms(claw_cutout), METAL_NEGATIVE)
265267

266268
return cs
267269
end

src/schematics/technologies.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ function level_z(l::Integer; t_chips=[525μm, 525μm], t_gaps=[5μm])
102102
# Add up stacks above 1, subtract stacks below 1
103103
z_chip =
104104
sum(t_chips[(2):chip_idx]) + sum(t_gaps[1:(chip_idx - 1)]) -
105-
(sum(t_chips[(chip_idx + 1):1]) + sum(t_gaps[chip_idx:-1]))
105+
(sum(t_chips[(chip_idx + 1):1]) + sum(t_gaps[chip_idx:0]))
106106
if iseven(l)
107107
return z_chip - t_chips[chip_idx] # even is bottom of substrate
108108
end

0 commit comments

Comments
 (0)