VMEbus

sz L·2023년 9월 11일
0

통신

목록 보기
5/14

VMEbus(VERSE Module Eurocard)

컴퓨터 버스의 표준
vme tutorial

microprocessor 기술에 기초한 VERSAbus의 전기적 기준에 견고하고 모듈화 되어있는 Eurocard 시스템형태를 결합한 것

본래 IBM-PC는 두개의 카드가 장착된 경우 CPU가 하나의 카드만을 사용할 때는 문제가 없다가도 두개를 같이 사용하면 오작동 하는 등의 문제가 있을 수 있는데 VME의 경우 이러한 문제가 발생하지 않아 호환성이 아주 우수하다.

특징

  1. 기본 데이터 전송주기
  2. 8, 16, 24, 32비트의 데이터가 각주기동안 전송 될 수 있음
  3. 64비트의 데이터는 읽기/쓰기 주기로 전송할 수 없음
  4. 16, 24 또는 32비트 주소 지정을 사용할 수 있음
  5. 40비트 및 64비트 주소는 읽기/쓰기주기와 함께 사용할 수 없음
  6. microprocessor들에 독립적임
  7. 쉽게 데이터버스를 16에서 32bit로 업그레이드 가능

VME64/VME64x 규격에서의 일반적인 특징

VMEbus 적용분야
1. 산업용 컨트롤 장비
2. 운송
3. 전자통신
4. 모의시험
5. 의료
6. HIGH Energy Physical
7. 일반사업분야

초기의 VMEbus (IEEE-1014-1987)

  • MASTER/SLAVE 구조
    • 마스터라 불리우는 모듈은 슬레이브 모듈에 데이터를 주고 받는다.
      버스상에 여러 마스터가 있을 수 있는데, 이 경우 다중 프로세싱 버스라고 한다. 마스터는 데이터를 보내기 전에 중앙 아비터(버스 중재자)를 사용하여 버스를 취하여야 한다
      아비터는 시스켐콘트롤러라고 부르는 모듈의 일부로, 그 기능은 어떤 마스터가 해당 버스를 취할 것인지를 결정하는 것이다.
      모든 버스는 다섯 가지의 하위 버스로 나뉘어진다
      1. 데이터 전송 버스
      2. 데이터 전송 중재 버스
      3. 우선순위 인터럽트 버스
      4. 유틸리티 버스
      5. 시리얼 버스
  • 비대칭버스(데이터 전송을 조율하는 clock이 없음)
    • 데이터 전송을 조율하는 clock이 없어서 서로 맞물려있는 연결신호를 통해 데이터가 모듈간에 전송된다.
    • 데이터 전송시 각각의 사이클 속도는 사이클 내에서 가장 느린 모듈의 속도로 정해진다
    • 비대칭버스의 최대속도는 백플레인과 버퍼 IC상에서의 전달지연시간에 의해 결정된다
  • 다양한 속도연결 프로토콜
  • 비다중화버스
  • Addressing 범위 : 16, 32 bit
  • 데이터 전송폭 : 8, 32bit
  • 40 Mbyte/초까지 대역폭 지원
  • 다중 프로세싱 지원
  • 인터럽트 지원
  • IEEE 1101 표준에 기초한 다양한 기구적인 하드웨어 지원
  • 단일 백플레인(회로기판이라고 생각하면 됨)에서 21슬롯까지 지원

VME64

VMEbus의 최근판으로 ANSI/VITA 1-1994로도 부른다.

  • 6U 카드에서 64-bit 데이터 지원
  • 6U 카드에서 64-bit addressing 지원
  • 3U 카드에서 32-bit 데이터와 40-bit addressing 모드 지원
  • 80Mbyte/초로 기존의 두 배 대역폭
  • 기존보다 적은 노이즈형 커넥터 사용
  • Cycle retry 기능 추가
  • Bus LOCK cycle 추가
  • 첫 슬롯 인지기능
  • 자동으로 'plug-and-play'기능
  • ROM / CSR 구성기능
  • SERCLK, SERDAT 핀의 반복정의

