노무현 대통령 배너


2007. 4. 5. 12:57

VME 보드 설계자료-2

슬레이브 보드의 설계
그림 16은 가장 간단하게 VMEbus 슬레이브 보드를 구현할 수 있다.
Dual Port SRAM을 사용할 경우 로컬 MPU의 어드레스/데이터 버스와 VMEbus의 어드레스/데이터 버스를분리할 수 있다.

슬레이브 로직은 슬레이브 디코더에 의해 슬레이브 select가 되면 VMEbus 버퍼를 제어하고 DTACK*을 발생하여 마스터에 사이클 종료 신호를 보낸다. 슬레이브 로직 구성에서 주의할 점은 Dual Port SRAM에 로컬 MPU와 VMEbus에서 동시에 같은 어드레스에 write할 경우 Dual Port SRAM busy* 신호가 발생하는데 이 때 WRITE를 지연시키는 것에 주의해야 한다.
ㆍVMEbus 슬레이브 디코더에 의해서 보드 select가 되면 슬레이브 사이클을 시작한다.
ㆍDS1*, DS0*, A1, LWO-RD*에 의해서 데이터 크기가 결정되고 WRITE* 신호에 의해서방향이 결정된다.
ㆍ슬레이브 로직은 어드레스 디코더에서 보드 select신호가 오면 VMEbus 어드레스 버퍼와 데이터 버퍼를 열고 Dual Port SRAM을 제어하여 데이터가 적절하게 read 혹은 write 되게 한다.
ㆍVMEbus read시 슬레이브 로직은 데이터가 유효한 시점에서 DTACK*을 드라이브 한다. VMEbus write시는 데이터가 유효하게 write된 시점에서 DTACK*을 드라이브한다.
ㆍVMEbus 마스터로부터 DS0* 혹은 DS1*이 inac-tive 되면 DTACK*을 inac-tive 시키고 슬레이브 사이클을 종료한다.
ㆍ 데이터 크기 신호가 보드의 구성에 적절치 못할 경우BERR*을 드라이브 한다.
ㆍDTACK*, BERR*은 open collector type의 드라이브를 쓴다.
ㆍ슬레이브 보드에서는 daisy-chain 신호를 사용하지 않으므로, daisy-chain이 중단되지 않도록 IN*-OUT*신호를 보드상에서 short시킨다. ( 예 : VBG0IN*-VBG0OUT*,VBG1IN*-VBG1OUT*, VBG2IN*-VBG2OUT*,VBG3IN*-VBG3OUT*,IACKIN*-IACKOUT*)

로컬 메모리가 8bit이고 VMEbus D32를 원할 때
슬레이브 보드의 Dual Port STAM 이 8bit이지만,VMEbus 마스터에서 D32로 액세스 하고자 할 때 그림 17과 같이 74F543 버퍼를 사용하여 구현 할 수 있다.
ㆍ74F543을 4개 이용하여 구현할 수 있다.
ㆍ이 경우 74F543의 래치 기능을 적절히 이용한다.
ㆍ즉, VMEbus에서 write 사이클에는 데이터 32bit 전부를 B에서 A로 래치하였다가 한byte씩 Dual Port SRAM으로 write한다.
4번째 byte의 write시에 DTACK*을 드라이브하여 사이클을종료할 수도 있으나, 래치된 데이터를 SRAM에 writ하는 동안에 다시 VMEbus에서 액세스가 들어왔을 때의 처리를 고려해야 한다.
ㆍVMEbus에서 read할 때는 Dual Port SRAM에서 한 bute씩 read하였을 때 74F543 버퍼를 전부 열어서 VMEbus에 데이터를 전송하고 DTACK*을 드라이브하여 사이클을 종료시킨다.

로컬 메모리가 32bit 이고 VMEbusD32, D16, D08을 원할 때

그림 18은 VMEbus에서 8bit, 16bit, 32bit 데이터 통신을 원할 때 구성될 수 있는 데이터 버퍼의 예를 나타내었다.
ㆍ74F543 4개와 74F245를 2개 이용하여 구현할 수 있다.
ㆍ그림 18에서 SWAPH와 SWAPL은 74F245 이다.
ㆍVMEbus에서는 D16, D08통신에서는 VD15-VD00의 데이터
라인만을 사용하는데 이 때 로컬 메모리와의 데이터 swapping에 SWAPH와 SWAPL이 사용된다. 표 8에 VMEbus 크기 신호에 따른 swap버퍼의 on/off 관계를 나타내었다.

VMEbus Size 관련 신호 SWAPH SWAPL
VA1=L, DS1*=L, DS0*=H, LWORD*=H
VA1=L, DA1*=H, DS0*=L, LWORD*=H
VA1=L, DS1*=L, DS0*=L, LWORD*=H
L H
H L
L L
주의 : 물론 이때도 74F543 buffer는 적절히 제어되어야 한다.

