본문 바로가기

Synopsys VCS 사용 - HDL compile & simulation, 칩 설계 검증


아래 2가지 원본 글을 가지고 아래와 같이 간단한 tutorial을 만들어 보았다. 한글이 곳곳에 보이도록 했다. 
그래도 원본을 감상하시는 예의를 갖추도록.
정리는 하고 있는 중인데, 자료는 쓸만해서 그냥 올리니 대충 이해해 주시길.

(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 ...

VHDL Compile/Analysis

VHDL uses libraries to organize code, getting vhdlan to compile them is not straight forward since vcs needs to map them to some directory and then link them.
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 way to tell vcs how to map each library to the directories a special file is needed: .synopsys_vss.setup. 
This file can be on your VCS instalation path, in your $HOME or in your pwd, vhdlan will look for the file in this particular order.

VHDL에서 쓰이는 라이브러리의 경우 (보통 사용자가 만들어 쓰기도 하고 바로 가져와서 쓰기도 하죠) 컴파일 순서의 문제가 있기 때문에 미리 지정된 폴더에 컴파일을 할 수 있도록 해 두어야 한다. 이 폴더 위치를 지정하는 방법은 .synopsys_vss.setup 이라는 파일에 지정을 하면 된다.

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.
먼저 WORK 라이브러리 위치를 꼭 지정해 두고 각자에게 필요한 라이브러리 위치를 지정해 주면 되겠다.

While using VHDL design files, a simulaiton file 'synopsys_sim.setup' is usually defined, which defines 

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.

기본 work 폴더는 그냥 작업 폴더이다.

Example vhdlan commands:

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 Compilation/Analysis

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를 쓰지 않아서
This is the simple command line used to compile Verilog files using 2001 standard and a SystemVerilog test bench.
사용법은 아래와 같다. 
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 
------------------------------------------

구체적인 내용은 좀 더 파고들어야 할 듯 ..숙제..

짤방은 칩설계 Flow from https://en.wikipedia.org/wiki/Integrated_circuit_design




B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.