Modelsim 과 Quartus II 를이용한설계방법 퀀텀베이스연구개발실, 경기도부천시원미구상동 546-2, 두성프라자 1-606 TEL: 032-321-0195, FAX: 032-321-0197, Web site: www.quantumbase.com 최근 Modelsim은 PC에포팅되어있는것에힘입어많은설계자들이사용하고있습니다이에 Modelsim을이용하여설계하고, Quartus II를이용하여 FPGA에 targeting하여합성과 P&R을수행한다음, Quartus II에서생성된 netlist를이용하여 Modelsim에서타이밍시뮬레이션으로검증하는방법은 Quartus II만을이용한설계보다월등히효율적일것일것입니다. 본문서는이모든과정을간단한예를통하여설명하여, 설계자들에게도움을주기위하여 퀀텀베이스에서작성한것입니다.
설계절차 디지털회로스펙정의 HDL coding 시뮬레이션벡터 기능시뮬레이션 (Functional Simulation) 시뮬레이션성공 아니오 예 HDL 코드합성및배치배선 타이밍시뮬레이션 (Timing Simulation) NoBrain IDS-200TINY FPGA Target board 시뮬레이션결과비교 예 FPGA 다운로드및테스트 아니오
Modelsim 에서의코딩및기능시뮬레이션 본절부터는간단한예를통하여 Modelsim 에서 HDL coding 하고타이밍정보가제외된기능시뮬레이션 과정을정리하였습니다. (1) 먼저 Modelsim 을실행시킨다. (2) File-New-Project.. 메뉴를선택하여다음과같이프로젝트를만든다
(3)File-New-Source-VHDL 을선택하여 source editor 을열은후 HDL code 를작성한다. 여기서는간단히 두개의입력이있는 AND 게이트의설계로하고, 파일이름은 endtest.vhd 로정하여저장한다. (4)Modelsim 의메인 window 에서 Compile-Compile.. 메뉴를선택하여상기 coding 한파일을선택한다.
(5) 만일 compile 시의옵션이선택이필요하면위의창에서 Default Options 버튼을눌러아래와 같은 Compiler Options 대화상자를열어선택사항을선택하도록한다. 여기서는 93 표준의 vhdl syntax 가사용되었으므로이를추가선택한다. (6) 이제다시돌아온 Compile HDL Source Files 대화상자에서 Compile 버튼을누른다. 컴파일의 상황은 Modelsim 메인윈도우에서기술되며오류메세지가없다면컴파일이완료된것이다. 이제 Done 버튼을눌러창을닫는다.
(7) 아래는컴파일이완료된 Modelsim 메인윈도우이다. 왼쪽에 work library 아래에설계한 endtest 엔티티를확인할수있다. 오류없이 compile 이완료되었음을보이는화면 (8) 다음으로컴파일된 entity 를 workspace 에서마우스오른쪽키를클릭하여선택하면아래와같은메뉴를 볼수있고, 거기서 Simulate 메뉴를선택한다.
Simulation 모드로들어감을알수있는메시지 (9) 이제 Modelsim 메인윈도우에서 View-Signals를선택하면아래와같이설계한 entity의 signal을볼수있으며, 이를 waveform형태로보기위하여아래왼쪽의 Signals 윈도우의 Add-Wave-signals in Region을선택하여아래오른쪽그림과같이 waveform viewer에관찰하고자하는 signal을넣을수있다.
(10) 이로써시뮬레이션준비가되었으므로시뮬레이션을위한 test vector 를간단히만들어본다. Test bench 를작성하여사용하는것이좋으나여기서는다음과같이간단한 script 를이용하도록한다. a 는 0ns 일때 0, 200ns 일때 1, 주기 400ns 의펄스로정의 b 는 0ns 일때 0, 100ns 일때 1, 300ns 일때 0, 주기 400ns 의펄스로정의 (11) 이제시뮬레이션을 1000ns 까지하기위해서다음과같이 1000ns 으로세팅하고 run 버튼을누른다.
(12) 이제시뮬레이션을 1000ns 까지하기위해서다음과같이 1000ns 으로세팅하고 run 버튼을누른다. 아래와같이입력과출력신호를볼수있으며아래그림에서와같이기능시뮬레이션이므로 gate delay 가보이지않음에유의한다. (13) 시뮬레이션결과를확인하였다면 Modelsim 메인윈도우에서 Simulate-End Simulation 을선택하여 시뮬레이션모드를빠져나온후, Modelsim 을끝내도록한다.
Quartus II 에서의합성및 P&R (1) 먼저앞서모델심의 project 폴더아래합성을나타내는 Syn 폴더를만든다. 이와같이별도로 폴더를만들지않아도되지만, Quartus II 에서프로젝트를만들고합성하면많은파일이생성되므로 Quartus II 를위한폴더를한개만든것이다. (2) 폴더를만들었다면 Quartus II 를실행한다.
(3) File-New Project Wizard.. 를선택한후다음과같은순서로차례차례프로젝트를만든다. Quartus project 가있을곳의폴더위치 프로젝트이름 (top level 엔티티이름과동일 ) Top level 엔티티이름 Modelsim 에서설계한 vhdl 코드추가
Modelsim 을시뮬레이션 tool 로사용할것이라고선택함
Target Device 선택 Target Device 선택 ( 여기서는 NoBrain IDS-200TINY- EP1C 에장착된 device 가선택된예 )
위와같이생성될프로젝트생성이완료되었으면 finish 버튼을누른다. (4) 아래그림과같이 Processing-Start Compilation 을선택하여컴파일을수행한다.
(5) 컴파일이성공적으로끝났다는대화창이나오면확인버튼을누른다. (6) 이제 Quartus II 프로젝트가있는 Syn 폴더를보면, 많은파일들이생성되어있으며 simulation 이라고이름지어진폴더가생성되었음을알수있다.
(7) 생성된 simulation 폴더내에 modelsim 폴더가존재하게되는데, 그안으로들어가면다음과같이 파일이생성되었음을알수있다. Standard delay file Vhdl netlist file 이로써 Quartus 에서할일은모두끝났다. 다음으로는이파일을 modelsim 에서타이밍시뮬레션하는 방법을설명한다.
Quartus II 에서생성된파일을이용한 Modelsim 에서의 timing simulation (1) Modelsim 을실행한다. (2) 모델심을실행시킨후위에서보았던. *.vho, *.sdo 파일이들어있는 modlesim 폴더안에새프로젝트를 만든다. 프로젝트생성윈도우의 OK 버튼을누른후나타나는 ( 위의오른쪽그림 ) 에서 Add existing file 을 선택하면아래와같은대화창을볼수있다. 위에보인바와같이 Quartus II 에서생성된 netlist file 인 endtest.vho 를선택하고 Ok 를누른다.
(3) 이제 workspace에 endtest.vho 파일이추가되었음을알수있다. 그러나이상태에서바로컴파일을하면, 컴파일에러가난다. 이는 netlist가 cyclone device의 primitive cell의연결로구성되어있기때문에 targeting한 device의 cell정보을담고있는 library가연계되어있지않기때문이다. 따라서이 netlist를컴파일하기위해서는사용한디바이스인 cyclone을라이브러리로등록해야한다. (4) 본예제에서필요한라이브러리를위한파일은 C: quartus eda sim_lib 폴더에있다. 그폴더안에는여러가지디바이스를위한파일이존재하는데, 여기서는 cyclone을위한파일을사용하면된다. 아래그림에서표시한 cyclone_atoms.vhd 와 cyclone_components.vhd 두개의파일을 endtest.vho netlist가있는 modelsim 폴더에복사한다.
(5) 이제 cyclone 라이브러리를만들어보자. Modelsim 메인윈도우에서 File-New-Library... 를선택한다. 아래와같이 Library Name 과 Library Physical Name 을 Cyclone 으로만들고 OK 버튼을 누른다. 라이브러리생성완료표시 생성된 cyclone 라이브러리
(6) 다음은 cyclone_atoms.vhd 와 cyclone_components.vhd 파일을컴파해서이컴파일정보를 cyclone 라이브러리에추가시키는단계이다. 일단아래그림과같이 Workspace 영역에서마우스오른쪽 키를눌러나오는메뉴에서 Add to Project-Existing File 을선택한다. (7) 아래와같이 Add file to Project 윈도우에서 Browse 버튼을눌러 cyclone_atom.vhd 와 Cyclone_components.vhd 파일을프로젝트에추가한다.
(8) 두개의파일을 Ctrl 키를누른상태에서마우스로각각클릭하여아래와같이동시에추가할수있다. 파일이추가된후아래그림과같이두개의파일이 Workspace 에추가되었음을확인할수있다.
(9) 이제 Workspace 에추가된두개의파일을 Ctrl 키를누른상태에서마우스로각각클릭하여동시에 선택한후마우스오른쪽키메뉴에서 properties.. 를선택한다. (10) 나타난 Project Compiler Settings 대화창의 General 탭에서 Compile to library 항목을 cyclone 으로변경선택하고 OK 버튼을누른다.
(11) 이제추가된파일중 cyclone_atoms.vhd 와 cyclone_component.vhd 두개의파일을아래 그림과같이차례로선택하여컴파일한다. 이때반드시컴파일순서를지키도록한다. 이로써 cyclone 라이브러리가완성되었다. (12) 타이밍시뮬레이션을위하여 endtest.vho netlist 를 11 번과동일한방법으로컴파일한다. 컴파일이 완료되면아래와같은화면을볼수있다.
(13) 다음으로 modelsim 메인메뉴에서 simulate-simulate.. 을선택하면다음과같은 Simulate 대화창이 나오는데, SDF 탭에서 Quartus II 에서생성된 endtest.sdo 를추가한다 (14) Libraries 탭에서앞서생성한 cyclone 라이브러리를추가한다
(15)Design 탭에서 Work 라이브러리밑에있는 end test 를두번클릭하여아래그림과같이보이게한다. 다되었으면 ok 버튼을누른다. (16) 이로써타이밍시뮬레이션준비가되었으므로 functional simulation 에서와동일한 test vector 를 인가하고, waveform viewer 에관찰신호를추가한다. a 는 0ns 일때 0, 200ns 일때 1, 주기 400ns 의펄스로정의 b 는 0ns 일때 0, 100ns 일때 1, 300ns 일때 0, 주기 400ns 의펄스로정의
Functional simualtion 에서와는달리 netlist 에존재하는많은신호가추가적으로보인다.
(17) 이제시뮬레이션을 1000ns 까지하기위해서다음과같이 1000ns 으로세팅하고 run 버튼을누른다. gate 딜레이가포함된 timing simulation 결과를볼수있으며, Functional simulation 결과와비교하면 된다.