1+ load ("//:defs.bzl" , "demo_flow" , "demo_sram" )
2+ load ("//:gallery.bzl" , "demo_gallery_image" , "demo_stage_images" , "orfs_run" )
13load ("@bazel-orfs-verilog//:generate.bzl" , "fir_library" )
2- load ("@bazel-orfs//:openroad.bzl" , "orfs_synth" )
34load ("@bazel-orfs-verilog//:verilog.bzl" , "verilog_directory" )
5+ load ("@bazel-orfs//:openroad.bzl" , "orfs_synth" )
46load ("@rules_chisel//chisel:defs.bzl" , "chisel_binary" )
5- load ("//:defs.bzl" , "demo_flow" , "demo_gallery_image" , "demo_sram" , "demo_stage_images" , "orfs_run" )
67
78# Step 1: Compile the Chisel generator binary
89chisel_binary (
@@ -43,7 +44,6 @@ filegroup(
4344 "@cvfpu//:all_srcs" ,
4445 "@fpu_div_sqrt_mvp//:all_srcs" ,
4546 ],
46-
4747)
4848
4949# Step 5: Parallel per-module synthesis (megaboom pattern)
@@ -54,30 +54,37 @@ filegroup(
5454# from ~6 min to ~30s.
5555
5656KEPT_MODULES = [
57- "Regfile" , # 26,775 cells — register file (24% of design)
57+ "Regfile" , # 26,775 cells — register file (24% of design)
5858 "RetirementBuffer" , # 7,508 cells — reorder buffer
59- "fpnew_fma" , # 7,072 cells — FPU multiply-add
59+ "fpnew_fma" , # 7,072 cells — FPU multiply-add
6060 "CircularBufferMulti" , # 6,911 cells — instruction buffer
61- "Csr" , # 5,225 cells — CSR unit
62- "Mlu" , # 4,819 cells — multiply unit
63- "DispatchV2" , # 4,743 cells — dispatch
61+ "Csr" , # 5,225 cells — CSR unit
62+ "Mlu" , # 4,819 cells — multiply unit
63+ "DispatchV2" , # 4,743 cells — dispatch
6464 "fpnew_cast_multi" , # 2,605 cells — FPU cast
65- "ram_3x145" , # 2,437 cells — small RAM
66- "DebugModule" , # 2,366 cells — debug
67- "Aligner" , # 2,334 cells — memory alignment
68- "ram_3x137" , # 2,304 cells — small RAM
69- "Alu" , # 2,285 cells — ALU
70- "FetchControl" , # 2,122 cells — fetch control
65+ "ram_3x145" , # 2,437 cells — small RAM
66+ "DebugModule" , # 2,366 cells — debug
67+ "Aligner" , # 2,334 cells — memory alignment
68+ "ram_3x137" , # 2,304 cells — small RAM
69+ "Alu" , # 2,285 cells — ALU
70+ "FetchControl" , # 2,122 cells — fetch control
7171 "pa_fdsu_srt_single" , # 2,052 cells — FPU divsqrt
7272]
7373
7474# Mocked SRAMs — always blackboxed
75- MOCKED_SRAMS = ["Sram_2048x128" , "Sram_512x128" ]
75+ MOCKED_SRAMS = [
76+ "Sram_2048x128" ,
77+ "Sram_512x128" ,
78+ ]
7679
7780# Modules with SystemVerilog type parameters — slang can't blackbox these.
7881# They are still individually synthesized but must NOT appear in SYNTH_BLACKBOXES
7982# for the CoreMiniAxi top-level target.
80- TYPE_PARAM_MODULES = ["fpnew_fma" , "fpnew_cast_multi" , "Aligner" ]
83+ TYPE_PARAM_MODULES = [
84+ "fpnew_fma" ,
85+ "fpnew_cast_multi" ,
86+ "Aligner" ,
87+ ]
8188
8289# Modules safe to blackbox (no type parameters)
8390BLACKBOXABLE_MODULES = [m for m in KEPT_MODULES if m not in TYPE_PARAM_MODULES ]
@@ -102,14 +109,12 @@ ALL_SYNTH_MODULES = KEPT_MODULES + ["CoreMiniAxi"]
102109 # CoreMiniAxi can only blackbox modules without type parameters;
103110 # submodule targets blackbox all other kept modules.
104111 "SYNTH_BLACKBOXES" : " " .join (
105- ([b for b in BLACKBOXABLE_MODULES if b != name ] if name == "CoreMiniAxi"
106- else [b for b in KEPT_MODULES if b != name ]) + MOCKED_SRAMS ,
112+ ([b for b in BLACKBOXABLE_MODULES if b != name ] if name == "CoreMiniAxi" else [b for b in KEPT_MODULES if b != name ]) + MOCKED_SRAMS ,
107113 ),
108114 },
109115 module_top = name ,
110116 save_odb = False ,
111117 sources = {"SDC_FILE" : [":constraints.sdc" ]},
112-
113118 variant = "netlist" ,
114119 verilog_files = [":coralnpu_all_sv" ],
115120) for name in ALL_SYNTH_MODULES ]
@@ -118,21 +123,18 @@ ALL_SYNTH_MODULES = KEPT_MODULES + ["CoreMiniAxi"]
118123 name = "{}_netlist" .format (name ),
119124 srcs = ["{}_netlist_synth" .format (name )],
120125 output_group = "1_2_yosys.v" ,
121-
122126) for name in ALL_SYNTH_MODULES ]
123127
124128filegroup (
125129 name = "netlists" ,
126130 srcs = [":{}_netlist" .format (name ) for name in ALL_SYNTH_MODULES ],
127-
128131)
129132
130133genrule (
131134 name = "CoreMiniAxi_combined_netlist" ,
132135 srcs = [":netlists" ],
133136 outs = ["CoreMiniAxi_combined_netlist.v" ],
134137 cmd = "cat $(SRCS) > $@" ,
135-
136138)
137139
138140# Step 6: SRAM macro targets (provide LEF/LIB for mocked memories)
@@ -143,41 +145,35 @@ genrule(
143145
144146demo_sram (
145147 name = "Sram_2048x128" ,
146- verilog_files = [":coralnpu_all_sv" ],
147- mock_area = 1.0 ,
148148 abstract_stage = "cts" ,
149149 arguments = {
150150 "CORE_UTILIZATION" : "40" ,
151151 "PLACE_DENSITY" : "0.65" ,
152152 "PDN_TCL" : "$(PLATFORM_DIR)/openRoad/pdn/BLOCK_grid_strategy.tcl" ,
153153 "SYNTH_SLANG_ARGS" : "--disable-instance-caching=false -DUSE_GENERIC -Iexternal/+_repo_rules+common_cells/include" ,
154154 },
155+ mock_area = 1.0 ,
155156 sources = {"SDC_FILE" : [":constraints-sram.sdc" ]},
157+ verilog_files = [":coralnpu_all_sv" ],
156158)
157159
158160demo_sram (
159161 name = "Sram_512x128" ,
160- verilog_files = [":coralnpu_all_sv" ],
161- mock_area = 1.0 ,
162162 abstract_stage = "cts" ,
163163 arguments = {
164164 "CORE_UTILIZATION" : "40" ,
165165 "PLACE_DENSITY" : "0.65" ,
166166 "PDN_TCL" : "$(PLATFORM_DIR)/openRoad/pdn/BLOCK_grid_strategy.tcl" ,
167167 "SYNTH_SLANG_ARGS" : "--disable-instance-caching=false -DUSE_GENERIC -Iexternal/+_repo_rules+common_cells/include" ,
168168 },
169+ mock_area = 1.0 ,
169170 sources = {"SDC_FILE" : [":constraints-sram.sdc" ]},
171+ verilog_files = [":coralnpu_all_sv" ],
170172)
171173
172174# Step 7: ORFS physical design flow (uses pre-synthesized netlists + SRAM macros)
173175demo_flow (
174176 name = "CoreMiniAxi" ,
175- substeps = True ,
176- verilog_files = [":coralnpu_all_sv" ],
177- macros = [
178- ":Sram_2048x128_generate_abstract" ,
179- ":Sram_512x128_generate_abstract" ,
180- ],
181177 arguments = {
182178 # Synthesis is skipped (SYNTH_NETLIST_FILES provides pre-synthesized netlists).
183179 # SYNTH_HIERARCHICAL=0 because KEEP_VARS is not generated when synthesis
@@ -211,11 +207,17 @@ demo_flow(
211207 "FILL_CELLS" : "" ,
212208 "TAPCELL_TCL" : "" ,
213209 },
210+ macros = [
211+ ":Sram_2048x128_generate_abstract" ,
212+ ":Sram_512x128_generate_abstract" ,
213+ ],
214214 sources = {
215215 "SDC_FILE" : [":constraints.sdc" ],
216216 "SYNTH_NETLIST_FILES" : [":CoreMiniAxi_combined_netlist" ],
217217 "PRE_GLOBAL_PLACE_TCL" : [":CoreMiniAxi_probe_placement" ],
218218 },
219+ substeps = True ,
220+ verilog_files = [":coralnpu_all_sv" ],
219221)
220222
221223# Probe placement: run fast routability-driven placement on floorplan,
@@ -230,7 +232,6 @@ orfs_run(
230232 "PLACEMENT_TIPS_OUT" : "$(location :placement-tips.tcl)" ,
231233 },
232234 script = "//scripts:probe_placement.tcl" ,
233-
234235)
235236
236237demo_gallery_image (
@@ -241,5 +242,9 @@ demo_gallery_image(
241242demo_stage_images (
242243 name = "CoreMiniAxi_images" ,
243244 module = "CoreMiniAxi" ,
244- stages = ["floorplan" , "place" , "cts" ],
245+ stages = [
246+ "floorplan" ,
247+ "place" ,
248+ "cts" ,
249+ ],
245250)
0 commit comments