ASIC Design Flow
ASIC Design Flow
Under Supervision of
Dr. Shasanka Sekhar Rout
1. INTRODUCTION
1.1 Objective
This report documents the complete RTL-to-GDSII implementation of a 4-bit Up/Down
Counter using the Cadence toolchain. The flow covers:
- RTL Design & Verification
- Logic Synthesis (RTL → Gate-level Netlist)
- Physical Design (Place-and-Route)
- Signoff Verification (Timing, DRC/LVS, Power)
endmodule
```
module tb_counter;
reg clk, reset_n, up_down, enable;
wire [3:0] count;
// Instantiate DUT
up_down_counter dut (
.clk(clk),
.reset_n(reset_n),
.up_down(up_down),
.enable(enable),
.count(count)
);
// Test sequence
initial begin
// Initialize signals
reset_n = 0; up_down = 1; enable = 0;
#20 reset_n = 1; enable = 1; // Release reset and enable counting
// Test up-counting
#100 up_down = 0; // Switch to down-counting
#100 enable = 0; // Disable counting
#50 $finish;
end
endmodule
```
2.8 Steps:
Creating a Work space :
In Desktop Create a folder to do the digital design flow. Right click in the Desktop and select New
Folder.
It will create a folder like below and name it as Abhishek_Projects.
Create a new sub-Directory for the Design and open a terminal from the Sub-Directory
Creating Source Code
In the Terminal, type gedit .v or .vhdl depending on the HDL Language you are to use (ex:
up_downCounter.v).
3.2 Setup
| Component | Tool/File | Purpose |
|--------------------------------|--------------------------------------------|---------------------------------------|
| RTL Design | `up_down_counter.v` | Target design (Verilog) |
| Testbench | `tb_counter.v` | Stimulus generation & checks |
| Simulator | Cadence Xcelium (20.09) | Execution engine |
| Waveform Viewer | SimVision | Debug visualization |
2. Up-Count Mode
- Set `up_down=1`, `enable=1` → Validate sequence: `0000 → 0001 → ... → 1111 → 0000`.
3. Down-Count Mode
- Set `up_down=0` → Verify `1111 → 1110 → ... → 0000 → 1111`.
4. Enable Control
- Toggle `enable=0` → Confirm count holds current value.
3.5 Results
| Metric | Result | Pass Criteria |
|-----------------------------|-------------------------------------------|---------------------------------------|
| Functional Coverage | 100% (All test cases passed) | No mismatches in 200+ cycles |
| Toggle Coverage | 100% (All count bits toggled) | Verified transitions 0↔1 |
Waveform Snapshot:
Key Observations:
- Correct reset behavior at t=20ns
- Up-count sequence initiated at t=40ns
- Down-count transition at t=140ns
To perform the function simulation, the following three steps are involved Compilation, Elaboration
and Simulation.
Step 1: Compilation:– Process to check the correct Verilog language syntax and usage
Inputs: Supplied are Verilog design and test bench codes
Outputs: Compiled database created in mapped library if successful, generates report else error
reported in log file Steps for compilation:
1. Create work/library directory (most of the latest simulation tools creates automatically)
2. Map the work to library created (most of the latest simulation tools creates automatically)
3. Run the compile command with compile options
i.e Cadence IES command for compile: ncverilog +access+rwc -compile design.v
Step 2: Elaboration:–
To check the port connections in hierarchical design Inputs: Top level design / test bench Verilog codes
Outputs: Elaborate database updated in mapped library if successful, generates report else error
reported in log file Steps for elaboration – Run the elaboration command with elaborate options
1. It builds the module hierarchy
2. Binds modules to module instances
3. Computes parameter values
4. Checks for hierarchical names conflicts
5. It also establishes net connectivity and prepares all of this for simulation
i.e Cadence IES command for elaboration: ncverilog +access+rwc -elaborate design.v
Step 3: Simulation: –
Simulate with the given test vectors over a period of time to observe the output behaviour
Inputs: Compiled and Elaborated top level module name
Outputs: Simulation log file, waveforms for debugging Simulation allow to dump design and test
bench signals into a waveform
Steps for simulation –
Run the simulation command with simulator options
i.e Cadence IES command to run in GUI mode: ncsim -gui worklib.top level entity name
3.6 Debugging
- Issue: Glitch during count direction change (`up_down` timing violation).
- Fix: Added synchronizer flip-flop for `up_down` signal.
3.7 Conclusion
RTL functionality fully validated with zero mismatches, enabling progression to synthesis.
4. LOGIC SYNTHESIS (GENUS)
4.1 Objective
Convert the RTL design (`up_down_counter.v`) into a gate-level netlist using standard cells from the
target technology library,while meeting:
- Timing constraints (clock frequency)
- Area targets
- Power requirements
Save outputs
write_hdl -mapped > up_down_counter_synth.v
write_sdc > post_synth.sdc
```
# Initialize
init_design
```
Step 2: Floorplanning
Define core area, aspect ratio, and I/O placement:
```tcl
floorPlan -site coreSite -r 1.0 0.7 20 20 20 20
# -r <aspect_ratio> <utilization> <left/bottom/right/top margin>
```
Key Checks:
- Core utilization (typically 70-80%).
- Standard cell row alignment (check `checkFPlan`).
Check Placement
```tcl
checkPlace
report_timing -preCTS
```
Step 6: Routing
Global Routing
```tcl
route_global
```
Detail Routing
```tcl
route_detail
```
Optimization
```tcl
optDesign -postRoute
```
DRC Checks:
```tcl
verify_drc
```
Step 7: Output Generation
GDSII (Layout)
```tcl
write_gds up_down_counter_final.gds
```
Parasitics (SPEF)
```tcl
extract_rc -coupling_cap -rpt -spef up_down_counter.spef
```
Timing (SDF)
```tcl
write_sdf -interconn up_down_counter.sdf
```
5.4 Key Reports
| Report | Command | Purpose |
|---------------------|----------------------------------|------------------------------------------|
| Timing | `report_timing -postRoute` | Setup/hold slack after routing |
| Power | `report_power` | Static/dynamic power analysis |
| Congestion | `report_congestion` | Routing congestion hotspots |
| DRC | `verify_drc` | Design rule violations |
Commands:
```tcl
read_verilog up_down_counter_final.v
read_spef up_down_counter.spef
read_sdc post_synth.sdc
# Analyze timing
report_timing -late -max_paths 10 > hold.rpt # Hold check (fast corner)
report_timing -early -max_paths 10 > setup.rpt # Setup check (slow corner)
```
Key Metrics:
- WNS (Worst Negative Slack): Must be ≥ 0.
- TNS (Total Negative Slack): Sum of all violations.
Output:

