인터랙티브 아날로그/디지털 혼합 신호 모델링

  • 2018-06-12
  • 글│ 알레시오 브리기나(Alessio Brighina), 프란체스코 쥬프레(Francesco Giuffre) ST마이크로일렉트로닉스


타언어 VHDL/Verilog C 인터페이스를 통한 모델링 방법


이 글은 Simulink 아날로그 파트를 C로 변환하고 이를 VHDL/Verilog C 아키텍처를 통해 디지털 시뮬레이터로 인터페이싱하면서, ST의 상업용 L99LD01 고효율 정전류 LED 드라이버에 대해 혼합 A/D 시뮬레이션을 실행하는 방법을 설명한다. ModelSim이나 NCSim과 같은 디지털 툴만을 사용하는 이 특별한 혼합 신호 시뮬레이션 환경으로 사용자는 A/D 혼합 모델을 시뮬레이션할 수 있다.

요약


첨단 전자 모듈 개발에는 초기 시제품 제작 시 적절한 툴을 사용하는 것이 매우 중요하다. 아날로그/디지털 혼합 시스템은 아날로그 및 디지털 시뮬레이션 툴 사이의 동시 시뮬레이션(Co-Simulation)이 가능한 시뮬레이션 플랫폼이 필요하지만 지속적인 Data Transfer가 이루어져야 하기 때문에 비용은 더 비싸지고 연산 시간은 길어질 수밖에 없다.

이 글에서는 아날로그 Matlab/Simulink®모델을 C 코드로 변환하는 아날로그-디지털 혼합 신호 모델링 기법을 실제 연구 사례와 함께 설명한다.

이 방법은 운영체제의 영향을 받지 않는 인터랙티브 시뮬레이터를 제작하여 시간 효율적인 혼합 A/D 신호 시뮬레이션을 실행하는 것을 목표로 한다.

C 코드(아날로그 모듈용)를 VHDL/Verilog 코드(디지털 코어용)와 통합하면 동시 시뮬레이션이 필요 없기 때문에 모델 복잡성과 비용을 낮추고 코드 이식성을 높일 수 있다.

이 글에서는 LED(Light Emitting Diode) 드라이버 모듈을 완벽한 모델로 소개한다. 이 모듈의 아날로그 파트는 Matlab/Simulink로 모델링 되었으며, 디지털 코어는 관련 VHDL 코드로 대변된다. 또한 디지털 명령을 드라이버에 전송하고 가상 마이크로컨트롤러가 컨트롤을 수행하는 것을 시뮬레이션할 수 있도록 외부 SPI(Serial Peripheral Interface) 모듈도 구현했다.

이 모든 작업이 인터랙티브한 사용자 친화적인 웹 GUI(Graphic User Interface)를 구현했기 때문에 가능했는데 이 GUI를 통해 시뮬레이션이 진행되는 동안 시스템 패러미터 일부를 바꾸거나 디바이스 설정을 조정할 수도 있다. 이 툴이 ‘라이브 데이터시트(Live Datasheet)’의 역할을 하여 가상의 마이크로컨트롤러에서 얻은 입력 및 디지털 명령을 변형시키면서 다양한 조건에서의 디바이스 모델을 분석할 수 있게 해준다. 따라서 고객 지원, 마케팅 활동, 부하 호환성 정의(load compatibility definition), 설계 지원에 폭넓게 사용할 수 있다.

여기 사례에서는 최종적으로 생성된 디지털 코드를 ModelSim®용으로 생성하고, NCSim®을 사용해 테스트를 성공적으로 진행하여, 디지털 시뮬레이터를 통한 방식이 독립적이라는 사실을 입증했다.

1. 머리말

혼합 모드 A/D 모델은 EDA 시뮬레이터 링크(EDA Simulator Link®)의 도움을 받아 Matlab이나 Simulink 환경에서 시뮬레이션할 수 있다. EDA 시뮬레이션 링크는 멘토 그래픽스(Mentor Graphics®), 케이던스(Cadence®), 시놉시스(Synopsys®)의 상용 HDL 시뮬레이터로 동시 시뮬레이션 인터페이스를 제공한다. 또한 Matlab 코드나 Simulink 모델을 테스트 벤치로 사용해 설계자가 제공하는 HDL 모듈로 stimulus를 생성하고 시뮬레이션 결과를 분석할 수 있다. 통신 인터페이스는 양방향이 가능하며, Matlab/Simulink-HDL 모듈은 폐쇄 루프로 연결될 수 있다.

이러한 방식으로 모든 혼합 A/D 모델을 가상 시뮬레이션하여 아날로그 파트 모델을 개발하고 이를 디지털 파트의 HDL 모듈과 인터페이싱할 수 있다.

