MJL Technology, Ltd. / Logic Design 메모 메모 (Technical) Document No.: MJL-LD-AN-10 Author: 양창우 [cwyang@mjl.com] Version: 1.0 Date: 2001 년 3 월 30 일 Subject: LeonardoSpectrum 을사용하여 LPM Function 이사용된 Verilog-HDL Code 합성하기 (APEX 20K/E 를중심으로 ) ALTERA 에서제공하는 LPM Function 은복잡한 Logic 을별다른노력없이단시간에만들수있으며, 또한일정한 Performance 를제공해주는잇점이있다 LPM 자체에관한자세한내용은 ALTERA 의 Website (Library of Parameterized Modules (LPM) - http://www.altera.com/products/software/sfwlpm.html) 에서찾아볼수있으므로생략하고여기에서는이러한 LPM Function 을 Verilog-HDL 에어떠한방법으로삽입을할수있는지그리고그 Source 를 ALTERA 가아닌외부논리합성툴에서어떻게합성을하는지를설명한다 Target Device 는 APEX 20KE 로가정한다 LPM Function 은 LPM_RAM_DQ 를사용한다 Verilog-HDL 합성은 Exemplar Logic 사의 LeonardoSpectrum for ALTERA Level1 2000.1b 를사용한다 합성후생성된 EDIF Netlist 를받아서 Fitting 하는 Software 는 Quartus II 1.0 + Service Pack 2 를사용한다 여기서구현하는회로는아래의 Schematic 과같이 LPM_RAM_DQ 로구현된 256x8 용량의 Memory 이다 ( 아래의그림에서 ram256x8 로표시되는부분이 LPM Function 으로구현된부분이다 ) 달랑 Memory 만들어있는간단한회로를예로든것은나중에 Quartus II 를이용한 Compile 후실제로 256x8bit Memory 가 APEX 20KE Device 의 ESB (Embedded System Block) 에구현이되었는지를쉽게확인하기위한목적도있다 Page 1
기본개념 사용자들이제일많이착각을하는부분이있다 다름이아니라 LPM Function 으로구현된부분까지도논리합성툴을사용하여합성을하는것으로인식을하고있다는것이다 몇몇사람은 LPM 부분까지모두합성을하여잘사용하는중이라고하는경우도있는데, 이건어디까지나운이좋아서된것이지올바르게사용했다고는볼수없다 일단가장중요한개념은 LPM Function 은합성시사용되는것이아니라 Fitting 시적용된다는점이다 1. 사용자의 Verilog-HDL 구문내에 LPM Function 이사용되었슴을알리는 Module 선언부분만이들어간다 이것을논리합성툴을사용하여합성을하면, 합성툴에서는 LPM Function 이선언되어있는부분을인지하고 Black Box 로처리해버린다 ( 즉, 입출력 Port 만정의하고내용은공란으로처리한다 ) 2. 합성이완료되면결과물로 EDIF Format 의 Netlist 가생성된다 ( 일반적인경우 ) 3. Netlist 를사용하여 ALTERA Quartus II 에서 Project 를생성하고 Compile 을수행한다 Compile 과정중합성툴에서 Block Box 로처리된부분이무엇인가파악하고 LPM Function 이라면이때관련된 LPM Function 의기능을추가 ( 구현 - Implementation) 한다 이러한개념을가지고아래의단계를진행한다 MegaWizard Plug-In Manager 의실행 Quartus II 를띄운후 Tools -> MegaWizard Plug-In Manager 를실행한다 (Figure 1 참조 ) Figure 1 MegaWizard Plug-In Manager... Figure 2 는 MegaWizard Plug-In Manager 의초기화면이다 우리는새로운 LPM Function 을만들것이므로 Create a new custom megafunction variation 을선택하고다음으로넘어간다 Page 2
Figure 2 새로운 LPM Function 을만들기위한초기화면 Figure 3 은어떠한종류의 LPM Function 을만들것인지, 어떠한 Type 의결과파일을만들지, 어느폴더에어떠한이름으로저장할지등을물어보는그림이다 여기에서는 RAM256x8 이라는이름으로 LPM_RAM_DQ 를만든다고지정하였다 Figure 3 LPM Function 의선택 Page 3
우리는맨처음의그림에서와같이 256x8bit Size 의 RAM 을만들것이므로 LPM_RAM_DQ 를선택한다 또한 Verilog-HDL 에서사용할것이므로 Output File Type 은 Verilog HDL 로선택한다 Output File 이저장될위치는논리합성툴이 Netlist 를생성해낼폴더를지정하면된다 그다음으로나오는화면은입 / 출력 Parameter 를지정하는화면이다 Figure 4 처럼지정한다 Figure 4 입 / 출력 Parameter 의지정 Figure 5 는지금만들고있는 RAM Memory 의초기값지정여부를묻는그림이다 LPM_RAM_DQ 로만드는 RAM Memory 가일반 RAM Memory Device 와다른점은여기에있다 일반 RAM 은초기값이모두 0 이되지만, LPM 으로만드는 RAM 은마치 ROM 처럼초기값을넣어줄수가있는것이다 만약초기값을넣어주려면, Yes, use this file~~~ 를선택하고 Intel HEX Format 이나 ALTERA 자체 Format 인 MIF 형식으로작성된파일을지정해주면된다 ( 두가지모두일반 ASCII 형식임 ) 화면하단의 Implement logic cells only, even if the device contains EABs or ESBs 는내부 Memory Block 이있는 FLEX 10K 나 APEX 20K 의경우 LPM_RAM_DQ 를일반사용자 Logic 이구현되는 Logic Element 를사용하여구현하라는 Option 인데, 유용성여부는사용자자신의판단에달려있다 Page 4
Figure 5 Memory 내부의초기값설정 Figure 6 은 MegaWizard Plug-In Manager 의최종화면으로 Finish 버튼을누르면지금까지설정한값대로 LPM_RAM_DQ Function 이생성된다 Figure 6 MegaWizard Plug-In Manager 의최종화면 이상과같이작업을하면우리가원하는 256x8bit 의 RAM Memory Block 이완성된다 완성된후결과파일이저장된폴더를열어보면총 6 개의파일이생성된것을확인할수있다 Page 5
ram256x8.bsf / ram256x8.cmp / ram256x8.inc / ram256x8.v / ram256x8_bb.v / ram256x8_inst.v *.bsf 파일은 Schematic 작업시사용되는 Symbol 파일이고, *.cmp 파일은 VHDL Coding 시사용되는 Component 구문이정의된파일이며, *.inc 는 AHDL Coding 시사용되는 Function 이정의된파일이다 *.v 파일들이실제로 Verilog-HDL 로작업할때사용되어지는파일들이다 ram256x8.v 는 Quartus II 가 Compile 시실제로참조하는파일이고, ram256x8_bb.v 와 ram256x8_inst.v 는사용자 Verilog- HDL Code 에삽입되어져야할부분이정의된파일들이다 ram256x8.v 파일 // megafunction wizard: %LPM_RAM_DQ% // GENERATION: STANDARD // VERSION: WM1.0 // MODULE: lpm_ram_dq // ============================================================ // File Name: ram256x8.v // Megafunction Name(s): // lpm_ram_dq // ============================================================ // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // ************************************************************ //Copyright (C) 1991-2001 Altera Corporation //Any megafunction design, and related net list (encrypted or decrypted), //support information, device programming or simulation file, and any other //associated documentation or information provided by Altera or a partner //under Altera's Megafunction Partnership Program may be used only to //program PLD devices (but not masked PLD devices) from Altera. Any other //use of such megafunction design, net list, support information, device //programming or simulation file, or any other related documentation or //information is prohibited for any other purpose, including, but not //limited to modification, reverse engineering, de-compiling, or use with //any other silicon devices, unless such use is explicitly licensed under //a separate agreement with Altera or a megafunction partner. Title to //the intellectual property, including patents, copyrights, trademarks, //trade secrets, or maskworks, embodied in any such megafunction design, //net list, support information, device programming or simulation file, or //any other related documentation or information provided by Altera or a //megafunction partner, remains with Altera, the megafunction partner, or //their respective licensors. No other licenses, including any licenses //needed under any third party's intellectual property, are provided herein. module ram256x8 ( address, inclock, we, data, q); input [7:0] address; input inclock; input we; input [7:0] data; Page 6
output [7:0] q; wire [7:0] sub_wire0; wire [7:0] q = sub_wire0[7:0]; lpm_ram_dq lpm_ram_dq_component (.address (address),.inclock (inclock),.data (data),.we (we),.q (sub_wire0)); defparam lpm_ram_dq_component.lpm_width = 8, lpm_ram_dq_component.lpm_widthad = 8, lpm_ram_dq_component.lpm_indata = "REGISTERED", lpm_ram_dq_component.lpm_address_control = "REGISTERED", lpm_ram_dq_component.lpm_outdata = "UNREGISTERED", lpm_ram_dq_component.lpm_hint = "USE_EAB=ON"; endmodule // ============================================================ // CNX file retrieval info // ============================================================ // Retrieval info: PRIVATE: WidthData NUMERIC "8" // Retrieval info: PRIVATE: WidthAddr NUMERIC "8" // Retrieval info: PRIVATE: RegData NUMERIC "1" // Retrieval info: PRIVATE: RegAdd NUMERIC "1" // Retrieval info: PRIVATE: OutputRegistered NUMERIC "0" // Retrieval info: PRIVATE: BlankMemory NUMERIC "1" // Retrieval info: PRIVATE: MIFfilename STRING "" // Retrieval info: PRIVATE: UseLCs NUMERIC "0" // Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1" // Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" // Retrieval info: CONSTANT: LPM_WIDTHAD NUMERIC "8" // Retrieval info: CONSTANT: LPM_INDATA STRING "REGISTERED" // Retrieval info: CONSTANT: LPM_ADDRESS_CONTROL STRING "REGISTERED" // Retrieval info: CONSTANT: LPM_OUTDATA STRING "UNREGISTERED" // Retrieval info: CONSTANT: LPM_HINT STRING "USE_EAB=ON" // Retrieval info: USED_PORT: address 0 0 8 0 INPUT NODEFVAL address[7..0] // Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT NODEFVAL inclock // Retrieval info: USED_PORT: we 0 0 0 0 INPUT VCC we // Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL q[7..0] // Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] // Retrieval info: CONNECT: @address 0 0 8 0 address 0 0 8 0 // Retrieval info: CONNECT: @inclock 0 0 0 0 inclock 0 0 0 0 // Retrieval info: CONNECT: @we 0 0 0 0 we 0 0 0 0 // Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0 // Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 ram256x8_bb.v 파일 //Copyright (C) 1991-2001 Altera Corporation //Any megafunction design, and related net list (encrypted or decrypted), //support information, device programming or simulation file, and any other //associated documentation or information provided by Altera or a partner //under Altera's Megafunction Partnership Program may be used only to //program PLD devices (but not masked PLD devices) from Altera. Any other //use of such megafunction design, net list, support information, device //programming or simulation file, or any other related documentation or //information is prohibited for any other purpose, including, but not Page 7
//limited to modification, reverse engineering, de-compiling, or use with //any other silicon devices, unless such use is explicitly licensed under //a separate agreement with Altera or a megafunction partner. Title to //the intellectual property, including patents, copyrights, trademarks, //trade secrets, or maskworks, embodied in any such megafunction design, //net list, support information, device programming or simulation file, or //any other related documentation or information provided by Altera or a //megafunction partner, remains with Altera, the megafunction partner, or //their respective licensors. No other licenses, including any licenses //needed under any third party's intellectual property, are provided herein. module ram256x8 ( address, inclock, we, data, q); endmodule input [7:0] address; input inclock; input we; input [7:0] data; output [7:0] q; ram256x8_inst.v 파일 ram256x8 ram256x8_inst (.address ( address_sig ),.inclock ( inclock_sig ),.we ( we_sig ),.data ( data_sig ),.q ( q_sig ) ); 이글의앞부분에서도잠깐언급을했듯이 MegaWizard Plug-In Manager 에서생성된파일들은반드시논리합성툴이생성해낼 Netlist 가위치할폴더에넣어주어야함을잊지말아야한다 Verilog-HDL Coding 이제는사용자 Code 를작성할차례이다 그림을참고로하여 Coding 을하면아래와같다 파일명은 lpmramdq_inst.v 로가정한다 Page 8
lpmramdq_inst.v 파일 module lpmramdq_inst( we, clk, a, d, qout ); input we; input clk; input [7:0] a; input [7:0] d; output [7:0] qout; ram256x8 ram_inst(.we(we),.inclock(clk),.address(a),.data(d),.q(qout)); endmodule 여기에다가 ram256x8_bb.v 의내용을복사하여 Source Code 의하단에붙여넣으면전체 Source 가완성된다 (Source 중간에 ram_inst 라는 Instance Name 을가진 ram256x8 Module 이사용되었으므로 ) 완성된 lpmramdq_inst.v 파일 module lpmramdq_inst( we, clk, a, d, qout ); input we; input clk; input [7:0] a; input [7:0] d; output [7:0] qout; ram256x8 ram_inst(.we(we),.inclock(clk),.address(a),.data(d),.q(qout)); endmodule module ram256x8 ( address, inclock, we, data, q); input [7:0] address; input inclock; input we; input [7:0] data; output [7:0] q; Page 9
endmodule LeonardoSpectrum for ALTERA Level1 2000.1b 를사용하여합성하기 Verilog-HDL Code 가완성되었으므로이제는논리합성툴 (Logic Synthesis Tool) 을가지고합성을할단계이다 여기에서는 ALTERA 와 OEM 계약을맺은 Exemplar 의 LeonardoSpectrum for ALTERA Level1 2000.1b 를사용하여합성을한다 참고로 ALTERA 에서제공하는 LeonardoSpectrum 은 ALTERA Device 만을선택하여합성을할수있으며, 관련 License 는 VHDL 만을합성할수있거나혹은 Verilog-HDL 만을합성할수있는 License 만을주므로자신의 License 가어떤것인지를먼저확인하여야한다 물론정품이있다면그걸활용하여도무방하다 Figure 7 LeonardoSpectrum 의초기실행화면 여기에서는 LeonardoSpectrum 의자세한사용법은생략한다 합성시주의할점은 MegaWizard Plug-In Manager 로만든 *.v 파일들은합성될파일목록에포함시키면않된다는것이다 앞서기본개념부분에서말했듯이그파일들은 Quartus II 가 Compile 을수행할때참조되는파일들이기때문이다 Page 10
여기에서는사용자가작성한 lpmramdq_inst.v 만합성을하면된다 여기에서는반드시설정해야할부분만을선택하고합성을하였다 선택한 Device 는 EP20K30EFC144-3 이다 아래는 LeonardoSpectrum for ALTERA Level1 2000.1b 에서출력한 Log 이다 Info: Attempting to checkout a license to run as LeonardoSpectrum Level 1 Altera Info: License passed Session history will be logged to file 'C:/CAD/_FAE/test/lpmramdq_ex/exemplar.his' Info, Working Directory is now 'C:\CAD\_FAE\test\lpmramdq_ex' Info: system variable EXEMPLAR set to "c:\cad\fpgadv\exemplar" Info: Loading Exemplar Blocks file: c:\cad\fpgadv\exemplar/data/xmplrblks.ini Messages will be logged to file 'C:/CAD/_FAE/test/lpmramdq_ex/exemplar.log'... LeonardoSpectrum Level 1 Altera - v20001b.106 (Release Production, compiled Dec 4 2000 at 17:05:11) Copyright 1990-2000 Exemplar Logic, Inc. All rights reserved. -- -- Welcome to LeonardoSpectrum Level 1 Altera -- Run By cwyang@cwyang -- Run Started On Sun Apr 01 07:21:35 Korea Standard Time 2001 -- <- 여기까지가 Tool 상에서띄우는초기 Log 이다 ->set_working_dir C:/CAD/_FAE/test/verilog_lpm_ex <- 작업폴더설정 Info, Working Directory is now 'C:\CAD\_FAE\test\verilog_lpm_ex' ->_gc_read_init ->_gc_run_init ->set input_file_list { C:/CAD/_FAE/test/verilog_lpm_ex/src/lpmramdq_inst.v } <- 합성할파일선택 C:/CAD/_FAE/test/verilog_lpm_ex/src/lpmramdq_inst.v ->set part EP20K30EFC144 <- Target Device 선택 EP20K30EFC144 ->set process 3 <- Speed Grade 선택 3 ->set chip TRUE ->set macro FALSE FALSE ->set area TRUE ->set delay FALSE FALSE ->set report brief brief ->set hierarchy_auto TRUE TRUE ->set hierarchy_preserve FALSE FALSE ->set output_file C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.edf <- 합성결과물인 Netlist 의저장경로및파일명선택 ( 기본적으로 Top Design Entity 의파일명과동일하게설정된다 ) C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.edf ->set novendor_constraint_file FALSE FALSE ->set target apex20e apex20e ->_gc_read <- 파일을 Tool 내로불러들여문법검사와구문분석을시작한다 -- Reading target technology apex20e Reading library file `c:\cad\fpgadv\exemplar\lib\apex20e.syn`... Library version = 1.6 Delays assume: Process=3 -- read -tech apex20e { C:/CAD/_FAE/test/verilog_lpm_ex/src/lpmramdq_inst.v } -- Reading file 'C:/CAD/_FAE/test/verilog_lpm_ex/src/lpmramdq_inst.v'... -- Loading module ram256x8 -- Loading module lpmramdq_inst -- Compiling root module 'lpmramdq_inst' Page 11
"C:/CAD/_FAE/test/verilog_lpm_ex/src/lpmramdq_inst.v",line 22: Warning, module ram256x8 is empty. <- ram256x8 Module 이비었다고출력하는데, 정상적인출력결과이다 -- Pre Optimizing Design.work.lpmramdq_inst.INTERFACE -- Boundary optimization. Info: Finished reading design ->_gc_run <- 이제부터 Synthesis 과정으로들어간다 -- Run Started On Sun Apr 01 07:25:24 Korea Standard Time 2001 -- -- optimize -target apex20e -effort quick -chip -area -hierarchy=auto Using default wire table: apex20e_default -- Start optimization for design.work.lpmramdq_inst.interface Using default wire table: apex20e_default est est Pass LCs Delay DFFs TRIs PIs POs --CPU-- min:sec 1 0 3 0 0 18 8 00:00 Using default wire table: apex20e_default -- Start timing optimization for design.work.lpmramdq_inst.interface No critical paths to optimize at this level <- Synthesis Report 가출력된다 ******************************************************* Cell: lpmramdq_inst View: INTERFACE Library: work ******************************************************* Number of ports : 26 Number of nets : 52 Number of instances : 29 Number of references to this view : 0 Total accumulated area : Number of GND : 1 Number of IOs : 26 Number of VCC : 1 Black Box ram256x8 : 1 <- ram256x8 Module 이 Block Box 로 처리되었슴을나타낸다 *********************************************** Device Utilization for EP20K30EFC144 *********************************************** Resource Used Avail Utilization ----------------------------------------------- IOs 26 92 28.26% LCs 0 1200 0.00% Memory Bits 0 24576 0.00% <- Memory Bits 의사용량이 0 으로 나오는게당연하다 Black Box 로처리되었으므로 LeonardoSpectrum 은 ram256x8 이무엇인지 모르기때문이다 ----------------------------------------------- Critical Path Report Critical path #1, (unconstrained path) NAME GATE ARRIVAL LOAD ------------------------------------------------------------------------------ d(0)/ 0.00 0.00 up 1.49 d(0)_ibuf/combout apex20_io_input_none_from_pin 3.13 3.13 up 1.49 ram_inst/data(0) GENERIC_BLACK_BOX 0.00 3.13 up 0.00 data arrival time 3.13 data required time not specified Page 12
------------------------------------------------------------------------------ data required time not specified data arrival time 3.13 ---------- unconstrained path ------------------------------------------------------------------------------ -- Design summary in file 'C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.sum' -- Saving the design database in C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.xdb -- Writing file C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.xdb -- Writing XDB version 1999.1 -- Writing file C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.edf Info, Writing xrf file 'C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.xrf' -- Writing file C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.xrf Info, Writing batch file 'C:/CAD/_FAE/test/verilog_lpm_ex/lpmramdq_inst.tcl' -- CPU time taken for this run was 1.81 sec -- Run Successfully Ended On Sun Apr 01 07:25:26 Korea Standard Time 2001 0 Info: Finished Synthesis run <- logic Synthesis 가정상적으로종료됨 논리합성이정상적으로되면작업폴더에 lpmramdq_inst.edf 라는 EDIF Format 의 Netlist 가생성되어있슴을확인할수있다 Quartus II 를사용하여 Compile 하기 현재작업폴더를확인하면 MegaWizard Plug-In Manager 를사용하여생성한 RAM256x8 Module 과 LeonardoSpectrum 으로만든 LPMRAMDQ_INST.EDF 파일이있을것이다 이번단계는마지막단계로 ALTERA 에서제공하는 APEX 20KE Device 용 Compile Tool 인 Quartus II 를사용하여 Compile 을진행하는단계이다 Quartus II 를띄운후 File -> New Project Wizard 를선택하여새 Project 를만든다 Figure 8 은 New Project Wizard 의초기화면이다 다음으로넘어간다 Page 13
Figure 8 New Project Wizard 의초기화면 그다음화면은지금만들려는 Project 가위치할폴더의경로와 Project 이름그리고현 Project 에서사용될 Top-Level Design Entity 이름을입력하는부분이다 세군데칸을모두채워야하는데, 가장편리한방법은 Project 가위치할경로를물어보는부분의 Browse 버튼을눌러나타나는 Select Directory 대화상자에서폴더를찾고아까만든 *.EDF 파일을더블클릭하는것이다 이렇게하면나머지두개의빈칸도자동으로채워진다 Page 14
Figure 9 Project 만들기 Figure 9 처럼모두채워넣었으면 Finish 를눌러새 Project 생성작업을완료한다 우리는지금까지 lpmramdq_inst 라는이름을가진 Netlist 를 Top-Level Design Entity 로하는 LPMRAMDQ_INST 라는 Project 를만들었다 이번에행할작업은 Project -> EDA Tool Settings 를선택하여 EDIF Netlist 를만들때사용한논리합성툴을선택하는단계이다 ( 이단계를무시하고바로 Compile 을할경우 Compiler 가 EDIF Netlist 를읽어들이면서자동으로논리합성툴의종류를인식하기는하지만, 만약의사태에대비하여꼭 Check 하는습관을들이도록한다 ) Design entry / synthesis tool: 항목에서우리가사용했던 Tool 을선택한다 우리는 ALTERA 전용의 LeonardoSpectrum 을사용했었으므로 Leonardo Spectrum(Level 1) 을선택하면된다 OK 버튼을눌러설정을완료한다 Page 15
Figure 10 Logic Synthesis Tool 의선택 이이후의작업은일반적인 Quartus II 작업순서와동일하다 Compiler Settings 에서 Target Device 를정해주고 ( 만약여기서정하지않더라도 Compiler 가자동으로잡아주기는한다 ) Start Compilation 을시작한다 여기에서는 LeonardoSpectrum 에서선택했던 EP20K30EFC144-3 을선택하고 Compile 과정을수행한다 (Figure 11, 12 참조 ) Page 16
Figure 11 Compiler Settinfs 중 Target Device 의선택 Figure 12 Start Compilation Button Page 17
Figure 13 정상적으로 Compile 이완료된회면 지금까지의과정대로진행이되었다면 Compile 은별문제없이잘될것이다 만약중간에 Error 가발생한다면어디선가잘못했거나빼먹은부분이있다는것이므로다시한번잘살펴보기바란다 Quartus II 의하단에는 Compile 중에발생하는각종 Message 를표시하는 Messages 창이있는데, 아래와같은내용들이표시되어있을것이다 몇가지를살펴보면, Info: Found 1 design units and 1 entities in source file C:\CAD\_FAE\test\verilog_lpm_ex\lpmramdq_inst.edf <- Top-Level Design Entity 인 LPMRAMDQ_INST.EDF 를확인했슴을알려준다 Info: Found entity 1: lpmramdq_inst Info: Found 1 design units and 1 entities in source file c:\cad\_fae\test\verilog_lpm_ex\ram256x8.v <- MegaWizard Plug-In Manager 에서 생성한 LPM 관련핵심 Module 인 ram256x8.v 가 Compile 과정에서야적용됨을확인할수있다 Info: Found entity 1: ram256x8 Info: Found 1 design units and 1 entities in source file C:\CAD\ALTERA\Quartus\libraries\megafunctions\lpm_ram_dq.tdf Info: Found entity 1: lpm_ram_dq Info: Found 1 design units and 1 entities in source file C:\CAD\ALTERA\Quartus\libraries\megafunctions\altram.tdf Info: Found entity 1: altram Info: Implemented 34 device resources Info: Implemented 18 input pins Info: Implemented 8 output pins Info: Implemented 8 RAM segments Info: Selected device EP20K30EFC144-3 for design lpmramdq_inst Page 18
Info: Started 1 fitting attempt on Mon Apr 02 2001 at 01:19:44 Warning: Timing characteristics of device EP20K30EFC144-3 are preliminary Warning: Found pins functioning as undefined clocks and/or memory enables Info: Assuming node clk is an undefined clock Info: No valid register-to-register paths exist for clock clk Info: Design lpmramdq_inst: Full compilation was successful. 0 errors, 2 warnings 이번에는 Quartus II 의 Workplace 에있는 lpmramdq_inst Compilation Report 의 Summary 부분을살펴보자 우리가작성한회로는오직 256x8bit RAM 만들어있는회로이다 Summary 부분을보면우리의예상처럼 Logic Element 는당연히하나도사용되지않았고, 단지 ESB 라불리는 Memory Block 만이 2048bit 를쓴것으로나와있다 Figure 14 Compilation Report 이로써 LPM_RAM_DQ Function 을적용한사용자 Verilog-HDL 이 LeonardoSpecrum 의합성과정을거쳐 Quartus II Compilation 까지정확하게이루어졌슴을확인할수있다 마치며 지금까지우리는 LPM Function 을사용한 Verilog-HDL 을 3 rd Party Synthesis Tool 인 Leonardo Spectrum 에서어떨게합성을하는지, 그리고 Quartus II 에서는어떤식으로 Compile 이이루어지는지살펴보았다 여기서는 Exemplar 사의 Tool 을가지고예를들었지만, 다른 Tool 들을사용하더라도공통으로적용되는부분이므로서두에서언급했던기본개념부분을잘숙지하고작업을진행한다면별문제없이원하는결과를볼수있을것이다 Page 19
Revision History 2001-3-30 - Ver 1.0: Initialize Release Page 20