← All examples

Small multi-cycle RV32I core · Example, read-only. Explore every file, run, and layout.

A small multi-cycle RISC-V (RV32I) core running compiled C, with a placed-and-routed layout. Some stretch goals are still open, which is shown honestly.

Make my own copyFree account · uses no trial credits
CPU / MCU · Small multi-cycle RV32I corePersisted
CPU / MCU · Small multi-cycle RV32I core
Project ID 5fd0548b-8326-40ee-93eb-53abdb0878a1
Files
The HDL is the source of truth. AI suggestions are reviewable before they touch the project.
SiliconForge · flow mapReady to run

How your design is built

Each stage shows the files it used and produced, and who made them. Select a stage to open or protect its files, then rerun just that stage or everything after it. Whether your goals are met is in Evaluation.

5 steps with evidence1 failed2 skipped / unavailable17 expected outputs missing4 RTL files2 testbenches0 mapped artifactsLatest goal report16 passed6 failed
Manufacturing process

AI recommendation: SkyWater 130 nm · HD. You can change the platform and rerun; each platform uses its own libraries and physical-design setup.

Workflow run history

0 saved runs, newest first.

No saved workflow runs yet.

End-to-end development map

Follow the design, files, and evidence through every tool

Branches show retries and optional checks. Select a step to inspect its recorded inputs, outputs, and tool logs below. Pan and zoom to explore the map.

Run status · latest saved evidence
RunningPassedCompletedFailedBlockedStale evidenceReady to runSkippedNot run yetNot integrated / installedExpected file missing
Selected stage · 01

RTL simulation

Icarus Verilog

A testbench is present. Run it to establish behavioral evidence.

Inputs used
Who made it · lock = protected from AI repairs
  • You
  • You
  • You
  • You
  • You
  • You
Outputs and measurements

No output or measurement recorded yet.

Verification layer

Goals and test evidence

16 passed6 failed22 checked
reset_starts_at_zeroBehavior: After active-low reset, execution begins at instruction address 0x00000000. resultpassed

reset_starts_at_zero = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
reset_starts_at_zero = 1 result; met the goal target.
Used: rtl/core.sv · rtl/regfile.sv · rtl/sky130_dmem_4096x32.sv · program.hex · tb/testbench.sv
x0_remains_zeroBehavior: Register x0 always reads as zero and writes targeting x0 have no effect. resultpassed

x0_remains_zero = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
x0_remains_zero = 1 result; met the goal target.
Used: rtl/core.sv · rtl/regfile.sv · rtl/sky130_dmem_4096x32.sv · program.hex · tb/testbench.sv
word_loads_return_little_endian_valuesBehavior: LB, LBU, LH, LHU, and LW return correctly sign-extended or zero-extended little-endian values. resultpassed

word_loads_return_little_endian_values = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
word_loads_return_little_endian_values = 1 result; met the goal target.
Used: rtl/core.sv · rtl/regfile.sv · program.hex · tb/testbench.sv
completion_gpio_signalBehavior: A nonzero word store to GPIO address 0x10000000 asserts done and halts further retirement. resultpassed

completion_gpio_signal = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
completion_gpio_signal = 1 result; met the goal target.
Used: rtl/core.sv · rtl/regfile.sv · program.hex · tb/testbench.sv
done_remains_asserted_after_completionBehavior: done remains asserted and no instruction retires after completion. resultpassed

done_remains_asserted_after_completion = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
done_remains_asserted_after_completion = 1 result; met the goal target.
Used: rtl/core.sv · program.hex · tb/testbench.sv
testbench_pass= 1 resultpassed

testbench_pass = 1 result; goal passed.

Measured 1 result · RTL simulation
Icarus Verilog · passed
testbench_pass = 1 result; met the goal target.
Used: rtl/core.sv · rtl/regfile.sv · rtl/sky130_dmem_4096x32.sv · program.hex · tb/testbench.sv
global_route_overflow≤ 0 edgespassed

global_route_overflow = 0 edges; goal passed.

Measured 0 edges · OpenROAD
OpenROAD · passed
global_route_overflow = 0 edges; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
layout_export_complete= 1 resultpassed

layout_export_complete = 1 result; goal passed.