VMEbus 소프트웨어

VMEbus는 어느 컴퓨터 구조보다 다양한 소프트웨어 베이스를 가지고 있다.

VMEbus 데이터 전송 속도

VMEbus는 매우 빠르며, 현재 알려진 Microcomputer 버스중에서 가장 빠르다.

VMEbus 구조

  • 기능적 모듈


watchdog timer
컴퓨터 내에 있는 중앙 처리 장치(CPU)의 고장을 검출하는 타이머이다.
이 타이머는 통상 마이크로컴퓨터가 정기적으로 리셋을 걸도록 되어 있지만, 루틴이 정상적으로 돌아가지 않으면 타이머가 오버플로시켜 이상을 검출한다.

  • 하위버스

  • VMEbus Cycle

VMEbus 신호규격

VMEbus에서 데이터 크기를 나타내는 컨트롤 신호는 LWORD*, DS1*, DS0*이 있다.

  • LWORD : 전송 크기 정의에 기여하고 MBLT Cycle로 데이터 전송
  • DS0 & DS1 : 데이터 strobe 신호로 현재 데이터가 유효함을 나타낸다.
    write시 하강 엣지에서 마스터 데이터버스에 유효한 데이터를 실었음을 표시함.
    Read시 상승 엣지 마스터가 데이터를 latch 하였음을 표시한다.
  • A1 : 데이터 라인의 위치를 나타낸다.
  • AS* : 어드레스 strobe 신호로 현재 어드레스가 유효함을 나타낸다.
  • IACK* : 인터럽트 핸들러가 인터럽트 acknow ledge 사이클을 시작할 때 드라이브 한다

VMEbus는 원래 16bit, 32bit 마이크로프로세서가 공동으로 사용할 수 있도록 설계되어 있어서
싱글 바이트 데이터 전송이나 더블 바이트 데이터 전송 시 어드레스에 상관없이 D15-D0의 데이터 라인만을 사용하고 있다.

32bit의 마이크로프로세서에서는 더블 바이트 데이터 전송 시 어드레스에 따라 데이터가 실리는 위치가 달라지기 때문에 VMEbus와 보드내의 데이터 라인의 위치가 달라질 수 있다.

(트리플 바이트 데이터 전송을 보통 사용하지 않음)

※ 마스터, 슬레이브 보드에 관계없이 설계시에 주의해야 함


L : Low-signal level H : High-signal level

Address Modifier Code(AM코드)

VMEbus는 A31-A01의 31개의 Address Line을 가지고 있지만 항상 전부 다 사용하지 않고 AM코드라는 AM5-AM0의 6개의 신호를 별도로 두어 전송하는 Address 크기와 성격을 따로 규정해 주었다.

  • Short Addressing AM Code : A15-A01 사용
  • Standard Addressing AM Code : A23-A01 사용
  • Expand Addressing AM Code : A31-A01 사용


VMEBus 코드 구현

#include <vxWorks.h>
#include <stdio.h>
#include <vme.h>

int main() {
    int vmeBusHandle;
    int ioBoardAddress = 0x12345678;  // IO 보드의 실제 주소로 대체

    if ((vmeBusHandle = sysBusToLocalAdrs(VME_AM_STD_SUP_DATA, ioBoardAddress, &ioBoardAddress)) == ERROR) {
        printf("Failed to map VMEBus address\n");
        return ERROR;
    }

    // VMEBus에서 데이터 읽기 (예: 32비트 데이터를 읽는 경우)
    UINT32 sensorData;
    if (sysBusPeek32(ioBoardAddress, &sensorData) == OK) {
        printf("센서 데이터: 0x%X\n", sensorData);
    } else {
        printf("데이터 읽기 실패\n");
    }

    // VMEBus 리소스 정리
    sysBusToLocalAdrs(0, ioBoardAddress, &ioBoardAddress);

    return OK;
}
profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글