Synopsys VCS 사용 - HDL compile & simulation, 칩 설계 검증
(via http://salinasv.blogspot.kr/2011/05/simulating-mixed-language-hdl-using-vcs.html)
VCS에 관한 간단한 사용법 소개.
VCS is 3 step process
3단계로 구성된다.
- Compile/Analysis
1차 간단한 문법 분석, vhdlan/vlogan 명령어를 이용한다.
Both commands accept the flag -f filelist where "filelist" is a list of files to be compiled. This help a lot to simplify and structure the compilation scripts.
- Elaborate/Build
- vcs <entity name> or <module name> or <entity__archname> or <cfg_name>
- Simulate
- simv ...
To achieve this you must create a directory with the name of each the library in your pwd to be able to map the libraries to a physical directory.
The syntax of this file is somehow easy, you first need to map the WORK library to a name, which then must be maped to a physical directory, after that, each library must be mapped to a physical directory on each line.
the compiled vhdl library.
Example 'synopsys_sim.setup' file:
------------
WORK > DEFAULT
DEFAULT : ./work
memlib : ./mem_lib
xm_bus_lib : ./xm_bus_lib
---------------------------------
The first line maps the WORK library to a name 'DEFAULT', and the second line maps the 'DEFAULT' library to a physcial directory called './work'.
첫번째 줄에 WORK 기본 위치를 DEFAULT 라고 이름을 짓고
2번째 줄에서 실제 폴더 위치를 기록해 준다.
The second line defines a library memlib which is mapped to a physcial directory called 'mem_lib'.
그런 다음, 필요한 사용자 라이버러리 위치도 지정해 준다.
In the absence of any 'synopsys_sim.setup' file in your working directory, vcs will look for the same file in your home directory, and if there is no 'synopsys_sim.setup' in your home directory, it will look for the same file in the tool installation directory.
synopsys_sim.setup 파일은 working 폴더, home 폴더, 툴 설치 폴더의 순서대로 찾아서 보게 되어 있다.
The default 'synopsys_sim.setup' is in the tool installation directory, which maps the default work directory to '.'.
You will see complied VHDL files in '.' in case you dont have a 'synopsys_sim.setup' file.
vhdlan -w memlib../../pid_filter/rtl/fun_pkg.vhdl
vhdlan -w work ../vhdl/state_machine.vhd
vhdlan ./state_machine_tb.vhd
This is a simple command line used to compile VHDL files with libraries
vhdlan -work <library_dir> -f <filename_of_file_list>
Notice~~ 주의
VCS libraries for VHDL compilation
-------------------------------------
synopsys_sim.setup file:
WORK > DEFAULT
DEFAULT : ./work_lib
memlib : ./memlib
pkg_lib : ./allcompiledpkgs
xm_bus_lib : ./xm_bus_lib
컴파일을 아래와 같이 수행해 보면,
Further observation about vhdl library and vhdl compliation:
vhdlan -work work fun_pkg.vhdl
OR
vhdlan fun_pkg.vhdl
which means that 'fun_pkg.vhdl' is complied into work_lib
이는 "fun_pkg.vhdl" 파일을 컴파일해서 work_lib에 저장하라는 뜻
when you see the contents of work_lib you will see files
work_lib 폴더내에서 아래와 같은 파일을 볼수 있다.
FUN_PKG.sim FUN_PKG__.sim
Now I have another file called
xmbus_master.vhd which intends to use 'fun_pkg' package from the work lib
i.e the xmbus_master.vhd has the following lines
use work.fun_pkg.all
now if I compile the xmbus_master.vhd like this
아래와 같이 컴파일 하면,
vhdlan -w xm_bus_lib xmbus_master.vhd
I would expect that the complier picks up fun_pkg from work_lib. But it DOESNOT!
원하는 것은 work_lib 내에 있는 fun_pkg를 가져오는 것인데 그렇지 않고 컴파일시 지정한 "xm_bus_lib"에서 가져오는 것 같다.
물론. 이렇게 혼동스럽게 같은 라이브러리 명을 안 쓰는 것이 제일 좋다.
Which emplies that 'work' in the statemetn use work.fun_pkg.all refers to the library xm_bus_lib, to which xmbus_master.vhd is being complied into.
On the other hand if I do the following
비슷하지만 약간 다른 시나리오를 보면,
vhdlan -w memlib fun_pkg.vhdl
Then I use the following lines in xmbus_master.vhd
library memlib;
use memlib.fun_pkg.all;
즉, 소스코드에서 library를 명기한 후에 사용하게 되면
then I compile xmbus_master.vhd like
vhdlan -w xm_bus_lib xmbus_master.vhd
Then things are FINE, this time the complier picks up complied 'fun_pkg' from the memlib.
이경우에는 memlib에 있는 fun_pkg를 가져온다. 소스에서 명기를 해 두면
So the conclusion is:
결론적으로 보면,
when using 'use work.abcd.all', 'work' refers to the current compliation lib given with -w option while compliling the file
containing 'use work.abcd.all' , and NOT to the 'work_lib' which is the default compliation lib
그냥 소스코드에서 "use work.abcd.all" 이렇게 써 놓으면 컴파일에 할 때 지정한 work 옵션의 폴더에서 가장 먼저 찾아쓰게 되는 것을 주의하도록.
물론 work옵션을 쓰지 않으면 기본 work 폴더 (즉, 여기서는 work_lib)에서 라이버러리를 가져다 쓴다.
Verilog doesn't uses libraries so there is not need to do tricks with the libraries. Still it's useful to know some tricks about this complier.
Verilog 는 그닥 라이브러리 관련한 트릭(?)이 필요없다.
vlogan have some useful flags that helps to structure the code and maintain isolated the simulation environment to the development one.
아래와 같은 유용한 옵션들이 있다. 개발환경에 크게 무관하게 유지할 수 있다. 실행시에 옵션으로 주게 되면.
- +incdir+: Specify the path where vlogan will look for the files to compile. 미리 살펴볼 폴더를 알려준다.
- +define+: Define a text macro at compile time. 컴파일시 사용될 define을 직접 바로 정의한다.
- +v2k: Enables the use of Verilog Standard 2001 사용버전
- -svlog or -sverilog: Enables the analysis of SystemVerilog code. 분석??? 잘모르겠다. SystemVerilog를 쓰지 않아서
vlogan +v2k +incdir -f <filename_of_file_list>
vlogan +v2k -sverilog +incdir -f <filename_of_file_list>
vlogan write it's output in a directory AN.DB which can be deleted in a cleanup process to keep workspace clean.
"AN.DB"라는 파일에 결과가 저장되는 모양이다. Rebuild 처럼 하려면 새로 컴파일 하기 전에 지우고 하면 된다.
Elaboration/Build
Once every file needed in a design is compiled, now it is time to elaborate the executable binary. The command to elaborate is vcs which take as parameter the top module to be simulated, usually the top module of the testbench.
각 컴파일된 파일을 vcs에서 사용하도록 elaborate 할 시간이다.
The command to elaborate is:
vcs -debug_all glbl
where the flag -debug_all tell the tool to enable the simulation GUI and the necessary debug information to add breakpoints and line stepping. The glbl argument is needed to use Xilinx components.
Example elaboration commands:
vcs -cm line+cond+fsm+tgl+path pid_filter_tb
This steps generates an executable file which is named simv by default. This name can be changed.
Simulation
The elaboration command generates an executable file with the name of simv which must be executed to start the simulation.
Elaboration 작업이 끝이 나면 "simv" 라는 이름의 실행 가능한 검증파일이 생성된다. 이 파일이름은 elaboration 과정에서 변경할 수 도 있다.
The default behavior of this executable is to run and output messages from the test bench to stdout. Normally what is needed is to get a GUI where to see the waves and analyze the signal values at each time, this is done with the -gui parameter.
"-gui" 옵션으로 화려하게 볼수도 있다.
The command to execute the simulation with a GUI is:
./simv -gui
Example simulaiton commands:
아래와 같이 do 파일을 만들어서 여러가지 작업을 연속적으로 수행할 수 있따.
simv -ucli -do file.cmds
Contents of a simple file.cmds
---------------
run 1 ms
exit
---------------
simv -gui
simv -cm line+cond+fsm+tgl+path -gui
simv -g generics_file
--여기까지
contents of 'generic_file'
바로 위의 "simv -g generics_file" 에 사용되는 파일의 내용은.
----------------
assign 1 /TOP/LEN
assign "OK.dat" /TOP/G1/vhdl1/FILE_NAME
assign (4 ns) /TOP/G1/VHDL1/delay
assign 16 /TOP/width
assign 4 /TOP/add_width
------------------------------------------
구체적인 내용은 좀 더 파고들어야 할 듯 ..숙제..
'IT > ASIC | FPGA' 카테고리의 다른 글
Recommended reset synchronization scheme (0) | 2016.09.22 |
---|---|
Design compiler 관련 글 - Synopsys 합성 툴 (0) | 2016.07.19 |
Pod 파일 주세요 - 신뢰성 시험 (0) | 2016.04.25 |
[반도체] ESD Test - HBM,MM,CDM 자료 모음 (2) | 2016.02.26 |
[Bookmark] EDA Tool 설치가이드 (0) | 2012.04.02 |