이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
SIL 및 PIL 시뮬레이션
SIL 및 PIL 시뮬레이션이란?
Embedded Coder®를 사용하면 모델에 대한 SIL(Software-in-the-Loop) 및 PIL(Processor-in-the-Loop) 시뮬레이션을 실행할 수 있습니다. 이러한 시뮬레이션은 전체 모델 또는 모델의 일부에 대한 소스 코드를 생성합니다. SIL 시뮬레이션은 개발 컴퓨터에서 생성 코드를 컴파일하고 실행합니다. PIL 시뮬레이션은 개발 컴퓨터에서 소스 코드를 크로스 컴파일한 다음, 타깃 프로세서나 이와 동등한 명령어 세트 시뮬레이터로 오브젝트 코드를 다운로드하여 실행합니다.
SIL 및 PIL 시뮬레이션을 통해 다음과 같은 작업을 수행할 수 있습니다:
모델과 생성된 코드가 수치적으로 동등한지 테스트합니다.
코드 커버리지를 관찰합니다.
코드 실행 프로파일링을 수행합니다.
SIL 및 PIL 시뮬레이션을 사용하는 이유는?
SIL 및 PIL 시뮬레이션을 활용하여 개발 과정의 초기 단계에서 결함을 테스트하고 수정합니다. 예를 들어, 표준 모드에서 소프트웨어 컴포넌트를 모델링하고 테스트할 수 있습니다. 그러면, 컴파일된 생성 코드를 실행하는 SIL 또는 PIL 시뮬레이션에서 해당 테스트 스위트를 재사용할 수 있습니다. 수치적 등가성을 확인하려면 일반 시뮬레이션 결과와 SIL 또는 PIL 시뮬레이션 결과를 비교합니다. 생성된 코드를 별도의 인프라에서 테스트하기 위해 Simulink® 환경에서 벗어날 필요가 없습니다.
다음 표는 SIL과 PIL을 사용할 수 있는 상황을 설명합니다.
| 상황 | 사용 |
|---|---|
| 표준 모드 시뮬레이션을 위해 개발된 테스트 벡터를 재사용하여, 생성된(또는 기존) 코드의 수치적 출력을 검증함으로써 모델과 생성된 코드 간의 수치적 등가성을 테스트합니다. SIL/PIL Manager Verification Workflow 및 Back-to-Back Equivalence Testing (Simulink Test) 항목을 확인하십시오. | SIL 및 PIL |
코드 생성 과정에서 생성된 코드에 대한 메트릭 수집:
| SIL 및 PIL |
(IEC Certification Kit 라이선스가 필요합니다.) ISO 26262-6, IEC 61508-3, IEC 62304, EN 50128 및 EN 50657 기능 안전 표준에 정의된 전체 소프트웨어 안전 수명 주기의 요구 사항에 따라 생성된 C/C++ 코드에 대한 검증 및 확인 활동을 수행합니다. IEC Certification Kit 모델 기반 설계 워크플로에서 수행되는 SIL 및 PIL 검증 활동에 대한 자세한 내용은 IEC Certification Kit 프로젝트 내의 임베디드 C/C++ 애플리케이션을 위한 참조 워크플로 ( | SIL 및 PIL |
(DO Qualification Kit 라이선스가 필요합니다.) DO-178C 및 DO-333 안전 표준의 관련 목표를 충족하는지 확인하기 위해 통합 프로세스의 산출물을 테스트합니다. 자세한 내용은 DO Qualification Kit 프로젝트에 있는 DO-178C용 모델 기반 워크플로 ( | SIL 및 PIL |
| 타깃 하드웨어 없이, PIL을 대체할 수 있는 편리한 대안을 찾습니다. | SIL |
평가 보드나 명령어 세트 시뮬레이터 같은 타깃 하드웨어가 없는 경우:
일반적인 시뮬레이션 기법으로는 제한된 메모리 자원이나 타깃 플랫폼에 특화된 최적화 코드의 동작과 같이 하드웨어가 부과하는 제약 조건과 요구 사항을 고려하지 못합니다. | PIL |
참고
SIL 및 PIL 시뮬레이션 모드는 모델 시뮬레이션 시간을 단축하기 위해 설계된 것이 아닙니다. 모델 시뮬레이션 속도를 높이고 싶다면, 고속 액셀러레이터 모드를 사용하십시오. 자세한 내용은 What Is Acceleration? 항목을 참조하십시오.
SIL 및 PIL 시뮬레이션의 작동 원리
SIL 또는 PIL 시뮬레이션에서는 최상위 모델 또는 모델의 일부에 대한 코드가 생성됩니다. SIL을 사용하면 이 코드는 개발 컴퓨터에서 컴파일되어 실행됩니다. PIL을 사용하면 코드가 타깃 하드웨어용으로 크로스 컴파일되어 타깃 프로세서에서 실행됩니다.
Simulink는 통신 채널을 통해 시뮬레이션의 각 샘플 간격마다 사용자의 컴퓨터 또는 타깃 프로세서에 있는 코드에 자극(stimulus) 신호를 전송합니다.
Simulink는 최상위 모델의 경우, 기본 작업 공간 또는 모델 작업 공간의 자극 신호를 사용합니다.
SIL 또는 PIL 모드에서 시뮬레이션할 모델의 일부만 지정한 경우, 모델의 나머지 부분은 Simulink에 남아 있으며 이 부분에 대해서는 코드 생성이 이루어지지 않습니다. 일반적으로 모델의 이 부분을 구성하여 하드웨어에서 실행되는 소프트웨어에 테스트 벡터를 제공하도록 합니다. 모델의 이 부분은 알고리즘의 다른 부분이나 알고리즘이 작동하는 환경을 나타낼 수 있습니다.
컴퓨터나 타깃 프로세서가 Simulink로부터 신호를 수신하면, 프로세서는 한 샘플 스텝에 대해 SIL 또는 PIL 알고리즘을 실행합니다. SIL 또는 PIL 알고리즘은 이 스텝에서 계산된 출력 신호를 통신 채널을 통해 Simulink로 반환합니다. 시뮬레이션의 한 샘플 주기가 완료되었으며, Simulink는 다음 샘플 구간으로 넘어갑니다. 이 과정이 계속 반복되면서 시뮬레이션이 진행됩니다. SIL 및 PIL 시뮬레이션은 실시간으로 실행되지 않습니다. 각 샘플 주기마다, Simulink와 오브젝트 코드는 I/O 데이터를 주고받습니다.
SIL 및 PIL 시뮬레이션 비교
상위 모델의 시뮬레이션 모델을 설정하거나 Model 블록에 대한 시뮬레이션 모드 파라미터를 설정하여 SIL 또는 PIL 시뮬레이션을 지정할 수 있습니다. 또한 SIL 및 PIL 시뮬레이션을 사용하여 상위 모델에서 생성된 코드의 일부인 서브시스템 코드에 대한 단위 테스트를 수행할 수도 있습니다(SIL/PIL 관리자를 사용한 서브시스템 코드 단위 테스트 참조).
SIL 시뮬레이션 중에 일어나는 일
개발 컴퓨터에서 생성된 소스 코드의 동작을 테스트합니다. 시뮬레이션은 타깃 하드웨어용으로 컴파일된 코드를 테스트하지 않습니다. 코드는 개발 컴퓨터(즉, 타깃 하드웨어와는 다른 컴파일러와 프로세서 아키텍처를 사용함)용으로 컴파일되기 때문입니다.
생성된 프로덕션 코드는 MATLAB® 프로세스와는 별도로, 개발 컴퓨터에서 별도의 프로세스로 컴파일 및 실행됩니다.
실행 방식은 호스트 대 호스트 방식이며 비실시간입니다.
PIL 시뮬레이션 중에 일어나는 일
실제 타깃 하드웨어나 명령어 세트 시뮬레이터에서 프로덕션 환경에 배포할 예정인 오브젝트 코드를 테스트합니다.
생성된 프로덕션 코드를 개발 컴퓨터에서 타깃 플랫폼용으로 크로스 컴파일합니다. 오브젝트 코드가 다운로드되어 타깃 프로세서 또는 명령어 세트 시뮬레이터에서 실행됩니다.
실행은 호스트/타깃 기반이며 비실시간 방식입니다.
SIL 및 PIL용 코드 인터페이스
예를 들어, 배포 가능한 단일 컴포넌트에 대해 최상위 모델 빌드를 수행할 때 독립 실행형 코드가 생성됩니다. 독립 실행형 코드를 컴파일하고 링크하여 독립 실행형 실행 파일로 만들거나, 다른 코드와 통합할 수 있습니다. 독립형 코드 인터페이스에 대한 자세한 내용은 Configure Generated C Function Interface for Model Entry-Point Functions 항목을 참조하십시오.
참조된 모델 계층 구조에 대한 코드를 생성하면, 소프트웨어는 최상위 모델에 대한 독립 실행형 코드를 생성하고, 참조된 각 모델에 대해서는 모델 참조 타깃이라고 하는 라이브러리 모듈을 생성합니다. 코드가 실행되면, 독립 실행형 실행 파일이 해당 모델 참조 타깃을 호출하여 참조된 모델의 출력을 계산합니다. 자세한 내용은 Build Model Reference Targets 항목을 참조하십시오.
코드 생성을 통해 생성된 코드를 기존 코드와 통합할 때는 독립형 코드를 사용하십시오. 독립형 코드의 인터페이스는 문서화되어 있기 때문입니다.
참고
SIL 및 PIL 시뮬레이션은 사용자 지정 코드 인터페이스를 직접 지원하지 않습니다. 이러한 인터페이스를 S-Function 형태로 Simulink에 통합할 수 있으며, 이를 위해 레거시 코드 툴, S-Function Builder 또는 직접 작성한 코드를 사용할 수 있습니다. 그런 다음 SIL 및 PIL 시뮬레이션을 통해 사용자 지정 코드를 검증할 수 있습니다.
이 테이블은 SIL 및 PIL 시뮬레이션에서 생성되는 인터페이스를 보여줍니다.
| SIL/PIL 시뮬레이션 | 코드 인터페이스 |
|---|---|
| 최상위 모델 | SIL/PIL 시뮬레이션을 통해 독립형 코드 인터페이스가 생성됩니다. 해당 코드가 존재하면, 시뮬레이션은 모델에 대한 독립 실행형 코드를 호출합니다. 코드가 존재하지 않으면 시뮬레이션에서 독립형 코드를 생성합니다. |
| Model 블록 | 코드 인터페이스 블록 파라미터를 코드 인터페이스 블록 파라미터를 |
일정 수립 시 고려 사항
| 항목 | 정보 |
|---|---|
| 인위적 대수 루프 | SIL 및 PIL 시뮬레이션에는 일반 모드 시뮬레이션에서는 발생하지 않는 인위적인 대수 루프가 포함될 수 있습니다:
자세한 내용은 다음을 참조하십시오.
|
| 피드백 루프 내의 외부 함수 | 모델에 함수 호출 서브시스템이 포함되어 있고, 컨텍스트에 의존적인 입력(예: 피드백 신호)을 갖는 서브시스템을 내보내는 경우, 생성된 코드를 사용한 SIL/PIL 시뮬레이션 결과와 모델의 표준 모드 시뮬레이션 결과가 서로 다를 수 있습니다. SIL/PIL 시뮬레이션과 표준 모드 시뮬레이션에서 동일한 결과를 얻기 위한 한 가지 방법은 모델에 Function-Call Feedback Latch 블록을 사용하는 것입니다. 컨텍스트에 따라 달라지는 입력을 문맥과 무관하게 만들 수 있습니다. 컨텍스트 종속 입력 구성 파라미터를 자세한 내용은 다음을 참조하십시오.
|
가져온 데이터 및 추가로 생성된 코드
SIL 또는 PIL 시뮬레이션은 모델에서 생성된 코드를 수정하지 않습니다. 가져온 데이터를 사용하는 경우, SIL 또는 PIL 시뮬레이션은 SIL 또는 PIL 타깃 애플리케이션의 컴파일 및 링크를 지원하는 데 필요한 추가 코드를 생성합니다. 추가로 생성된 코드는 모델에서 지정한 인터페이스에 해당합니다.
이 섹션에서는 다음 내용을 다룹니다:
가져온 데이터의 경우, SIL 또는 PIL 시뮬레이션에서 저장 방식을 정의하는 경우와 사용자가 직접 저장 방식을 정의해야 하는 경우.
SIL 또는 PIL 시뮬레이션 시 추가 코드가 생성되는 인터페이스
SIL 또는 PIL 시뮬레이션에 가져온 데이터
SIL 및 PIL 시뮬레이션에서는 가져온 데이터 정의로 스토리지 클래스를 지정하는 신호, 파라미터 및 데이터 저장소를 사용할 수 있습니다. 이 시뮬레이션에서는 다음 항목과 관련된 가져온 데이터의 저장공간을 정의합니다:
컴포넌트의 루트 레벨(I/O 경계)에 있는 신호들.
기본 작업 공간, 모델 작업 공간 및 데이터 사전의 파라미터.
전역 데이터 저장소.
SIL 및 PIL 시뮬레이션에서는 다른 가져온 데이터에 대한 저장공간을 정의하지 않습니다. 예를 들어, 시뮬레이션에서는 다음 항목과 관련된 가져온 데이터에 대한 저장공간을 정의하지 않습니다:
내부 신호(I/O 경계에 속하지 않는 신호). 단, 내부 신호의 데이터가 포인터를 통해 가져온 구조체에 포함되어 있는 경우, 시뮬레이션에서 저장공간을 정의한다는 점에 유의하십시오.
로컬 데이터 저장소.
이러한 경우에는 테스트 대상 컴포넌트에 포함된 사용자 지정 코드나 PIL rtw.pil.RtIOStreamApplicationFramework API를 통해 저장소를 정의하십시오.
Tunable Parameters and SIL/PIL 항목도 참조하십시오.
추가 코드 생성을 수행하는 인터페이스
이 테이블은 SIL 또는 PIL 시뮬레이션 시 인터페이스에 대한 추가 코드 생성이 발생하는 시나리오를 설명합니다.
| 시나리오 | 세부 정보 |
|---|---|
GetSet 사용자 지정 스토리지 클래스 | SIL 및 PIL 시뮬레이션은 |
Other 유형의 사용자 지정 스토리지 클래스 | 유형가 classdef CSCOtherAttributes < Simulink.CustomStorageClassAttributes
properties(PropertyType = 'logical scalar')
SupportSILPIL = true;
end
end사용자 지정 특성에 대한 자세한 내용은 TLC 코드를 작성하여 생성된 코드를 더욱 세밀하게 사용자 지정하기 및 Finely Control Data Representation by Writing TLC Code for a Storage Class 항목을 참조하십시오. SIL 또는 PIL 애플리케이션 인터페이스를 구축하기 위해, 코드 생성기는 관련 사용자 지정 TLC 파일에 있는 그룹화되지 않은 사용자 지정 스토리지 클래스의 경우:
그룹화된 사용자 지정 스토리지 클래스의 경우:
코드 생성기는 SIL 또는 PIL 애플리케이션이 코드 내의 변수에 주소를 통해 액세스할 수 있는지 여부를 판단하기 위해
코드 생성기는
...
%case "contents"
%if !LibIsAccessingCustomDataForSILPIL(record)
%matlab functionWithSideEffects()
%endif
%return LibDefaultCustomStorageContents(record, idx, reim)
...기타 사용자 지정 스토리지 클래스의 제한 사항도 참조하십시오. |
| AUTOSAR 런타임 환경 | 최상위 모델 및 Model 블록 SIL 및 PIL 시뮬레이션을 사용하여 AUTOSAR 소프트웨어 컴포넌트에 대한 모델 기반 테스트를 수행할 수 있습니다. 이 소프트웨어는 AUTOSAR 소프트웨어 컴포넌트에 대해 생성된 코드를 해당 컴포넌트 전용의 기본 AUTOSAR 런타임 환경(RTE)과 연동하여 테스트 애플리케이션을 생성합니다. 이 애플리케이션은 AUTOSAR 소프트웨어 컴포넌트가 수행하는 AUTOSAR API 호출을 테스트합니다. 참조 모델이 포함된 최상위 AUTOSAR 소프트웨어 컴포넌트의 경우, 최상위 모델 또는 Model 블록에 대한 SIL 또는 PIL 시뮬레이션을 실행할 수 있습니다. 시뮬레이션에서 이 소프트웨어는 다음과 같은 기능을 수행합니다:
AUTOSAR 하위 컴포넌트 또는 AUTOSAR 소프트웨어 컴포넌트가 참조하는 모델에 대한 단위 수준 테스트를 수행하려면 Model 블록 SIL 또는 PIL 시뮬레이션을 사용하십시오. Model 블록에서 시뮬레이션 모드를 이 경우, 시뮬레이션을 실행하기 전에 RTE 헤더 파일을 생성하기 위해 상위 컴포넌트를 빌드해야 합니다. 상위 컴포넌트를 빌드하지 않으면 SIL 또는 PIL 시뮬레이션이 실패합니다. slbuild("autosar_subcomponent","ModelReferenceCoderTarget"); 자세한 내용은 Verify AUTOSAR Code with SIL and PIL Simulations (AUTOSAR Blockset) 항목을 참조하십시오. |