Measured 1 result · OpenROAD
OpenROAD · passed
layout_export_complete = 1 result; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
parasitic_extraction_complete= 1 resultpassed

parasitic_extraction_complete = 1 result; goal passed.

Measured 1 result · OpenROAD
OpenROAD · passed
parasitic_extraction_complete = 1 result; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
antenna_net_violation_count≤ 0 netsfailed

antenna_net_violation_count = 2 nets; goal did not meet its target.

Measured 2 nets · OpenROAD
OpenROAD · failed
antenna_net_violation_count = 2 nets; did not meet the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
antenna_pin_violation_count≤ 0 pinsfailed

antenna_pin_violation_count = 3 pins; goal did not meet its target.

Measured 3 pins · OpenROAD
OpenROAD · failed
antenna_pin_violation_count = 3 pins; did not meet the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
power_grid_vdd_connected= 1 resultpassed

power_grid_vdd_connected = 1 result; goal passed.

Measured 1 result · OpenROAD
OpenROAD · passed
power_grid_vdd_connected = 1 result; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
power_grid_vss_connected= 1 resultpassed

power_grid_vss_connected = 1 result; goal passed.

Measured 1 result · OpenROAD
OpenROAD · passed
power_grid_vss_connected = 1 result; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
antenna_check_complete= 1 resultpassed

antenna_check_complete = 1 result; goal passed.

Measured 1 result · OpenROAD
OpenROAD · passed
antenna_check_complete = 1 result; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
drc_top_level_violation_count≤ 0 violationsfailed

drc_top_level_violation_count = 70 violations; goal did not meet its target.

Measured 70 violations · KLayout DRC
KLayout · failed
drc_top_level_violation_count = 70 violations; did not meet the goal target.
Used: generated/layout/rv32i_core.openroad.gds
drc_violation_count≤ 0 violationsfailed

drc_violation_count = 117692 violations; goal did not meet its target.

Measured 117692 violations · KLayout DRC
KLayout · failed
drc_violation_count = 117692 violations; did not meet the goal target.
Used: generated/layout/rv32i_core.openroad.gds
drc_cell_internal_violation_count≤ 0 violationspassed

drc_cell_internal_violation_count = 0 violations; goal passed.

Measured 0 violations · KLayout DRC
KLayout · passed
drc_cell_internal_violation_count = 0 violations; met the goal target.
Used: generated/layout/rv32i_core.openroad.gds
layout_extraction_complete= 1 resultpassed

layout_extraction_complete = 1 result; goal passed.

Measured 1 result · Magic layout extraction
Magic VLSI · passed
layout_extraction_complete = 1 result; met the goal target.
Used: generated/layout/rv32i_core.openroad.gds
worst_slack_ns≥ 0 nsfailed

worst_slack_ns = -17.072872 ns; goal did not meet its target.

Measured -17.072872 ns · OpenSTA
OpenSTA · failed
worst_slack_ns = -17.072872 ns; did not meet the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · generated/layout/rv32i_core.openroad.spef · analysis/opensta_timing.tcl
drc_macro_internal_violation_count≤ 0 violationsfailed

drc_macro_internal_violation_count = 117622 violations; goal did not meet its target.

Measured 117622 violations · KLayout DRC
KLayout · failed
drc_macro_internal_violation_count = 117622 violations; did not meet the goal target.
Used: generated/layout/rv32i_core.openroad.gds
power_grid_vdd_unconnected_instances≤ 0 instancespassed

power_grid_vdd_unconnected_instances = 0 instances; goal passed.

Measured 0 instances · OpenROAD
OpenROAD · passed
power_grid_vdd_unconnected_instances = 0 instances; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
power_grid_vss_unconnected_instances≤ 0 instancespassed

power_grid_vss_unconnected_instances = 0 instances; goal passed.

Measured 0 instances · OpenROAD
OpenROAD · passed
power_grid_vss_unconnected_instances = 0 instances; met the goal target.
Used: generated/netlists/rv32i_core.mapped.v · generated/libraries/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib · constraints/opensta.sdc · analysis/openroad_flow.tcl
Loading tool and run history…Available stages run automatically when their inputs and enabled tools are ready. Physical implementation and fabrication signoff still require project-specific flows and tools.
Simulation
Run the testbench to compile and simulate the current HDL project.