ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Renode] .repl(Platform description format)
    공부/Embedded 2024. 12. 1. 23:16

    .repl?

    repl(Renode Platform)은 Platform description format 이다.

    주변 장치를 쉽게 구성하여 완전한 플랫폼 정의를 만들 수 있게 yaml과 파일이 필요해서 만들어졌다.

     

    기본적인 작성 규칙

    - 의미 있는 들여쓰기가 사용되고 (), {}, 를 사용함(Python과 비슷)

    - 들여쓰기는 공백만 허용하고, 공백 수는 반드시 4의 배수

    - 중괄호 내부의 들여쓰기는 의미가 없음

    - 의미 있는 들여쓰기가 사용되는 경우, 이를 indent mode라고 부름

    - 비들여쓰기에서 구분하려면 세미콜론으로 구분함

    - 주석은 /* */ 를 사용

     

    ### Ex1
    line1
    line2
        line3
        line4
            line5
        line6
        
    ### Ex2
    line1
    line2 { line3; line4 { line5 }; line 6 }

     

     

     

    기본 구조

    몇몇 platform description은 entry들을 포함하기도 한다.(entry는 주변장치 description의 기본 단위임)

    # entry basic format
    variableName: TypeName registrationInfo
        attribute1
        attribute2
        ...
        attributeN

     

     

    TypeName, registrationInfo, attributes는 옵션이지만, 적어도 하나는 있어야 한다.

    TypeName이 포함되어 있으면 생성 항목이고, 없다면 업데이트 항목이다.

    → 첫 번재 항목으로 있어야 함

    # compliant
    variable1: SomeType
        property: value
    
    variable1:
        property: otherValue
        
        
    # non-compliant
    variable1:
        property: value
    
    variable1: SomeType
        property: otherValue

     

    TypeNmae에는 유형이 위치한 전체 namespace가 제공되어야 하지만, Antmicro.Renode.Peripherals로 시작하는 경우 생략 가능하다.

     

    # local: 생성시에는 local을 붙일 수 있고 해당 파일 내에서만 참조할 수 있다.
    local cpu: SomeCPU
        StringProp: "a"
    
    cpu:
        IntProp: 32

     

     

    using(다른 파일에 의존)

    import~~ 와 비슷하다. 말 그대로 다른 description을 가져와 사용할 수 있고, 만약 사이클이 생기면 인터프리터가 감지해 오류가 난다.

    using "path"
    using "path" prefixed "prefix"

     

     

    Value

    1. simple values

      - 문자열: 이스케이프 된 큰 따옴표(\" \")

      - 다중 줄 문자열: 다중줄 문자열

      - bool(true, false)

      - 숫자: 10진수 또는 16진수(0x1a)

      - 범위: 아래 두 가지 방법으로 표현됨

        <begin, end> 또는 <begin, +size>로 나타내고, begin과 end는 10진수 또는 16진수임

     

    2. reference values: 변수를 가리키고 변수의 이름과 동일 한 값(= 변수 값)

    3. inline objects

     

     

    Registration Info

    주변장치들을 등록해야하는 레지스터 정보와 방법을 알려줌

    주변장치는 하나 이상의 레지스터에 등록 가능

     

    단일 등록

    registrationPoint 옵션: 등록 포인트를 생성하거나 이미 존재하는 등록 포인트를 사용

    등록 포인트가 없으면 기본적으로는 NullRegistrationPoint를 사용하거나, 생성자가 매개변수를 필요로 하지 않는 등록 포인트를 사용

    as "alias" : 말 그대로 별칭, 변수 이름 대신 다른 이름으로 주변 장치를 등록할 때 사용

    @ register registrationPoint as "alias"

     

    다중 등록

    주변 장치를 여러 레지스터에 등록

    @ {
        register1 registrationPoint1;
        register2 registrationPoint2;
        ...
        registerN registrationPointN
    } as "alias"

     

    등록 정보는 생성 entry나 업데이트 entry에 지정할 수 있다.

    동일 변수에 여러 등록 정보가 지정되는 경우는, 가장 마지막 항목이 유효하다.

    등록 취소: variable: @none

     

     

    Attributes

    Constructor or property attributes

    name: value

     

    Property 이름:  첫 글자는 대문자

    Constructor Parameter 이름: 첫 글자가 소문자

     

    none과 empty 키워드

    none: 속성 값을 설정하지 않음, 기존 속성 값이 유지 됨

    empty: 속성을 기본 값으로 설정(0, null, enum[0], null)

     

     

    Interrupt Atrributes

    인터럽트 속성은 정의된 변수의 어떤 인터럽트가 연결되고 어디에 연결되는지 지정하는데 사용한다.

     

    1. 기본 형식

    -> destination@number

    destination: IGPIOReceiver 인터페이스를 구현한 변수

    number: 연결할 대상 인터럽트 번호

     

    2. 특정 속성을 지정해서 연결

    propertyName -> destination@number

    propertyName: 연결할 GPIO 타입 속성 이름

    INumberedGPIOOutput을 구현하면 속성 이름 대신 숫자 사용 가능

     

    3. 여러 인터럽트를 동일 대상에 연결

    [irq1, irq2 ... ] -> destination@[irqDest1, irqDest2 ...]

    irq: 소스 인터럽트(속성 이름 또는 번호)

    irqDest: 대상 인터럽트 번호(숫자)

    소스와 대상의 개수가 일치해야 함

     

    4. 하나의 소스를 여러 대상에 연결

    -> destination@number | another_destination@number
    propertyName -> destination@number | another_destination@number
    [irq1, irq2, ...] -> destination@[irqDest1, irqDest2, ...] | another_destination@[irqDest1, irqDest2, ..., irqDestN]

    | 기호를 사용하여 동일한 소스를 여러 대상에 연결할 수 있음

     

    5. 로컬 인터럽트 연결

    source -> destination#index@interrupt

    destination: ILocalGPIOReceiver: 인터페이스를 구현한 변수

    index: 로컬 GPIO 리시버의 인덱스

     

    Init attribute

    Init 속성은 특정 변수에 대해 모니터 명령어를 사용하기 위한 속성이다.

    등록된 변수에만 사용가능하다.

    # override(덮어쓰기)방식
    init:
        monitorStatement1
        monitorStatement2
        ...
        monitorStatementN
    
    # concatenate(추가)방식
    init add:
        monitorStatement1
        monitorStatement2
        ...
        monitorStatementN

     

     

    https://renode.readthedocs.io/en/latest/advanced/platform_description_format.html

     

    '공부 > Embedded' 카테고리의 다른 글

    [Zephyr] Thread  (0) 2025.01.06
    AMBA Bus Protocol  (3) 2024.12.08
    [Renode] Leon3 hello world 찍기  (0) 2024.11.20
    Zephyr  (0) 2024.11.20
    기타 보드 & 에뮬레이터  (0) 2024.11.17
Designed by Tistory.