이 솔루션의 장점은 계획 단계에서부터의 뛰어난 유연성이다. 하지만 Matlab/Simulink + 툴박스(EDA 시뮬레이터 링크 포함)와 호환 HDL 시뮬레이터로 구성된 완전한 시뮬레이션 환경을 제3의 사용자들도 사용할 수 있어야 한다. 이 툴들을 사용할 때 비용과 복잡성을 크게 줄이는 방법 중 하나는 아날로그 Simulink 파트를 컴파일링하고 이를 HDL 시뮬레이터에 통합하는 것이다.

이 A/D 시스템의 경우, 워크플로가 다음과 같이 이루어진다:
? 각 아날로그 모델에 대해 동작 Simulink 모델 빌드(목적에 따라 입도(granularity) 선택)
? Simulink 환경에서 EDA Simulink 링크(동시 시뮬레이션 Simulink/HDL 시뮬레이터)를 사용해 디지털 파트(원시 VHDL/Verilog) 통합
? 아날로그 서브시스템용 Simulink Coder를 통해 독립형 C 코드 생성
? 생성된 코드를 수정하고 VHDL 또는 Verilog 타언어 C 인터페이스를 사용해 통합(별도 라이브러리 생성)
? 생성된 C 아날로그 라이브러리 및 최상위 모듈에 대해 HDL 랩퍼(wrapper) 지정
? HDL 시뮬레이터(ModelSim, NCSim 등)로만 최종 모델 실행
For a given A/D system, the proposed modeling workflow is the following:




2. 타언어 VHDL/Verilog C 인터페이스


최신 HDL 시뮬레이터는 동작 모듈 기술을 위한 타언어 코드(C/C++ 등)를 외부 인터페이스를 통해 통합할 수 있다. 또한 VHDL 아키텍처 내에서 C 서브루틴을 구현하고 이를 Verilog 모듈로 통합하거나 그 반대로 연결할 수 있다.

VHDL C 인터페이스는 흔히 FLI(Foreign Language Interface) 또는 VHPI(VHDL Procedural Interface)로 명명한다. FLI 및 VHPI의 구현은 HDL 시뮬레이터에 달려 있으며, 보통 해당 매뉴얼에서 그 방법을 설명하고 있다. 반면, Verilog PLI(Programming Language Interface)는 표준 절차 인터페이스이며 IEEE 1364-2005 언어 레퍼런스 매뉴얼(Language Reference Manual)에 설명이 나온다.

2.1. Simulink에서 C 코드로의 변환

Simulink Coder™(기존 리얼타입 워크숍(Real-Time Workshop®))는 매스웍스(Mathworks®)의 애플리케이션으로, 시뮬레이션 다이어그램, 스테이트플로(Stateflow®) 차트, Matlab 함수에서 C 및 C++ 코드를 생성하고 실행한다.

Simulink Coder는 자동으로 모듈을 빌드하여 대부분의 Simulink 블록과 수많은 매스웍스 제품에 대해 실시간 또는 독립형 비실시간(non-real-time) 시뮬레이션을 실행한다.

이렇게 생성된 소스 코드는 높은 정확도로 원본 Matlab/Simulink의 기능 동작을 일치시킨다.
‘Code Generation’창에서 ‘Generic Real-Time target(grt)’ 옵션을 선택하면 코드 생성이 완료되었을 때 ‘X_grt_rtw’디렉토리로 다수의 C/C++ 파일이 생성된다(X는 모델명). 이렇게 생성되는 파일 수와 크기는 모델 복잡성에 따라 다르다.
‘X.c’는 모델을 구현하는 독립형 C 코드이다.
Matlab 설치 경로의 다른 파일들도 코드 생성 및 실행에 사용된다.
특히, ‘grt_main.c’파일은 모든 변수들을 초기화하며, 메모리 할당, 모델 구현 함수 루틴 실행, 프로그램 종료에 사용되는 메인 C 루틴을 포함하고 있다.

위 절차들을 간소화하기 위해서, ‘Create Visual C/C++ Solution File for the grt target’을 선택하면 모든 필요한 C/C++ 파일 및 설정에 관한 프로젝트 파일이 생성되고, 이를 비주얼 스튜디오(Visual Studio)로 불러올 수 있다.

2.2. ModelSim FLI (ModelSim Foreign Language Interface)

생성된 코드를 VHDL로 인터페이싱하려면 비주얼 스튜디오 프로젝트와 ‘grt_main.c’파일을 ModelSim FLI 규격에 따라 수정해야 한다.
FLI 애플리케이션을 생성하려면 먼저 다음과 같은 개념도 이해해야 한다.

