KR20220077863A - 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템 및 그 방법 - Google Patents
로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템 및 그 방법 Download PDFInfo
- Publication number
- KR20220077863A KR20220077863A KR1020210157044A KR20210157044A KR20220077863A KR 20220077863 A KR20220077863 A KR 20220077863A KR 1020210157044 A KR1020210157044 A KR 1020210157044A KR 20210157044 A KR20210157044 A KR 20210157044A KR 20220077863 A KR20220077863 A KR 20220077863A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- host
- controller
- descriptor
- local bus
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0038—System on Chip
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Systems (AREA)
Abstract
본 발명은 하드웨어와 소프트웨어 분야가 융합된 임베디드 분야 기술에서, 호스트와 컨트롤러 간의 데이터 교환을 위한 인터페이스의 설계 및 구현에 관한 것이다.
본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템은 데이터를 저장하는 데이터 램과, 이벤트 신호를 발생시키는 트리거 레지스터 및 코어를 포함하는 컨트롤러; 및 컨트롤러와 연동되어 동작하는 호스트를 포함하고, 호스트는 데이터 램과 트리거 레지스터에 로컬버스를 통해 직접 접근하여 데이터를 쓰거나 읽는 것을 특징으로 한다.
본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템은 데이터를 저장하는 데이터 램과, 이벤트 신호를 발생시키는 트리거 레지스터 및 코어를 포함하는 컨트롤러; 및 컨트롤러와 연동되어 동작하는 호스트를 포함하고, 호스트는 데이터 램과 트리거 레지스터에 로컬버스를 통해 직접 접근하여 데이터를 쓰거나 읽는 것을 특징으로 한다.
Description
본 발명은 하드웨어와 소프트웨어 분야가 융합된 임베디드 분야 기술에서, 호스트와 컨트롤러 간의 데이터 교환을 위한 인터페이스의 설계 및 구현에 관한 것이다.
도 1은 종래 기술에 따른 포트 접근기반 하드웨어 아키텍처를 도시한다.
종래 기술에 따르면, 임베디드 시스템에서 호스트(10)와 로컬버스로 연결되는 주변 디바이스들은 고속 전송을 필요로 하는 SoC(System on Chip) 형태의 컨트롤러(20)들이 주류를 이루고 있다.
이러한 컨트롤러(20) 내부에는 소프트웨어 로직 처리를 담당하는 CPU 코어 뿐 아니라 프로그램 코드가 저장되어 있는 ROM, 데이터 버퍼 역할을 하는 RAM과 같은 다양한 메모리들이 포함되어 있다.
호스트(10)는 로컬 버스를 통하여 컨트롤러(20) 내부에 존재하는 메모리에 데이터를 쓰거나 읽는 과정을 통해, 컨트롤러(20)와 데이터 교환을 진행하는데, 현재 대다수의 컨트롤러(20)들은 도 1에 도시한 바와 같이, 컨트롤러(20) 내부의 메모리 영역을 호스트에 직접 노출시키지 않고 별도의 입출력 포트를 통해 호스트와 데이터를 교환한다.
종래 기술에 따른 별도의 입출력 포트를 통한 호스트와 컨트롤러 간의 데이터 교환방법은 컨트롤러 내부 하드웨어 처리 로직 및 리소스를 활용하므로 높은 처리 성능을 얻을 수 있지만, 하드웨어 로직을 변경하여야 하는 경우 재설계 및 구현에 대한 시간 및 비용의 소요가 큰 문제점이 있다.
본 발명은 전술한 문제점을 해결하기 위해 제안된 것으로, 별도의 하드웨어 입출력 포트 없이 호스트에서 로컬버스로 연결된 컨트롤러 내부 메모리에 직접 접근할 수 있는 하드웨어 아키텍처를 대상으로, 호스트와 컨트롤러 간의 데이터 교환을 위한 호스트 인터페이스를 소프트웨어 아키텍처기반으로 설계함으로써, 호스트와 컨트롤러 간의 데이터 교환을 위한 호스트 인터페이스의 설계 및 구현 시 하드웨어 로직 처리를 최소한으로 하면서 소프트웨어 로직 위주로 데이터 교환을 효율적으로 처리하는 것이 가능한 시스템 및 방법을 제공하는데 그 목적이 있다.
본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템은 데이터를 저장하는 데이터 램과, 이벤트 신호를 발생시키는 트리거 레지스터 및 코어를 포함하는 컨트롤러; 및 컨트롤러와 연동되어 동작하는 호스트를 포함하고, 호스트는 데이터 램과 트리거 레지스터에 로컬버스를 통해 직접 접근하여 데이터를 쓰거나 읽는 것을 특징으로 한다.
상기 호스트는 FW 트리거 기설정 비트에 값을 써서 상기 컨트롤러의 내부에 인터럽트를 발생시켜 제어권을 이양받고, 상기 컨트롤러는 FW 상태를 읽어서 인터럽트의 종류를 판별한다.
상기 호스트는 Host 트리거 기설정 비트에 값을 써서 상기 호스트에 인터럽트를 발생시켜, 상기 호스트의 제어권을 이양 받고, 상기 호스트는 Host 상태를 읽어서 인터럽트의 종류를 판별한다.
상기 컨트롤러는 디스크립터와 메모리 블록이 논리적으로 분리되어 풀에 기할당되고, 상기 디스크립터는 링크드 리스트 구조의 메모리 블록들과 연결된다.
상기 디스크립터는 순차적으로 연결되어 링크드 리스트 구조로 만들어져 디스크립터 리스트가 되고, 송수신 데이터의 길이 및 종류를 포함하는 부가 정보가 기록되며, 실제 데이터는 상기 메모리 블록에 분할되어 저장된다.
상기 호스트는 Write Scheme에 따라 상기 컨트롤러의 송신 디스크립터 리스트에 직접 접근하여 데이터를 쓰는 작업을 수행한다.
상기 호스트는 송신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시키고, 상기 WriteCount와 TxDescCount값이 같으면 데이터 쓰기를 중단하여 대기하고, 상기 컨트롤러로부터 Tx_DONE 신호를 수신하면 TxOKCount 개수만큼 상기 WriteCount를 감소하며, 상기 WriteCount가 TxDescCount보다 작으면 다음 디스크립터에 데이터를 쓰고 TxReqFlag 상태를 체크하여, 상기 TxReqFlag 가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 쓰기 데이터 처리를 요청하는 신호를 발생시키고, 상기 TxReqFlag 가 활성화 상태인 경우 이전에 상기 컨트롤러에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 WriteCount와 TxDescCount값의 비교 단계로 돌아간다.
상기 컨트롤러는 TxDataCount와 상기 TxDescCount를 비교하여 그 차이 개수만큼 풀로부터 새로운 디스크립터와 메모리 블록을 할당받고, 이를 상기 디스크립터 리스트에 추가하고, 쓰기 처리가 완료된 디스크립터 누적 개수를 상기 TxOKCount에 기록하며, 상기 호스트가 쓰기 작업을 재개할 수 있도록 상기 TX_DONE 신호를 전송한다.
상기 호스트는 Read Scheme에 따라 상기 상기 컨트롤러의 수신 디스크립터 리스트에 직접 접근하여 데이터를 읽는 작업을 수행한다.
상기 호스트는 RX_REQ 신호를 수신하여 수신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에서 데이터를 읽고 ReadCount를 증가시키고, 상기 ReadCount와 RxDescCount값이 같으면 읽기 완료한 데이터 수를 RxCount에 기록하고, 상기 컨트롤러에 RX_END 신호를 발생시키고, 읽기 작업 완료 누적 개수만큼 상기 ReadCount를 감소시키며, 데이터 읽기를 중단하고, 상기 ReadCount가 RxDescCount보다 작으면 다음 디스크립터에서 데이터를 읽고 RxDoneFlag 상태를 체크하여, 상기 RxDoneFlag가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 읽기 작업 완료 개수를 상기 RxCount에 기록하고, 상기 RX_DONE 신호를 발생시키고, 상기 RxDoneFlag가 활성화 상태인 경우 이전에 상기 컨트롤러에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 ReadCount와 RxDescCount값의 비교 단계로 돌아간다.
상기 컨트롤러는 상기 호스트로부터 RX_END 신호를 수신하는 경우 상기 RXCount 개수의 디스크립터 및 그에 연동되는 메모리 블록을 풀로 반환하고, 읽기 처리가 완료된 디스크립터의 누적 개수만큼 상기 RxRescCount를 감소시키고, 상기 호스트로부터 RX_DONE 신호를 수신하는 경우 상기 RXCount 개수의 디스크립터 및 그에 연동되는 메모리 블록을 풀로 반환하고, 상기 RxDoneFlag를 비활성화 상태로 변경한다.
상기 메모리 블록은 상기 메모리 블록의 크기 및 데이터의 크기에 따라 그 개수가 가변적으로 분할되어 운영된다.
본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법은 (a) 읽기 또는 쓰기 요청에 따라 풀로부터 디스크립터 및 메모리 블록을 할당받는 단계; 및 (b) 상기 (a) 단계에서 할당된 디스크립터 리스트에 직접 접근함으로써, 로컬버스를 통해 컨트롤러의 데이터 램과 트리거 레지스터에 직접 접근하여 데이터를 읽거나 쓰는 작업을 수행하는 단계를 포함한다.
상기 디스크립터는 링크드 리스트 구조의 메모리 블록들과 연결되고, 복수의 상기 디스크립터가 링크드 리스트 구조로 연결되어 상기 디스크립터 리스트를 구성하며, 송수신 데이터의 길이 및 종류 정보가 기록된다.
상기 (b) 단계는 상기 데이터를 읽는 작업을 수행하는 경우, (b-1) 송신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시키고, 상기 WriteCount와 TxDescCount를 비교하는 단계; (b-2-1) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount와 TxDescCount값이 같으면 데이터 쓰기를 중단하여 대기하고, Tx_DONE 신호를 수신하면 TxOKCount 개수만큼 상기 WriteCount를 감소하는 단계; 및 (b-2-2) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount가 TxDescCount보다 작으면 다음 디스크립터에 데이터를 쓰고 TxReqFlag 상태를 체크하여, 상기 TxReqFlag 가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 쓰기 데이터 처리를 요청하는 신호를 발생시키고, 상기 TxReqFlag 가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-1) 단계로 복귀하는 단계를 포함한다.
상기 (b) 단계는 상기 데이터를 쓰는 작업을 수행하는 경우, (b-3) RX_REQ 신호를 수신하여 수신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에서 데이터를 읽고 ReadCount를 증가시키고, 상기 ReadCount와 RxDescCount를 비교하는 단계; (b-4-1) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount와 RxDescCount값이 같으면 읽기 완료한 데이터 수를 RxCount에 기록하고, RX_END 신호를 발생시키고, 읽기 작업 완료 누적 개수만큼 상기 ReadCount를 감소시키며, 데이터 읽기를 중단하는 단계; 및 (b-4-2) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount가 RxDescCount보다 작으면 다음 디스크립터에서 데이터를 읽고 RxDoneFlag 상태를 체크하여, 상기 RxDoneFlag가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 읽기 작업 완료 개수를 상기 RxCount에 기록하고, 상기 RX_DONE 신호를 발생시키고, 상기 RxDoneFlag가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-3) 단계로 복귀하는 단계를 포함한다.
본 발명에 따르면, 호스트와 컨트롤러 간의 데이터 교환에 대한 처리 로직을 소프트웨어 위주로 구현함으로써, 하드웨어 변경 없이도 처리 로직을 용이하게 수정하는 것이 가능하고, 임베디드 시스템 및 SoC 개발에 대한 시간과 비용에 대한 부담을 줄이는 것이 가능한 효과가 있다.
본 발명의 효과는 이상에서 언급한 것들에 한정되지 않으며, 언급되지 아니한 다른 효과들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
도 1은 종래 기술에 따른 포트 접근기반 하드웨어 아키텍처를 도시한다.
도 2는 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템의 하드웨어 구조를 도시한다.
도 3은 본 발명의 실시예에 따른 트리거 레지스터의 동작 방식을 도시한다.
도 4는 본 발명의 실시예에 따른 데이터 교환을 위한 소프트웨어 아키텍처를 도시한다.
도 5는 본 발명의 실시예에 따른 송신 컨트롤(TxCtrl) 정보의 정의 및 설명을 도시한다.
도 6은 본 발명의 실시예에 따른 수신 컨트롤(RxCtrl) 정보의 정의 및 설명을 도시한다.
도 7은 본 발명의 실시예에 따른 호스트 컨트롤(HostCtrl) 정보의 정의 및 설명을 도시한다.
도 8은 본 발명의 실시예에 따른 송신 트리거(Tx Trigger) 신호의 정의 및 설명을 도시한다.
도 9는 본 발명의 실시예에 따른 Write scheme 예를 도시한다.
도 10은 본 발명의 실시예에 따른 수신 트리거(Rx Trigger) 신호의 정의 및 설명을 도시한다.
도 11은 본 발명의 실시예에 따른 Read scheme 예를 도시한다.
도 2는 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템의 하드웨어 구조를 도시한다.
도 3은 본 발명의 실시예에 따른 트리거 레지스터의 동작 방식을 도시한다.
도 4는 본 발명의 실시예에 따른 데이터 교환을 위한 소프트웨어 아키텍처를 도시한다.
도 5는 본 발명의 실시예에 따른 송신 컨트롤(TxCtrl) 정보의 정의 및 설명을 도시한다.
도 6은 본 발명의 실시예에 따른 수신 컨트롤(RxCtrl) 정보의 정의 및 설명을 도시한다.
도 7은 본 발명의 실시예에 따른 호스트 컨트롤(HostCtrl) 정보의 정의 및 설명을 도시한다.
도 8은 본 발명의 실시예에 따른 송신 트리거(Tx Trigger) 신호의 정의 및 설명을 도시한다.
도 9는 본 발명의 실시예에 따른 Write scheme 예를 도시한다.
도 10은 본 발명의 실시예에 따른 수신 트리거(Rx Trigger) 신호의 정의 및 설명을 도시한다.
도 11은 본 발명의 실시예에 따른 Read scheme 예를 도시한다.
본 발명의 전술한 목적 및 그 이외의 목적과 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다.
그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 목적, 구성 및 효과를 용이하게 알려주기 위해 제공되는 것일 뿐으로서, 본 발명의 권리범위는 청구항의 기재에 의해 정의된다.
한편, 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 언급된 구성소자, 단계, 동작 및/또는 소자가 하나 이상의 다른 구성소자, 단계, 동작 및/또는 소자의 존재 또는 추가됨을 배제하지 않는다.
도 2는 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템의 하드웨어 구조를 도시한다.
도 2에 도시한 하드웨어 아키텍처에서, 호스트(100)는 메인 프로세서 역할을 담당하는 MCU이다.
호스트(100)와 연동되어 동작하는 컨트롤러(200)는 데이터를 저장하는 데이터 램(Data RAM, 220), 호스트와 컨트롤러에 이벤트 신호를 발생시키는 트리거 레지스터(210), 메인 프로세서 역할을 하는 CPU 코어(CPU Core, 230)를 포함한다.
호스트(100)와 컨트롤러(200) 간에는 어드레스 버스, 데이터 버스, 제어신호로 구성된 로컬버스로 상호 연결된다.
도 1에 도시한 종래 기술에 따른 하드웨어 아키텍처 대비, 본 발명의 실시예에 따른 호스트(100)는 로컬버스를 통하여 데이터 램(220)과 트리거 레지스터(210)에 직접 접근하여 데이터를 쓰거나 읽을 수 있으므로, 컨트롤러(200) 내부의 하드웨어 구조가 단순하다.
컨트롤러(200)의 데이터 램(220)은 데이터를 저장하는 메모리 공간으로, 호스트(100)가 데이터 램(220)의 특정 주소에 데이터를 쓰거나 읽을 수 있고, 반대로 컨트롤(200) 내부의 CPU 코어(230)에서도 데이터 램(220)의 특정 주소에 데이터를 쓰거나 읽을 수 있다.
이 때, 호스트(100)와 컨트롤러(200)가 동일한 데이터 램(220) 주소영역에 동시에 접근하여 데이터를 쓸 경우, 데이터가 깨지는 문제점이 발생할 수 있다.
도 3은 본 발명의 실시예에 따른 트리거 레지스터의 동작 방식을 도시한다.
본 발명의 실시예에 따르면, 전술한 동일한 메모리 주소 영역에 대한 동시 접근 문제를 해결하며, 호스트(100)와 컨트롤러(200) 간의 데이터 교환을 지원하기 위해, 컨트롤러(200) 또는 호스트(100)에 이벤트를 발생시켜 프로그램의 수행 도중에 인터럽트 서비스 루틴(interrupt service routine)으로 제어권을 넘겨주는 동작을 수행한다.
호스트(100)에서 FW Trigger 특정 비트에 값을 써주면(write), 컨트롤러(200) 내부에 인터럽트를 발생하여 제1 인터럽트 서비스 루틴으로 제어권이 넘어가고, 그 이후 제2 인터럽트 서비스 루틴에서 FW Status를 읽어서(read) 수신된 인터럽트의 종류를 판별한다.
반대로 컨트롤러(200)에서 Host Trigger 특정 비트에 값을 써주면(write), 컨트롤러(200) 외부의 물리적인 IRQ 신호선을 통해 호스트(100) 쪽으로 인터럽트가 발생되면서, 호스트(100)의 제어권이 제2 인터럽트 서비스 루틴으로 넘어가고, 그 이후 제1 인터럽트 서비스 루틴에서 Host Status 읽어서(read) 수신된 인터럽트의 종류를 판별한다.
도 4는 본 발명의 실시예에 따른 데이터 교환을 위한 소프트웨어 아키텍처를 도시한다.
도 2에 도시한, 본 발명의 실시예에 따른 메모리 접근 기반 하드웨어 아키텍처에서 동작 가능하도록 설계된 소프트웨어 아키텍처는 호스트(100)의 송신 버퍼(send buffer)에 저장된 데이터를 컨트롤러의 내부 데이터 램에 전달하기 위해, 호스트(100)와 컨트롤러(200) 간에 정해진 Write scheme에 따라 컨트롤러(200)의 Tx 디스크립터 리스트(Descriptor List)에 직접 접근하여 데이터를 쓰는 작업을 수행한다.
반대로 호스트(100)에서는 컨트롤러(200) 내부의 데이터 램에 저장된 데이터를 호스트(100)의 수신 버퍼(receive buffer)로 전달받기 위해, 호스트(100)와 컨트롤러(200) 간에 정해진 Read scheme에 따라 컨트롤러(200)의 Rx 디스크립터 리스트(Descriptor List)에 직접 접근하여 데이터 읽기 작업을 수행한다.
본 발명의 실시예에 따르면, 컨트롤러(200)의 물리적인 데이터 램 영역을 효율적으로 관리하기 위해, 논리적으로 디스크립터와 메모리 블록으로 분리하고, 초기화시 고정된 크기의 디스크립터와 메모리 블록을 풀에 미리 할당하여, 필요한 시점마다 빠르게 풀 영역에서 할당을 받고(allocated buffer from pool), 불필요한 경우 풀로 쉽게 반납 가능한 구조(return buffer to pool)로 설계한다.
본 발명의 실시예에 따른 구조는 고정된 크기의 블록을 할당하여 메모리 단편화 없이 빠르게 메모리 할당할 수 있는 메모리 풀과 유사한 구조로, 실시간성을 요구하는 컨트롤러의 빠른 버퍼 할당 및 해제에 적합한 장점이 있다.
본 발명의 실시예에 따른 컨트롤러(200)의 데이터 버퍼는 디스크립터 풀로부터 할당받은 디스크립터를 의미하고, 디스크립터는 링크드 리스트 구조의 메모리 블록들(메모리 블록 풀로부터 할당 받은 메모리 블록들이 순차적으로 연결된 것)과 연결되어 있다.
다수의 디스크립터가 다시 순차적으로 연결되어 링크드 리스트 구조로 만들어지면, FIFO 구조와 같이 동작 가능한 디스크립터 리스트(Descriptor List)가 된다.
디스크립터에는 송수신 데이터의 부가정보(데이터 길이, 데이터 종류 등)가 기록되고, 실제 데이터는 디스크립터에 연결된 메모리 블록에 분할되어 저장된다.
분할된 메모리 블록의 개수는 메모리 블록의 크기 및 데이터의 크기에 따라 가변적으로 운영 가능하므로, 컨트롤러(200) 내부 데이터 램의 저장 공간의 활용성을 극대화하는 장점이 있다.
호스트(100)와 컨트롤러(200) 간의 Write scheme과 Read scheme은 컨트롤러(200)의 데이터 램 영역에 존재하는 송신 컨트롤(TxCtrl) 정보, 수신 컨트롤(RxCtrl) 정보와 호스트(100)의 메모리에 존재하는 호스트 컨트롤(HostCtrl) 정보와 상호 유기적으로 동작한다.
송신 컨트롤(TxCtrl) 정보는 Write scheme에 사용되는 제어 정보들로 구성되어 있고, 수신 컨트롤(RxCtrl) 정보는 Read scheme에 사용되는 제어 정보들로 구성된다.
호스트(100)와 컨트롤러(200)는 송신 컨트롤(TxCtrl) 정보와 수신 컨트롤(RxCtrl) 정보를 상호 공유하며, 그 세부 항목에 대한 정의와 설명은 도 5 및 도 6에 도시한 바와 같다.
호스트 컨트롤(HostCtrl) 정보는 호스트(100)에 관리되는 데이터 쓰기, 데이터 읽기에 사용되는 제어 정보로 구성되며, 세부 항목에 대한 정의와 설명은 도 7에 도시한 바와 같다.
이하에서는 도 8 및 도 9를 참조하여, 본 발명의 실시예에 따른 Write scheme 동작 방식을 설명한다.
도 8은 본 발명의 실시예에 따른 송신 트리거(Tx Trigger) 신호의 정의 및 설명을 도시하고, 도 9는 본 발명의 실시예에 따른 Write scheme 예를 도시한다.
호스트(100)가 컨트롤러(200)에 데이터를 전달하기 위한 Write scheme은 크게 호스트 사이드와 컨트롤러 사이드로 나눌 수 있으며, 호스트 사이드와 컨트롤 사이드 간에는 하드웨어 아키텍처의 트리거 레지스터에 일대일로 매핑되는 송신 트리거(Tx Trigger) 신호에 따라 상호 유기적으로 동작한다.
TX_REQ, TX_END 신호는 호스트(100)가 컨트롤러(200)의 트리거 레지스터를 제어하여 컨트롤러(200)에 내부에 인터럽트를 발생시키고, TX_DONE 신호는 컨트롤러(200)가 트리거 레지스터를 제어하여 호스트(100)에 인터럽트를 발생시킨다.
호스트 사이드 Step 1.
호스트(100)는 송신 디스크립터(TX_Desc)로부터 디스크립터의 메모리 주소를 획득하고, 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시킨다.
호스트 사이드 Step 2.
호스트(100)는 WriteCount와 TxDescCount 값이 같으면 데이터 쓰기를 위해 준비된 디스크립터가 컨트롤러에 더 이상 존재하지 않는다고 판단하여, 쓰기 작업을 완료한 데이터의 개수를 TxCount에 기록하고, 컨트롤러에 TX_END 신호를 발생시키며, 컨트롤러(200)로부터 TX_DONE 신호를 받을 때까지 데이터 쓰기를 더 이상 하지 않고 대기한다. 대기 중 컨트롤러(200)로부터 TX_DONE 신호를 수신하게 되면 TxOkCount 개수만큼 WriteCount를 감소시키고, 전술한 Step 1 과정을 처음부터 다시 시작한다.
그렇지 않고 WriteCount가 TxDescCount 보다 작으면 컨트롤러(200)에 데이터를 쓸 수 있는 디스크립터가 더 존재한다고 판단하고, 다음 디스크립터에 데이터를 쓰고 나서 TxReqFlag를 상태를 체크한다. TxReqFlag가 비활성화 상태라면 활성화 상태로 만들고, 쓰기 작업을 완료한 데이터의 개수를 TxCount에 기록하고, 쓰기 데이터 처리를 요청하는 TX_REQ 신호를 컨트롤러(200)에 발생시킨다. TxReqFlag가 활성화 상태라면 이전에 컨트롤러(200)에 발생시켰던 TX_REQ 신호에 대한 처리가 완료되지 않았다고 판단하고, TX_REQ 신호를 컨트롤러(200)에 더 이상 발생시키지 않고 Step. 2의 과정 처음부터 다시 시작한다.
컨트롤러 사이드
컨트롤러(200)는 호스트(100)로부터 TX_END 신호를 수신하게 되면, 호스트(100)에서 쓰기 작업을 완료한 TxCount 개수의 디스크립터들을 순차적으로 컨트롤러(200) 내부에서 처리한다. 그 이후 TxDataCount와 TxDescCount 비교하여 그 차이 개수만큼 풀로부터 새로운 디스크립터와 메모리 블록을 할당받고, 디스크립터 링크드 리스트에 추가하고 TxDescCount를 증가시킨다. 이러한 과정을 통해 디스크립터에 대한 준비가 모두 완료되면, 쓰기 처리가 완료된 디스크립터의 누적 개수만큼 TxDescCount를 감소시키고, 쓰기 처리가 완료된 디스크립터의 누적 개수를 TxOkCount에 기록한다. 그런 다음, 호스트(100)가 쓰기 작업을 다시 시작할 수 있도록 호스트(100)에 TX_DONE 인터럽트를 전송한다.
컨트롤러(200)가 호스트(100)로부터 발생시킨 TX_REQ 신호를 수신하는 경우, 호스트(100)에서 쓰기 작업을 완료한 TxCount 개수의 디스크립터들을 순차적으로 컨트롤러(200) 내부에서 처리한다. 그 이후 TxDataCount와 TxDescCount 비교하여 그 차이값 만큼 풀로부터 디스크립터와 메모리 블록을 할당받아 디스크립터 링크드 리스트에 추가하고, TxDescCount 개수도 같이 증가시킨다. 이러한 과정을 통해 새로운 디스크립터에 대한 준비가 모두 완료되면, TxReqFlag를 비활성화 상태로 변경한다.
도 9를 참조하면, Write scheme은 호스트(100)에서 버퍼링되는 송신 데이터 개수와 컨트롤러(200) 내부의 가용 버퍼 용량을 고려하여 디스크럽터와 메모리 블록을 할당하며, 동시에 호스트(100)가 송신 데이터를 디스크립터에 연속적으로 빠르게 쓰는 것이 가능하다.
이하에서는 도 10 및 도 11을 참조하여, 본 발명의 실시예에 따른 Read scheme 동작 방식을 설명한다.
도 10은 본 발명의 실시예에 따른 수신 트리거(Rx Trigger) 신호의 정의 및 설명을 도시하고, 도 11은 본 발명의 실시예에 따른 Read scheme 예를 도시한다.
호스트(100)가 컨트롤러(200)로부터 데이터를 전달받기 위한 Read scheme은 크게 호스트 사이드와 컨트롤러 사이드로 나눌 수 있으며, 호스트 사이드와 컨트롤 사이드 간에는 하드웨어 아키텍처의 트리거 레지스터에 일대일로 매핑되는 수신 트리거(Rx Trigger) 신호에 따라 상호 유기적으로 동작한다.
RX_END, RX_DONE 신호는 호스트(100)가 컨트롤러(200)의 트리거 레지스터를 제어하여 컨트롤러(200)의 내부에 인터럽트를 발생시키고, RX_REQ 신호는 컨트롤러(200)가 트리거 레지스터를 제어하여 호스트(100)에 인터럽트를 발생시킨다.
호스트 사이드 Step 1.
RX_REQ 신호를 수신한 호스트(100)는 RxDesc로 부터 디스크립터의 메모리 주소를 획득하여 디스크립터에서 데이터를 읽고나서 ReadCount를 증가시킨다.
호스트 사이드 Step 2.
ReadCount와 RxDescCount 값이 같을 경우, 호스트(100)는 컨트롤러(200)에 수신 데이터가 더 이상 없다고 판단하여 지금까지 읽기를 완료한 데이터 수를 RxCount에 기록하고, 컨트롤러(200)에 RX_END 신호를 발생시키고, 읽기 작업을 완료한 누적 개수 만큼 ReadCount를 감소시킨다. 그 이후 컨트롤러(200)로부터 RX_REQ 신호를 받을 때까지 데이터 읽기를 더 이상 하지 않고 대기한다.
ReadCount가 RxDescCount보다 작을 경우, 호스트(100)는 컨트롤러(200)에 수신 데이터가 저장되어 있는 디스크립터가 더 존재한다고 판단하고, 다음 디스크립터에서 수신 데이터를 읽고, RxDoneFlag의 상태를 체크한다. RxDoneFlag가 비활성화 상태라면 활성화 상태로 만들고 나서, 읽기 작업을 완료한 개수를 RxCount에 기록하고, 호스트(100)에서 읽기 작업을 완료했다는 것을 통보하기 위해 RX_DONE 신호를 컨트롤러(200)에 발생시킨다. RxDoneFlag가 활성화 상태라면 이전에 컨트롤러(200)에 발생시켰던 RX_DONE 신호에 대한 처리가 완료되지 않았다고 판단하고, RX_DONE 신호를 컨트롤러(200)에 보내지 않고 전술한 Step. 2 과정을 처음부터 다시 시작한다.
컨트롤러 사이드
컨트롤러(200)의 디스크립터에 수신 데이터가 저장되면, 디스크립터 링크드 리스트에 순차적으로 추가되고 RxDescCount도 같이 증가한다.
컨트롤러(200)는, 호스트(100)에서 데이터를 읽는 작업을 시작할 수 있도록 RX_REQ 신호를 호스트(100)에 발생시킨다.
그렇지 않고 호스트(100)가 발생시킨 RX_END 신호를 수신하게 되면 RxCount 개수의 디스크립터와 디스크립터에 연동되는 메모리 블록을 풀로 반환 처리하고, 읽기 처리가 완료된 디스크립터의 누적 개수 만큼 RxDescCount를 감소시킨다.
호스트(100)에서 발생시킨 RX_DONE 신호를 컨트롤러(200)가 수신하게 되면, 호스트(100)에서 읽기 작업을 완료한 RxCount 개수의 디스크립터와 디스크립터에 연동되는 메모리 블록을 풀로 반환 처리하고, RxDoneFlag를 비활성화 상태로 변경한다.
도 11을 참조하면, Read scheme은 컨트롤러(200)에서 호스트(100)에 전달할 데이터가 있으면 풀로부터 할당 받은 디스크럽터의 메모리 블록에 수신 데이터를 저장하고, 동시에 호스트가 디스크립터로부터 수신 데이터를 연속적으로 빠르게 읽어오는 것이 가능하다.
한편, 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법은 컴퓨터 시스템에서 구현되거나, 또는 기록매체에 기록될 수 있다. 컴퓨터 시스템은 적어도 하나 이상의 프로세서와, 메모리와, 사용자 입력 장치와, 데이터 통신 버스와, 사용자 출력 장치와, 저장소를 포함할 수 있다. 전술한 각각의 구성 요소는 데이터 통신 버스를 통해 데이터 통신을 한다.
컴퓨터 시스템은 네트워크에 커플링된 네트워크 인터페이스를 더 포함할 수 있다. 프로세서는 중앙처리 장치(central processing unit (CPU))이거나, 혹은 메모리 및/또는 저장소에 저장된 명령어를 처리하는 반도체 장치일 수 있다.
메모리 및 저장소는 다양한 형태의 휘발성 혹은 비휘발성 저장매체를 포함할 수 있다. 예컨대, 메모리는 ROM 및 RAM을 포함할 수 있다.
따라서, 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법은 컴퓨터에서 실행 가능한 방법으로 구현될 수 있다. 본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법이 컴퓨터 장치에서 수행될 때, 컴퓨터로 판독 가능한 명령어들이 본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법을 수행할 수 있다.
한편, 상술한 본 발명에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현되는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체로는 컴퓨터 시스템에 의하여 해독될 수 있는 데이터가 저장된 모든 종류의 기록 매체를 포함한다. 예를 들어, ROM(Read Only Memory), RAM(Random Access Memory), 자기 테이프, 자기 디스크, 플래시 메모리, 광 데이터 저장장치 등이 있을 수 있다. 또한, 컴퓨터로 판독 가능한 기록매체는 컴퓨터 통신망으로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 읽을 수 있는 코드로서 저장되고 실행될 수 있다.
본 발명의 실시예에 따른 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법은 (a) 읽기 또는 쓰기 요청에 따라 풀로부터 디스크립터 및 메모리 블록을 할당받는 단계; 및 (b) 상기 (a) 단계에서 할당된 디스크립터 리스트에 직접 접근함으로써, 로컬버스를 통해 컨트롤러의 데이터 램과 트리거 레지스터에 직접 접근하여 데이터를 읽거나 쓰는 작업을 수행하는 단계를 포함한다.
상기 디스크립터는 링크드 리스트 구조의 메모리 블록들과 연결되고, 복수의 상기 디스크립터가 링크드 리스트 구조로 연결되어 상기 디스크립터 리스트를 구성하며, 송수신 데이터의 길이 및 종류 정보가 기록된다.
상기 (b) 단계는 상기 데이터를 읽는 작업을 수행하는 경우, (b-1) 송신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시키고, 상기 WriteCount와 TxDescCount를 비교하는 단계; (b-2-1) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount와 TxDescCount값이 같으면 데이터 쓰기를 중단하여 대기하고, Tx_DONE 신호를 수신하면 TxOKCount 개수만큼 상기 WriteCount를 감소하는 단계; 및 (b-2-2) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount가 TxDescCount보다 작으면 다음 디스크립터에 데이터를 쓰고 TxReqFlag 상태를 체크하여, 상기 TxReqFlag 가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 쓰기 데이터 처리를 요청하는 신호를 발생시키고, 상기 TxReqFlag 가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-1) 단계로 복귀하는 단계를 포함한다.
상기 (b) 단계는 상기 데이터를 쓰는 작업을 수행하는 경우, (b-3) RX_REQ 신호를 수신하여 수신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에서 데이터를 읽고 ReadCount를 증가시키고, 상기 ReadCount와 RxDescCount를 비교하는 단계; (b-4-1) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount와 RxDescCount값이 같으면 읽기 완료한 데이터 수를 RxCount에 기록하고, RX_END 신호를 발생시키고, 읽기 작업 완료 누적 개수만큼 상기 ReadCount를 감소시키며, 데이터 읽기를 중단하는 단계; 및 (b-4-2) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount가 RxDescCount보다 작으면 다음 디스크립터에서 데이터를 읽고 RxDoneFlag 상태를 체크하여, 상기 RxDoneFlag가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 읽기 작업 완료 개수를 상기 RxCount에 기록하고, 상기 RX_DONE 신호를 발생시키고, 상기 RxDoneFlag가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-3) 단계로 복귀하는 단계를 포함한다.
Claims (16)
- 데이터를 저장하는 데이터 램과, 이벤트 신호를 발생시키는 트리거 레지스터 및 코어를 포함하는 컨트롤러; 및
상기 컨트롤러와 연동되어 동작하는 호스트를 포함하고,
상기 호스트는 상기 데이터 램과 트리거 레지스터에 로컬버스를 통해 직접 접근하여 데이터를 쓰거나 읽는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제1항에 있어서,
상기 호스트는 FW 트리거 기설정 비트에 값을 써서 상기 컨트롤러의 내부에 인터럽트를 발생시켜 제어권을 이양받고, 상기 컨트롤러는 FW 상태를 읽어서 인터럽트의 종류를 판별하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제1항에 있어서,
상기 호스트는 Host 트리거 기설정 비트에 값을 써서 상기 호스트에 인터럽트를 발생시켜, 상기 호스트의 제어권을 이양 받고, 상기 호스트는 Host 상태를 읽어서 인터럽트의 종류를 판별하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제1항에 있어서,
상기 컨트롤러는 디스크립터와 메모리 블록이 논리적으로 분리되어 풀에 기할당되고, 상기 디스크립터는 링크드 리스트 구조의 메모리 블록들과 연결되는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제4항에 있어서,
상기 디스크립터는 순차적으로 연결되어 링크드 리스트 구조로 만들어져 디스크립터 리스트가 되고, 송수신 데이터의 길이 및 종류를 포함하는 부가 정보가 기록되며, 실제 데이터는 상기 메모리 블록에 분할되어 저장되는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제5항에 있어서,
상기 호스트는 Write Scheme에 따라 상기 컨트롤러의 송신 디스크립터 리스트에 직접 접근하여 데이터를 쓰는 작업을 수행하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제6항에 있어서,
상기 호스트는 송신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시키고,
상기 WriteCount와 TxDescCount값이 같으면 데이터 쓰기를 중단하여 대기하고, 상기 컨트롤러로부터 Tx_DONE 신호를 수신하면 TxOKCount 개수만큼 상기 WriteCount를 감소하며,
상기 WriteCount가 TxDescCount보다 작으면 다음 디스크립터에 데이터를 쓰고 TxReqFlag 상태를 체크하여, 상기 TxReqFlag 가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 쓰기 데이터 처리를 요청하는 신호를 발생시키고, 상기 TxReqFlag 가 활성화 상태인 경우 이전에 상기 컨트롤러에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 WriteCount와 TxDescCount값의 비교 단계로 돌아가는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제7항에 있어서,
상기 컨트롤러는 TxDataCount와 상기 TxDescCount를 비교하여 그 차이 개수만큼 풀로부터 새로운 디스크립터와 메모리 블록을 할당받고, 이를 상기 디스크립터 리스트에 추가하고, 쓰기 처리가 완료된 디스크립터 누적 개수를 상기 TxOKCount에 기록하며, 상기 호스트가 쓰기 작업을 재개할 수 있도록 상기 TX_DONE 신호를 전송하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제5항에 있어서,
상기 호스트는 Read Scheme에 따라 상기 상기 컨트롤러의 수신 디스크립터 리스트에 직접 접근하여 데이터를 읽는 작업을 수행하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제9항에 있어서,
상기 호스트는 RX_REQ 신호를 수신하여 수신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에서 데이터를 읽고 ReadCount를 증가시키고,
상기 ReadCount와 RxDescCount값이 같으면 읽기 완료한 데이터 수를 RxCount에 기록하고, 상기 컨트롤러에 RX_END 신호를 발생시키고, 읽기 작업 완료 누적 개수만큼 상기 ReadCount를 감소시키며, 데이터 읽기를 중단하고,
상기 ReadCount가 RxDescCount보다 작으면 다음 디스크립터에서 데이터를 읽고 RxDoneFlag 상태를 체크하여, 상기 RxDoneFlag가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 읽기 작업 완료 개수를 상기 RxCount에 기록하고, 상기 RX_DONE 신호를 발생시키고, 상기 RxDoneFlag가 활성화 상태인 경우 이전에 상기 컨트롤러에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 ReadCount와 RxDescCount값의 비교 단계로 돌아가는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제10항에 있어서,
상기 컨트롤러는 상기 호스트로부터 RX_END 신호를 수신하는 경우 상기 RXCount 개수의 디스크립터 및 그에 연동되는 메모리 블록을 풀로 반환하고, 읽기 처리가 완료된 디스크립터의 누적 개수만큼 상기 RxRescCount를 감소시키고,
상기 호스트로부터 RX_DONE 신호를 수신하는 경우 상기 RXCount 개수의 디스크립터 및 그에 연동되는 메모리 블록을 풀로 반환하고, 상기 RxDoneFlag를 비활성화 상태로 변경하는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- 제5항에 있어서,
상기 메모리 블록은 상기 메모리 블록의 크기 및 데이터의 크기에 따라 그 개수가 가변적으로 분할되어 운영되는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템.
- (a) 읽기 또는 쓰기 요청에 따라 풀로부터 디스크립터 및 메모리 블록을 할당받는 단계; 및
(b) 상기 (a) 단계에서 할당된 디스크립터 리스트에 직접 접근함으로써, 로컬버스를 통해 컨트롤러의 데이터 램과 트리거 레지스터에 직접 접근하여 데이터를 읽거나 쓰는 작업을 수행하는 단계
를 포함하는 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법.
- 제13항에 있어서,
상기 디스크립터는 링크드 리스트 구조의 메모리 블록들과 연결되고, 복수의 상기 디스크립터가 링크드 리스트 구조로 연결되어 상기 디스크립터 리스트를 구성하며, 송수신 데이터의 길이 및 종류 정보가 기록되는 것
인 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법.
- 제13항에 있어서,
상기 (b) 단계는 상기 데이터를 읽는 작업을 수행하는 경우,
(b-1) 송신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에 전송 데이터를 쓰고, WriteCount를 증가시키고, 상기 WriteCount와 TxDescCount를 비교하는 단계;
(b-2-1) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount와 TxDescCount값이 같으면 데이터 쓰기를 중단하여 대기하고, Tx_DONE 신호를 수신하면 TxOKCount 개수만큼 상기 WriteCount를 감소하는 단계; 및
(b-2-2) 상기 (b-1) 단계에서의 비교 결과, 상기 WriteCount가 TxDescCount보다 작으면 다음 디스크립터에 데이터를 쓰고 TxReqFlag 상태를 체크하여, 상기 TxReqFlag 가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 쓰기 데이터 처리를 요청하는 신호를 발생시키고, 상기 TxReqFlag 가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-1) 단계로 복귀하는 단계
를 포함하는 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법.
- 제13항에 있어서,
상기 (b) 단계는 상기 데이터를 쓰는 작업을 수행하는 경우,
(b-3) RX_REQ 신호를 수신하여 수신 디스크립터로부터 메모리 주소를 획득하고, 상기 디스크립터에서 데이터를 읽고 ReadCount를 증가시키고, 상기 ReadCount와 RxDescCount를 비교하는 단계;
(b-4-1) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount와 RxDescCount값이 같으면 읽기 완료한 데이터 수를 RxCount에 기록하고, RX_END 신호를 발생시키고, 읽기 작업 완료 누적 개수만큼 상기 ReadCount를 감소시키며, 데이터 읽기를 중단하는 단계; 및
(b-4-2) 상기 (b-3) 단계에서의 비교 결과, 상기 ReadCount가 RxDescCount보다 작으면 다음 디스크립터에서 데이터를 읽고 RxDoneFlag 상태를 체크하여, 상기 RxDoneFlag가 비활성화 상태인 경우 이를 활성화 상태로 만들고, 읽기 작업 완료 개수를 상기 RxCount에 기록하고, 상기 RX_DONE 신호를 발생시키고, 상기 RxDoneFlag가 활성화 상태인 경우 이전에 발생시킨 신호에 대한 처리가 미완료된 것으로 판단하여 상기 (b-3) 단계로 복귀하는 단계
를 포함하는 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200167075 | 2020-12-02 | ||
KR20200167075 | 2020-12-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220077863A true KR20220077863A (ko) | 2022-06-09 |
Family
ID=81986165
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210157044A KR20220077863A (ko) | 2020-12-02 | 2021-11-15 | 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템 및 그 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20220077863A (ko) |
-
2021
- 2021-11-15 KR KR1020210157044A patent/KR20220077863A/ko unknown
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11775455B2 (en) | Storage device for interfacing with host and method of operating the host and the storage device | |
CN109983449B (zh) | 数据处理的方法和存储系统 | |
US8843696B2 (en) | Memory device and method of controlling the same | |
US7543114B2 (en) | System and controller with reduced bus utilization time | |
US20240264760A1 (en) | Data Migration Method, Host, and Solid State Disk | |
US20220334975A1 (en) | Systems and methods for streaming storage device content | |
US10951741B2 (en) | Computer device and method for reading or writing data by computer device | |
CN113032293A (zh) | 缓存管理器及控制部件 | |
US11068283B2 (en) | Semiconductor apparatus, operation method thereof, and stacked memory apparatus having the same | |
WO2024078342A1 (zh) | 内存交换方法、装置、计算机设备及存储介质 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
US20240078045A1 (en) | Hardware queue handling system, method, solid state drive controller, and solid-state drive | |
KR100630071B1 (ko) | 다중 프로세서 환경에서의 dma를 이용한 고속 데이터전송 방법 및 그 장치 | |
JP6523707B2 (ja) | ラップ読出しから連続読出しを行うメモリサブシステム | |
US9146693B2 (en) | Storage control device, storage system, and storage control method | |
JP2008015876A (ja) | データアクセスシステム、データアクセス装置、データアクセス集積回路及びデータアクセス方法 | |
CN115883022B (zh) | Dma传输控制方法、装置、电子设备及可读存储介质 | |
CN116107697B (zh) | 一种不同操作系统之间互相通信的方法及系统 | |
KR20220077863A (ko) | 로컬버스를 이용한 호스트와 컨트롤러 간의 데이터 교환 시스템 및 그 방법 | |
JP2001282631A (ja) | 書き込みデータの破壊を制限する方法及びシステムとpciバス・システム | |
US20060277326A1 (en) | Data transfer system and method | |
JP2002157091A (ja) | ストレージサブシステム及びそのシステムに使用する記憶装置 | |
US20060143378A1 (en) | Information processing apparatus and control method for this information processing apparatus | |
CN113031849A (zh) | 直接内存存取单元及控制部件 | |
JP3206585B2 (ja) | バス制御装置、マスタ装置及びスレーブ装置並びにバス制御方法 |