Example: Clean STA with zero violations.
Inputs:
- GDSII (`up_down_counter_final.gds`)
- Netlist (`up_down_counter_synth.v`)
Commands:
```tcl
pegasus -drc -gds up_down_counter_final.gds -tech tsmc90nm
pegasus -lvs -gds up_down_counter_final.gds -netlist up_down_counter_synth.v
```
Key Checks:
| Check | Tool | Pass Criteria |
|------------------------------|-------------------|-------------------------------------------|
| Minimum spacing | Pegasus DRC | No metal/poly spacing violations |
| Net connectivity | Pegasus LVS | Layout matches netlist |
Output:

Example: Zero DRC/LVS errors.
Inputs:
- Power grid SPEF
- Activity file (`up_down_counter.vcd`)
Commands:
```tcl
read_activity -vcd up_down_counter.vcd
analyze_power -ir_drop -em
```
Key Metrics:
- IR Drop: ≤ 5% of VDD.
- EM Violations: Current density < foundry limits.
Output:

Example: IR drop hotspots (red) mitigated with power straps.
Final Deliverables
| File | Description |
|----------------------------------------------------|-----------------------------------------------|
| `up_down_counter.v` | Verified RTL code |
| `up_down_counter_synth.v` | Synthesized netlist (Genus) |
| `up_down_counter_final.gds` | Tapeout-ready layout (Innovus) |
| `sta.rpt` / `drc.rpt` | Signoff reports (Tempus/Pegasus) |
Closing Remarks
This flow demonstrates a complete digital ASIC implementation, from concept to silicon-ready
design. The methodology is scalable to larger designs (e.g., processors, AI accelerators)with additional
considerations for hierarchical design and DFT.