타언어 VHDL 아키텍처는 설계 내에서 예시로 들었으나 일반적으로는 VHDL 코드를 포함하지는 않는 설계 유닛이다. 대개는 C 모델에 대한 링크로서, 타언어 아키텍처의 포트를 통해 설계의 나머지 부분들과 통신할 수 있다.

FLI 루틴은 모델 테크놀로지(Model Technology)의 ModelSim 같은 HDL 시뮬레이터 내의 정보에 절차 액세스를 제공하는 C 함수이다. 사용자 작성 애플리케이션이 이 함수들을 사용해 HDL 디자인 내의 계층을 이동하고, 설계의 VHDL 객체에 대한 정보를 얻고 값을 설정하며, 시뮬레이션에 관한 정보를 얻고, 시뮬레이션 실행을 제어할 수 있다. 헤더 파일 ‘mti.h’는 FLI 애플리케이션이 사용할 수 있는 모든 함수 및 타입을 구현하는 것으로서, 수정된 ‘grt_main.c’에 포함되어야 한다.

시뮬레이터를 시작하면, 먼저 준비 단계를 수행한다. 이 단계에서는 전체적인 설계를 로드하고 연결하며 초기 값들을 설정한다. 이 단계에서는 모든 타언어 공유 라이브러리들을 로드하고 모든 타언어 아키텍처의 초기화 함수를 실행한다.

첫 번째 실행 명령이 실행되면 시뮬레이션 단계가 시작되고, 정지 또는 재시작 명령이 실행될 때까지 계속된다. 재시작 명령이 실행되면 시뮬레이터는 준비 단계를 다시 수행한다.

C 모델로 타언어 인터페이스를 사용하기 위해서는 먼저 초기화 함수 이름(‘app_init’)과 로드하려는 공유 객체 파일 경로(‘app.so’)를 담고 있는 적절한 타언어(FOREIGN) 속성을 사용해 VHDL 아키텍처를 생성하고 컴파일해야 한다.

C에서 ModelSim FLI를 위한 첫 번째 단계는 비주얼 스튜디오 프로젝트에서 구성 패러미터를 수정하는 것이다. 다음의 단계를 거친다.
- 구성 타입을 ‘Dynamic library(.dll)’로 변경한다.
- C/C++창에서 ‘Additional include directories’로 ‘’를 추가한다.
- linker창에서 출력 파일을 ‘app.so’로 설정한다.
- linker창에서 ‘Additional dependencies’로 ‘.lib’를 추가한다.
- linker/command line 창에서 ‘Additional options’로 ‘-export: app_init’를 추가한다.

다음 단계는 ‘grt_main.c’의 메인 함수를 초기화 FLI 함수 선언에 따라 수정하는 것이다.

이 솔루션의 단점은 각 회사(멘토, 케이던스, 시놉시스 등)마다 고유의 함수를 사용해야 한다는 것이다. 따라서 동일 시스템을 또 다른 디지털 시뮬레이터로 시뮬레이션하려면, 시뮬레이터 레퍼런스에 따라 다른 FLI 또는 VHPI를 작성해야 한다(FLI/VHPI 표준화가 이루어지지 않았기 때문). 다음으로, 이에 대한 대안으로서 Verilog PLI를 기반으로 하며 거의 모든 디지털 시뮬레이터에 사용할 수 있는 솔루션을 제안한다.




2.3. Verilog PLI( Programming Language Interface)


PLI(Programming Language Interface)와 VPI(Verilog Procedural Interface) 루틴을 사용하면 Verilog 언어를 확장할 수 있다. Verilog HDL(Hardware Description Language)에 관한 IEEE 1364-2005 표준에서는 외부 프로그램을 Verilog 시뮬레이터로 인터페이싱할 수 있도록 PLI/VPI 루틴을 정의하고 있다. 이 인터페이스를 통해 사용자가 원하는 모든 엔지니어링 작업을 수행하도록 Verilog 시뮬레이터를 맞춤화할 수 있다. PLI의 일반적인 활용 중의 하나가 Verilog 시뮬레이션을 C 언어 모델로 인터페이싱하는 것이다.

이 표준을 엄격하게 따르지 않고 간혹 복잡한 IEEE 표준의 모호한 정의들을 다르게 해석하는 Verilog 시뮬레이터들도 있지만, 여기서 제안하는 기법은 IEEE 표준을 완벽히 준수하는 모든 Verilog 시뮬레이터에 사용할 수 있다.