로컬 MPU와 Bus를 공유할 경우
로컬 메모리로 일반적인 DRAM(또는 SRAM)을 사용하였을 때 DRMA의 데이터 포트는 1개 뿐이므로 로컬MPU와 VMEbus 버퍼에서는 DRAM의 데이터 버스를 동시에 로컬 MPU와 VMEbusDPTJ 사용할 수 업도록 로컬 버스 arbitration이 필요하게 된다.
일반적으로2가지의 방법을 사용하는데 VMEbus에서 로컬 메모리를 액세스할 때
① 로컬 MPU에 버스 요구를 하여 로컬 MPU의 동작을 잠시 중단 시킨 후 VMEbus에서 로컬 메모리를 액세스하는 방법과 ② 로컬 MPU와 메모리간에 버퍼를 두어 VMEbus에서 로컬 메모리를 액세스할 때 로컬 MPU 쪽의 버퍼를 off 하는 방법이 있다.
어느 방법이든지 Dual Port SRAM을 사용하는 방법보다는 좀더 복잡한 로직이 필요하게 된다.

로컬 MPU 내부의 아비터를 이용하는 경우
그림 19는 로컬 MPU 내부의 아비터를 이용하여 로컬 데이터 버스를 획득하는 경우이다. 이 방법은 일반적으로 많이 사용하는 방법이다.
ㆍVMEbus 슬레이브 디코더는 슬래이브 select가 되면 로컬 MPU에게 로컬 버스 request 신호를 보낸다.
ㆍ로컬 MPU는 현재 진행중인 사이클이 끝나면 로컬 버스의 사용권을 VMEbus에게 준다.
ㆍ슬레이브 로직에서는 로컬bus를 획득하면 VMEbus버퍼를 열고 DRAM을 액세스한다.
ㆍDRAM 액세스가 끝나면 로컬 버스를 릴리스한다.
ㆍVMEbus에서 read시 DR-AM의 데이터는 DS1*, DS0*가 유효할 동안 계속 유지시켜야 한다.
ㆍVMEbus에서 write시 DRAM에 데이터를 writ시킨후 DTACK*을 드라이브 한다.

로컬 아비터가 있는 경우
그림 20은 로컬 아비터가 로컬 MPU와 VMEbus간에 로칼 버스의 사용을 중재해 주는 경우를 나타내었다. 그림 19에 비해서 로컬 아비터를 구성해야 하고 버퍼의 수가 좀더 필요 하지만 로컬 버스를 좀더 효율적으로 사용할 수 있다.
ㆍ로컬 아비터는 로컬 MPU와 VMEbus 로부터의 로컬 버스 요구에 따라 버퍼의 on/off를 적절하게 조절한다.
ㆍ로컬 아비터는 로컬 MPU와 VMEbus로부터 동시에 버스요구가 들어왔을 때 우선 순위를 정해야 한다.

슬레이브 블록 transfer 지원 보드
VMEbus에서 한 번에 최대로 블록 전송을 할수 있는 양은 25byte이기 때문에 스래이브 보드에서는 8bit 어드레스 카운터가 필요하다. long word (32bit) 블록 전송만을 할 경우에는 A7-A2 까지의 6bit 어드레스 카운터가 필요하다.
ㆍ슬레이브 보드는 디코드한 어드레스가 자신의 슬레이브 어드레스와 일치하고, AM code가 블록 전송을 요구하였을 때 어드레스를 래치한 후 블록 전송을 시작한다. 만약 블록 전송을 지원하지 못할 경우에는 VBE-RR*을 드라이브한다.
ㆍ32bit 블록 전송일 때는 어드레스 카운터는 VA7-VA2의 어드레스를 순차적으로 증가시킨다.
ㆍDS1*, DS0* 의 상승에지에서 어드레스 카운터를 증가 시킨다.
ㆍ마스터 보드로부터 다음 DS1*, DS0*가 드라이브 되면 데이터를 전송하고 DS1*, DS0* 의 상승지에서 어드레스 카운터를 증가 시킨다.
ㆍ위의 과정을 계속 반복한다.
ㆍ마스터 보드로부터 AS*가 high로 되면 블록 전송 사이클을 종료한다.

'Interface > VME Bus' 카테고리의 다른 글

Deadlock 방지  (0) 2007.04.05
VME 보드 설계자료-3  (0) 2007.04.05
VME 보드 설계자료-1  (0) 2007.04.05
인터럽터의 동작  (3) 2007.04.05
VME Bus에서의 Data Transfer 규격  (0) 2007.04.05