반도체 설계과정 중 layout 진행 전 pre simulation과 실제 layout의 parasitic을 포함하여 확인하는 post simulation 이 있다. 미세공정, high speed로 갈수록 pre/post simulation 간의 오차도 커지고, parasitic에 의한 영향도 중요해져 간다. 중요한 block의 경우 circuit engineer와 layout engineer 간에 수차례의 iteration 이 발생할 수 있다. 물론 정석대로 튜닝 과정에서 즉각 즉각 layout 에 반영하는 것이 방법일 수도 있지만, 크게 net이 바뀌지 않고, TR sizing 만 필요할 경우는 Back annotation 과정을 통해 layout 반영을 생략할 수 있다.
즉 애초에 layout 된 DB의 parasitc을 가져와 TR 만 어느 정도 튜닝하여 거의 post simulation에 준하게 확인한 뒤 Sizing 완료 후에 layout 에 한 번에 반영하는 것이다. 물론 Back annotation에 의한 장점은 pre simulation stimulus에 간단한 option 추가로 post simulation을 돌릴 수 있다는 것도 있다. 아쉽게도 현재 simulation 돌릴 수 있는 상황은 아니어서 manual 내용만 적어 놓는다. 아마 stimulus 작성하여 돌린다면 큰 문제없이 돌아갈 것 같다. 아래는 hspice command reference manual이다.
출처 https://cseweb.ucsd.edu/classes/wi10/cse241a/assign/hspice_cmdref.pdf
.OPTION BA_FILE
Launches full parasitic back-annotation.
Syntax
.OPTION BA_FILE = "filename"
Description
This file is the parasitic file name. filename is the name of the file that
contains parasitic information in SPEF or DSPF format. This option launches
back-annotation. Use .OPTION BA_ACTIVE with .OPTION BA_FILE to
launch selective parasitic expansion. To view examples of the SPEF and DSPF
file structures, see Post-Layout Back Annotation.
Example
.option ba_file = "./hspice/NETLIST/DSPF/add4.spf"
그중 BA_FILE에 대해서 가져와 보았다. CDL netlist를 include 하면서 Back annotation file을 같이 invoke 시켜주면 된다. 사실 정확한 simulation 도 필요하고 빠르고 바른 flow setup 도 필요하다. engineering은 수많은 trade off 속에서 선택과 집중을 얼마나 잘하느냐로 판가름 나는 것 같다.
이번에는 내용은 거의 비슷하지만 hspice simulation and analysis manual이다. 비슷한 내용이 중복인 것 같지만, option에 대한 설명은 command 쪽에 파일 structure 관련된 내용은 아래의 simulation & analysis 쪽에 좀 더 자세히 나와있다.
DSPF and SPEF File Structures
DSPF File Structure
The DSPF standard is published by Open Verilog International (OVI).
DSPF_file ::=
*|DSPF
{*|DESIGN design_name}
{*|DATE date}
{*|VENDOR vendor}
{*|PROGRAM program_name}
{*|VERSION program_version}
{*|DIVIDER divider}
{*|DELIMITER delimiter}
.SUBCKT
*|GROUND_NET
net_name
*|NET net_name ||
instance_name ||
pin_name
net_capacitance
*|P (pin_name pin_type
pinCap
capacitance }
)
||
*|I instance_name
delimiter pin_name
instance_name
pin_name pin_type
pinCap
capacitance }
*|S ( net_name ||
instance_name
delimiter pin_name ||
pin_name
instance_number
)
capacitor_statements
resistor_statements
subcircuit_call_statements
.ENDS
{.END}