PLI 애플리케이션은 Verilog 시뮬레이터로 실행할 수 있는 사용자 정의 C 언어 애플리케이션이다. PLI 애플리케이션은 시뮬레이션 로직 및 지연시간 값을 읽고 수정함으로써 시뮬레이션과 상호작용할 수 있다.

PLI 애플리케이션은 일반적으로 다음과 같은 순서로 생성한다.
- 애플리케이션을 위해 시스템 작업 또는 시스템 함수 이름을 지정한다.
- C 언어 ‘calltf’루틴을 작성한다. 시뮬레이션을 하면서 이 시스템 작업 이름이나 시스템 함수 이름을 마주칠 때마다 시뮬레이터가 이 루틴을 실행한다.
- 시스템 작업 또는 시스템 함수 이름과 해당 C 언어 루틴을 Verilog 시뮬레이터로 등록한다.
- 이 PLI 애플리케이션 루틴을 담고 있는 C 소스 파일을 컴파일하고, 객체 파일들을 Verilog 시뮬레이터로 링크한다.

Verilog 언어에서 시스템 작업이나 시스템 함수는 Verilog 시뮬레이터가 실행하는 명령이다. 시스템 작업 또는 시스템 함수 이름은 달러 부호로 시작된다.

PLI 애플리케이션을 생성하기 위해서는 먼저 Verilog 랩퍼로 새로운 시스템 작업 또는 시스템 함수 이름을 생성해야 한다.

이러한 방식으로 매 클럭마다 외부 함수 ‘app_vpi’가 실행된다. VHPI와 마찬가지로, 디지털 시뮬레이터로부터 입력을 읽고 한 단계의 시뮬레이션을 실행하며 출력을 시뮬레이터로 반환한다.

C 측에서 PLI를 위한 첫 번째 단계는 비주얼 스튜디오 프로젝트에서 구성 패러미터들을 수정하는 것이다. 다음의 단계를 거친다.
- 구성 타입을 ‘Dynamic library(.dll)’로 변경한다.
- linker창에서 출력 파일을 ‘app_vpi.sl’로 설정한다.
- linkerline 창에서 ‘Additional options’로 ‘-export:vlog_startup_routines’를 추가한다.

두 번째 단계는 Verilog 시뮬레이터가 ‘$app_vpi’시스템 작업을 실행할 때 호출할 C 언어 ‘calltf’루틴을 작성하는 것이다.
새로운 PLI 애플리케이션 생성의 세 번째 단계는 새로운 시스템 작업이나 시스템 함수 이름, 애플리케이션에 관련된 C 루틴(‘register’루틴)을 Verilog 시뮬레이터에 알려주는 것이다.
선택적으로 ‘compiletf’루틴을 정의하면 시스템 작업 또는 시스템 함수가 적절히 사용되고 있는지, 인수(argument) 타입이 올바른지를 검사할 수 있다.
마지막으로 ‘app_interface’루틴(‘calltf’에서 정의)이 입력을 읽고, ‘grt_main.c’에 포함된 C 모델 ‘rt_onestep’을 호출하며 Verilog 신호로 출력을 쓴다.





3. 테스트 사례


앞서 설명한 기법을 적용해 ST(STMicro electronics, 이하 ST)의 오토모티브 애플리케이션용 지능형 전원 및 스마트 전원 모델 디바이스를 포함하는 시뮬레이션 환경을 개발했다. 그림 3은 이 테스트 사례에서 외부 회로를 포함한 LED 드라이버 L99LD01의 애플리케이션 회로를 보여준다.

먼저 Matlab/Simulink(+ SimPower Systems + EDA Simulator Link)에서 전체적인 시뮬레이션 회로를 개발했다. 디지털 코어는 ModelSim을 사용해 동시 시뮬레이션을 하였다.

다음으로 Simulink Coder를 사용해 C 코드를 생성하고 컴파일을 하였다. 이와 함께 적합한 PLI 인터페이스를 구현하였다.

ModelSim 환경용으로 설계된 PLI 인터페이스를 Linux/Sun 환경에서 NCSim을 사용해 성공적으로 테스트하였다. PLI는 VHPI에 비해 더 빠르고 메모리가 더 적게 필요한 것으로 나타났다. 뿐만 아니라 혼합형 VHDL/Verilog 시뮬레이션을 실행할 수 있는 모든 디지털 시뮬레이터에 적합하다.

4. 실시간 대화형 웹 GUI

PLI 인터페이스로 인해 시뮬레이터의 최종 버전을 ModelSim과 NCSim 환경 모두로 컴파일링 할 수 있다.

