Skip to content

Commit 5cac6c1

Browse files
feat: add luna 1
1 parent 2d334fa commit 5cac6c1

2 files changed

Lines changed: 100 additions & 44 deletions

File tree

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,29 @@ foundry via open PDKs and shuttle services like
2020

2121
## Devices
2222

23+
### Aegis Luna 1
24+
25+
A compact Aegis device targeting GF180MCU via [wafer.space](https://wafer.space)
26+
(1x1 Full slot, 3.93 x 5.12mm die).
27+
28+
| Resource | Count |
29+
|-------------------|---------------|
30+
| LUT4 | ~560 |
31+
| BRAM (128x8) | 33 tiles |
32+
| DSP18 (18x18 MAC) | 33 tiles |
33+
| I/O pads | 104 |
34+
| SerDes | 1 |
35+
| Clock tiles | 1 (4 outputs) |
36+
| Routing tracks | 1 per edge |
37+
38+
```bash
39+
nix build .#luna-1 # Generate IP (SV, JSON, chipdb, techmap)
40+
nix build .#luna-1-tapeout # Full RTL-to-GDS for fab submission
41+
```
42+
2343
### Aegis Terra 1
2444

25-
The first Aegis device, targeting GF180MCU via [wafer.space](https://wafer.space).
45+
A larger Aegis device targeting Sky130.
2646

2747
| Resource | Count |
2848
|-------------------|---------------|

flake.nix

Lines changed: 79 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -94,58 +94,94 @@
9494
clockTileCount = 2;
9595
};
9696
terra-1-tapeout = self.packages.${system}.terra-1.mkTapeout {
97+
pdk = pkgs.sky130-pdk;
98+
clockPeriodNs = 20;
99+
};
100+
luna-1 = pkgs.aegis-ip-tools.mkIp {
101+
deviceName = "luna_1";
102+
width = 19;
103+
height = 33;
104+
tracks = 1;
105+
serdesCount = 1;
106+
bramColumnInterval = 9;
107+
dspColumnInterval = 10;
108+
clockTileCount = 1;
109+
};
110+
luna-1-tapeout = self.packages.${system}.luna-1.mkTapeout {
97111
pdk = pkgs.gf180mcu-pdk;
98112
clockPeriodNs = 20;
113+
dieWidthUm = 3930;
114+
dieHeightUm = 5120;
115+
coreUtilization = 0.9;
99116
};
100117
};
101118

102119
checks =
103120
let
104-
terra-1 = self.packages.${system}.terra-1;
121+
devices = [
122+
"terra-1"
123+
"luna-1"
124+
];
125+
mkDeviceChecks =
126+
name:
127+
let
128+
ip = self.packages.${system}.${name};
129+
tapeout = self.packages.${system}."${name}-tapeout";
130+
in
131+
{
132+
"${name}-blinky" = pkgs.callPackage ./examples/blinky {
133+
aegis-ip = ip;
134+
};
135+
"${name}-blinky-sim" = pkgs.callPackage ./tests/blinky-sim {
136+
aegis-ip = ip;
137+
};
138+
"${name}-counter" = pkgs.callPackage ./tests/counter-verify {
139+
aegis-ip = ip;
140+
};
141+
"${name}-shift-register" = pkgs.callPackage ./tests/shift-register {
142+
aegis-ip = ip;
143+
};
144+
"${name}-logic-gates" = pkgs.callPackage ./tests/logic-gates {
145+
aegis-ip = ip;
146+
};
147+
"${name}-tile-bits" = pkgs.callPackage ./tests/tile-bits-consistency {
148+
aegis-ip = ip;
149+
};
150+
"${name}-synth-equiv-comb" = pkgs.callPackage ./tests/synth-equiv {
151+
aegis-ip = ip;
152+
design = "comb";
153+
};
154+
"${name}-synth-equiv-counter" = pkgs.callPackage ./tests/synth-equiv {
155+
aegis-ip = ip;
156+
design = "counter";
157+
};
158+
"${name}-formal-ip" = pkgs.callPackage ./tests/formal-ip {
159+
aegis-ip = ip;
160+
};
161+
"${name}-gds-verify" = pkgs.callPackage ./tests/gds-verify {
162+
aegis-tapeout = tapeout;
163+
};
164+
};
105165
in
106-
{
107-
terra-1-blinky = pkgs.callPackage ./examples/blinky {
108-
aegis-ip = terra-1;
109-
};
110-
terra-1-blinky-sim = pkgs.callPackage ./tests/blinky-sim {
111-
aegis-ip = terra-1;
112-
};
113-
terra-1-counter = pkgs.callPackage ./tests/counter-verify {
114-
aegis-ip = terra-1;
115-
};
116-
terra-1-shift-register = pkgs.callPackage ./tests/shift-register {
117-
aegis-ip = terra-1;
118-
};
119-
terra-1-logic-gates = pkgs.callPackage ./tests/logic-gates {
120-
aegis-ip = terra-1;
121-
};
122-
# Formal verification checks
123-
terra-1-tile-bits = pkgs.callPackage ./tests/tile-bits-consistency {
124-
aegis-ip = terra-1;
125-
};
126-
terra-1-synth-equiv-comb = pkgs.callPackage ./tests/synth-equiv {
127-
aegis-ip = terra-1;
128-
design = "comb";
129-
};
130-
terra-1-synth-equiv-counter = pkgs.callPackage ./tests/synth-equiv {
131-
aegis-ip = terra-1;
132-
design = "counter";
133-
};
134-
terra-1-formal-ip = pkgs.callPackage ./tests/formal-ip {
135-
aegis-ip = terra-1;
136-
};
137-
terra-1-gds-verify = pkgs.callPackage ./tests/gds-verify {
138-
aegis-tapeout = self.packages.${system}.terra-1-tapeout;
139-
};
140-
};
166+
lib.foldl' (acc: name: acc // mkDeviceChecks name) { } devices;
141167

142-
devShells = {
143-
default = pkgs.aegis-ip-tools.shell;
144-
ip-tools = pkgs.aegis-ip-tools.shell;
145-
terra-1 = self.packages.${system}.terra-1.shell;
146-
terra-1-tapeout = self.packages.${system}.terra-1-tapeout.shell;
147-
terra-1-blinky = self.checks.${system}.terra-1-blinky.shell;
148-
};
168+
devShells =
169+
let
170+
devices = [
171+
"terra-1"
172+
"luna-1"
173+
];
174+
mkDeviceShells = name: {
175+
"${name}" = self.packages.${system}.${name}.shell;
176+
"${name}-tapeout" = self.packages.${system}."${name}-tapeout".shell;
177+
"${name}-blinky" = self.checks.${system}."${name}-blinky".shell;
178+
};
179+
in
180+
{
181+
default = pkgs.aegis-ip-tools.shell;
182+
ip-tools = pkgs.aegis-ip-tools.shell;
183+
}
184+
// lib.foldl' (acc: name: acc // mkDeviceShells name) { } devices;
149185
};
150186
};
151187
}

0 commit comments

Comments
 (0)