KR100965856B1 - Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages - Google Patents
Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages Download PDFInfo
- Publication number
- KR100965856B1 KR100965856B1 KR1020090119547A KR20090119547A KR100965856B1 KR 100965856 B1 KR100965856 B1 KR 100965856B1 KR 1020090119547 A KR1020090119547 A KR 1020090119547A KR 20090119547 A KR20090119547 A KR 20090119547A KR 100965856 B1 KR100965856 B1 KR 100965856B1
- Authority
- KR
- South Korea
- Prior art keywords
- registers
- clock
- function module
- variables
- integrated circuit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/3181—Functional testing
- G01R31/3183—Generation of test inputs, e.g. test vectors, patterns or sequences
- G01R31/318342—Generation of test inputs, e.g. test vectors, patterns or sequences by preliminary fault modelling, e.g. analysis, simulation
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/31704—Design for test; Design verification
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/31707—Test strategies
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/3181—Functional testing
- G01R31/3183—Generation of test inputs, e.g. test vectors, patterns or sequences
- G01R31/318342—Generation of test inputs, e.g. test vectors, patterns or sequences by preliminary fault modelling, e.g. analysis, simulation
- G01R31/31835—Analysis of test coverage or failure detectability
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/3181—Functional testing
- G01R31/3183—Generation of test inputs, e.g. test vectors, patterns or sequences
- G01R31/318342—Generation of test inputs, e.g. test vectors, patterns or sequences by preliminary fault modelling, e.g. analysis, simulation
- G01R31/318357—Simulation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
본 발명의 디지털 집적 회로의 시뮬레이션 및 검증 방법은 알고리즘을 구현하기 위하여 최상위 함수 모듈 내에 들어 있는 하나 이상의 로직들 및 하나 이상의 레지스터들이 하나 이상의 클럭들에 따라 각각 동작하도록 순차 실행 고급 프로그리밍 언어를 이용하여 디지털 집적 회로를 시뮬레이션 및 검증하는 방법에 있어서, (a) 상기 클럭의 클럭 에지들 중 적어도 하나의 클럭 에지를 각 클럭 에지가 나타나는 순서에 기초하여 활성화하는 단계, (b) 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신하는 단계, (c) 각각의 로직들의 연산을 순차적으로 실행하는 단계, (d) 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수들을 상기 각각의 로직들과 레지스터들로부터 제공된 결과들에 의해 각각 갱신하는 단계 및 (e) 상기 디지털 집적 회로의 검증을 종료할 때까지 (a) 내지 (d)의 이터레이션을 반복하는 단계를 포함할 수 있다.The simulation and verification method of the digital integrated circuit of the present invention uses a sequential execution advanced programming language such that one or more logics and one or more registers contained in a top-level function module operate on one or more clocks, respectively, to implement an algorithm. A method of simulating and verifying a digital integrated circuit, the method comprising: (a) activating at least one clock edge of the clock edges of the clock based on the order in which each clock edge appears, (b) output variables of all registers Respectively updating by the value of the input variables of the respective registers, (c) sequentially executing the operations of the respective logics, and (d) the input variables of the registers operating in correspondence with the activated at least one clock edge. Are provided from the respective logics and registers. Each step of updating by the and (e) may include the step of repeating the iteration of (a) to (d) and ends when the verification of the digital integrated circuit.
Description
본 발명은 디지털 집적 회로 설계에 관한 것으로, 더욱 상세하게는, 순차 실행 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계, 시뮬레이션 및 검증 방법에 관한 것이다.TECHNICAL FIELD The present invention relates to digital integrated circuit design, and more particularly, to a method for designing, simulating, and verifying digital integrated circuits using a sequential execution advanced programming language.
범용 프로세서뿐 아니라 주문형 반도체(ASIC) 칩의 개발은 많은 시간과 서로 다른 분야의 많은 인적 자원을 투입해야 하는 복잡한 작업이다. 개발 순서를 살펴보면, 먼저 시스템 엔지니어가 알고리즘을 개발 및 검증한다. 이어서, 하드웨어 엔지니어가 알고리즘을 VHDL과 같은 HDL(hardware description language) 툴을 이용하여 논리 회로 수준(RTL: Register transfer level)에서 구현 및 검증한 후, 합성 툴(synthesis tool)을 이용하여 게이트 수준의 넷리스트(netlist)로 합성한다. 하드웨어 엔지니어는 합성된 회로를 배치 및 배선(PNR: place and route)하여 실제로 칩 상에 놓일 레이아웃(layout)을 생성하며, 이를 FPGA(field programmable gate array)에 프로그래밍하여 동작 테스트 및 검증을 수행한다. 이후에 반도체 공정 엔지니어가 레이아웃을 실제 반도체 웨이퍼 위에 구현하고, 테스트 전문가가 완성된 칩을 테스트한다. The development of ASIC chips, as well as general-purpose processors, is a complex task that requires a lot of time and a lot of human resources in different fields. In the development order, the system engineer first develops and verifies the algorithm. The hardware engineer then implements and validates the algorithm at the register transfer level (RTL) using a hardware description language (HDL) tool, such as VHDL, and then uses a gate-level net using a synthesis tool. Synthesize into a list (netlist). Hardware engineers place and route the synthesized circuitry to create a layout that will actually be on the chip, and program it into a field programmable gate array (FPGA) to perform operational tests and verifications. Afterwards, the semiconductor process engineer implements the layout on the actual semiconductor wafer, and the test specialist tests the finished chip.
이 중에서, 넷리스트 합성과 PNR, 레이아웃 생성, FPGA 프로그래밍, 반도체 칩 제조는 많은 부분이 자동화되어 있다. 하지만, 알고리즘 개발, 테스트 벡터의 개발과 시뮬레이터 개발, 아키텍처 개발, HDL 코딩/디버깅 과정은 엔지니어들이 직접 수행해야 하므로 시간이 많이 소비된다. 이후의 공정에서 문제가 발견되면 알고리즘이나 아키텍처를 수정해야 하므로, 프로젝트 장기화의 원인이 된다.Among these, netlist synthesis, PNR, layout generation, FPGA programming, and semiconductor chip manufacturing are largely automated. However, algorithm development, test vector development, simulator development, architecture development, and HDL coding / debugging are very time-consuming because engineers must do it themselves. If problems are found in later processes, algorithms or architectures need to be modified, which contributes to project prolongation.
한편, 통상적으로 알고리즘은 순차적으로(sequentially) 실행되는 코드들로 작성되며, 시스템 엔지니어들은 C나 C++ 등의 순차 실행되는 고급 프로그래밍 언어로 알고리즘을 작성하는 데에 익숙한 것이 보통이다. 통상적으로 테스트 시뮬레이션도 C나 C++과 같은 순차 실행 언어로 작성된다. 반면에, 시스템 아키텍처는 동시적으로(concurrently) 논리 블록들의 동작을 실행시킬 수 있도록 고안된 HDL 코드들로 작성된다. 하드웨어 엔지니어들이 익숙한 HDL의 문법은 C나 C++ 등의 언어 문법과 다르기 때문에 하드웨어 엔지니어와 시스템 엔지니어 사이의 소통이 원활하지 않아, 개발 및 검증이 완료된 알고리즘을 모든 면에서 일치하도록 하드웨어로 구현하지 못하고, 나아가 테스트를 완벽하게 통과하지 못한 채 시간에 쫓겨 제품화되는 경우가 많다고 알려져 있다.On the other hand, algorithms are typically written in sequentially executed code, and system engineers are typically accustomed to writing algorithms in sequential high-level programming languages such as C and C ++. Typically, test simulations are written in sequential execution languages such as C or C ++. On the other hand, the system architecture is written in HDL codes designed to execute the operation of logical blocks concurrently. The syntax of HDL that hardware engineers are familiar with is different from language grammar such as C or C ++, so communication between hardware engineers and system engineers is not smooth, and the developed and verified algorithms cannot be implemented in hardware to match all aspects. It is known that it is often produced in time without being fully tested.
시스템 엔지니어와 하드웨어 엔지니어 사이의 소통 부재를 해소하려는 시도는 두 가지 방향으로 접근될 수 있었다. 하나는 시스템 엔지니어의 입장에서, C나 C++ 같은 순차 실행 언어로 작성한 알고리즘에 대하여, 그대로 HDL 형식으로 변환하거나(C-to-Verilog 변환 툴), HDL 코딩을 거치지 않고 곧바로 넷리스트 합성을 하거나(SystemC, ImpulseC), 더 나아가 알고리즘으로부터 자동으로 하드웨어 아키텍처를 구현하는(TLM, CatapultC) 접근 방향이다. 다른 하나는 시스템 엔지니어가 하드웨어 아키텍처 설계를 이해하여 클럭을 고려한(timed) 알고리즘을 작성할 수 있는 툴을 제공하는 접근 방향이다.Attempts to resolve the lack of communication between system engineers and hardware engineers could be approached in two ways. One is for a system engineer, for algorithms written in sequential execution languages such as C or C ++, either to HDL format (C-to-Verilog conversion tool), or to netlist synthesis directly without going through HDL coding (SystemC). , ImpulseC) and, moreover, the approach to implementing hardware architectures automatically (TLM, CatapultC) from algorithms. The other approach is to provide systems engineers with the tools to understand the hardware architecture design and write clocked algorithms.
각각의 방식은 장단점이 있는데, C-to-Verilog 변환 툴은 변환 동작을 자동화하는 데에 한계가 있어 단순한 번역 수준에 머무를 수밖에 없다. SystemC나 ImpulseC는 클럭을 고려하여 작성된 C++ 알고리즘을 컴파일한 것을 시뮬레이션할 수 있는 툴인데, 복잡하고 정교하게 설계된 커널과 데이터 저장소가 알고리즘 및 변수들을 제어하는 구조로서, 시뮬레이션 속도가 기존보다는 빠르지만 실제 효과적으로 사용하기에는 여전히 늦고, 특수한 컴파일러를 사용하거나 변수 선언이나 데이터 타입 선언 등에서 제약 사항이 많으며, 동작 과정을 추적할 수 없어 알고리즘의 오류 수정이 어렵고, 하드웨어 엔지니어가 이해하기 어려워, 하드웨어의 오류를 발견, 수정하고 재검증하는 절차가 길어질 수 있다.Each approach has its pros and cons, and the C-to-Verilog conversion tool is limited to automating the conversion behavior, leaving it at a simple translation level. SystemC or ImpulseC is a tool that simulates the compilation of clocked C ++ algorithms. A complex and sophisticated kernel and data store control algorithms and variables. It's still too late to use, there are many limitations in using special compilers, variable declarations, data type declarations, etc., it's hard to track the behavior of algorithms, making it difficult to fix algorithms, hard to understand by hardware engineers, and finding and fixing hardware errors. And revalidation procedures can be lengthy.
본 발명이 해결하고자 하는 과제는 디지털 집적 회로를 설계하고 검증하고자 베릴로그(verilog)나 VHDL 같은 HDL 언어와 유사한 구조의 구문을 가지면서 동시에 고급 프로그래밍 언어로 널리 쓰이는 C나 C++ 언어를 이용하는 방법을 제공하는 데에 있다.The problem to be solved by the present invention is to provide a method of using a C or C ++ language widely used as a high-level programming language while having a syntax similar to that of an HDL language such as verilog or VHDL to design and verify a digital integrated circuit. It's there.
위와 같은 문제점을 해결하기 위한 본 발명의 일 측면에 따른, 순차 실행 고급 프로그래밍 언어를 이용하여 하나 이상의 로직들 및 하나 이상의 레지스터들이 하나 이상의 클럭들에 따라 각각 동작하도록 디지털 집적 회로를 시뮬레이션 및 검증하는 방법은,Method for simulating and verifying a digital integrated circuit such that one or more logics and one or more registers each operate according to one or more clocks using a sequential execution advanced programming language in accordance with an aspect of the present invention for solving the above problems. silver,
(a) 상기 클럭의 클럭 에지들 중 적어도 하나의 클럭 에지를 각 클럭 에지의 인가 순서에 따라 활성화하는 단계;(a) activating at least one clock edge of the clock edges of the clock in an application order of each clock edge;
(b) 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신하는 단계;(b) updating the output variables of all registers by the value of the input variables of each register, respectively;
(c) 각각의 로직들의 연산을 순차적으로 실행하는 단계;(c) sequentially executing operations of respective logics;
(d) 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수들을 상기 각각의 로직들과 레지스터들로부터 제공된 결과들에 의해 각각 갱신하는 단계; 및(d) updating input variables of registers operating in correspondence with the activated at least one clock edge with results provided from the respective logics and registers, respectively; And
(e) 상기 디지털 집적 회로의 검증을 종료할 때까지 (a) 내지 (d)의 이터레 이션을 반복하는 단계를 포함할 수 있다.(e) repeating the iterations of (a) to (d) until the verification of the digital integrated circuit is completed.
바람직하게는, 상기 이터레이션은, 상기 클럭 에지들 중 적어도 어느 하나의 클럭 에지가 활성화되면서 시작하여, 상기 클럭 에지들 중 적어도 어느 하나의 다음 클럭 에지가 활성화되기 전에 종료될 수 있다.Advantageously, the iteration may begin with the activation of a clock edge of at least one of the clock edges and end before the next clock edge of at least one of the clock edges is activated.
바람직하게는, 상기 (b) 단계는, 상기 각각의 레지스터들의 출력 변수들의 값에 따라 상기 (c) 단계의 각각의 로직들의 연산이 영향을 받는 경우에는, 반드시 상기 (c) 단계보다 먼저 수행될 수 있다.Advantageously, step (b) must be performed before step (c) if the operation of each of the logics of step (c) is affected by the value of the output variables of the respective registers. Can be.
바람직하게는, 상기 (c) 단계는, 상기 각각의 로직들의 출력 변수들의 값에 따라 상기 (d) 단계의 각각의 레지스터들의 입력이 영향을 받는 경우에는, 반드시 상기 (d) 단계보다 먼저 수행될 수 있다.Advantageously, step (c) must be performed before step (d) if the input of each register of step (d) is affected by the value of the output variables of the respective logics. Can be.
바람직하게는, 상기 (d) 단계에서는, 상기 (c) 단계에서 수행된 연산의 연산 결과들 중에서 상기 활성화된 적어도 하나의 클럭 에지에 대응하지 않는 레지스터들에 제공된 연산 결과들은 버려질(discard) 수 있다.Advantageously, in step (d), operation results provided to registers which do not correspond to the activated at least one clock edge among the operation results of the operation performed in step (c) may be discarded. have.
본 발명의 다른 측면에 따른, 순차 실행 고급 프로그래밍 언어를 이용하여 최상위 함수 모듈 내에 들어 있는 하나 이상의 로직, 하나 이상의 레지스터들 및 하나 이상의 서브 함수 모듈들이 하나 이상의 클럭들에 따라 각각 동작하도록 디지털 집적 회로를 시뮬레이션 및 검증하는 방법은,In accordance with another aspect of the present invention, a digital integrated circuit may be configured such that one or more logic, one or more registers, and one or more sub-function modules contained within a top-level function module operate in accordance with one or more clocks using a sequential execution advanced programming language. How to simulate and verify,
(I) 상기 클럭의 클럭 에지들 중 적어도 하나의 클럭 에지를 각 클럭 에지의 인가 순서에 따라 활성화하는 단계;(I) activating at least one clock edge of the clock edges of the clock in the order of application of each clock edge;
(II) 상기 최상위 함수 모듈에서 정의된 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신하는 단계;(II) updating the output variables of all the registers defined in the top-level function module with the values of the input variables of the respective registers, respectively;
(III) 상기 최상위 함수 모듈 내 로직의 연산을 순차적으로 실행하는 단계;(III) sequentially executing operations of logic in the most significant function module;
(IV) 상기 최상위 함수 모듈에서 정의된 레지스터들 중에서 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수들을 상기 각각의 로직들과 레지스터들로부터 제공된 결과들에 의해 각각 갱신하는 단계;(IV) updating input variables of the registers defined in the top-level function module, the registers operating in correspondence with the activated at least one clock edge, by results provided from the respective logics and registers, respectively;
(V) 상기 하나 이상의 서브 함수 모듈들을 호출하여 실행하는 단계;(V) calling and executing the one or more sub function modules;
(VI) 상기 디지털 집적 회로의 검증을 종료할 때까지 (I) 내지 (V)의 이터레이션을 반복하는 단계를 포함할 수 있다.(VI) repeating the iterations of (I) to (V) until the verification of the digital integrated circuit is terminated.
바람직하게는, 상기 이터레이션은 상기 클럭의 클럭 에지들 중 적어도 어느 하나의 클럭 에지가 활성화되면서 시작하여, 상기 클럭의 클럭 에지들 중 적어도 어느 하나의 다음 클럭 에지가 활성화되기 전에 종료될 수 있다.Advantageously, the iteration may begin with at least one clock edge of the clock edges of the clock being activated and end before the next clock edge of at least one of the clock edges of the clock is activated.
바람직하게는, 상기 (II) 단계는, 상기 각각의 레지스터들의 출력 변수들의 값에 따라 상기 (III) 단계의 각각의 로직과 서브 함수 모듈들의 연산이 영향을 받는 경우에는, 반드시 상기 (III) 단계보다 먼저 수행될 수 있다.Preferably, the step (II) is necessarily performed if the operation of each logic and sub function module of the step (III) is affected according to the value of the output variables of the respective registers. It may be done earlier.
바람직하게는, 상기 (IV) 단계에서는, 상기 (III) 단계에서 수행된 연산의 연산 결과들 중에서 상기 활성화된 적어도 하나의 클럭 에지에 대응하지 않는 레지스터들에 제공된 연산 결과들은 버려질 수 있다.Preferably, in step (IV), among the calculation results of the operation performed in step (III), calculation results provided to registers which do not correspond to the activated at least one clock edge may be discarded.
상기 디지털 집적 회로의 시뮬레이션 및 검증 방법은,Simulation and verification method of the digital integrated circuit,
(I) 단계에 앞서, 이터레이션에 진입하기 전에, 상기 디지털 집적 회로의 검증이 부동소수점 연산 검증인지 고정소수점 연산 검증인지 설정하고, 그에 따라 와이어 변수들 및 레지스터들의 입력 변수들 및 출력 변수들을 정의하는 단계를 더 포함할 수 있다.Prior to step (I), before entering the iteration, set whether the verification of the digital integrated circuit is a floating-point or fixed-point arithmetic verification, and thereby define the input variables and output variables of the wire variables and registers. It may further comprise the step.
바람직하게는, 상기 (V) 단계는, Preferably, the step (V) is,
상기 서브 함수 모듈 내에 정의된 모든 레지스터들의 출력 변수 값을 각 레지스터들의 입력 변수 값으로써 갱신하는 단계;Updating the output variable values of all registers defined in the sub function module with the input variable values of the respective registers;
상기 서브 함수 모듈 내의 로직의 연산을 순차적으로 수행하는 단계; 및Sequentially performing operations of logic in the sub function module; And
상기 최상위 함수 모듈 내에 정의된 레지스터들 중 상기 서브 함수 모듈 내에서 정의된 로직이나 레지스터의 출력에 연결된 레지스터들과 상기 서브 함수 모듈 내에 정의된 레지스터들 중에서 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수를 각각의 논리 연산 구문들의 연산 결과들에 따라 갱신하는 단계를 포함할 수 있다.Operates in response to the activated at least one clock edge among registers defined in the top-level function module connected to the logic or register output defined in the sub-function module and registers defined in the sub-function module. And updating the input variable of the registers according to the operation results of the respective logical operation syntaxes.
바람직하게는, 상기 고급 프로그래밍 언어는 C++ 언어이고,Preferably, the high level programming language is a C ++ language,
상기 디지털 집적 회로의 시뮬레이션 및 검증 방법은,Simulation and verification method of the digital integrated circuit,
(I) 단계에 앞서, 이터레이션에 진입하기 전에, 상기 디지털 집적 회로의 검증이 부동소수점 연산 검증인지 고정소수점 연산 검증인지 설정하고, 상기 최상위 함수 모듈에 사용될 와이어 변수들 및 레지스터의 입력 변수들 및 출력 변수들을 정의하는 단계를 더 포함하며,Prior to step (I), before entering the iteration, set whether the verification of the digital integrated circuit is floating point arithmetic or fixed point arithmetic verification, and the wire variables and register input variables to be used in the top-level function module and Further defining output variables,
만약 현재 이터레이션이 상기 (V) 단계에서 호출할 서브 함수 모듈을 수행하는 첫 이터레이션일 경우에는, 상기 (V) 단계에 앞서, C++ 클래스로 작성된 서브 함수 모듈 클래스들을 인스턴스화하는 단계를 더 포함할 수 있다.If the current iteration is the first iteration to perform the sub function module to be called in the step (V), prior to the step (V), the method may further include instantiating the sub function module classes written in the C ++ class. Can be.
바람직하게는, 상기 (V) 단계는,Preferably, the step (V) is,
만약 현재 이터레이션이 하위 서브 함수 모듈을 수행하는 첫 이터레이션일 경우에 상기 하위 서브 함수 모듈들을 호출하기에 앞서, C++ 클래스로 작성된 상기 하위 서브 함수 모듈 클래스들을 인스턴스화하는 단계; 및If the current iteration is the first iteration to perform a lower subfunction module, instantiating the lower subfunction module classes written in a C ++ class prior to calling the lower subfunction modules; And
상기 하위 서브 함수 모듈을 호출하여 실행하는 단계를 더 포함할 수 있다.The method may further include calling and executing the lower sub function module.
바람직하게는, 상기 고급 프로그래밍 언어는 C 언어이고, Preferably, the high level programming language is C language,
상기 디지털 집적 회로의 시뮬레이션 및 검증 방법은,Simulation and verification method of the digital integrated circuit,
(I) 단계에 앞서, 이터레이션에 진입하기 전에, 상기 최상위 함수 모듈 및 서브 함수 모듈들에 사용될 모든 와이어 변수들 및 레지스터들의 입력 변수들 및 출력 변수들을 정의하는 단계를 더 포함할 수 있다.Prior to step (I), the method may further include defining input variables and output variables of all wire variables and registers to be used in the top-level function module and sub-function modules before entering the iteration.
바람직하게는, 상기 (V) 단계는, Preferably, the step (V) is,
상기 서브 함수 모듈내에서 정의된 모든 레지스터들의 출력 변수 값을 각 레지스터들의 입력 변수 값으로써 갱신하는 단계;Updating output variable values of all registers defined in the sub function module with input variable values of respective registers;
상기 서브 함수 모듈 내의 로직들의 연산을 순차적으로 수행하는 단계; 및Sequentially performing operations of logics in the sub function module; And
상기 최상위 함수 모듈 내에 정의된 레지스터들 중 상기 서브 함수 모듈 내에서 정의된 로직이나 레지스터의 출력에 연결된 레지스터들과 상기 서브 함수 모듈 내에서 정의된 레지스터들 중에서 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수를 각각의 로직들의 연산 결과들에 따라 갱신하는 단계를 포함할 수 있다.Corresponding to the activated at least one clock edge among the registers defined in the uppermost function module and those connected to the logic or register output defined in the subfunction module and those defined in the subfunction module. Updating the input variable of the operating registers according to the operation results of the respective logics.
본 발명의 또 다른 측면에 따른, 순차 실행 고급 프로그래밍 언어를 이용하 여 하나 이상의 로직들 및 하나 이상의 레지스터들이 하나 이상의 클럭들에 따라 각각 동작하도록 디지털 집적 회로를 시뮬레이션 및 검증하는 방법은,According to another aspect of the present invention, a method for simulating and verifying a digital integrated circuit such that one or more logics and one or more registers respectively operate according to one or more clocks using a sequential execution advanced programming language,
(가) 상기 클럭의 클럭 에지들 중 적어도 하나의 클럭 에지를 각 클럭 에지의 인가 순서에 따라 활성화하는 단계;(A) activating at least one clock edge of the clock edges of the clock in the order of application of each clock edge;
(나) 상기 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신하는 단계;(B) updating the output variables of the registers corresponding to the activated at least one clock edge by the value of the input variables of the respective registers, respectively;
(다) 각각의 로직들의 연산을 순차적으로 실행하는 단계;(C) sequentially executing operations of respective logics;
(라) 상기 모든 레지스터들의 입력 변수들을 상기 각각의 로직들과 레지스터들로부터 제공된 결과들에 의해 각각 갱신하는 단계; 및(D) updating input variables of all the registers respectively with the respective logics and results provided from registers; And
(마) 상기 디지털 집적 회로의 검증을 종료할 때까지 (가) 내지 (라)의 이터레이션을 반복하는 단계를 포함할 수 있다.(E) repeating the iterations of (a) to (d) until the verification of the digital integrated circuit is completed.
본 발명의 또 다른 측면에 따른, 순차 실행 고급 프로그래밍 언어를 이용하여 하나 이상의 로직들 및 하나 이상의 레지스터들이 하나 이상의 클럭들에 따라 각각 동작하도록 디지털 집적 회로를 설계, 시뮬레이션 및 검증하는 방법은,In accordance with another aspect of the present invention, a method of designing, simulating, and verifying a digital integrated circuit such that one or more logics and one or more registers respectively operate according to one or more clocks using a sequential execution advanced programming language,
각각의 로직들의 연산에 대해, 상기 각 로직에 입력되는 레지스터들의 출력 변수들이 각각의 레지스터들의 입력 변수들의 값에 의해 갱신되는 구문이 상기 각 로직의 연산 구문보다 먼저 위치하고, 또한 상기 레지스터들의 입력 변수들이 상기 각각의 로직들로부터 제공된 연산 결과들에 의해 각각 갱신되는 구문은 상기 각 로직의 연산 구문보다 뒤에 위치하도록, 고급 프로그래밍 언어 입력기를 통해 상기 구문들을 입력받는 단계; 및For the operation of the respective logics, the syntax in which the output variables of the registers input to each logic are updated by the value of the input variables of the respective registers is located before the operation syntax of each logic, and the input variables of the registers Receiving the phrases through a high-level programming language input such that the syntax, each updated by the arithmetic results provided from the respective logics, is located after the operational syntax of each logic; And
상기 입력 받은 구문들을 고급 프로그래밍 언어 컴파일러를 통해 실행파일로 만들고 실행하는 단계를 포함할 수 있다.It may include the step of making the input syntax to an executable file through an advanced programming language compiler.
본 발명의 실시예를 이용하면, C나 C++ 언어를 이용하여 베릴로그나 VHDL 같은 HDL 언어와 유사하거나 사실상 동일한 구조의 구문으로 디지털 집적 회로를 설계하고 검증할 수 있다. 시뮬레이션 시간이 훨씬 짧고 오류 발견과 수정이 편리하며, 시스템 엔지니어나 하드웨어 엔지니어 모두 접근하기 쉽기 때문에 개발 기간을 대단히 감축시킬 수 있다.Using embodiments of the present invention, it is possible to design and verify digital integrated circuits using syntaxes similar or substantially identical to HDL languages such as beryllog or VHDL using C or C ++ languages. The simulation time is much shorter, error detection and correction is convenient, and accessible to both system engineers and hardware engineers, greatly reducing development time.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다. With respect to the embodiments of the present invention disclosed in the text, specific structural to functional descriptions are merely illustrated for the purpose of describing embodiments of the present invention, embodiments of the present invention may be implemented in various forms and It should not be construed as limited to the embodiments described in.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다. Hereinafter, with reference to the accompanying drawings, it will be described in detail a preferred embodiment of the present invention. The same reference numerals are used for the same constituent elements in the drawings and redundant explanations for the same constituent elements are omitted.
본 발명은 디지털 집적 회로뿐 아니라, PCB(인쇄 회로 기판) 내지 전자 시스템에 이르기까지 다양한 수준에서 적용될 수 있지만, 설명의 편의를 위해 본 명세서에서는 디지털 집적 회로에 관하여 주로 예시한다.Although the present invention can be applied at various levels ranging from printed circuit boards (PCBs) to electronic systems as well as digital integrated circuits, the present specification mainly illustrates digital integrated circuits for convenience of description.
본 발명은 디지털 집적 회로뿐 아니라, PCB(인쇄 회로 기판) 내지 전자 시스템에 이르기까지 다양한 수준에서 적용될 수 있지만, 설명의 편의를 위해 본 명세서에서는 디지털 집적 회로에 관하여 주로 예시한다.Although the present invention can be applied at various levels ranging from printed circuit boards (PCBs) to electronic systems as well as digital integrated circuits, the present specification mainly illustrates digital integrated circuits for convenience of description.
본 발명은 다양한 고급 프로그래밍 언어들을 이용한 디지털 집적 회로 설계에 적용될 수 있지만, 설명의 편의를 위해 본 명세서에서는 C나 C++와 같은 고급 프로그래밍 언어로 설계, 시뮬레이션 및 검증하는 방법을 주로 예시한다.도 1a는 통상적인 간단한 디지털 집적 회로를 예시한 블록도이고, 도 1b는 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로의 설계 방법론을 도 1a의 디지털 집적 회로에 적용하기 위한 전제를 개념적으로 예시한 블록도이며, 도 1c는 서로 다른 클럭이 사용될 경우에도 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로의 설계 방법론을 도 1a의 디지털 집적 회로에 적용할 수 있음을 예시한 타이밍도이다.Although the present invention can be applied to digital integrated circuit design using various high-level programming languages, for the sake of convenience of description, the present disclosure mainly illustrates a method of designing, simulating, and verifying in a high-level programming language such as C or C ++. 1B is a block diagram illustrating a conventional simple digital integrated circuit, and FIG. 1B conceptually illustrates the premise for applying a design methodology of a digital integrated circuit using an advanced programming language to the digital integrated circuit of FIG. 1A according to an embodiment of the present invention. FIG. 1C illustrates that the design methodology of a digital integrated circuit using an advanced programming language according to an embodiment of the present invention can be applied to the digital integrated circuit of FIG. 1A even when different clocks are used. Timing diagram.
도 1a를 참조하면, 예시적인 디지털 집적 회로에는 로직 (logic) 회로 A와 로직 회로 B가 포함되어 있다.Referring to FIG. 1A, an example digital integrated circuit includes logic circuit A and logic circuit B. FIG.
종래에 집적 회로를 하드웨어 기술 언어(HDL)로 구현할 경우에는, 클럭 신호, 로직 회로들의 입/출력, 레지스터들(registers)의 저장 비트뿐 아니라, 이들을 서로 연결하는 와이어들(wire)을 각각 변수로 지정하고, 로직 회로들과 레지스터들이 와이어들로써 연결되는 회로 네트워크를 기술(description)한다. HDL을 이용한 설계에서는 구성요소들의 연결 관계만 HDL로 정확히 기술하면, HDL 컴파일러와 시뮬레이션 툴이 자동으로 시간의 흐름(클럭 신호의 인가)에 따른 하드웨어의 동작을 추상적으로 시뮬레이션한다.Conventionally, when an integrated circuit is implemented in a hardware description language (HDL), variables such as clock signals, input / output of logic circuits, storage bits of registers, as well as wires connecting them to each other are used as variables. Specifies a circuit network in which logic circuits and registers are connected by wires. In the design using HDL, if only the connection of components is accurately described in HDL, the HDL compiler and simulation tool automatically abstracts the behavior of the hardware over time (application of clock signal).
조합(combinational) 로직(logic) 회로들은 클럭 신호에 상관없이 입력값이 변하면 로직 연산에 따른 출력값이 출력되는 특성을 가지며, 저장 수단을 포함하지 않는다. 이때, 출력값은 입력값 변화 뒤 매우 짧은 시간 지연(delay) 후에 변하게 된다. 반면 레지스터들은 입력값이나 클럭의 인가에 따라 출력값이 변하고, 조건이 변경할 때까지 그 값을 유지하므로 저장 공간으로 사용된다. 많이 사용되는 레지스터는 크게 두 가지로 나뉘는데 클럭의 에지(edge) 시점에 출력값을 변화시키는 에지 트리거드(edge triggered) 디 플립플롭(D flip-flop)과 입력값에 따라 바로 출력값을 변화시키는 래치(latch) 타입이 그것이다.Combinational logic circuits have a characteristic that an output value according to a logic operation is output when an input value changes regardless of a clock signal, and does not include a storage means. At this time, the output value changes after a very short time delay after the input value change. On the other hand, registers are used as storage space because the output value changes according to the input value or clock application, and the value is maintained until the condition changes. There are two main types of registers used: edge triggered D flip-flop, which changes the output value at the edge of the clock, and a latch that changes the output value immediately according to the input value. latch) type.
통상적으로, 로직 회로는 다른 로직 회로의 출력값이나 외부 입력값들, 레지스터의 저장값들 등을 입력으로 하여 연산되므로, 로직 회로를 프로그램 구문으로 표현하기 위해 그 로직 회로에 입력되는 값들과 출력되는 값들이 각각 변수로 정의되고 사용된다. 반면에, 일반적으로 레지스터는 로직 회로의 연산 결과를 저장하고 그 저장된 값이 다른 로직 회로에 입력되므로, 레지스터를 프로그램 구문으로 표현하기 위해서는 저장값을 변수로 정의하고 사용된다.In general, since a logic circuit is operated by inputting output values of external logic circuits, external input values, stored values of registers, or the like, the values input to the logic circuits and output values to express the logic circuits in a program syntax. Are each defined and used as variables. On the other hand, registers generally store the operation results of logic circuits and their stored values are input to other logic circuits, so that the stored values are defined and used to represent registers in program syntax.
이와 유사하게, HDL에서는, 조합 로직 회로를 그 로직 회로의 동작에 상응하는 구문들의 집합인 '로직 회로 구문'으로써 기술하고, 클럭 신호, 레지스터들의 출력과 와이어들은 그 값을 변수로 선언 및 사용한다. 레지스터의 앞 단에 있는 로직 회로의 출력 또는 와이어의 로직 값이 레지스터에 입력되면 그것이 곧 레지스터에서 출력되는 값이 되므로, 레지스터는 하나의 저장 공간, 즉 하나의 변수로 표현 된다.Similarly, in HDL, combinatorial logic circuits are described as 'logic circuit syntax', which is a set of syntaxes that correspond to the operation of the logic circuit, and clock signals, outputs of registers and wires declare and use their values as variables. . When the logic value of the output or wire of the logic circuit in front of the register is input to the register, it is the value output from the register, so the register is represented by one storage space, or one variable.
도 1a에서, 한 주기의 클럭이 인가되면, 로직 회로 A와 로직 회로 B는 각각 앞단의 레지스터의 출력 및 그 밖의 입력 값을 입력받고, 그 클럭이 끝나기 전에 각자의 로직 연산을 마친 후에 연산 결과 값들을 각각 레지스터 입력 단자 D에 인가한다. 각 레지스터는, 로직 연산 결과 값들을 저장한다. 이러한 과정이 반복된다. 즉, 이어서 다음 주기의 클럭이 인가되면, 로직 회로 A, B는 각각 앞단의 레지스터에 저장되어 있던 이전 연산 결과 값을 입력받고 로직 연산을 반복한다.In FIG. 1A, when a cycle of clock is applied, logic circuit A and logic circuit B each receive the output of the previous register and other input values, and after the completion of their logic operation before the clock ends, the operation result value. To the resistor input terminal D, respectively. Each register stores logic operation result values. This process is repeated. That is, when the clock of the next cycle is subsequently applied, the logic circuits A and B each receive the previous operation result value stored in the previous register and repeat the logic operation.
도 1a에 예시된 회로의 하드웨어 레벨 동작을 구체적으로 설명하면, 로직 회로 A는 클럭 1의 인가 시점에서 입력 값 IN_A1과 레지스터 B로부터 출력된 최초의 출력 값 OUT_B0을 입력받아 로직 연산(logic operation) 후 출력 OUT_A1를 내놓는다. 출력 OUT_A1은 클럭 1 주기가 끝나기 전에 세틀링(settling)되어 레지스터 A의 입력 단자 D에 인가된다.Specifically, the hardware level operation of the circuit illustrated in FIG. 1A will be described. After the logic operation, the logic circuit A receives the input value IN_A1 and the first output value OUT_B0 output from the register B at the time of applying the
한편, 로직 회로 B는 클럭 1의 인가 시점에서 출력된 레지스터 A의 출력 OUT_A0와 입력 IN_B1를 입력받아 로직 연산 후 출력 OUT_B1를 내놓는다. 출력 OUT_B1은 클럭 1 주기가 끝나기 전에 세틀링되어 레지스터 B의 입력 단자 D에 인가된다.Meanwhile, the logic circuit B receives the output OUT_A0 and the input IN_B1 of the register A output at the time of applying the
이어서, 클럭 2의 인가 시점에, 레지스터 A 및 B는 각각의 출력 단자 Q에서 각각 출력값 OUT_A1와 OUT_B1을 출력하고, 클럭 2의 주기 내내, 출력 OUT_A1의 값과 출력 OUT_B1의 값을 유지한다. 클럭 2의 인가와 함께, 로직 회로 A는 입력 값 IN_A2와 레지스터 B로부터 출력 값 OUT_B1을 입력받아 로직 연산 후 출력 OUT_A2를 내놓는다. 로직 회로 B는 클럭 2의 인가에 따라 출력된 레지스터 A의 출력 OUT_A1와 입력 IN_B2를 입력받아 로직 연산 후 출력 OUT_B2를 내놓는다.Then, at the time of applying the
출력 OUT_A2 및 OUT_B2는 각각 클럭 2의 주기가 끝나기 전에 세틀링되어 레지스터 A 및 B의 각각의 입력 단자 D에 인가된다.Outputs OUT_A2 and OUT_B2 are settled before the end of
레지스터 A 및 B는, 이후 클럭 3의 시작 시점부터 클럭 3의 주기 내내, 각각의 출력 단자 Q에서 출력 OUT_A2의 값과 출력 OUT_B2의 값을 유지한다.Registers A and B then retain the value of output OUT_A2 and the value of output OUT_B2 at each output terminal Q, from the beginning of
HDL로 작성된 이러한 집적 회로의 시뮬레이션 동작을 클럭 신호와 함께 나타내자면, 한 차례 클럭의 인가에 따른 하드웨어의 동작은, 해당 알고리즘이 한 차례 이터레이션(iteration)되는 방식으로 시뮬레이션된다.To represent the simulation operation of such an integrated circuit written in HDL together with a clock signal, the operation of hardware according to application of a clock is simulated in such a manner that the algorithm is iterated once.
이때, 이터레이션은 현재 클럭의 에지 직후에서 다음 클럭의 에지 직전까지의 클럭 구간 동안의 실제 하드웨어 동작을 모방하여 이루어진다. 여기서, 클럭의 천이는 대단히 짧고 즉각적이라고 가정한다.At this time, iteration is performed by mimicking actual hardware operation during the clock period from immediately after the edge of the current clock to just before the edge of the next clock. Here, suppose the transition of the clock is very short and immediate.
예를 들어, 클럭 구간 1에서, HDL로 작성된 시뮬레이션의 이터레이션은 각각의 로직 회로 구문 A 및 B가 입력 값들을 로딩하는 동작에서 시작하여, 로직 회로 구문 A 및 B가 구동된 후 그 연산 결과가 각각 레지스터 변수 A 및 B에 저장되는 동작으로 마무리된다. 이어지는 클럭 구간 2에서, 두 번째 이터레이션도 레지스터 변수 A 및 B의 값들과 외부 입력 값들을 로직 회로 구문 A 및 B에서 각각 읽어들이면서 시작되어, 로직 회로 구문 A 및 B의 연산 결과가 각각 레지스터 변수 A 및 B에 저장되면서 끝난다.For example, in
이러한 종래의 HDL을 이용하여 하드웨어를 기술하는 하드웨어 엔지니어는, HDL 컴파일러가 구성요소들의 동작과 변수들을 시간 별로 엄격하게 관리하기 때문에, 구성요소들이 기술되는 순서를 전혀 신경쓰지 않아도 된다.Hardware engineers who describe hardware using these conventional HDLs do not have to worry about the order in which the components are described because the HDL compiler strictly manages the behavior and variables of the components over time.
그러나, C나 C++과 같은 순차적 실행 고급 프로그래밍 언어를 사용하는 시스템 엔지니어는, 고급 프로그래밍 언어로 컴파일된 프로그램 구문들이 기술된 순서대로 동작하기 때문에, 만약 C나 C++과 같은 고급 프로그래밍 언어로 HDL을 모방하여 위와 같이 하드웨어를 기술하려면, 시간상의 동작 순서를 항상 염두에 두고 프로그래밍 구문을 작성하여야 한다.However, a system engineer using a sequential high-level programming language such as C or C ++ will be able to mimic HDL with a high-level programming language such as C or C ++ because program syntaxes compiled in the high-level programming language operate in the order described. In order to describe the hardware as above, programming statements should always be written keeping in mind the order of operation in time.
예를 들어, 레지스터 변수 B는 둘 이상의 조합(combinational) 로직 회로 구문들에 중복되어 사용되므로(로직 회로 구문 A의 출력이면서 로직 회로 구문 B의 입력), 앞단의 로직 회로 구문 A의 현재 연산이 끝날 때 갱신되었다가, 다음 연산 때 로직 회로 구문 B에서 호출되어야 한다. 따라서, C나 C++ 언어로 레지스터의 갱신과 호출을 프로그래밍하고자 한다면, 엔지니어는 로직 회로 구문들이나 레지스터에 관한 구문의 배치 순서에 대단히 신경을 써야 한다. 그러나, 현실적으로 조합 로직 회로와 레지스터들은 서로 복잡하게 얽혀있으므로 엔지니어가 동작 순서를 고려하여 오류없이 프로그래밍하는 것은 사실상 불가능하다.For example, register variable B is used redundantly in two or more combinational logic circuit constructs (the output of logic circuit syntax A and the input of logic circuit syntax B), so that the current operation of the preceding logic circuit syntax A is finished. Must be updated and called in logic circuit syntax B on the next operation. Therefore, if you want to program the updating and calling of registers in the C or C ++ language, the engineer must be very careful about the logic circuit syntax or the order in which the statements about the registers are placed. In reality, however, combinatorial logic circuits and registers are intricately intertwined, making it virtually impossible for an engineer to program without errors, taking into account the order of operation.
도 1b는 시스템 엔지니어가 시간상의 동작 순서를 고려하지 않고 C나 C++과 같은 고급 프로그래밍 언어로 하드웨어를 기술할 수 있는, 본 발명의 실시예에 따른 디지털 집적 회로의 설계 및 검증 방법을 적용하기 위한 전제를 설명한다.FIG. 1B is a prerequisite for applying a method of designing and verifying a digital integrated circuit according to an embodiment of the present invention, in which a system engineer can describe hardware in an advanced programming language such as C or C ++ without considering a sequence of operations in time. Explain.
도 1b를 참조하면, 도 1a와 거의 유사한 디지털 집적 회로가 예시되어 있다. 그러나, 도 1a에서는 레지스터가 하나의 변수로 표현되는 것에 반해, 도 1b에서는 레지스터의 입력 단자 D와 출력 단자 Q의 값이 각각 변수로 선언 및 사용된다.Referring to FIG. 1B, a digital integrated circuit that is substantially similar to FIG. 1A is illustrated. However, in FIG. 1A, the register is represented by one variable, whereas in FIG. 1B, the values of the input terminal D and the output terminal Q of the register are declared and used as variables, respectively.
또한 이터레이션의 시작과 끝도 도 1a의 경우와 다르다. 도 1a의 종래 기술에서는 클럭이 인가된 직후부터 이터레이션이 개시되며, 한 이터레이션은 로직 연산하는 동작, 레지스터 변수에 로직 연산 결과를 저장하는 동작, 현재 클럭을 종료하는 동작으로 진행되는 개념인 것에 반해, 도 1b의 본 발명에서는 이터레이션은 현재 클럭을 인가하는 동작, 레지스터의 출력 변수를 갱신하는 동작, 로직 연산하는 동작, 레지스터 입력 변수에 로직 연산 결과를 저장하는 동작으로 진행되는 개념이다.The start and end of the iteration are also different from those of FIG. 1A. In the prior art of FIG. 1A, iteration starts immediately after a clock is applied, and one iteration is a concept of proceeding with a logic operation, storing a logic operation result in a register variable, and terminating the current clock. In contrast, in the present invention of FIG. 1B, iteration is a concept that proceeds to applying a current clock, updating an output variable of a register, performing a logic operation, and storing a logic operation result in a register input variable.
나아가, 종래의 HDL나 이를 모방하여 고급 프로그래밍 언어로 작성된 시뮬레이션에서는 하나의 레지스터에 대해 하나의 레지스터 변수를 이용하고 모든 레지스터 변수들을 엄격하게 관리함으로써 동작 순서의 제약을 해소하는 것과 달리, 도 1b에서 본 발명의 시뮬레이션의 고급 프로그래밍 언어로 작성된 이터레이션은, 레지스터를 레지스터 입력 변수(앞 단의 로직 회로의 연산 결과를 위한 변수)와 레지스터 출력 변수(다음 단의 로직 회로에 대한 입력을 위한 변수)로 분리하여 추상화함으로써, 레지스터 변수들을 엄격하게 관리할 필요성을 제거할 수 있다.Furthermore, in the conventional HDL or a simulation written in a high-level programming language that mimics the same, as shown in FIG. 1B, unlike the limitation of the operation order by using one register variable for one register and strictly managing all register variables, Iteration, written in the high-level programming language of the simulation of the invention, separates registers into register input variables (variables for the operation results of the previous logic circuit) and register output variables (variables for input to the next logic circuit). This abstraction eliminates the need to strictly manage register variables.
본 발명의 시뮬레이션에서, 현재 이터레이션이 시작되면, 클럭이 인가되고, 각 레지스터들의 입력 변수들(이전 이터레이션 동안에 각각의 앞단의 로직 회로 구문들의 연산 결과들이 각 레지스터들의 입력 변수에 저장되었다)의 값에 따라 각 레지스터들의 출력 변수들이 갱신된다. 이렇게 각각의 레지스터들의 출력 변수가 갱신되고 나면, 비로소 그러한 출력 변수들을 입력으로 하는 로직의 연산 구문들이 실행된다.In the simulation of the present invention, when the current iteration is started, a clock is applied and the input variables of the respective registers (the operation results of each preceding logic circuit syntaxes were stored in the input variables of the respective registers during the previous iteration). Depending on the value, the output variables in each register are updated. Thus, after the output variables of each register are updated, the operation syntax of logic that takes such output variables as input is executed.
바꾸어 말하면, 로직 회로 구문들 내의 코드들이 실행되기 전에, 그러한 로직 회로 구문들의 입력으로 이용되는 모든 레지스터들의 출력 변수들이 이전 이터레이션 때의 레지스터의 입력 변수들로써 갱신되어야 한다. 각 로직 회로 구문들의 연산 결과는, 다음 클럭이 인가되기 직전에, 뒷단의 레지스터들의 입력 변수에 저장된다. 여기서 현재 이터레이션이 종료되고, 곧바로 다음 이터레이션이 반복된다.In other words, before the codes in the logic circuit statements are executed, the output variables of all the registers used as input of those logic circuit statements must be updated with the input variables of the register at the previous iteration. The result of the calculation of each logic circuit syntax is stored in the input variable of the back registers just before the next clock is applied. The current iteration ends here, and the next iteration is repeated immediately.
도 1b에서 레지스터 A 및 B의 출력 값 Q는, 클럭의 인가 직후에, 직전 이터레이션의 레지스터 A 및 B의 입력 값 D에 의해 갱신된다. 따라서, 그 이후에 실행되는 로직 회로 A 및 B는 최신의 레지스터 A 및 B의 출력 값을 제공받아 원하는 바대로 동작할 수 있다. 다음 클럭 인가 직전에, 로직 회로 A 및 B의 연산 결과는 레지스터 A 및 B의 입력 D에 각각 저장된다.In Fig. 1B, the output values Q of the registers A and B are updated by the input values D of the registers A and B of the immediately preceding iteration, immediately after the clock is applied. Thus, subsequent logic circuits A and B can receive the output values of the latest registers A and B and operate as desired. Immediately before the next clock application, the results of the computation of logic circuits A and B are stored in inputs D of registers A and B, respectively.
따라서, 도 1b에서 일어나는 시뮬레이션에서는, 집적 회로 내의 로직 회로들이 각각의 연산에 들어가기에 앞서, 그 로직 회로들의 입력으로 인가되는 모든 레지스터들이 최신의 값들을 저장하고 출력한다는 점이 보장된다.Thus, in the simulation occurring in FIG. 1B, it is ensured that all registers applied to the input of the logic circuits store and output the latest values before the logic circuits in the integrated circuit enter each operation.
또한, 이러한 각 동작은 순차적으로 일어나므로, 시스템 엔지니어가 이러한 동작에 상응하는 RTL 레벨에서의 집적 회로의 구성을, 마치 소프트웨어 알고리즘을 작성하듯, 고급 프로그래밍 언어를 이용하여 순차적으로 기술할 수 있다.In addition, since each of these operations takes place sequentially, the system engineer can describe the configuration of the integrated circuit at the RTL level corresponding to this operation sequentially using a high-level programming language, as if writing a software algorithm.
도 1c를 참조하면, 레지스터 A에는 클럭 A가 인가되고, 레지스터 B에는 클럭 B가 인가되는 경우에, 레지스터 A 및 B의 입력 단자에 인가되는 신호의 타이밍이 예시되어 있다.Referring to Fig. 1C, when the clock A is applied to the register A and the clock B is applied to the register B, the timing of the signal applied to the input terminals of the registers A and B is illustrated.
클럭 B는 예를 들어 클럭 A의 주파수의 2배에 해당하는 주파수를 가지는 클럭이다. 클럭 B는 클럭 A의 배수일 수도 있고 배수가 아닐 수도 있다. 통상적으로 두 클럭이 배수 관계가 아닐 경우, 두 클럭의 상대적인 에지 위치가 어떻든지 간에 원하는 동작을 하게 하기 위해서는 서로 다른 클럭이 인가되는 회로들 사이에 버퍼 등의 추가적인 하드웨어 구성이 필요하다.Clock B is, for example, a clock having a frequency corresponding to twice the frequency of clock A. Clock B may or may not be a multiple of clock A. Typically, when the two clocks are not a multiple, the additional hardware configuration, such as a buffer, is required between circuits to which different clocks are applied to achieve the desired operation no matter what the relative edge positions of the two clocks are.
다만, 본 발명에서 목적하는 집적 회로의 시뮬레이션은 집적 회로가 소자 레벨에서 물리적으로 동작하는 것을 검증하기 위한 것이 아니라, 레지스터와 로직 회로 레벨에서 동작하는 것을 논리적이고 추상적으로 검증하기 위한 것이다. 따라서, 본 발명의 시뮬레이션에서는 클럭의 비동기에 대처하기 위한 추가적인 하드웨어 구성은 포함하지 않을 수 있다.However, the simulation of the integrated circuit desired in the present invention is not to verify that the integrated circuit is physically operated at the device level, but to logically and abstractly verify that the integrated circuit is operated at the register and logic circuit levels. Therefore, the simulation of the present invention may not include additional hardware configuration to cope with clock asynchronous.
주의할 점은, 도 1c는 실제 물리적인 시간을 반영한 것이라기 보다는, 클럭의 에지에서 일어나는 동작을 논리적으로 분해 및 조합하였다는 것이다. 예를 들어, 클럭 에지가 인가되는 짧은 시간 동안 레지스터 출력의 갱신, 로직 연산, 레지스터 입력의 갱신 동작이 순차적으로 모두 일어난다.Note that Figure 1C does not reflect the actual physical time, but rather logically decomposes and combines the operations that take place at the edge of the clock. For example, updating the register output, logic operation, and updating the register input all take place sequentially during the short time that the clock edge is applied.
도 1c에서는, 예를 들어, 40 MHz의 클럭 A가 레지스터 A에 인가되고 80 MHz 클럭 B가 레지스터 B에 인가된다.In Fig. 1C, for example, a 40 MHz clock A is applied to register A and an 80 MHz clock B is applied to register B.
T1 시점에, 클럭 A 및 B는 모두 상승 에지로서, 두 클럭 A 및 B가 인가된다고 이해된다. T1에 따라 레지스터 A 및 B와 로직 회로 A 및 B의 동작이 순간적으로 수행된다.At the time T1, it is understood that clocks A and B are both rising edges, so that both clocks A and B are applied. According to T1, the operation of registers A and B and logic circuits A and B is performed instantaneously.
T1a 시점에서 레지스터 A 및 B의 출력 변수들은 모두 각각의 레지스터 A 및 B의 입력 변수 값들(즉 직전의 클럭에서 각 레지스터에 입력된 값들)에 의해 갱신된다. T1b 구간에서 로직 회로 구문 A 및 B의 프로그래밍 코드가 구동된다.At the time T1a, the output variables of registers A and B are both updated by the input variable values of each register A and B (i.e., the values input to each register at the previous clock). In the period T1b, the programming codes of logic circuit syntaxes A and B are driven.
T1c 시점에서는, T1에서 클럭 A 및 클럭 B가 모두 인가되었으므로, 레지스터 A 및 B의 입력 변수들 모두가 로직 회로 구문 A 및 B의 연산 결과에 따라 각각 갱신된다. At time T1c, since both clock A and clock B are applied at T1, both input variables of registers A and B are updated according to the operation result of logic circuit syntaxes A and B, respectively.
T2 시점에서 클럭 B의 에지만 인가된다. T2a 시점에서 레지스터 A 및 B의 출력 변수들이 다시 한번 모두 각각의 레지스터 A 및 B의 입력 변수 값들에 의해 갱신된다.Only the edge of clock B is applied at time T2. At time T2a, the output variables of registers A and B are once again updated by the input variable values of registers A and B respectively.
T2b 구간에서 로직 회로 구문 A 및 B의 프로그래밍 코드가 구동된다. 레지스터 B의 입력 변수는 로직 회로 B의 연산 결과에 의해 갱신된다. 하지만, 클럭 A가 T2 시점에서 인가되지 않았으므로, T2b 구간에서 수행된 로직 회로 구문 A의 연산의 결과는 T2c에서 레지스터 A의 입력 변수에 입력되지 않고 버려진다. In the period T2b, the programming codes of logic circuit syntaxes A and B are driven. The input variable in register B is updated by the operation result of logic circuit B. However, since clock A is not applied at time T2, the result of the operation of logic circuit syntax A performed in the period T2b is discarded without being input to the input variable of register A in T2c.
곧이어 T3 시점에서 클럭 A와 B가 인가되고, T3a, T3b, T3c에서 T1-T2 사이 구간의 동작이 반복된다.Subsequently, clocks A and B are applied at the time T3, and the operation of the interval between T1-T2 at T3a, T3b, and T3c is repeated.
앞서 설명하였지만, 레지스터의 입력 값이 레지스터의 출력 값으로 전달되어 레지스터의 출력 값이 최신의 값으로 갱신되는 동작은 다음 단의 로직 회로의 연산이 있기 전에 수행되어야 한다. 또한, 갱신된 레지스터의 출력 값은 새로이 레지스터의 입력 값이 갱신되고 다음 클럭이 인가되기 전까지는 유지되어야 한다.As described above, an operation in which the input value of the register is transferred to the output value of the register and the output value of the register is updated to the latest value should be performed before the operation of the next logic circuit. In addition, the output value of the updated register must be maintained until the input value of the register is newly updated and the next clock is applied.
따라서, 본 발명의 일 실시예에서, 레지스터의 출력 갱신 동작은, 해당 레지 스터에 인가되는 클럭이 아니더라도, 어떠한 클럭 신호의 인가가 있으면 수행된다. 반면에, 로직 회로의 연산 결과가 레지스터 입력 값에 전달되어 레지스터 입력 값이 갱신되는 동작은 해당 레지스터에 인가되는 클럭의 에지일 때에만 수행된다.Therefore, in one embodiment of the present invention, the output update operation of the register is performed if any clock signal is applied, even if the clock is not applied to the corresponding register. On the other hand, the operation of the logic circuit is transferred to the register input value and the register input value is updated only at the edge of the clock applied to the register.
이와 다르게, 본 발명의 다른 실시예에서는, 한 이터레이션 중에, 레지스터의 출력 변수는 그 레지스터의 동작에 연관된 클럭이 인가될 경우에만 갱신하지만, 레지스터의 입력 변수는 그 이터레이션이 종료되기 전에 항상 갱신되도록 할 수도 있다. 예를 들어 T2 시점에 클럭 B의 인가에서는 클럭 A가 인가되지 않는 이상 레지스터 A의 출력 변수는 갱신되지 않으며, 다만 T2c 시점에서 레지스터 A의 입력 변수는 로직 회로 A의 연산 결과에 따라 갱신된다.Alternatively, in another embodiment of the present invention, during one iteration, the register's output variable is updated only when the clock associated with its register operation is applied, while the register's input variable is always updated before the iteration ends. You can also For example, in the application of clock B at time T2, the output variable of register A is not updated unless clock A is applied. However, at time T2c, the input variable of register A is updated according to the operation result of logic circuit A.
본 발명의 또 다른 실시예에서는, T2b에서는 어차피 그 결과가 버려질 로직 회로 구문 A의 연산을 수행하지 않을 수 있다. 다만, 이 경우에 약간의 시뮬레이션 속도 상승을 예상할 수 있지만, 실제 하드웨어의 구성과 상관없는 서로 다른 클럭 주파수에서 로직 회로 구문들의 실행 여부의 판단 알고리즘이 필요할 수 있다.In another embodiment of the present invention, T2b may not perform the operation of logic circuit syntax A, whose result is to be discarded anyway. In this case, however, a slight simulation speed increase may be expected, but an algorithm for determining whether to execute logic circuit statements at different clock frequencies may be required regardless of the actual hardware configuration.
이러한 방법들을 통해, 본 발명의 실시예들은 서로 다른 클럭 주파수들을 가진 집적 회로에서도 설계 및 검증 방법의 일관성을 유지할 수 있다.Through these methods, embodiments of the present invention can maintain the consistency of the design and verification method even in integrated circuits with different clock frequencies.
도 2는 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 개략적으로 나타내는 순서도이다.2 is a flowchart schematically illustrating a digital integrated circuit design and verification method using an advanced programming language according to an embodiment of the present invention.
도 2를 참조하면, 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계, 시뮬레이션 및 검증 방법은 다음 단계들(S21 내지 S24)로 이루어진 이터레이션들이 반복됨으로써 이루어진다.Referring to FIG. 2, a digital integrated circuit design, simulation, and verification method using an advanced programming language is achieved by iterations of the following steps S21 to S24.
본 발명에서, 이터레이션은 실제 하드웨어의 동작을 논리적으로 추상화한 반복 실행의 단위이다. 이때, 하나의 클럭을 이용하는 경우에는 이터레이션은 한 주기의 클럭구간과 일치한다. 그러나, 다수의 서로 다른 클럭들을 이용하는 경우에는, 이터레이션은 클럭들 중 어느 한 클럭의 에지가 인가된 시점부터 그 이후 가장 먼저 아무 클럭의 에지든 인가되는 시점까지의 구간이다.In the present invention, iteration is a unit of repetitive execution that logically abstracts the operation of real hardware. In this case, when one clock is used, the iteration coincides with a clock period of one period. However, in the case of using a plurality of different clocks, iteration is an interval from the time when an edge of one of the clocks is applied to the time when the edge of any clock is applied first.
집적 회로는 입력 단자들, 출력 단자들, 클럭 신호들, 다수의 하드웨어 블록들, 로직들, 와이어들, 레지스터들로 구성된다. 하나의 하드웨어 블록은 하나의 함수(function) 모듈로 표현된다. 함수 모듈은 그 하드웨어 블록이 수행하는 알고리즘을 구현하기 위한 로직들과 변수화된 레지스터들을 포함한다. 하드웨어 블록들은 적어도 하나 이상의 레지스터를 통해서만 서로 연결된다. 레지스터들은 각각의 클럭 신호들 중 하나에 따라 동작하며, 상기 각각의 로직과 하드웨어 블록들의 연산 결과를 저장하고, 각각 입력 변수와 출력 변수로써 추상화된다. 그 밖에, 입력 단자들, 출력 단자들, 클럭 신호들, 로직들, 와이어들도 각각 하나의 변수로써 추상화된다.An integrated circuit consists of input terminals, output terminals, clock signals, multiple hardware blocks, logics, wires, registers. One hardware block is represented by one function module. The function module includes logics and variable registers for implementing the algorithm that the hardware block performs. Hardware blocks are connected to each other only through at least one register. The registers operate in accordance with one of the respective clock signals, store the operation result of the respective logic and hardware blocks, and are abstracted as input and output variables, respectively. In addition, input terminals, output terminals, clock signals, logics, and wires are each abstracted as one variable.
단계(S21)에서, 하나 이상의 클럭들의 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다.In step S21, at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears.
클럭 신호는 상승 에지 또는 하강 에지를 이용하거나 또는 두 에지를 모두 이용하는데, 본 명세서에서 "클럭 에지가 활성화된다"는 표현은 상승 에지 또는 하강 에지가 집적 회로에 인가되는 것을 나타내며, 예를 들어 C나 C++과 같은 고급 프로그래밍 언어에서, 예를 들어 for 문을 이용하여 클럭 변수를 증가시키는 동작 으로써 또는 while 문을 이용하여 조건 반복 동작시킴으로써 추상화한다.The clock signal uses a rising edge or a falling edge or both edges, where the expression "clock edge is activated" indicates that the rising edge or falling edge is applied to the integrated circuit, e.g. C In high-level programming languages such as C ++, you can abstract them by incrementing a clock variable, for example using a for statement, or by conditional iteration using a while statement.
이터레이션은 어느 클럭 에지든 인가되는 클럭 에지가 있을 때를 기준으로 반복될 수 있다. 각 이터레이션의 시작 시에는, 상기 하나 이상의 클럭 에지들 중 다수의 클럭 에지가 동시에 활성화될 수도 있고, 어느 하나의 클럭 에지만 활성화될 수도 있다. 예를 들어, 클럭 1은 40MHz이고 클럭 2는 80MHz이며, 클럭 3은 120MHz이라면, 제1 이터레이션에서는 클럭 에지 1, 2 및 3이 모두 활성화되고, 제2 이터레이션에서는 클럭 에지 3이, 제3 이터레이션에서는 클럭 에지 2가, 제4 이터레이션에서는 클럭 에지 3이, 제5 이터레이션에서는 클럭 에지 1, 2, 3이 각각 활성화되는 식이다.Iteration may be repeated based on when there is a clock edge applied to any clock edge. At the start of each iteration, multiple clock edges of the one or more clock edges may be activated simultaneously, or only one clock edge may be activated. For example, if
상기 하나 이상의 클럭들은 서로 배수 관계인 것이 바람직하다. 하지만, 배수 관계가 아니더라도, 상기 하나 이상의 클럭들 사이에 에지들의 선후가 명확하다면, 이터레이션을 수행하는 데에는 문제가 없다. 다만, 선후가 분명한 에지들 사이의 간격이 너무 좁아 현실적으로 그렇게 설계된 집적 회로는 정상적인 동작을 보장하지 못할 경우도 있을 수 있지만, 이는 본 발명의 실시예들에 따른 논리적인 설계 및 동작 검증 단계에서 고려될 문제가 아니다.Preferably, the one or more clocks are in multiples of one another. However, even if not a multiple relationship, there is no problem in performing iteration if the edges of the edges between the one or more clocks are clear. However, there may be a case where an integrated circuit designed so realistically that the gaps between the edges having clear front and back sides are too small to guarantee normal operation, but this may be considered in the logical design and operation verification stage according to the embodiments of the present invention. It's not a problem.
단계(S22)에서, 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S22, the output variables of all the registers are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이 션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터의 출력 변수에 전달된다.If this is the first iteration, then the value of the input variable in each register will be 0 or the default value, and the value of this input variable is passed to the output variable in that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable is passed to the register's output variable.
이렇게 모든 레지스터들의 출력 변수들이 갱신되고 나면, 단계(S23)에서, 로직들의 연산 구문을 순차적으로 실행한다. 여기서, "순차적으로 실행한다"의 의미는 디지털 집적 회로에 이용되는 고급 프로그래밍 언어에서 구문을 순차 실행하는 특성에 따른 것이며, 본 발명은 본 명세서를 통해 설명하는 바와 같이, 이렇게 로직들의 연산 구문을 순차 실행함에도 불구하고, 디지털 집적 회로 전체의 클럭에 따른 동시적 동작을 시뮬레이션할 수 있다.After the output variables of all the registers are updated in this way, in step S23, the operation syntax of the logics is executed sequentially. Here, the meaning of "sequentially executing" is based on a characteristic of sequentially executing a syntax in a high-level programming language used in a digital integrated circuit, and the present invention sequentially processes the operation syntax of logics as described herein. In spite of the implementation, it is possible to simulate the simultaneous operation of the clock across the digital integrated circuit.
본 발명의 시뮬레이션 및 검증 방법에서, 어떤 두 로직을 연결할 때에는 레지스터의 입출력 변수들을 사용한다. 이 입출력 변수들은 두 로직을 호출하는 상위 함수 모듈에 미리 정의되어야 한다. 레지스터의 입력 변수는 어느 한 로직의 연산 결과에 의해 갱신될 수 있고, 그 레지스터의 출력 변수는 다른 여러 로직에 각각 입력으로 사용될 수 있다.In the simulation and verification method of the present invention, the input and output variables of the register are used to connect any two logic. These I / O variables must be predefined in the parent function module that calls both logic. The input variable of a register can be updated by the operation result of one logic, and the output variable of that register can be used as input to several other logics, respectively.
예를 들어, 제1 로직에서 제2 로직으로 어떤 결과 값이 전달되어야 한다면, 그 전달될 결과는 일단 이 두 로직들의 상위 함수 모듈에서 정의 또는 선언된 레지스터의 입출력 변수에 실려 전달된다. 먼저, 제1 클럭 에지에서, 제1 로직의 실행 결과가 레지스터의 입력 변수에 저장된다. 제2 클럭 에지에서는, 상위 함수 모듈에서 레지스터의 출력 변수가 입력 변수의 값에 의해 갱신된다. 이어서 제2 로직이 레지스터의 갱신된 출력 변수를 호출함으로써 비로소 상기 전달될 결과 값이 사용될 수 있다. 두 로직의 인터페이스 역할을 하는 레지스터의 입출력 변수들이 상 위 함수 모듈에서 정의되고, 레지스터의 출력 변수가 전달될 결과 값을 저장한 후에 제2 로직이 실행된다면, 제2 로직의 정상 동작은 보장된다. 이렇듯, 두 로직을 연결하는 레지스터 출력 변수의 갱신 동작이 그 출력 변수를 연산에 사용하는 로직의 연산 동작보다 선행하는 조건이 만족되는 한, 제1 로직의 연산 구문과 제2 로직의 연산 구문은 어느 편이라도 먼저 실행될 수 있다. For example, if a result value is to be passed from the first logic to the second logic, the result to be delivered is once carried in an input / output variable of a register defined or declared in the upper function module of these two logics. First, at the first clock edge, the execution result of the first logic is stored in an input variable of the register. At the second clock edge, the output variable of the register in the upper function module is updated by the value of the input variable. The resulting value to be passed can then be used until the second logic calls the updated output variable of the register. If the input / output variables of the registers that serve as the interface of the two logics are defined in the upper function module, and the second logic is executed after storing the result value to which the output variable of the register is passed, the normal operation of the second logic is guaranteed. As such, the operation syntax of the first logic and the operation syntax of the second logic are as long as the updating operation of the register output variable connecting the two logics is satisfied before the operation operation of the logic using the output variable for operation. The side can be executed first.
따라서, 레지스터에 의해 분리된 어떤 두 로직이 있다면, 그 두 로직들은 한 이터레이션 내의 연산 도중에는 서로에 대해 연산에 영향을 주지 않기 때문에, 한 이터레이션 내에서 레지스터에 의해 분리된 로직들 사이의 기술 순서 및 실행 순서는 상관없다. Thus, if there are any two logic separated by registers, the description order between the logic separated by the registers within one iteration, since the two logics do not affect the operations on each other during the operation within one iteration. And execution order does not matter.
다만, 어떤 외부 입력과 어떤 레지스터의 사이, 또는 어떤 레지스터와 어떤 다른 레지스터의 사이에 있는 다수의 로직들(즉, 그 로직들 사이에 아무 레지스터도 개재되지 않는 로직들)은, 각각 입력 쪽부터 출력 쪽으로 순차적으로 실행되어야 하므로, 그러한 로직들의 실행 순서에 따라 기술되어야 한다.However, a number of logics (ie, logic with no registers between them) between an external input and a register, or between a register and some other register, respectively, are output from the input side. Since they must be executed sequentially, they must be described in the order of execution of such logics.
나아가, 실제로는 해당 이터레이션에서 반드시 연산이 수행되지 않아도 되는 함수 모듈이 있을 수 있다. 예를 들어, 앞의 예에서, 40 MHz로 동작하도록 설정된 레지스터에 연결된 함수 모듈이라면, 제1, 제2 및 제3 이터레이션에서 연산된 각각의 결과들은 해당 레지스터 입력에 저장되지 않고 버려지기 때문에, 굳이 이 이터레이션들에서는 연산이 수행되지 않아도 무방하다. 이 함수 모듈은 만약 제4 이터레이션에서만 연산이 정확히 수행되어 그 연산 결과가 레지스터 입력에 저장된다면, 제5 이터레이션에서 그 레지스터 입력 값이 레지스터 출력으로 갱신되면서 비 로소 이용될 수 있고, 집적 회로의 전체적인 정상 동작을 보장할 수 있다. 이 경우, 만약 제1, 제2 및 제3 이터레이션에서 연산을 하지 않게 하면 시뮬레이션 속도가 증가할 수 있다. Furthermore, there may be a function module that does not necessarily have to be performed in the iteration. For example, in the previous example, if a function module is connected to a register set to operate at 40 MHz, each result computed in the first, second, and third iterations is discarded without being stored in the corresponding register input, In these iterations, no operation is required. This function module can be used only when the operation is performed correctly only in the fourth iteration and the result of the operation is stored in the register input, and the register input value is updated to the register output in the fifth iteration. Overall normal operation can be guaranteed. In this case, if the operation is not performed in the first, second and third iterations, the simulation speed may increase.
이렇듯, 단계(S23)에서 각 로직들의 연산이 수행되고 각각의 연산 결과 값들이 생성된 다음에, 단계(S24)에서, 연산 결과 값들은 각각의 로직들에 연결된 각각의 레지스터들의 입력 변수에 저장되거나, 또는 버려진다.As such, after operation of each logic is performed in step S23 and respective operation result values are generated, in step S24, the operation result values are stored in an input variable of respective registers connected to the respective logics, or Or discarded.
달리 표현하면, 단계(S24)에서, 상기 활성화된 적어도 하나의 클럭에 대응하여 동작하는 레지스터들의 입력 변수는 로직에서 연산된 연산 결과 값들에 의해 갱신되며, 그렇지 않은 레지스터들의 입력 변수는 변경되지 않는다.In other words, in step S24, the input variables of the registers operating in correspondence with the activated at least one clock are updated by the operation result values calculated in logic, and the input variables of the registers not otherwise are not changed.
구체적으로, 단계(S241)에서, 만약 상기 로직의 연산 결과가 인가되는 레지스터가 상기 활성화된 적어도 하나의 클럭 에지에 상응하는지 여부를 판정한다. 만약 그러한 경우에는, 단계(S242)에서 상기 로직의 연산 결과가 상기 레지스터의 입력 변수에 저장된다. 만약 그렇지 않은 경우에는, 단계(S243)에서 상기 로직의 연산 결과는 버려진다.Specifically, in step S241, it is determined whether the register to which the operation result of the logic is applied corresponds to the activated at least one clock edge. If so, then in step S242 the operation result of the logic is stored in an input variable of the register. If not, the operation result of the logic is discarded in step S243.
이 시점에서, 레지스터들의 입력 변수에는 현재 이터레이션에서 연산된 결과를 저장하고 있지만, 출력 변수에는 이전 이터레이션에서 연산된 결과가 현재 이터레이션의 시작과 함께 갱신되어 있다. 다시 말해, 한 이터레이션 내에서 레지스터들의 입력 변수와 출력 변수는 서로 다른 값을 가지고 있을 수 있다.At this point, the input variable of the registers stores the result of the current iteration, but the output variable is updated with the start of the current iteration. In other words, within an iteration, the input and output variables of registers may have different values.
이것으로써, 해당 이터레이션이 종료되고, 단계(S25)에서, 모든 이터레이션이 종결되었는지 판정하고, 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단 계(S21)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되었다면, 시뮬레이션을 종결한다.Thus, the iteration ends, and in step S25, it is determined whether all the iterations are terminated, and if there is still an iteration to be performed, the process proceeds to step S21 to perform the next iteration. . If all iterations are terminated, terminate the simulation.
도 3는 본 발명의 다른 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 개략적으로 나타내는 순서도이다.3 is a flowchart schematically illustrating a digital integrated circuit design and verification method using an advanced programming language according to another embodiment of the present invention.
도 3을 참조하면, 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계, 시뮬레이션 및 검증 방법은 단계들(S31 내지 S34)로 이루어진 이터레이션들의 반복으로 수행된다.Referring to FIG. 3, a digital integrated circuit design, simulation and verification method using an advanced programming language is performed by iteration of iterations consisting of steps S31 to S34.
단계(S31)에서, 하나 이상의 클럭 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다. 각 이터레이션의 시작 시에는, 상기 하나 이상의 클럭 에지들 중 다수의 클럭 에지가 동시에 활성화될 수도 있고, 어느 하나의 클럭 에지만 활성화될 수도 있다.In step S31, at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears. At the start of each iteration, multiple clock edges of the one or more clock edges may be activated simultaneously, or only one clock edge may be activated.
단계(S32)에서는, 상기 레지스터들 중에 단계(S31)에서 활성화된 적어도 하나의 클럭 에지에 상응하여 동작하는 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S32, the output variables of the registers operating corresponding to the at least one clock edge activated in step S31 of the registers are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터의 출력 변수에 전달된다.If this is the first iteration, then the value of the input variable in each register will be 0 or the default value, and the value of this input variable is passed to the output variable in that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable is passed to the register's output variable.
각 레지스터에 대해, 만약 현재 이터레이션에서는 어떤 레지스터에 활성화된 클럭 에지가 인가되지 않는다면, 현재 이터레이션에서는 해당 레지스터의 출력 변수는 이전 이터레이션에서의 값을 계속 유지한다.For each register, if an active clock edge is not applied to any register in the current iteration, then the output variables in that register maintain the value in the previous iteration in the current iteration.
이렇게 활성화된 클럭 에지에 상응하는 레지스터들의 출력 변수들이 갱신되고 나면, 단계(S33)에서, 로직들의 연산을 순차적으로 실행한다.After the output variables of the registers corresponding to the activated clock edge are updated, in step S33, the operations of the logics are sequentially executed.
로직은 클럭 에지가 활성화될 때에만 변경된 출력 값을 내놓는 앞단의 레지스터에 의해 그 출력이 변경된다. 만약, 해당 이터레이션에서 입력뿐 아니라 앞단의 레지스터들에 인가되는 클럭 에지들이 활성화되지 않는다면, 그 로직의 출력도 변경되지 않을 것이다. 따라서, 로직이 비록 조합 논리 회로이지만, 사실상 클럭 에지의 활성화에 맞춰 해당 로직의 동작 여부가 결정된다. 그렇다면, 현재 이터레이션에서 클럭 에지가 활성화되는 레지스터들의 출력 변수들만을 갱신하고, 클럭 에지가 비활성화된 레지스터들의 출력 변수들은 변경하지 않더라도, 로직들은 적합한 입력을 받아 정확한 동작을 할 수 있다.The logic changes its output by a previous register that yields a changed output value only when the clock edge is activated. If the clock edges applied to the previous registers as well as the input in that iteration are not active, the output of that logic will not change. Thus, although the logic is a combinatorial logic circuit, it is in fact determined whether the logic operates in accordance with the activation of the clock edge. If so, only the output variables of the registers whose clock edges are active in the current iteration are updated, and the output variables of the registers whose clock edges are disabled do not change, but the logic can receive the proper input and operate correctly.
따라서, 도 2의 경우와 마찬가지로, 레지스터 출력 변수의 갱신 동작이 그 출력 변수를 연산에 사용하는 로직의 연산 동작보다 선행하는 조건이 만족되는 한, 로직들은 순서를 고민하지 않고 기술될 수 있다.Thus, as in the case of Fig. 2, the logics can be described without worrying about the order, as long as the update operation of the register output variable is preceded by the operation operation of the logic using the output variable for operation.
단계(S33)에서 각 로직의 연산이 수행되고 각각의 연산 결과 값들이 생성된 다음에, 단계(S34)에서, 연산 결과 값들은 각각의 로직들에 포함된 또는 연결된 모든 레지스터들의 입력 변수에 저장된다.After operation of each logic is performed in step S33 and respective operation result values are generated, in step S34, the operation result values are stored in input variables of all registers included or connected in the respective logics. .
도 2의 단계(S24)에서는 활성화된 클럭 에지에 대응하여 동작하는 레지스터의 입력 변수만 갱신되는 것에 비하여, 도 3의 단계(S34)는 모든 레지스터의 입력 변수가 앞단에 연결된 로직의 출력 값에 의해 갱신된다.In step S24 of FIG. 2, only an input variable of a register operating in response to an activated clock edge is updated, whereas step S34 of FIG. 3 is based on an output value of logic in which an input variable of all registers is preceded. Is updated.
이로써, 해당 이터레이션은 종료되고, 단계(S35)에서, 모든 이터레이션이 종결되었는지 판정하고, 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단계(S31)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되었다면, 시뮬레이션을 종결한다.Thus, the iteration ends, and in step S35, it is determined whether all of the iterations are terminated. If there is still an iteration to be performed, the flow proceeds to step S31 to perform the next iteration. If all iterations are terminated, terminate the simulation.
도 4는 본 발명의 다른 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 나타내는 순서도이다.4 is a flowchart illustrating a digital integrated circuit design and verification method using an advanced programming language according to another embodiment of the present invention.
도 4를 참조하면, 본 발명에서 함수 모듈들의 기술 순서가 시뮬레이션에 영향을 미치지 않는다는 것을 알 수 있다.Referring to FIG. 4, it can be seen that the description order of the function modules in the present invention does not affect the simulation.
도 4의 시뮬레이션은 단계(S41 내지 S44n)로 이루어진 이터레이션들이 반복됨으로써 수행된다.The simulation of FIG. 4 is performed by repeating the iterations made up of steps S41 to S44n.
단계(S41)에서, 하나 이상의 클럭의 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다. 클럭 에지의 활성화에 대하여는 도 2에서 설명한 바와 실질적으로 유사하므로 설명을 생략한다.In step S41, at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears. The activation of the clock edge is substantially similar to that described with reference to FIG. 2, and thus description thereof is omitted.
단계(S42)에서, 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S42, the output variables of all the registers are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터 의 출력 변수에 전달된다.If this is the first iteration, then the value of the input variable in each register will be 0 or the default value, and the value of this input variable is passed to the output variable in that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable will be passed to the register's output variable.
단계(S43a)에서, 제1 로직의 연산 구문이 순차적으로 실행된다. 단계(S44a)에서는 제1 로직의 연산 결과에 따라 제1 로직에 연결된 레지스터의 입력 변수가 갱신된다.In step S43a, the operation syntax of the first logic is executed sequentially. In step S44a, the input variable of the register connected to the first logic is updated according to the operation result of the first logic.
단계(S43b)에서, 이번에는 제2 로직의 연산 구문이 순차적으로 실행된다. 이어서, 단계(S44b)에서는 제2 로직의 연산 결과에 따라 제2 로직에 연결된 레지스터의 입력 변수가 갱신된다.In step S43b, the operation syntax of the second logic is executed sequentially this time. Subsequently, in step S44b, the input variable of the register connected to the second logic is updated according to the operation result of the second logic.
단계(S43n)에서, 제n 로직의 연산 구문이 순차적으로 실행된다. 단계(S44n)에서는 제n 로직의 연산 결과에 따라 제n 로직에 연결된 레지스터의 입력 변수가 갱신된다. In step S43n, the operation syntax of the nth logic is executed sequentially. In step S44n, the input variable of the register connected to the n-th logic is updated according to the operation result of the n-th logic.
이로써, 해당 이터레이션은 종료되고, 단계(S45)에서, 모든 이터레이션이 종결되었는지 판정하고, 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단계(S41)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되었다면, 시뮬레이션을 종결한다.Thus, the iteration ends, and in step S45, it is determined whether all of the iterations are terminated. If there is still an iteration to be performed, the flow advances to step S41 to perform the next iteration. If all iterations are terminated, terminate the simulation.
이때, 제1 로직, 제2 로직 내지 제n 로직의 구문들은, 각각의 로직에 관련된 레지스터들의 출력 변수 모두가 각각의 로직의 유효한 연산 동작에 앞서 갱신되고 각 유효한 연산 동작이 종료되면 각 연산 결과가 각 레지스터들의 입력 변수에 저장된다는 규칙이 지켜지는 한, 순서에 구애되지 않고 기술, 호출 및 실행될 수 있다. At this time, the syntaxes of the first logic, the second logic to the n-th logic, the output variables of the registers associated with each logic is updated prior to the valid operation operation of each logic, and each operation result is completed when each valid operation operation is completed. It can be described, called, and executed in any order, as long as the rules for storing them in the input variables of each register are followed.
이러한 특성은 로직들을 포함하는 각각의 함수 모듈들 사이에서도 마찬가지 로 관찰된다. 따라서, 본 발명에 따르면, 함수 모듈들의 구문들은, 시스템 엔지니어가 이해하기 편하도록 예를 들어 알고리즘 논리 구조 순서대로 기술될 수도 있지만, 하드웨어 엔지니어가 이해하기 편하도록 예를 들어 함수 모듈들의 공간적인 배치 순서대로 기술되어도 무방하다.This property is similarly observed between the respective functional modules containing the logic. Thus, in accordance with the present invention, the syntaxes of the functional modules may be described, for example, in an algorithmic logic structure order for the system engineer to understand, but for example the spatial arrangement order of the functional modules for the hardware engineer to understand. It may be described as it is.
도 5a 및 도 5b는 본 발명의 일 실시예에 따라 C++ 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 나타내는 순서도들이다.5A and 5B are flowcharts illustrating a method for designing and verifying a digital integrated circuit using the C ++ language according to an embodiment of the present invention.
통상적으로, 복잡하고 다양한 종류의 함수 연산을 필요로 하는 집적 회로의 경우에, 시스템 엔지니어들은 하나의 최상위 함수 모듈에서 다양한 서브 함수 모듈들을 필요에 따라 호출하는 방식으로 기재한다. 최상위 모듈은 하나 이상의 로직들, 하나 이상의 레지스터들, 하나 이상의 서브 함수 모듈들의 조합으로 이루어진다. 서브 함수 모듈은 그 안에 또 다른 하위의 서브 함수 모듈들을 네스트(nest)할 수 있다.Typically, in the case of integrated circuits that require complex and various kinds of function operations, system engineers describe various sub-function modules as needed in one top-level function module. The top module consists of a combination of one or more logics, one or more registers, and one or more sub function modules. A sub function module can nest other sub function modules within it.
도 5a 및 도 5b를 참조하면, 도 5a는 C++로 작성되는 최상위 함수 모듈에 관한 순서도이고, 도 5b는 최상위 함수 모듈에서 호출되는 C++의 클래스(Class)로 작성된 서브 함수 모듈에 관한 순서도이다.5A and 5B, FIG. 5A is a flowchart of a top-level function module written in C ++, and FIG. 5B is a flowchart of a sub-function module written in a class of C ++ called from the top-level function module.
도 5a에서 시뮬레이션은 단계들(S51 내지 S55)로 이루어진 이터레이션들이 반복됨으로써 수행된다.In FIG. 5A, the simulation is performed by repeating the iterations composed of steps S51 to S55.
단계(S51)에서, 하나 이상의 클럭 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다. 클럭 에지의 활성화에 대하여는 도 2에서 설명한 바와 실질적으로 유사하므로 설명을 생략한다.In step S51, at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears. The activation of the clock edge is substantially similar to that described with reference to FIG. 2, and thus description thereof is omitted.
단계(S52)에서, 최상위 함수 모듈 내에 정의된 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S52, the output variables of all the registers defined in the top function module are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터의 출력 변수에 전달된다.If this is the first iteration, then the value of the input variable in each register will be 0 or the default value, and the value of this input variable is passed to the output variable in that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable is passed to the register's output variable.
단계(S53)에서, 최상위 함수 모듈의 연산 구문이 순차적으로 실행된다. In step S53, the operation syntax of the uppermost function module is executed sequentially.
단계(S54)에서는 상기 단계(S51)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수가 최상위 함수 모듈의 연산 결과에 따라 각각 갱신된다.In step S54, the input variables of the registers operating in correspondence with the at least one clock edge activated in step S51 are respectively updated according to the operation result of the uppermost function module.
단계(S55)에서는, 만약 최상위 함수 모듈에서 서브 함수 모듈을 포함할 경우에, 포함된 적어도 하나의 서브 함수 모듈들을 호출한다. 예를 들어, 도 4에서는 n 개의 함수 모듈들을 모두 포함한 하나의 커다란 C++ 파일로 작성된다고 한다면, 도 5a 및 도 5b에서는 최상위 함수 모듈을 최상위 파일에 포함시키고, 나머지 함수 모듈들은 따로 각각의 파일로 작성되어, 최상위 함수 모듈에서 호출되는 방식이다. 이어서, 호출된 서브 함수 모듈들의 연산이 완료되면 서브 함수 모듈에서 최상위 함수 모듈로 복귀하고, 단계(S56)로 진행한다.In step S55, if the top function module includes the sub function module, the included at least one sub function module is called. For example, in FIG. 4, a single large C ++ file including all n function modules is included. In FIGS. 5A and 5B, the top-level function module is included in the top-level file, and the remaining function modules are written separately in each file. This is how it is called in the top-level function module. Subsequently, when the operation of the called sub-function modules is completed, the sub function module returns to the top function module, and the flow proceeds to step S56.
이로써, 해당 이터레이션은 종료되고, 단계(S56)에서, 모든 이터레이션이 종결되었는지 판정한다. 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단 계(S51)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되었다면, 시뮬레이션을 종결한다.In this way, the iteration ends, and in step S56, it is determined whether all the iterations are terminated. If there is still iteration to be performed, the flow proceeds to step S51 to perform the next iteration. If all iterations are terminated, terminate the simulation.
도 5b를 참조하면, 도 5a의 단계(S55)에서 서브 함수 모듈이 호출되면, 단계(S551)에서, 해당 서브 함수 모듈 내에 정의된 모든 레지스터들의 출력 변수 값을 각 레지스터들의 입력 변수 값으로써 갱신한다.Referring to FIG. 5B, when a sub function module is called in step S55 of FIG. 5A, in step S551, output variable values of all registers defined in the sub function module are updated as input variable values of respective registers. .
단계(S552)에서, 각 레지스터들의 출력 변수를 입력 받아 연산 동작하는 로직 연산 구문들이 순차적으로 수행된다.In operation S552, logic operation syntaxes that operate by receiving an output variable of each register are sequentially performed.
단계(S553)에서, 상기 단계(S51)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 각각의 로직 연산 구문들에 연결된 레지스터들의 입력 변수가 각각의 로직 연산 구문들의 연산 결과들에 따라 갱신된다.In step S553, the input variable of the registers connected to the respective logic operation statements operating in correspondence with the at least one clock edge activated in step S51 is updated according to the operation results of the respective logic operation statements. .
단계(S554)에서, 만약 해당 서브 함수 모듈이 다시 하위 서브 함수 모듈을 포함할 경우에, 그 하위 서브 함수 모듈을 호출할 수 있다.In step S554, if the sub function module includes the sub sub function module again, the sub sub function module may be called.
이어서, 하위 서브 함수 모듈의 연산 결과가 리턴(return)하고 해당 서브 함수 모듈의 동작이 종료하면, 이 서브 함수 모듈이 호출된 상위 함수 모듈(이 경우에는 최상위 함수 모듈)로 연산 결과를 리턴한다.Subsequently, when the operation result of the lower sub function module returns and the operation of the sub function module ends, the operation result is returned to the upper function module (in this case, the highest function module) in which the sub function module is called.
도 2 내지 도 4의 실시예와 마찬가지로, 도 5a 및 도 5b의 실시예에서도, 최상위 함수 모듈과 서브 함수 모듈들의 구문들은, 각각의 로직에 관련된 레지스터들의 출력 변수 모두가 각 로직의 유효한 연산 동작에 앞서 갱신되고 각각의 유효한 연산 동작이 종료되면 각 연산 결과가 각 레지스터들의 입력 변수에 저장된다는 규칙이 지켜지는 한, 순서에 구애되지 않고 기술, 호출 및 실행될 수 있다. 또한, 이러한 특징은 함수 모듈들 사이에서도 적용될 수 있다.As with the embodiment of FIGS. 2-4, in the embodiments of FIGS. 5A and 5B, the syntaxes of the top-level function module and the sub-function modules also indicate that all of the output variables of the registers associated with each logic are valid for the valid operation of each logic. Once updated and each valid computational operation has ended, they can be described, called, and executed in any order, as long as the rules that each computational result is stored in the input variable of each register are followed. This feature can also be applied between functional modules.
도 6a 및 도 6b는 본 발명의 일 실시예에 따른 도 5a 및 도 5b의 C++ 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 좀더 구체적으로 나타내는 순서도들이다.6A and 6B are flowcharts illustrating in more detail a method for designing and verifying a digital integrated circuit using the C ++ language of FIGS. 5A and 5B according to an embodiment of the present invention.
도 6a를 참조하면, 도 6a에서 시뮬레이션은 단계들(S63 내지 S68)로 이루어진 이터레이션들이 반복됨으로써 수행된다.Referring to FIG. 6A, the simulation in FIG. 6A is performed by repeating the iterations composed of steps S63 to S68.
단계(S61)에서, 시뮬레이션의 이터레이션 개시에 앞서, 시뮬레이션의 연산 수준, 예를 들어 부동소수점 연산을 시뮬레이션할 것인지 아니면 고정소수점 연산을 시뮬레이션할 것인지가 설정된다. 이 단계(S61)의 설정에 따라 시뮬레이션에 사용되는 변수와 연산의 종류가 결정된다.In step S61, before the start of iteration of the simulation, it is set whether to simulate the calculation level of the simulation, for example, floating point calculation or fixed point calculation. The type of variables and calculations used in the simulation are determined by the setting of this step S61.
한편, 일반적으로, 고정소수점 연산은 연산 속도가 빠르지만 정밀도가 떨어질 수 있고, 반면에 부동소수점 연산은 연산 속도는 느리지만 정밀도는 높다. 본 발명은 만약 C++의 템플릿을 이용한다면, 한 시뮬레이터 내에서 고정소수점 시뮬레이션과 부정소수점 시뮬레이션을 동시에 병렬로 가동할 수 있고, 나아가 두 시뮬레이션을 서로 대비하면서 최적의 설계를 쉽고 빠르게 찾아낼 수 있다.On the other hand, in general, fixed-point arithmetic is faster but less accurate, while floating-point arithmetic is slower but more accurate. According to the present invention, if a template of C ++ is used, fixed-point simulation and non-point-simulation simulation can be simultaneously run in parallel in one simulator, and further, the optimum design can be easily and quickly found while contrasting the two simulations.
단계(S62)에서, 최상위 함수 내에서 포함된 와이어 변수들과 레지스터 변수들이 정의된다.In step S62, wire variables and register variables included in the top-level function are defined.
단계(S63)에서, 이터레이션이 시작되며, 하나 이상의 클럭 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다. 클럭 에지의 활성화에 대하여는 도 2에서 설명한 바와 실질적으로 유사하므로 설명을 생 략한다.In step S63, iteration starts and at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears. The activation of the clock edge is substantially similar to that described with reference to FIG.
단계(S64)에서, 최상위 함수 모듈에 정의된 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S64, the output variables of all the registers defined in the top function module are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터의 출력 변수에 전달된다.If this is the first iteration, then the value of the input variable in each register will be 0 or the default value, and the value of this input variable is passed to the output variable in that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable is passed to the register's output variable.
단계(S65)에서, 최상위 함수 모듈의 연산 구문이 순차적으로 실행된다. 단계(S66)에서는 상기 단계(S63)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수가 최상위 함수 모듈의 연산 결과에 따라 각각 갱신된다.In step S65, the operation syntax of the uppermost function module is executed sequentially. In step S66, the input variables of the registers operating in correspondence with the at least one clock edge activated in step S63 are respectively updated according to the operation result of the uppermost function module.
단계(S67)에서는, 해당 이터레이션이 다음 단계에서 호출할 서브 함수 모듈을 수행하는 첫 이터레이션일 경우에 서브 함수 모듈들을 호출하기에 앞서, C++ 클래스로 작성된 서브 함수 모듈 클래스들을 인스턴스화(instantiation)한다.In step S67, prior to calling the sub function modules when the iteration is the first iteration to perform the sub function module to be called in the next step, the sub function module classes written in the C ++ class are instantiated. .
단계(S68)에서, 서브 함수 모듈들을 호출하고, 호출된 서브 함수 모듈들의 연산이 완료되면 서브 함수 모듈에서 최상위 함수 모듈로 복귀한다.In step S68, the sub function modules are called, and when the operation of the called sub function modules is completed, the sub function module returns to the top function module.
여기서, 해당 이터레이션은 종료되고, 단계(S69)에서, 모든 이터레이션이 종결되었는지 판정한다. 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단계(S63)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되 었다면, 시뮬레이션을 종결한다.Here, the iteration ends, and in step S69, it is determined whether all the iterations are terminated. If there is still iteration to be performed, the flow proceeds to step S63 to perform the next iteration. If all iterations are terminated, terminate the simulation.
이어서, 도 6b를 참조하면, 도 6a의 단계(S68)에서 호출되는 C++ 클래스로 작성된 서브 함수 모듈에 대하여, 단계(S681)에서 해당 서브 함수 모듈 내에 정의된 모든 레지스터들의 출력 변수 값을 각 레지스터들의 입력 변수 값으로써 갱신한다.Subsequently, referring to FIG. 6B, for the sub function module written in the C ++ class called in step S68 of FIG. 6A, the output variable values of all the registers defined in the sub function module in step S681 may be determined. Update with an input variable value.
단계(S682)에서, 각 레지스터들의 출력 변수를 입력 받아 연산 동작하는 로직 연산 구문들이 순차적으로 수행된다.In operation S682, logic operation syntaxes that operate by receiving an output variable of each register are sequentially performed.
단계(S683)에서, 상기 단계(S63)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 각각의 로직 연산 구문들에 연결된 레지스터들의 입력 변수가 각각의 로직 연산 구문들의 연산 결과들에 따라 갱신된다.In step S683, the input variable of the registers connected to the respective logic operation statements operating in correspondence with the at least one clock edge activated in step S63 is updated according to the operation results of the respective logic operation statements. .
단계(S684)에서, 해당 이터레이션이 다음 단계에서 호출할 또 다른 서브 함수 모듈을 수행하는 첫 이터레이션일 경우에 그러한 하위의 서브 함수 모듈들을 호출하기에 앞서, C++ 클래스로 작성된 하위의 서브 함수 모듈 클래스들을 인스턴스화한다.In step S684, prior to calling such subordinate subfunction modules when the iteration is the first iteration to perform another subfunction module to be called in the next step, the child subfunction module written in the C ++ class. Instantiate classes
단계(S685)에서, 하위 서브 함수 모듈을 호출할 수 있다.In step S685, the lower sub function module may be called.
이어서, 하위 서브 함수 모듈의 연산 결과를 리턴(return)하고 해당 서브 함수 모듈의 동작이 종료하면, 이 서브 함수 모듈이 호출된 상위 함수 모듈(이 경우에는 최상위 함수 모듈)로 연산 결과를 리턴한다.Subsequently, when the operation result of the lower sub function module is returned and the operation of the sub function module is completed, the operation result is returned to the higher function module (in this case, the highest function module) in which the sub function module is called.
도 7a 및 도 7b는 본 발명의 다른 실시예에 따라 C 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 나타내는 순서도들이다.7A and 7B are flowcharts illustrating a method for designing and verifying a digital integrated circuit using the C language, according to another embodiment of the present invention.
도 7a 및 도 7b를 참조하면, 도 6a 및 도 6b에서 C++ 언어를 이용하는 것과는 달리, C 언어를 이용할 경우이다. C 언어는 C++과 달리 C++의 클래스, 템플릿과 같은 기능을 이용한 객체 지향 프로그래밍이 불가능하지만, 몇 가지 기법을 통해 C++의 인스턴스화와 유사한 효과를 얻을 수 있다. 예를 들어, 반복 호출하고자 하는 함수 구문을 동일하게 가지면서 이름은 각자 다른 여러 개의 C 파일들을 작성해두고, 필요할 때마다 매번 다른 이름의 C 파일을 호출한다. 나아가, 만약 호출하는 함수 내의 레지스터들의 입력 변수와 출력 변수를 각각 스태틱(static)으로 정의하면, 로컬로 정의되었던 레지스터들의 값이 함수의 호출이 종료된 후에도 유지되므로, C++의 인스턴스화와 유사한 효과를 얻을 수 있다. 다음의 단계들(S71 내지 S76)은 위와 같은 요령을 이용하여 본 발명에 따른 디지털 집적 회로의 설계 및 구문 검증 방법을 예시한 것이다.7A and 7B, unlike the C ++ language illustrated in FIGS. 6A and 6B, the C language is used. Unlike C ++, C-language does not allow object-oriented programming using features such as classes and templates in C ++, but several techniques can achieve similar effects to instantiation in C ++. For example, create several C files with the same function syntax that you want to call repeatedly, each time calling the C file with a different name each time you need it. Furthermore, if the input and output variables of the registers in the calling function are defined as static, respectively, the values of the locally defined registers are retained after the function call ends, thus achieving a similar effect to instantiation in C ++. Can be. The following steps S71 to S76 illustrate the design and syntax verification method of the digital integrated circuit according to the present invention using the above-described tips.
단계(S71)에서 최상위 함수 모듈 및 서브 함수 모듈 내에서 사용되는 와이어 변수들과 레지스터 변수들이 최상위 함수 내에서 정의된다.In step S71, wire variables and register variables used in the top function module and the sub function module are defined in the top function.
단계(S72)에서, 이터레이션이 시작되며, 하나 이상의 클럭 에지들 중 적어도 하나의 클럭 에지가 각 클럭 에지가 나타나는 순서에 기초하여 활성화된다. 클럭 에지의 활성화에 대하여는 도 2에서 설명한 바와 실질적으로 유사하므로 설명을 생략한다.In step S72, iteration begins and at least one clock edge of the one or more clock edges is activated based on the order in which each clock edge appears. The activation of the clock edge is substantially similar to that described with reference to FIG. 2, and thus description thereof is omitted.
단계(S73)에서, 최상위 함수 모듈에 정의된 모든 레지스터들의 출력 변수들을 각각의 레지스터들의 입력 변수들의 값에 의해 각각 갱신한다.In step S73, the output variables of all the registers defined in the top function module are respectively updated by the values of the input variables of the respective registers.
이때, 만약 최초의 이터레이션이라면, 각 레지스터의 입력 변수의 값은 0 또 는 디폴트 값일 것이고, 이 입력 변수 값이 그 레지스터의 출력 변수에 전달된다. 만약 최초의 이터레이션이 아니라면, 각 레지스터의 입력 변수 값은 이전 이터레이션에서 연산된 결과 값이 저장되어 있을 것이고, 이 입력 변수 값이 해당 레지스터의 출력 변수에 전달된다.If it is the first iteration, then the value of the input variable of each register will be 0 or the default value, and the value of this input variable is passed to the output variable of that register. If it is not the first iteration, the value of each register's input variable will contain the result of the previous iteration, and the value of this input variable is passed to the register's output variable.
단계(S74)에서, 최상위 함수 모듈의 로직 연산 구문이 순차적으로 실행된다. 단계(S75)에서는 상기 단계(S72)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 레지스터들의 입력 변수가 최상위 함수 모듈의 연산 결과에 따라 각각 갱신된다.In step S74, the logic operation syntax of the uppermost function module is executed sequentially. In step S75, the input variables of the registers operating in correspondence with the at least one clock edge activated in step S72 are respectively updated according to the operation result of the uppermost function module.
단계(S76)에서는, 서브 함수 모듈들을 호출하고, 호출된 서브 함수 모듈들의 연산이 완료되면 서브 함수 모듈에서 최상위 함수 모듈로 복귀한다. 이때, 서브 함수 모듈의 호출과 그 서브 함수 모듈 내에 이용되는 레지스터들의 입력 변수 및 출력 변수의 선언은 위에서 설명한 바와 같다.In step S76, the sub function modules are called, and when the operation of the called sub function modules is completed, the sub function module returns to the top function module. At this time, the call of the sub function module and the declaration of the input variable and the output variable of the registers used in the sub function module are as described above.
이로써, 해당 이터레이션은 종료되고, 단계(S77)에서, 모든 이터레이션이 종결되었는지 판정한다. 만약 아직 수행할 이터레이션이 남아 있는 경우에는 단계(S72)로 진행하여 다음 이터레이션을 수행한다. 만약 모든 이터레이션이 종결되었다면, 시뮬레이션을 종결한다.Thus, the iteration ends, and in step S77, it is determined whether all the iterations are terminated. If there is still iteration to be performed, the flow proceeds to step S72 to perform the next iteration. If all iterations are terminated, terminate the simulation.
이어서, 도 7b를 참조하면, 도 7a의 단계(S76)에서 호출되는 C 함수로 작성된 서브 함수 모듈에 대하여, 단계(S761)에서 해당 서브 함수 모듈 내에 정의된 모든 레지스터들의 출력 변수 값을 각 레지스터들의 입력 변수 값으로써 갱신한다.Subsequently, referring to FIG. 7B, for the sub-function module written with the C function called in step S76 of FIG. 7A, the output variable values of all the registers defined in the sub-function module in step S761 may be determined. Update with an input variable value.
단계(S762)에서, 각 레지스터들의 출력 변수를 입력 받아 연산 동작하는 로 직 연산 구문들이 순차적으로 수행된다.In operation S762, logic operation syntaxes that operate by receiving an output variable of each register are sequentially performed.
단계(S763)에서, 상기 단계(S72)에서 활성화된 적어도 하나의 클럭 에지에 대응하여 동작하는 각각의 로직 연산 구문들에 연결된 레지스터들의 입력 변수가 각각의 로직 연산 구문들의 연산 결과들에 따라 갱신된다.In step S763, the input variable of the registers connected to the respective logic operation statements operating in correspondence with the at least one clock edge activated in step S72 is updated according to the operation results of the respective logic operation statements. .
단계(S764)에서, 필요하다면, 하위 서브 함수 모듈을 호출할 수 있다. 호출된 하위 서브 함수 모듈은 단계(S761 내지 S765)의 동작을 수행할 수 있다.In step S764, if necessary, the lower sub function module may be called. The called lower sub function module may perform the operations of steps S761 to S765.
이어서, 하위 서브 함수 모듈의 연산 결과가 리턴하고 해당 서브 함수 모듈의 동작이 종료하면, 이 서브 함수 모듈이 호출된 상위 함수 모듈 즉 최상위 함수 모듈로 연산 결과를 리턴한다.Subsequently, when the operation result of the lower sub function module is returned and the operation of the sub function module is completed, the operation result is returned to the higher function module, that is, the highest function module, which is called.
도 8은 종래의 하드웨어 기술 언어(HDL)로 작성된 구문과 본 발명의 일 실시예에 따른 고급 프로그래밍 언어로 작성된 구문을 비교한 도면이다.FIG. 8 is a diagram comparing syntax written in a conventional hardware description language (HDL) with syntax written in an advanced programming language according to an embodiment of the present invention.
도 8을 참조하면, 왼쪽은 베릴로그(Verilog)사의 HDL에 따른 구문이고, 오른쪽은 본 발명의 실시예의 집적 회로 설계 및 검증 방법에 따른 구문이다.Referring to FIG. 8, the left side is a syntax according to Verilog's HDL, and the right side is a syntax according to an integrated circuit design and verification method according to an embodiment of the present invention.
왼쪽의 HDL에 의한 구문은 변수를 선언한 후 하드웨어 블록을 기술한 것을 알 수 있다. 오른쪽의 본 발명의 실시예에 따른 구문은, C++ 클래스를 이용한 것인데, 변수를 선언하고, 이어서 클래스 외부와의 입/출력 포트를 정의하며, 함수 모듈을 기술한다.You can see that the HDL statement on the left describes a hardware block after declaring a variable. The syntax according to the embodiment of the present invention on the right is using a C ++ class, which declares a variable, then defines an input / output port to and from the outside of the class, and describes a function module.
HDL에 의한 구문은 레지스터 변수와 와이어 변수를 선언하고, 로직 회로 구문을 기술하며, 로직 회로 구문 내에서 레지스터 변수와 와이어 변수를 사용함으로써 그들 간의 연결 관계를 구체적으로 한정한다. HDL 컴파일러는 로직 회로 구문 들 간의 기술 순서에 상관없이 클럭 에지의 인가에 따른 로직 회로 구문들의 연산과 레지스터 변수 및 와이어 변수들을 자동으로 관리한다.Syntax by HDL specifically defines register variables and wire variables, describes logic circuit syntax, and specifically defines the relationship between them by using register variables and wire variables within logic circuit syntax. The HDL compiler automatically manages the operation of logic circuit statements and register variables and wire variables according to the application of the clock edge, regardless of the description order between logic circuit statements.
본 발명의 실시예에 따라 설계된 집적 회로 구문은 고급 프로그래밍 언어로 작성되었지만, 결과적으로 왼쪽의 HDL 구문과 유사한 순서 및 구조로 작성될 수 있음을 알 수 있다.Although the integrated circuit syntax designed in accordance with an embodiment of the present invention is written in a high-level programming language, it can be seen that it can be written in a similar order and structure as the HDL syntax on the left.
따라서, 본 발명의 실시예에 따른 집적 회로 설계 및 검증 방법을 이용하면, 시스템 엔지니어가 순차 실행되는 고급 프로그래밍 언어로 알고리즘을 개발할 수 있다는 장점, 동작 추적(tracking)이 가능한 장점, 오류 추적과 정정이 용이한 장점 등을 유지하면서, 또한 함수 모듈 간의 기술 순서에는 신경 쓰지 않고 하드웨어 설계 시의 연결 관계만 반영하면서 알고리즘의 구문을 작성할 수 있는 HDL의 장점도 누릴 수 있다.Therefore, by using the integrated circuit design and verification method according to an embodiment of the present invention, the advantage that the system engineer can develop the algorithm in a high-level programming language that is executed sequentially, the advantage of the operation tracking (tracking), error tracking and correction You can also enjoy the advantages of HDL, which allows you to write the syntax of the algorithm, while maintaining ease of use, without reflecting the order of description between the functional modules and reflecting only the connection relationship in hardware design.
실제로, 본 발명의 실시예들을 적용하여 무선 모뎀의 PHY를 개발하는 과정을 시뮬레이션하여 종래의 경험과 비교해 본 결과, 다음 표 1과 같았다.In fact, by applying the embodiments of the present invention to simulate the process of developing a PHY of the wireless modem and compared with the conventional experience, it was as Table 1 below.
(54Mbps)802.11a
(54 Mbps)
(11Mbps)802.11b
(11 Mbps)
(216Mbps)802.11 pre-11n
(216 Mbps)
(3.6Gbps)Nola
(3.6 Gbps)
엔지니어Algorithm + RTL
표 1을 참조하면, C 언어로 알고리즘을 개발하고 베릴로그로 하드웨어를 설계한 IEEE 802.11a의 PHY의 게이트 수와 11 Mbps의 최고 속도를 달성하기 위해 투입된 일의 양을 각각 1로 보았을 때에, IEEE 802.11b 경우에는 게이트 수는 0.7배였고 54 Mbps의 최고 속도를 달성하기 위해 투입된 일의 양은 0.9였다. 각각, 알고리즘 개발 인력 4명, RTL 개발 인력 3명에 총 12개월이 소요되었다.Referring to Table 1, the IEEE number of gates of the IEEE 802.11a PHY, which developed the algorithm in C and designed the hardware in Beryllogue, and the amount of work done to achieve the maximum speed of 11 Mbps, respectively, For 802.11b, the gate count was 0.7x and the amount of work devoted to achieving the highest speed of 54 Mbps was 0.9. Each took four months for four algorithm developers and three RTL developers.
반면에, 본 발명의 집적 회로 설계 및 검증 방법으로 알고리즘과 하드웨어를 설계하고 베릴로그로 변환한 IEEE 802.11 pre-11n 개발에 걸리는 기간을 예측한 경우에는, 게이트 수는 5배에 이르렀고 최고 속도가 216 Mbps인 칩을 개발 완료하는 데에 투입된 일의 양은 1.5배였지만, RTL 개발인력 2명과 알고리즘과 RTL 모두 개발할 수 있는 인력 4명, 총 6명을 투입하여 총 개발 기간은 13개월로 앞의 경우와 거의 같았다.On the other hand, when the integrated circuit design and verification method of the present invention predicted the development time of the IEEE 802.11 pre-11n, which designed algorithms and hardware and converted to beryllogue, the gate count was five times and the maximum speed was 216. The amount of work required to complete the development of Mbps chips was 1.5 times, but the total development period was 13 months, with 2 RTL development personnel and 4 manpower for developing both algorithm and RTL. It was almost the same.
나아가, 본 발명의 집적 회로 설계 및 검증 방법으로 알고리즘과 하드웨어를 설계하고 베릴로그로 변환한 3.6Gbps NoLA(New Nomadic Local Area Wireless Access) 모뎀 칩을 개발하는 데에 걸리는 기간은, 게이트 수가 60배에 이르는 3600 Mbps의 칩을 개발 완료하는 데에 예상된 일의 양은 3배였지만, 전체 개발 기간은 16개월로 앞의 경우에 비해 크게 길어지지 않는다고 예측되었다. 특히, 전체 인력이 6명 뿐이지만, 엔지니어 2명이 알고리즘과 RTL 엔니지어링을 함께 수행함으로써 오류 발견과 수정 단계가 효율적으로 될 수 있다. Furthermore, the time taken to develop a 3.6 Gbps New Nomadic Local Area Wireless Access (NoLA) modem chip that designed and converted algorithms and hardware into a beryllog using the integrated circuit design and verification method of the present invention is 60 times the number of gates. Although the amount of work required to complete the development of the 3600 Mbps chip was three times, the overall development period was expected to be 16 months, which is not much longer than before. In particular, although there are only six people in total, two engineers can perform algorithms and RTL engineering together to make error detection and correction steps more efficient.
본 발명의 집적 회로 설계 및 검증 방법을 이용하면, 실제 하드웨어로 어떻게 구현될 것인지를 알고리즘 작성 단계에서부터 고려할 수 있고, 유사한 구조의 구문을 이용하므로 서로 다른 분야의 엔지니어들 사이의 소통이 원활하게 되어, 각각의 하드웨어 블록들을 작고 효율적으로 만들 수 있다.By using the integrated circuit design and verification method of the present invention, it is possible to consider how to be implemented in actual hardware from the algorithm writing stage, and use the syntax of similar structure to facilitate communication between engineers in different fields, Each hardware block can be made small and efficient.
예를 들어, 발명자는, NoLA MIMO(multiple-input multiple output) 무선신호 검출블록의 개발 과정에서, 알고리즘과 하드웨어 아키텍처(architecture)를 동시에 고민하여 10,000 라인에 이르는 알고리즘을 1,400 라인으로 극적으로 감소시켰고, 그 결과 게이트 수를 절반으로 줄일 수 있었으며, 그럼에도 동일한 성능의 MIMO 검출블록을 얻을 수 있었다.For example, in the development of NoLA multiple-input multiple output (MIMO) radio signal detection block, the inventors consider algorithms and hardware architecture at the same time, dramatically reducing the algorithm to 10,000 lines to 1,400 lines, As a result, the number of gates can be reduced by half, and a MIMO detection block with the same performance can be obtained.
본 발명의 모든 실시예들은 통상적으로 컴퓨터를 이용한 프로그래밍, 컴파일링 및 디버깅 기법 기타 이들과 관련된 기법들을 통해 수행될 수 있다.All embodiments of the present invention can typically be performed through computer-based programming, compilation and debugging techniques, and the like.
본 발명의 실시예들은 위에서 디지털 집적 회로에 관하여 예시되었지만, PCB(인쇄 회로 기판) 내지 전자 시스템에 이르기까지 다양한 수준에서 적용될 수 있다.Embodiments of the present invention have been illustrated above with respect to digital integrated circuits, but may be applied at various levels ranging from printed circuit boards (PCBs) to electronic systems.
본 발명의 실시예들은 위에서 C나 C++와 같은 고급 프로그래밍 언어로 설계, 시뮬레이션 및 검증하는 방법을 주로 예시하였지만, 다양한 고급 프로그래밍 언어들을 이용한 디지털 집적 회로 설계에 적용될 수 있다.While the embodiments of the present invention mainly exemplify a method of designing, simulating, and verifying with a high-level programming language such as C or C ++, it can be applied to digital integrated circuit design using various high-level programming languages.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다. As described above, although the present invention has been described by way of limited embodiments and drawings, the present invention is not limited to the above-described embodiments, which can be modified by those skilled in the art to which the present invention pertains. Modifications are possible. Accordingly, the spirit of the invention should be understood only by the claims set forth below, and all equivalent or equivalent modifications will fall within the scope of the invention.
또한, 본 발명에 따른 장치는 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.In addition, the apparatus according to the present invention can be embodied as computer readable codes on a computer readable recording medium. The computer-readable recording medium includes all kinds of recording devices in which data that can be read by a computer system is stored. Examples of the recording medium include a ROM, a RAM, a CD-ROM, a magnetic tape, a floppy disk, an optical data storage device, and the like, and also include a carrier wave (for example, transmission through the Internet). The computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.
도 1a는 통상적인 디지털 집적 회로를 예시한 블록도이다.1A is a block diagram illustrating a conventional digital integrated circuit.
도 1b는 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로의 설계 방법론을 적용하기 위해 변형된 디지털 집적 회로를 예시한 블록도이다.1B is a block diagram illustrating a digital integrated circuit modified to apply a design methodology of a digital integrated circuit using an advanced programming language according to an embodiment of the present invention.
도 1c는 서로 다른 클럭이 사용될 경우에도 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로의 설계 방법론을 도 1a의 디지털 집적 회로에 적용할 수 있음을 예시한 타이밍도이다.FIG. 1C is a timing diagram illustrating that the methodology of designing a digital integrated circuit using an advanced programming language according to an embodiment of the present invention may be applied to the digital integrated circuit of FIG. 1A even when different clocks are used.
도 2는 본 발명의 일 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 개략적으로 나타내는 순서도이다.2 is a flowchart schematically illustrating a digital integrated circuit design and verification method using an advanced programming language according to an embodiment of the present invention.
도 3는 본 발명의 다른 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 개략적으로 나타내는 순서도이다.3 is a flowchart schematically illustrating a digital integrated circuit design and verification method using an advanced programming language according to another embodiment of the present invention.
도 4는 본 발명의 다른 실시예에 따른 고급 프로그래밍 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 나타내는 순서도이다.4 is a flowchart illustrating a digital integrated circuit design and verification method using an advanced programming language according to another embodiment of the present invention.
도 5a 및 도 5b는 본 발명의 일 실시예에 따라 C++ 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 나타내는 순서도들이다.5A and 5B are flowcharts illustrating a method for designing and verifying a digital integrated circuit using the C ++ language according to an embodiment of the present invention.
도 6a 및 도 6b는 본 발명의 일 실시예에 따라 C++ 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 구체적으로 나타내는 순서도들이다.6A and 6B are flowcharts illustrating in detail a method for designing and verifying a digital integrated circuit using the C ++ language according to an embodiment of the present invention.
도 7a 및 도 7b는 본 발명의 일 실시예에 따라 C 언어를 이용한 디지털 집적 회로 설계 및 검증 방법을 각각 나타내는 순서도들이다.7A and 7B are flowcharts illustrating a method for designing and verifying a digital integrated circuit using the C language according to an embodiment of the present invention.
도 8은 종래의 하드웨어 기술 언어(HDL)로 작성된 구문과 본 발명의 일 실시예에 따른 고급 프로그래밍 언어로 작성된 구문을 비교한 도면이다.FIG. 8 is a diagram comparing syntax written in a conventional hardware description language (HDL) with syntax written in an advanced programming language according to an embodiment of the present invention.
Claims (17)
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| KR1020090119547A KR100965856B1 (en) | 2009-12-04 | 2009-12-04 | Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| KR1020090119547A KR100965856B1 (en) | 2009-12-04 | 2009-12-04 | Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| KR100965856B1 true KR100965856B1 (en) | 2010-06-24 |
Family
ID=42370407
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| KR1020090119547A Active KR100965856B1 (en) | 2009-12-04 | 2009-12-04 | Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages |
Country Status (1)
| Country | Link |
|---|---|
| KR (1) | KR100965856B1 (en) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2017007270A1 (en) * | 2015-07-08 | 2017-01-12 | 주식회사 유비콤테크놀로지 | Fpga system and method for r-language-based processing of big data |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH10149382A (en) | 1996-11-20 | 1998-06-02 | Matsushita Electric Ind Co Ltd | A device for designing electronic circuits using a programming language |
| JP2002049652A (en) | 2000-08-03 | 2002-02-15 | Hiroshi Yasuda | Digital circuit design method, its compiler and simulator |
| KR20070061733A (en) * | 2005-12-10 | 2007-06-14 | 한국전자통신연구원 | Digital system design method using higher programming language |
-
2009
- 2009-12-04 KR KR1020090119547A patent/KR100965856B1/en active Active
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH10149382A (en) | 1996-11-20 | 1998-06-02 | Matsushita Electric Ind Co Ltd | A device for designing electronic circuits using a programming language |
| JP2002049652A (en) | 2000-08-03 | 2002-02-15 | Hiroshi Yasuda | Digital circuit design method, its compiler and simulator |
| KR20070061733A (en) * | 2005-12-10 | 2007-06-14 | 한국전자통신연구원 | Digital system design method using higher programming language |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2017007270A1 (en) * | 2015-07-08 | 2017-01-12 | 주식회사 유비콤테크놀로지 | Fpga system and method for r-language-based processing of big data |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5752000A (en) | System and method for simulating discrete functions using ordered decision arrays | |
| US6496972B1 (en) | Method and system for circuit design top level and block optimization | |
| US5392227A (en) | System and method for generating electronic circuit simulation models having improved accuracy | |
| US5933356A (en) | Method and system for creating and verifying structural logic model of electronic design from behavioral description, including generation of logic and timing models | |
| US6083269A (en) | Digital integrated circuit design system and methodology with hardware | |
| US8875071B2 (en) | Deployment of custom shift array macro cells in automated application specific integrated circuit design flow | |
| US6301553B1 (en) | Method and apparatus for removing timing hazards in a circuit design | |
| US7076416B2 (en) | Method and apparatus for evaluating logic states of design nodes for cycle-based simulation | |
| KR20030028541A (en) | Mixed signal simulation | |
| Whatmough et al. | CHIPKIT: An agile, reusable open-source framework for rapid test chip development | |
| Zeidman | Verilog designer's library | |
| CN120706332B (en) | An automated integrated system from asynchronous pipeline to asynchronous circuit | |
| US6769101B2 (en) | Systems and methods providing scan-based delay test generation | |
| KR100965856B1 (en) | Method and system for designing, simulating and debugging digital integrated circuit using procedural high level programming languages | |
| Borriello | Specification and synthesis of interface logic | |
| Wakabayashi et al. | “All-in-C” Behavioral Synthesis and Verification with CyberWorkBench: From C to Tape-Out with No Pain and A Lot of Gain | |
| US6028993A (en) | Timed circuit simulation in hardware using FPGAs | |
| US7246053B2 (en) | Method for transforming behavioral architectural and verification specifications into cycle-based compliant specifications | |
| Alverson et al. | THOR USER’S MANUAL: TUTORIAL AND COMIWANDS | |
| CN115315702B (en) | Predictions based on machine learning metrics in early-stage circuit design | |
| Madorsky et al. | Vpp-a verilog hdl simulation and generation library for c++ | |
| Safieddine | RTL level verification | |
| Lis et al. | VHDL design representation in the VHDL synthesis system (VSS) | |
| Lis et al. | Structured modeling for VHDL synthesis | |
| East et al. | Using CSP to Verify Aspects of an |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A201 | Request for examination | ||
| PA0109 | Patent application |
Patent event code: PA01091R01D Comment text: Patent Application Patent event date: 20091204 |
|
| PA0201 | Request for examination | ||
| A302 | Request for accelerated examination | ||
| PA0302 | Request for accelerated examination |
Patent event date: 20091207 Patent event code: PA03022R01D Comment text: Request for Accelerated Examination Patent event date: 20091204 Patent event code: PA03021R01I Comment text: Patent Application |
|
| E902 | Notification of reason for refusal | ||
| PE0902 | Notice of grounds for rejection |
Comment text: Notification of reason for refusal Patent event date: 20100216 Patent event code: PE09021S01D |
|
| E701 | Decision to grant or registration of patent right | ||
| PE0701 | Decision of registration |
Patent event code: PE07011S01D Comment text: Decision to Grant Registration Patent event date: 20100615 |
|
| GRNT | Written decision to grant | ||
| PR0701 | Registration of establishment |
Comment text: Registration of Establishment Patent event date: 20100616 Patent event code: PR07011E01D |
|
| PR1002 | Payment of registration fee |
Payment date: 20100617 End annual number: 3 Start annual number: 1 |
|
| PG1601 | Publication of registration | ||
| FPAY | Annual fee payment |
Payment date: 20130425 Year of fee payment: 4 |
|
| PR1001 | Payment of annual fee |
Payment date: 20130425 Start annual number: 4 End annual number: 4 |
|
| FPAY | Annual fee payment |
Payment date: 20140528 Year of fee payment: 5 |
|
| PR1001 | Payment of annual fee |
Payment date: 20140528 Start annual number: 5 End annual number: 5 |
|
| FPAY | Annual fee payment |
Payment date: 20160523 Year of fee payment: 7 |
|
| PR1001 | Payment of annual fee |
Payment date: 20160523 Start annual number: 7 End annual number: 7 |
|
| FPAY | Annual fee payment |
Payment date: 20170822 Year of fee payment: 8 |
|
| PR1001 | Payment of annual fee |
Payment date: 20170822 Start annual number: 8 End annual number: 8 |
|
| FPAY | Annual fee payment |
Payment date: 20180602 Year of fee payment: 9 |
|
| PR1001 | Payment of annual fee |
Payment date: 20180602 Start annual number: 9 End annual number: 9 |
|
| FPAY | Annual fee payment |
Payment date: 20190603 Year of fee payment: 10 |
|
| PR1001 | Payment of annual fee |
Payment date: 20190603 Start annual number: 10 End annual number: 10 |
|
| PR1001 | Payment of annual fee |
Payment date: 20200716 Start annual number: 11 End annual number: 11 |
|
| PR1001 | Payment of annual fee |
Payment date: 20210616 Start annual number: 12 End annual number: 12 |
|
| PR1001 | Payment of annual fee |
Payment date: 20220616 Start annual number: 13 End annual number: 13 |
|
| PR1001 | Payment of annual fee |
Payment date: 20240617 Start annual number: 15 End annual number: 15 |
|
| PR1001 | Payment of annual fee |
Payment date: 20250624 Start annual number: 16 End annual number: 16 |