이러한 시뮬레이터를 손쉽게 사용할 수 있도록 웹 GUI를 개발했다. 이로써 운영체제에 상관 없이 서버 상에서 실행되는 디지털 시뮬레이터를 사용해 시뮬레이션 패러미터를 실시간으로 바꿔가면서 살펴볼 수 있다. 마지막으로 이 툴은 일종의 ‘라이브 데이터시트’처럼 작동한다. 이 웹 GUI는 자바 언어를 사용하며 이는 telnet, ssh, ftp와 같은 많은 함수들을 사용할 수 있기 때문이다. 최종 사용자는 자바 런타임 환경을 설치하기만 하면 되며, 이는 대부분의 일반적인 운영체제에서 무료로 제공된다.

시뮬레이션이 시작되면 웹 GUI가 ssh를 통해 서버로 연결되고, 라이선스에 동의하며, ModelSim 또는 NCSim 디지털 툴을 시작한다. ftp를 통해 텍스트 파일로 패러미터들이 시뮬레이터에 전달된다. 매 플롯 간격마다 시뮬레이터가 패러미터들을 확인하고 값을 표시한다. 사용자 인터페이스의 등록 페이지에서 사용자는 마이크로컨트롤러 역할을 하면서 SPI 명령을 전송 및 수신하고, 결함을 발생시키며 결과를 실시간으로 확인할 수 있다. 그림 4는 컬러를 사용해 플래그들을 일목요연하게 보여주며 그림 5는 모든 레지스터 비트(register bit)들을 상세하게 보여준다.

그림 6의 사례에서는 Vcc1 저전압 결함을 발생시키고 LED 전류에 발생하는 변화를 보여준다.

그 결과로 Vcc1에 관련된 플래그들은 빨간색으로 바뀌고, 이는 이 패러미터와 관련된 경고나 오류, 그리고 GEF(Global Error Flag)를 가리킨다. 그러면 SPI 프레임이 LED 체인을 통해 흐르는 전류의 모든 변화를 전송한다. 이 그림에서 파란 선은 전류 설정이고, 빨간 선은 디바이스의 실제 동작을 나타낸다.

또 다른 창(SPI 인터페이스)에서는 모든 SPI 프레임을 기록하고 SPI 프레임들의 일괄 시퀀스를 특정 시간 간격으로 전송하도록 프로그래밍 할 수 있다.

5. 맺음말

이 글에서는 Simulink 아날로그 파트를 C로 변환하고 이를 VHDL/Verilog C 아키텍처를 통해 디지털 시뮬레이터로 인터페이싱하면서, ST의 상업용 L99LD01 고효율 정전류 LED 드라이버에 대해 혼합 A/D 시뮬레이션을 실행하는 방법을 설명했다. ModelSim이나 NCSim과 같은 디지털 툴만을 사용하는 이 특별한 혼합 신호 시뮬레이션 환경으로 사용자는 A/D 혼합 모델을 시뮬레이션할 수 있다.

현재 스탠드얼론 환경용 솔루션이 평가 단계에 있다. 이를 위해서는 아날로그 파트 모델을 코드(C/C++ 같은)로 변환하고 독립형 파일로 컴파일 및 실행이 가능하도록 만드는 작업뿐만 아니라, 동일 언어에서의 VHDL/Verilog 코드 변환이 필요하다. 현재는 수작업을 통해 L99LD01 디지털 코드를 임베디드 Matlab 함수로 변환하고 이를 C 코드로 변환한 다음, 아날로그 파트의 C 코드와 통합하고 있다.
VHDL/Verilog 코드 변환은 전체 과정에서 주요 병목 지점이다. 자동화 툴을 사용하게 되면 독립형 형식으로 A/D 혼합 모드 시뮬레이터를 개발하는 데 있어 대대적인 개선을 이룰 수 있을 것이다.


참고문헌
???????
[1] Matlab, Simulink and Simulink Coder manuals
[2] Modelsim SE Foreign Language Interface manual - Version 6.4
[3] 1364-2005 IEEE Standard for Verilog Hardware Description Language
[4] The Verilog PLI Handbook, Stuart Sutherland, Sutherland HDL, Inc. (partially available on Google book)
[5] ModelSim VHPI/pli/vpi examples
[6] Mixed-signal modeling using Simulink based-C, Shoufeng Mu - Michael Laisne, Qualcomm Inc
[7] Java Netbeans user guide

 

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>

본 기사의 전문은 PDF문서로 제공합니다. (로그인필요)
다운로드한 PDF문서를 웹사이트, 카페, 블로그등을 통해 재배포하는 것을 금합니다. (비상업적 용도 포함)
 PDF 원문보기


  • 100자평 쓰기
  • 로그인


태그 검색
본문 검색
TOP