@@ -46,6 +46,9 @@ LARGE_FILES_GZ_SPLIT += $(addsuffix .00.split, $(ARCHIVES))
46
46
MCW_ROOT? =$(PWD ) /mgmt_core_wrapper
47
47
MCW ?=LITEX_VEXRISCV
48
48
49
+ # PDK switch varient
50
+ export PDK_VARIENT? =sky130B
51
+
49
52
# Install lite version of caravel, (1): caravel-lite, (0): caravel
50
53
MCW_LITE? =1
51
54
@@ -125,7 +128,7 @@ __ship:
125
128
exit;" > $(UPRJ_ROOT)/mag/mag2gds_caravel.tcl
126
129
# ## Runs from CARAVEL_ROOT
127
130
@mkdir -p ./signoff/build
128
- @cd $(CARAVEL_ROOT)/mag && PDKPATH=${PDK_ROOT}/sky130A magic -noc -dnull $(UPRJ_ROOT)/mag/mag2gds_caravel.tcl 2>&1 | tee $(UPRJ_ROOT)/signoff/build/make_ship.out
131
+ @cd $(CARAVEL_ROOT)/mag && PDKPATH=${PDK_ROOT}/$(PDK_VARIENT) magic -noc -dnull $(UPRJ_ROOT)/mag/mag2gds_caravel.tcl 2>&1 | tee $(UPRJ_ROOT)/signoff/build/make_ship.out
129
132
# ## @rm $(UPRJ_ROOT)/mag/mag2gds_caravel.tcl
130
133
131
134
truck : check-env uncompress uncompress-caravel
@@ -168,7 +171,7 @@ __truck:
168
171
exit;" > $(UPRJ_ROOT)/mag/mag2gds_caravan.tcl
169
172
# ## Runs from CARAVEL_ROOT
170
173
@mkdir -p ./signoff/build
171
- @cd $(CARAVEL_ROOT)/mag && PDKPATH=${PDK_ROOT}/sky130A magic -noc -dnull $(UPRJ_ROOT)/mag/mag2gds_caravan.tcl 2>&1 | tee $(UPRJ_ROOT)/signoff/build/make_truck.out
174
+ @cd $(CARAVEL_ROOT)/mag && PDKPATH=${PDK_ROOT}/$(PDK_VARIENT) magic -noc -dnull $(UPRJ_ROOT)/mag/mag2gds_caravan.tcl 2>&1 | tee $(UPRJ_ROOT)/signoff/build/make_truck.out
172
175
# ## @rm $(UPRJ_ROOT)/mag/mag2gds_caravan.tcl
173
176
174
177
.PHONY : clean
@@ -256,7 +259,7 @@ xor-wrapper: uncompress uncompress-caravel
256
259
-o signoff/user_project_wrapper_xor/total.txt
257
260
# ## screenshot the result for convenience
258
261
sh $(CARAVEL_ROOT)/utils/scrotLayout.sh \
259
- $(PDK_ROOT)/sky130A /libs.tech/klayout/sky130A .lyt \
262
+ $(PDK_ROOT)/$(PDK_VARIENT) /libs.tech/klayout/$(PDK_VARIENT) .lyt \
260
263
signoff/user_project_wrapper_xor/user_project_wrapper.xor.gds
261
264
@cat signoff/user_project_wrapper_xor/total.txt
262
265
@@ -282,7 +285,7 @@ xor-analog-wrapper: uncompress uncompress-caravel
282
285
-o signoff/user_analog_project_wrapper_xor/total.txt
283
286
# ## screenshot the result for convenience
284
287
sh $(CARAVEL_ROOT)/utils/scrotLayout.sh \
285
- $(PDK_ROOT)/sky130A /libs.tech/klayout/sky130A .lyt \
288
+ $(PDK_ROOT)/$(PDK_VARIENT) /libs.tech/klayout/$(PDK_VARIENT) .lyt \
286
289
signoff/user_analog_project_wrapper_xor/user_analog_project_wrapper.xor.gds
287
290
@cat signoff/user_analog_project_wrapper_xor/total.txt
288
291
@@ -313,7 +316,7 @@ $(LVS_BLOCKS): lvs-% : ./mag/%.mag ./verilog/gl/%.v
313
316
exit ; " > ./mag/extract_$* .tcl
314
317
cd mag && \
315
318
export MAGTYPE=maglef; \
316
- magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull extract_$* .tcl < /dev/null
319
+ magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull extract_$* .tcl < /dev/null
317
320
mv ./mag/$* .spice ./spi/lvs
318
321
rm ./mag/* .ext
319
322
mv -f ./mag/extract_$* .tcl ./mag/tmp
@@ -350,7 +353,7 @@ $(LVS_GDS_BLOCKS): lvs-gds-% : ./gds/%.gds ./verilog/gl/%.v
350
353
feedback save extract_$* .log; \
351
354
exit ; " > ./gds/extract_$* .tcl
352
355
cd gds && \
353
- magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull extract_$* .tcl < /dev/null
356
+ magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull extract_$* .tcl < /dev/null
354
357
mv ./gds/$* .spice ./spi/lvs
355
358
rm ./gds/* .ext
356
359
mv -f ./gds/extract_$* .tcl ./gds/tmp
@@ -413,7 +416,7 @@ DRC_BLOCKS = $(foreach block, $(BLOCKS), drc-$(block))
413
416
$(DRC_BLOCKS ) : drc-% : ./gds/% .gds
414
417
echo " Running DRC on $* "
415
418
mkdir -p ./gds/tmp
416
- cd gds && export DESIGN_IN_DRC=$* && export MAGTYPE=mag; magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull $(CARAVEL_ROOT ) /gds/drc_on_gds.tcl < /dev/null
419
+ cd gds && export DESIGN_IN_DRC=$* && export MAGTYPE=mag; magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull $(CARAVEL_ROOT ) /gds/drc_on_gds.tcl < /dev/null
417
420
@echo " DRC result: ./gds/tmp/$* .drc"
418
421
419
422
# Antenna
@@ -422,7 +425,7 @@ ANTENNA_BLOCKS = $(foreach block, $(BLOCKS), antenna-$(block))
422
425
$(ANTENNA_BLOCKS ) : antenna-% : ./gds/% .gds
423
426
echo " Running Antenna Checks on $* "
424
427
mkdir -p ./gds/tmp
425
- cd gds && export DESIGN_IN_ANTENNA=$* && export MAGTYPE=mag; magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull $(CARAVEL_ROOT ) /gds/antenna_on_gds.tcl < /dev/null 2>&1 | tee ./tmp/$* .antenna
428
+ cd gds && export DESIGN_IN_ANTENNA=$* && export MAGTYPE=mag; magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull $(CARAVEL_ROOT ) /gds/antenna_on_gds.tcl < /dev/null 2>&1 | tee ./tmp/$* .antenna
426
429
mv -f ./gds/* .ext ./gds/tmp/
427
430
@echo " Antenna result: ./gds/tmp/$* .antenna"
428
431
@@ -441,7 +444,7 @@ $(MAG_BLOCKS): mag2gds-% : ./mag/%.mag uncompress
441
444
expand; \
442
445
gds write $* .gds; \
443
446
exit ; " > ./mag/mag2gds_$* .tcl
444
- cd ./mag && magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull mag2gds_$* .tcl < /dev/null
447
+ cd ./mag && magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull mag2gds_$* .tcl < /dev/null
445
448
rm ./mag/mag2gds_$* .tcl
446
449
mv -f ./mag/$* .gds ./gds/
447
450
@@ -457,7 +460,7 @@ $(MAG_BLOCKS): mag2lef-% : ./mag/%.mag uncompress
457
460
load $* ; \
458
461
lef write $* .lef; \
459
462
exit ; " > ./mag/mag2lef_$* .tcl
460
- cd ./mag && magic -rcfile ${PDK_ROOT} /sky130A /libs.tech/magic/sky130A .magicrc -noc -dnull mag2lef_$* .tcl < /dev/null
463
+ cd ./mag && magic -rcfile ${PDK_ROOT} /$( PDK_VARIENT ) /libs.tech/magic/$( PDK_VARIENT ) .magicrc -noc -dnull mag2lef_$* .tcl < /dev/null
461
464
rm ./mag/mag2lef_$* .tcl
462
465
mv -f ./mag/$* .lef ./lef/
463
466
@@ -473,12 +476,12 @@ $(RCX_BLOCKS): rcx-% : ./def/%.def
473
476
echo " Running RC Extraction on $* "
474
477
mkdir -p ./def/tmp
475
478
# merge techlef and standard cell lef files
476
- python3 $(OPENLANE_ROOT ) /scripts/mergeLef.py -i $(PDK_ROOT ) /sky130A /libs.ref/$(STD_CELL_LIBRARY ) /techlef/$(STD_CELL_LIBRARY ) .tlef $(PDK_ROOT ) /sky130A /libs.ref/$(STD_CELL_LIBRARY ) /lef/* .lef -o ./def/tmp/merged.lef
479
+ python3 $(OPENLANE_ROOT ) /scripts/mergeLef.py -i $(PDK_ROOT ) /$( PDK_VARIENT ) /libs.ref/$(STD_CELL_LIBRARY ) /techlef/$(STD_CELL_LIBRARY ) .tlef $(PDK_ROOT ) /$( PDK_VARIENT ) /libs.ref/$(STD_CELL_LIBRARY ) /lef/* .lef -o ./def/tmp/merged.lef
477
480
echo " \
478
- read_liberty $(PDK_ROOT ) /sky130A /libs.ref/$(STD_CELL_LIBRARY ) /lib/$(STD_CELL_LIBRARY ) __tt_025C_1v80.lib; \
479
- read_liberty $(PDK_ROOT ) /sky130A /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib; \
481
+ read_liberty $(PDK_ROOT ) /$( PDK_VARIENT ) /libs.ref/$(STD_CELL_LIBRARY ) /lib/$(STD_CELL_LIBRARY ) __tt_025C_1v80.lib; \
482
+ read_liberty $(PDK_ROOT ) /$( PDK_VARIENT ) /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib; \
480
483
set std_cell_lef ./def/tmp/merged.lef; \
481
- set sram_lef $(PDK_ROOT ) /sky130A /libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef; \
484
+ set sram_lef $(PDK_ROOT ) /$( PDK_VARIENT ) /libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef; \
482
485
if {[catch {read_lef \$ $std_cell_lef } errmsg]} {\
483
486
puts stderr \$$errmsg;\
484
487
exit 1;\
@@ -517,15 +520,15 @@ $(RCX_BLOCKS): rcx-% : ./def/%.def
517
520
set_wire_rc -signal -layer met2;\
518
521
set_wire_rc -clock -layer met5;\
519
522
define_process_corner -ext_model_index 0 X;\
520
- extract_parasitics -ext_model_file ${PDK_ROOT}/sky130A /libs.tech/openlane/rcx_rules.info -corner_cnt 1 -max_res 50 -coupling_threshold 0.1 -cc_model 10 -context_depth 5;\
523
+ extract_parasitics -ext_model_file ${PDK_ROOT}/$(PDK_VARIENT) /libs.tech/openlane/rcx_rules.info -corner_cnt 1 -max_res 50 -coupling_threshold 0.1 -cc_model 10 -context_depth 5;\
521
524
write_spef ./spef/$*.spef" > ./def/tmp/rcx_$*.tcl
522
525
# # Generate Spef file
523
526
docker run -it -v $(OPENLANE_ROOT):/openlane -v $(PDK_ROOT):$(PDK_ROOT) -v $(PWD):/caravel -e PDK_ROOT=$(PDK_ROOT) -u $(shell id -u $(USER)):$(shell id -g $(USER)) $(OPENLANE_IMAGE_NAME) \
524
527
sh -c " cd /caravel; openroad -exit ./def/tmp/rcx_$*.tcl |& tee ./def/tmp/rcx_$*.log"
525
528
# # Run OpenSTA
526
529
echo "\
527
530
set std_cell_lef ./def/tmp/merged.lef;\
528
- set sram_lef $(PDK_ROOT)/sky130A /libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef;\
531
+ set sram_lef $(PDK_ROOT)/$(PDK_VARIENT) /libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef;\
529
532
if {[catch {read_lef \$$std_cell_lef} errmsg]} {\
530
533
puts stderr \$$errmsg;\
531
534
exit 1;\
@@ -541,8 +544,8 @@ $(RCX_BLOCKS): rcx-% : ./def/%.def
541
544
}\
542
545
};\
543
546
set_cmd_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm -distance um;\
544
- read_liberty $(PDK_ROOT)/sky130A /libs.ref/$(STD_CELL_LIBRARY)/lib/$(STD_CELL_LIBRARY)__tt_025C_1v80.lib;\
545
- read_liberty $(PDK_ROOT)/sky130A /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib;\
547
+ read_liberty $(PDK_ROOT)/$(PDK_VARIENT) /libs.ref/$(STD_CELL_LIBRARY)/lib/$(STD_CELL_LIBRARY)__tt_025C_1v80.lib;\
548
+ read_liberty $(PDK_ROOT)/$(PDK_VARIENT) /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib;\
546
549
read_verilog ./verilog/gl/$*.v;\
547
550
link_design $*;\
548
551
read_spef ./spef/$*.spef;\
@@ -560,8 +563,8 @@ mgmt_core_wrapper_timing: ./verilog/gl/mgmt_core_wrapper.v ./spef/mgmt_core_wrap
560
563
mkdir -p ./def/tmp
561
564
# # Run OpenSTA
562
565
echo "\
563
- read_liberty $(PDK_ROOT)/sky130A /libs.ref/$(STD_CELL_LIBRARY)/lib/$(STD_CELL_LIBRARY)__ss_100C_1v60.lib;\
564
- read_liberty $(PDK_ROOT)/sky130A /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib;\
566
+ read_liberty $(PDK_ROOT)/$(PDK_VARIENT) /libs.ref/$(STD_CELL_LIBRARY)/lib/$(STD_CELL_LIBRARY)__ss_100C_1v60.lib;\
567
+ read_liberty $(PDK_ROOT)/$(PDK_VARIENT) /libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib;\
565
568
read_verilog ./verilog/gl/mgmt_core.v;\
566
569
read_verilog ./verilog/gl/DFFRAM.v;\
567
570
read_verilog ./verilog/gl/mgmt_core_wrapper.v;\
@@ -664,12 +667,12 @@ skywater-library: check-env $(PDK_ROOT)/skywater-pdk
664
667
git submodule update --init libraries/$(SPECIAL_VOLTAGE_LIBRARY ) /latest && \
665
668
git submodule update --init libraries/$(PRIMITIVES_LIBRARY ) /latest
666
669
667
- gen-sources : $(PDK_ROOT ) /sky130A
668
- touch $(PDK_ROOT ) /sky130A /SOURCES
669
- echo -ne " skywater-pdk " >> $(PDK_ROOT ) /sky130A /SOURCES
670
- cd $(PDK_ROOT ) /skywater-pdk && git rev-parse HEAD >> $(PDK_ROOT ) /sky130A /SOURCES
671
- echo -ne " open_pdks " >> $(PDK_ROOT ) /sky130A /SOURCES
672
- cd $(PDK_ROOT ) /open_pdks && git rev-parse HEAD >> $(PDK_ROOT ) /sky130A /SOURCES
670
+ gen-sources : $(PDK_ROOT ) /$( PDK_VARIENT )
671
+ touch $(PDK_ROOT ) /$( PDK_VARIENT ) /SOURCES
672
+ echo -ne " skywater-pdk " >> $(PDK_ROOT ) /$( PDK_VARIENT ) /SOURCES
673
+ cd $(PDK_ROOT ) /skywater-pdk && git rev-parse HEAD >> $(PDK_ROOT ) /$( PDK_VARIENT ) /SOURCES
674
+ echo -ne " open_pdks " >> $(PDK_ROOT ) /$( PDK_VARIENT ) /SOURCES
675
+ cd $(PDK_ROOT ) /open_pdks && git rev-parse HEAD >> $(PDK_ROOT ) /$( PDK_VARIENT ) /SOURCES
673
676
674
677
skywater-timing : check-env $(PDK_ROOT ) /skywater-pdk
675
678
cd $(PDK_ROOT ) /skywater-pdk && \
@@ -686,10 +689,10 @@ open_pdks: check-env $(PDK_ROOT)/open_pdks
686
689
687
690
.PHONY : build-pdk
688
691
build-pdk : check-env $(PDK_ROOT ) /open_pdks $(PDK_ROOT ) /skywater-pdk
689
- [ -d $( PDK_ROOT) /sky130A ] && \
690
- (echo " Warning: A sky130A build already exists under $( PDK_ROOT) . It will be deleted first!" && \
692
+ [ -d $( PDK_ROOT) /$( PDK_VARIENT ) ] && \
693
+ (echo " Warning: A $( PDK_VARIENT ) build already exists under $( PDK_ROOT) . It will be deleted first!" && \
691
694
sleep 5 && \
692
- rm -rf $(PDK_ROOT ) /sky130A ) || \
695
+ rm -rf $(PDK_ROOT ) /$( PDK_VARIENT ) ) || \
693
696
true
694
697
cd $(PDK_ROOT ) /open_pdks && \
695
698
./configure --enable-sky130-pdk=$(PDK_ROOT ) /skywater-pdk/libraries --with-sky130-local-path=$(PDK_ROOT ) --enable-sram-sky130=$(INSTALL_SRAM ) && \
0 commit comments