You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`32'h2000_0000`|`32'h8000_0000`| Passthrough to user domain |
67
+
|`32'h2000_0000`|`32'h2000_1000`| reserved for user ROM text\*|
68
+
69
+
\*If people modify Croc we suggest they add a ROM at this address containing additional information
70
70
like the names of the developers, a project link or similar. This can then be written out via UART.
71
71
We ask people to format the ROM like a C string with zero termination and using ASCII encoding if feasible.
72
72
The [MLEM user ROM](https://github.com/pulp-platform/croc/blob/mlem-tapeout/rtl/user_domain/user_rom.sv) may serve as one possible reference implementation.
@@ -98,18 +98,18 @@ The current supported version is 2025.12, no other version is officially support
98
98
99
99
### ETHZ systems
100
100
101
-
ETHZ Design Center maintains an internal version of the IHP PDK, with integrations into all tools we have access to. For this reason if you work on the ETH systems it is recommended to use the `icdesign` tool (cockpit) instead of the linked GitHub PDK repositories.
101
+
ETHZ Design Center maintains an internal version of the IHP PDK, with integrations into all tools we have access to. For this reason if you work on the ETH systems, it is recommended to use the `icdesign` tool (cockpit) instead of the linked GitHub PDK repositories.
102
102
You can directly create a cockpit `technology/` directory inside the Croc repository:
103
103
104
104
```sh
105
105
# Make sure you are in <somedir>/croc
106
106
# the checked-out repository
107
-
icdesign ihp13 -nogui
107
+
icdesign ihp13 -update all -nogui
108
108
```
109
109
110
110
The setup is guided by the `.cockpitrc` configuration file. If you need different macros or another version of the standard cells you can change it accordingly.
111
111
112
-
You may prefer to just enter a shell in the pre-installed osic-tools container using:
112
+
You may want to start a shell in the pre-installed osic-tools container using:
113
113
114
114
```sh
115
115
oseda bash
@@ -124,7 +124,7 @@ oseda bash
124
124
125
125
There are two possible ways, the easiest way is to install docker and work in the docker container, you can follow the install guides on the [Docker Website](https://docs.docker.com/desktop/).
126
126
You do not need to manually download the container image, this will be done when running the script.
127
-
If you do not have `git` installed on your system, you also need to install [Github Desktop](https://desktop.github.com/download/) and then clone this git repository.
127
+
If you do not have `git` installed on your system, you also need to install [Github Desktop](https://desktop.github.com/download/) and then clone this git repository.
128
128
129
129
It is a good idea to grant non-root (`sudo`) users access to docker, this is decribed in the [Docker Article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).
130
130
@@ -140,8 +140,7 @@ scripts/start_vnc.bat
140
140
```
141
141
142
142
If you use the VNC option, open a browser and type `localhost` in the address bar.
143
-
This should connect you to the VNC server, the password is `abc123`, then test by right-clicking somewhere, starting the terminal and typing `ls`.
144
-
You should see the files in this repository again.
143
+
This should connect you to the VNC server, the password is `abc123`, then test by right-clicking somewhere, starting the terminal and typing `ls`. You should see the files in this repository again.
145
144
146
145
Now you should be in an Ubuntu environment with all tools pre-installed for you.
147
146
If something does not work, refer to the upstream [IIC-OSIC-Tools](https://github.com/iic-jku/IIC-OSIC-TOOLS/tree/main).
@@ -161,52 +160,47 @@ You need to build/install the required tools manually:
161
160
162
161
### PDK versions and sources
163
162
164
-
The ASIC flow supports two IHP PDK selections through `CROC_PDK`:
163
+
The ASIC flow supports two IHP PDKs selected via the `CROC_PDK` environmental variable:
165
164
166
165
-`sg13cmos5l`: the default 5-metal CMOS5L option.
167
-
-`sg13g2`: the original SG13G2 stack.
166
+
-`sg13g2`: the original SG13G2 7-metal option.
168
167
169
-
`CROC_PDK` is the only PDK setting users select. There is one active view for
170
-
the digital collateral used by synthesis, place and route, simulation, and
171
-
DEF-to-GDS conversion:
168
+
`CROC_PDK` is the only PDK setting users select. There is one active view used by synthesis, place and route, simulation, and DEF-to-GDS conversion:
172
169
173
-
-`technology/`: Liberty, LEF, Verilog models, and GDS files for the selected
174
-
stack.
170
+
-`technology/`: Liberty, LEF, Verilog models, and GDS files for the selected PDK.
175
171
176
-
On ETH systems, `technology/` is normally created by the ETHZ Design Center
177
-
cockpit and takes priority. Outside ETH, `env.sh` creates `technology ->
178
-
ihp13/pdk` on demand if `technology/` does not already exist. The committed
179
-
`ihp13/pdk` mirror contains the Apache-2.0 Liberty, LEF, and Verilog files
180
-
needed by the flow. The two Croc bondpad GDS files are committed in
181
-
`ihp13/pdk/gds`; IHP GDS files are kept out of git and can be downloaded with:
172
+
On ETH systems, the `technology/` directory is set up by the ETHZ Design Center cockpit and takes priority.
173
+
Outside ETH, `env.sh` creates `technology -> ihp13/pdk` symbolic link on demand if `technology/` does not already exist.
174
+
The committed `ihp13/pdk` mirror contains the Apache-2.0 Liberty, LEF, and Verilog files needed by the flow.
175
+
The two Croc bondpad GDS files are committed in `ihp13/pdk/gds`; IHP GDS files are kept out of git and can be downloaded with:
182
176
183
177
```sh
184
178
scripts/download_gds.sh
185
179
```
186
180
187
-
Maintainers update the pinned PDK mirror with `scripts/update_pdk.sh`.
188
-
`ihp13/pdk/pdk_manifest.csv` records the source and digest of every mirrored
189
-
collateral file and supports both direct GitHub files and archive-based
190
-
deliveries.
181
+
Maintainers can update the pinned PDK mirror with `scripts/update_pdk.sh`.
182
+
`ihp13/pdk/pdk_manifest.csv` records the source and digest of every mirrored PDK file and supports both direct GitHub files and archive-based deliveries.
191
183
192
-
You can also run `scripts/setup_technology.sh` manually to print the active
193
-
technology view. `env.sh` runs the same setup quietly before the ASIC scripts
194
-
use the PDK. If `technology/` already exists, setup leaves it unchanged;
195
-
Cockpit may link shared Croc-managed collateral from `ihp13/pdk`. Otherwise,
196
-
`technology/` is a symlink to the public mirror.
184
+
You can also run `scripts/setup_technology.sh` manually to print the active technology view. `env.sh` runs the same setup quietly before the ASIC scripts use the PDK.
197
185
198
-
KLayout needs technology scripts, filling rules, and layer properties in
199
-
addition to the digital collateral above. Those tool-support files remain in
200
-
the `ihp13/sg13cmos5l` and `ihp13/sg13g2` submodules. They are not another
201
-
choice of PDK data and must be initialized with the normal submodule command.
202
-
On ETH systems, the installed CMOS5L KLayout support package takes priority
203
-
when available.
186
+
KLayout needs technology scripts, filling rules, and layer properties in addition to the files mentioned above.
187
+
On ETH systems, the installed CMOS5L KLayout support package takes priority when available.
188
+
Otherwise, the appropriate submodule, either `ihp13/sg13cmos5l` or `ihp13/sg13g2`, is required for the KLayout setup.
204
189
205
-
The OSIC/oseda container also contains a PDK under `/foss/pdks`, but Croc does not use that as the source of record. It is harder to inspect from the repository, it follows the container version, and it does not contain all CMOS5L/cockpit collateral used by the ETH flow.
190
+
The OSIC/oseda container also contains a PDK under `/foss/pdks`, but Croc does not currently use it.
206
191
207
192
## Getting started
208
193
209
194
The SoC is fully functional as-is and a simple software example is provided for simulation.
195
+
196
+
On ETH systems, create or update `technology/` with cockpit first.
197
+
198
+
```sh
199
+
icdesign ihp13 -update all -nogui
200
+
```
201
+
202
+
For external machines the committed `ihp13/pdk` fallback is used automatically.
203
+
210
204
To run the synthesis and place & route flow execute:
211
205
212
206
```sh
@@ -216,7 +210,8 @@ cd ../openroad && ./run_backend.sh --all
216
210
cd ../klayout && ./run_finishing.sh --gds
217
211
```
218
212
219
-
The ASIC flow defaults to `CROC_PDK=sg13cmos5l`. To switch back to the original stack, export `CROC_PDK=sg13g2` before running the scripts. On ETH systems, create or update `technology/` with cockpit first; external users use the committed `ihp13/pdk` fallback automatically.
213
+
The ASIC flow defaults to `CROC_PDK=sg13cmos5l`.
214
+
To switch back to the original metal stack, export `CROC_PDK=sg13g2` before running the scripts.
220
215
221
216
To simulate you can use:
222
217
@@ -225,20 +220,13 @@ cd sw && make all
225
220
cd ../verilator && ./run_verilator.sh --build --run ../sw/bin/helloworld.hex
226
221
```
227
222
228
-
To simulate the post-Yosys netlist with Verilator instead, first generate the
229
-
netlist and then use the explicit netlist commands:
223
+
To simulate the post-Yosys netlist with Verilator instead, first generate the netlist and then use the explicit netlist commands:
230
224
231
225
```sh
232
226
cd yosys && ./run_synthesis.sh --synth
233
227
cd ../verilator && ./run_verilator.sh --build-netlist --run-netlist ../sw/bin/helloworld.hex
234
228
```
235
229
236
-
For a short structural check of the post-Yosys simulation, use:
237
-
238
-
```sh
239
-
cd verilator && ./run_verilator.sh --build-netlist --run-netlist-smoke
240
-
```
241
-
242
230
If you have Questasim/Modelsim, you can also run:
243
231
244
232
```sh
@@ -285,10 +273,11 @@ For this repository, we use a subcommand called `bender vendor` together with th
285
273
`bender vendor` can be used to Benderize arbitrary repositories with RTL in it. The dependencies are already 'checked out' into `rtl/<IP>`. Each file or directory from the repository is mapped to a local path in this repo.
286
274
Fixes and changes to each IPs `rtl/<IP>/Bender.yml` are managed by `bender vendor` in `rtl/patches`.
287
275
288
-
If you need to update a dependency or map another file you need to edit the coresponding `vendor_package` section in `Bender.yml` and then run `bender vendor init`. Then you might need to change `rtl/<IP>/Bender.yml` to list your new file in the sources.
276
+
If you need to update a dependency or map another file you need to edit the coresponding `vendor_package` section in `Bender.yml` and then run `bender vendor init`. Then you might need to change `rtl/<IP>/Bender.yml` to list your new file in the sources.
289
277
To save a fix/change as a patch, stage it in git and then run `bender vendor patch`. When prompted, add a commit message (this is used as the patches file name). Finally, commit both the patch file and the new `rtl/<IP>`.
290
278
291
279
**Note:** using `bender vendor` in this repository to change the local versions of the IPs requires an up-to-date version of Bender. (v0.28.2 or newer)
280
+
292
281
### Targets
293
282
294
283
Another thing we use are targets (in the `Bender.yml`), together they build different views/contexts of your RTL. For example without defining any targets the technology independent cells/memories are used (in `rtl/tech_cells_generic/`) but if we use the target `ihp13` then the same modules contain a technology-specific implementation (in `ihp13/`). Similar contexts are built for different simulators and other things.
0 commit comments