HLS로 설정 레지스터 만들기

2522 단어 FPGAHLSxilinxVivado


PS에서 PL 모듈로 값을 읽고 쓰고 싶을 때, AXI 경유로 읽고 쓰는 것이 보통이라고 생각한다.
모듈이 AXI를 지원하지 않으면 AXI와의 변환 모듈을 만듭니다.
이 경우,
  • GPIO 모듈 사용
  • RTL을 찡그린다

  • 라고 하는 수단이 있지만, GPIO에서는 어느 레지스터의 몇 비트째가 무엇이었는지가 코드에 나타나지 않기 때문에 괴롭고,
    RTL 쓰는 것은 고리를 걸고 귀찮다.

    그래서 HLS로 쓴다. 이미지로서는 이런 느낌.
    typedef struct{
        int32_t A;
        bool B;
    } Config_write;
    
    typedef struct{
        uint16_t C;
        bool D;
        uint8_t E;
    } Config_read;
    
    void HogeConfigurator(
        Config_write wcfg_axi,
        Config_read& rcfg_axi,
    
        Config_write& wcfg_pl,
        Config_read rcfg_pl
        ){
        wcfg_pl = wcfg_axi;
        rcfg_axi = rcfg_pl;
    }
    
    

    PL에 기입하는 설정치는 Config_write , PL로부터 읽어들일 설정치는 Config_read 구조체에 정리한다.
    인수의 ~_axi는 AXI 측, _pl는 모듈 측이다.
    _axi 와 함수 본체의 인터페이스를 s_axilite_pl 의 인터페이스를 ap_none 로 하면 AXI 경유로 조작할 수 있어 덤으로 드라이버를 HLS 가 생성해 준다.

    (정말 ap_none으로 에엔인가?valid이란 것인가?라고 경고가 나오지만 무시한다.)

    레지스터 지정을 붙이면, XHogeConfigurator_Start() 를 부르면 정리해 변경이 반영되는 동작이 되고,
    붙이지 않으면 즉시 변경이 반영되는 동작이 된다.

    좋은 웹페이지 즐겨찾기