KR20070068809A - System and method for transmitting a data in a system on a chip system - Google Patents
System and method for transmitting a data in a system on a chip system Download PDFInfo
- Publication number
- KR20070068809A KR20070068809A KR1020050130826A KR20050130826A KR20070068809A KR 20070068809 A KR20070068809 A KR 20070068809A KR 1020050130826 A KR1020050130826 A KR 1020050130826A KR 20050130826 A KR20050130826 A KR 20050130826A KR 20070068809 A KR20070068809 A KR 20070068809A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- size
- fifo buffer
- fifo
- unit
- Prior art date
Links
Images
Classifications
-
- 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/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
Abstract
Description
도 1은 종래의 주변 장치에서 외부로부터 수신된 데이터를 FIFO 버퍼를 사용하여 DMA 처리기를 통해 시스템 메모리로 전송하는 과정을 설명하기 위한 블록 구성도,1 is a block diagram illustrating a process of transferring data received from the outside to a system memory through a DMA processor using a FIFO buffer in a conventional peripheral device;
도 2는 종래의 주변 장치에서 외부로부터 수신된 데이터를 FIFO 버퍼를 사용하지 않고 DMA 처리부를 통해 시스템 메모리로 전송하는 과정을 설명하기 위한 블록 구성도,FIG. 2 is a block diagram illustrating a process of transferring data received from the outside to a system memory through a DMA processing unit without using a FIFO buffer in a conventional peripheral device; FIG.
도 3은 본 발명의 실시 예에 따른 주변 장치(Peripheral)내의 입력부가 FIFO 버퍼 유닛을 사용하여 DMA 처리부로 데이터를 전송하기 위한 블록구성도3 is a block diagram of an input unit in a peripheral device for transmitting data to a DMA processor using a FIFO buffer unit according to an embodiment of the present invention.
도 4는 본 발명의 실시 예에 따른 DMA 처리부의 상태 천이도,4 is a state transition diagram of a DMA processing unit according to an embodiment of the present invention;
도 5는 본 발명의 실시 예에 따른 주변 장치(Peripheral)내의 입력부가 FIFO 버퍼 유닛를 사용하여 DMA 처리부로 데이터를 전송하기 위한 신호 흐름을 도시한 블록 구성도,FIG. 5 is a block diagram illustrating a signal flow for an input unit in a peripheral device to transmit data to a DMA processor using a FIFO buffer unit according to an embodiment of the present invention; FIG.
도 6은 본 발명의 실시 예에 따른 입력부의 CRC 처리부의 CRC 체크결과 입력부에서 송신되는 데이터가 모두 양호할 때의 입력부, FIFO 버퍼 유닛, DMA 처리부간의 동작 순서 및 데이터의 이동을 나타낸 도면,6 is a diagram illustrating an operation sequence and data movement between an input unit, a FIFO buffer unit, and a DMA processing unit when all data transmitted from the CRC check result input unit of the CRC processing unit of the input unit is satisfactory;
도 7은 본 발명의 실시 예에 따른 입력부의 CRC 처리부의 CRC 체크 결과 디코더로 수신된 신호가 불량(bad)일 때의 입력부, FIFO 버퍼 유닛, DMA 처리부간의 동작 순서 및 데이터의 이동을 나타낸 도면,FIG. 7 is a diagram illustrating an operation sequence and data movement between an input unit, a FIFO buffer unit, and a DMA processing unit when a signal received by a decoder from a CRC processing unit of the CRC processing unit is bad according to an embodiment of the present invention; FIG.
도 8은 본 발명의 실시 예에 따른 입력부의 동작 흐름도,8 is an operation flowchart of an input unit according to an embodiment of the present invention;
도 9는 본 발명의 실시 예에 따른 FIFO 버퍼 유닛의 동작 흐름도,9 is an operation flowchart of a FIFO buffer unit according to an embodiment of the present invention;
도 10은 본 발명의 실시 예에 따른 DMA 처리부의 동작 흐름도.10 is a flowchart illustrating operations of a DMA processing unit according to an exemplary embodiment of the present invention.
본 발명은 시스템 온 칩(SoC) 시스템에서 데이터 전송을 위한 시스템 및 방법에 관한 것으로 특히 피포(FIFO) 버퍼를 구비하여 SoC 외부로부터 수신된 신호를 내부의 시스템 메모리로 전송하기 위한 시스템 및 방법에 관한 것이다.The present invention relates to a system and method for data transmission in a system on chip (SoC) system, and more particularly to a system and method for transmitting a signal received from the outside of the SoC to the internal system memory having a FIFO buffer will be.
일반적으로 시스템 온 칩(System On Chip : Soc)은 중앙 처리 장치(Centural Processing Unit : CPU), 메모리, 주변 장치(Peripheral) 등으로 구성된다. 칩 외부와의 통신은 모뎀(Modem), USB(Universal Serial Bus), UART(Universal Asynchronous Receiver Transmitter) 등과 같은 주변 장치(Peripheral)에 의해 이루어진다. 외부에서 데이터가 입력되었을 때, 상기 데이터를 중앙 처리 장치(CPU)가 처리하도록 하려면, 임시 버퍼를 구비한 주변 장치(Peripheral)에 있는 데이터를 중앙 처리 장치가 읽을 수 있도록 시스템 메모리로 옮겨 놓아야 한다.In general, a System On Chip (Soc) is composed of a Central Processing Unit (CPU), a memory, a peripheral device, and the like. Communication with the outside of the chip is performed by a peripheral device such as a modem, a universal serial bus (USB), or a universal asynchronous receiver transmitter (UART). When data is input from the outside, the CPU needs to move data in a peripheral device having a temporary buffer to the system memory so that the CPU can read the data.
상기 데이터를 시스템 메모리에 옮기는 작업은 중앙 처리 장치가 할 수 도 있으나, 직접 메모리 접근(Direct Memory Access : DMA)을 사용하는 것이 훨씬 효율적이다.Moving the data to system memory may be done by the central processing unit, but using Direct Memory Access (DMA) is much more efficient.
또한 주변 장치에 있는 데이터를 모았다가 한 번에 옮길 때 보다 데이터가 생길 때마다 조금씩 옮기는 것이 시스템 버스를 좀 더 효율적으로 사용할 수 있다. 이를 위해 DMA와 함께 사용되는 것이 선입선출(First Input First Output : FIFO)버퍼이다.Also, gathering data from peripherals and moving them a bit each time there is more efficient use of the system bus than moving them all at once. For this purpose, the first input first output (FIFO) buffer is used with DMA.
주변 장치(Peripheral)에 데이터가 생기면 생길 때마다 바로 선입선출(FIFO)버퍼에 넣고 DMA는 FIFO버퍼에 데이터가 있으면 버스가 비워있는 시간에 조금씩 옮겨 놓는다.Whenever data is created on a peripheral, it is put directly into a first-in, first-out (FIFO) buffer, and DMA is moved slightly during the time the bus is empty if there is data in the FIFO buffer.
FIFO 버퍼를 사용할 때 또 하나의 장점은 FIFO 버퍼를 경계로 푸쉬(Push)하는 부분과 팝(Pop)하는 부분을 완전히 분리시킬 수 있다는 것이다. 주변 장치(Peripheral) 내부를 구성하는 여러 불럭 들이 서로 신호들을 송수신하는 경우가 많을수록 생각지 못했던 에러들 즉, 코너 케이스(coner case)가 발생할 수 있다. FIFO 버퍼를 사용하게 되면 푸쉬하는 부분은 FIFO 버퍼와의 인터액션(Interaction)만 고려하면 되고 팝하는 부분도 FIFO 버퍼와 인터액션만 고려하면 된다. 특별히 푸쉬하는 부분과 팝하는 부분의 같은 클럭(Clock)을 사용하는 블록들의 모임인 클럭 도메인(Clock Domain)이 다를 경우 FIFO 버퍼에 의한 분리 효과가 더 커진다.Another advantage of using FIFO buffers is that you can completely separate the parts that push and pop the FIFO buffers. As blocks in the peripheral device transmit and receive signals to each other, unexpected errors, that is, corner cases may occur. When using a FIFO buffer, the push part only needs to consider interaction with the FIFO buffer and the pop part only needs to consider the interaction with the FIFO buffer. In particular, when the clock domain, which is a collection of blocks using the same clock of the pushing part and the popping part, is different, the separation effect by the FIFO buffer becomes larger.
FIFO 버퍼와 DMA를 사용하면 시스템 버스 사용효율을 높일 수 있고 코너 케이스를 방지할 수 있지만, CRC(Cyclic Redundancy Check)와 같이 데이터의 마지막 부분에 지금까지 수신했던 데이터가 유효한지 여부를 검사하는 경우에는 FIFO 버퍼를 사용하기 어렵다. 이런 경우 데이터를 수신하더라도 FIFO 버퍼와 DMA를 통해 메모리로 전송할 수 없다. 왜냐하면, 데이터를 수신받는 중에는 수신하는 데이터가 유효한지를 알 수 없기 때문이다. 따라서 수신받는 데이터를 일단 임시 버퍼에 저장해 놓고 다 수신한 경우에 데이터가 유효한지 여부가 확인되면 그 때 FIFO 버퍼와 DMA를 통해 시스템 메모리로 전송해야 한다. 또는 FIFO 버퍼를 사용하지 않고 임시 버퍼에서 바로 DMA를 통해 전송하게 할 수도 있다.Using FIFO buffers and DMA can improve system bus utilization and avoid corner cases, but when checking whether the data received so far is valid at the end of the data, such as a cyclic redundancy check (CRC) Difficult to use FIFO buffer In this case, even if data is received, it cannot be transferred to memory through the FIFO buffer and DMA. This is because it is not possible to know whether the received data is valid while receiving the data. Therefore, once the received data is stored in the temporary buffer and the received data is confirmed whether it is valid, it must be transferred to the system memory through the FIFO buffer and DMA at that time. Alternatively, it can be sent via DMA directly from the temporary buffer without using a FIFO buffer.
도 1은 종래의 주변 장치에서 외부로부터 수신된 데이터를 FIFO 버퍼를 사용하여 DMA 처리기를 통해 시스템 메모리로 전송하는 과정을 설명하기 위한 블록 구성도이다.FIG. 1 is a block diagram illustrating a process of transferring data received from an external device to a system memory through a DMA processor using a FIFO buffer in a conventional peripheral device.
입력부(100)는 도시되지 않은 SoC 외부로부터 데이터를 입력받는 장치로, 수신된 데이터의 유효성을 검증하기 위한 디코딩을 수행하며, 입력받은 데이터를 임시 버퍼로 전송한다. 상기 도 1에는 임시 버퍼로서 버퍼 0(102), 버퍼 1(104) 두 개를 사용한다. 왜냐하면, 버퍼 하나에서 데이터를 FIFO 버퍼(106)로 데이터를 옮기는 동안 다음 데이터를 받을 버퍼가 필요하기 때문이다.The
즉, 버퍼 0(102)에서 FIFO 버퍼(106)로 데이터를 옮기는 동안 버퍼 1(104)에서 다음 데이터를 입력부(100)로부터 수신받는다. 만일 버퍼 1(104)에서 데이터를 모두 수신하면, 버퍼 1(104)에서 FIFO 버퍼(106)로 데이터를 옮기고 버퍼 0(102)으로 새로운 데이터를 수신받는다.(Double Buffering) 상기 도 1은 버퍼 1(104)이 입력부(100)로부터 데이터를 수신받고, 버퍼 0(102)이 FIFO 버퍼(106)로 수신된 데이 터를 송신하는 과정을 도시하였다. 이때, 입력부(100)는 1슬롯 동안 수신된 데이터에 대한 CRC 체크를 수생한 후 오류가 없다면, FIFO 버퍼(106)로 하여금 버퍼 0(102)에 저장된 데이터를 DMA 처리부(108)로 전송하게 제어한다. DMA 처리부(108)는 FIFO 버퍼(106)로부터 수신된 데이터를 시스템 메모리(110)로 전송한다.That is, while transferring data from buffer 0 (102) to FIFO buffer (106), buffer 1 (104) receives the next data from input unit (100). If all data is received in
시스템 메모리(110)은 상기 DMA 처리부(108)로부터 수신된 데이터를 저장하며, 도시되지 않은 중앙처리 장치가 소정의 동작을 위해 데이터를 리드/라이트하는 동작을 하게된다.The
도 2는 종래의 주변 장치에서 외부로부터 수신된 데이터를 FIFO 버퍼를 사용하지 않고 DMA 처리부를 통해 시스템 메모리로 전송하는 과정을 설명하기 위한 블록 구성도이다.FIG. 2 is a block diagram illustrating a process of transferring data received from the outside to a system memory through a DMA processor without using a FIFO buffer in a conventional peripheral device.
상기 도 2의 구성은 상기 도 1에 비해서 FIFO 버퍼만 생략되었을 뿐 나머지 구성은 동일함으로 상세한 설명은 생략하기로 한다.2, only the FIFO buffer is omitted in comparison with FIG. 1, and the rest of the configuration is the same.
상기 도 1에서와 같이 입력부(100)가 CRC 체크 결과를 FIFO 버퍼(106)와 DMA 처리부(108)로 동시에 전송하고, 버퍼 0(102) 또는 버퍼 1(104)로 데이터를 전송할 시에는 예기치 못한 코너 케이스가 발생할 수 있다.As shown in FIG. 1, when the
상기 도 1 내지 상기 도 2의 슬롯(Slot)은 CRC 체크를 하기 위한 데이터의 특정한 크기를 의미하며, 상기 도 1에서는 3슬롯, 도 2에서는 2슬롯만큼의 메모리가 필요하다. 이는 DMA 처리부(108)의 속도와 상관없이 항상 필요한 메모리의 양이다.The slots of FIGS. 1 and 2 refer to a specific size of data for CRC checking. In FIG. 1, 3 slots and 2 slots of memory are required. This is always the amount of memory needed regardless of the speed of the
상기 도 2에서는 FIFO 버퍼를 사용하지 않음으로인하여 데이터 입출력 부분 을 분리하지 못함으로 인해, 입력부(100)와 버퍼(102, 104), 버퍼(102, 104)와 DMA 처리부(108)간의 인터액션이 많아지게 된다.In FIG. 2, since the data input / output part cannot be separated because the FIFO buffer is not used, the interaction between the
또한, 상기 도 1 및 2에서와 같이 종래 기술에 따르면, 1슬롯의 데이터를 전송하기 위해 도 1에서는 3슬롯의 메모리가, 도 2에서는 2슬롯의 메모리가 각각 필요하게 되므로 인해 메모리 사이즈가 커지게 된다.In addition, according to the related art, as shown in FIGS. 1 and 2, in order to transmit data of one slot, a memory of 3 slots is required in FIG. 1 and a memory of 2 slots in FIG. 2, respectively. do.
메모리 사이즈가 커지게 되면, SoC 칩 사이즈도 커지게 되며 그에 따라 소비하게 되는 파워가 증가하고, 칩의 양산 율이 나빠지게 되는 단점이 있다.As the memory size increases, the SoC chip size also increases, resulting in increased power consumption and worsening of the chip production rate.
본 발명은 시스템 온 칩 버스 시스템에서 입력부와 DMA 처리부간에 언두 푸쉬 FIFO 버퍼를 사용하여 데이터를 전송하기 위한 시스템 및 방법을 제공한다. The present invention provides a system and method for transferring data using an undo push FIFO buffer between an input and a DMA processor in a system on chip bus system.
본 발명에 따른 시스템 온 칩 시스템에서 데이터를 시스테 메모리로 전송하기 위한 시스템은, 상기 시스템 메모리로 전송할 데이터를 N(N은 자연수)개의 서브 데이터들로 분할하고, 상기 N개의 서브 데이터들과 상기 데이터 크기인 N이 정의된 헤더를 생성하고, 상기 헤더를 먼저 FIFO(First Input First Output) 버퍼 유닛으로 푸쉬한 뒤, 상기 서브 데이터들에 대해 CRC(Cycllic Redundancy Check) 체크 여부에 따라 N번째 서브 데이터를 전송할지 여부를 결정하는 입력부와, 상기 입력부로부터 상기 헤더와 상기 서브 데이터들을 수신할 시 FIFO 크기를 측정하여 DMA(Direct Memory Access) 처리부로 전송하고, 상기 입력부의 CRC 체크 여부에 따라 푸쉬 동작 취소 여부를 검사하는 FIFO 버퍼 유닛과, 상기 FIFO 버퍼 유닛으로부 터 헤더를 팝하여, 상기 데이터의 크기를 검사하고, 상기 데이터의 크기만큼 상기 FIFO 크기가 카운트되면, 상기 FIFO 버퍼 유닛에 수신된 서브 데이터들을 팝하는 DMA 처리부를 포함한다.In a system on a chip system according to an embodiment of the present invention, a system for transmitting data to a cyste memory divides data to be transmitted to the system memory into N sub-data (N is a natural number), and the N sub data and the A header having a data size N defined is generated, and the header is first pushed into a first input first output (FIFO) buffer unit, and then the Nth sub data according to whether a Cyclic Redundancy Check (CRC) is checked for the sub data. An input unit for determining whether to transmit the data, a FIFO size when the header and the sub data are received from the input unit, and transmits the measured FIFO to a direct memory access (DMA) processor, and cancels a push operation according to whether the input unit has a CRC check. Pops a header from the FIFO buffer unit, and checks the size of the data; When the FIFO size of the count by the size of the emitter, and a DMA processor for pop the sub-data received by the FIFO buffer unit.
본 발명에 따른 시스템 온 칩 시스템에서 외부 장치로부터 수신된 신호를 시스템 메모리로 전송하기 위한 방법은 입력부가 상기 신호를 디코딩하여 생성된 데이터를 N(N은 자연수)개의 서브 데이터들로 분할하고, 상기 N개의 서브 데이터와 상기 데이터의 크기 N이 정의된 헤더를 FIFO(First Input First Output) 버퍼 유닛으로 전송하는 과정과, 상기 입력부는 N번째 데이터를 푸쉬하기 전에 상기 N개의 데이터들에 대해 CRC 체크를 수행하여 상기 생성된 데이터들에 대해 오류를 검사하고, 검사 결과에 따라 푸쉬 동작 취소할지 여부를 결정하는 과정과, 상기 FIFO 버퍼 유닛이 상기 입력부로부터 상기 헤더와 상기 서브 데이터들이 푸쉬 될 때 마다 카운터를 증가시키고, 상기 증가된 카운터를 DMA(Direct Memory Access) 처리부로 전송하는 과정과, 상기 DMA 처리부는 상기 헤더를 팝하여 상기 헤더에 정의된 상기 N 개의 서브 데이터가 상기 FIFO 버퍼 유닛에 푸쉬될 때 까지 대기하는 과정과, 상기 DMA 처리부는 상기 FIFO 버퍼 유닛에 상기 N 개의 서브 데이터들이 푸쉬되면, 상기 FIFO 버퍼 유닛으로부터 상기 N개의 서브 데이터들을 팝하는 과정을 포함한다.In a system on a chip system according to the present invention for transmitting a signal received from an external device to the system memory, the input unit decodes the data generated by decoding the signal into N (N is a natural number) sub-data, Transmitting N sub-data and a header having a size N defined therein to a first input first output (FIFO) buffer unit, and the input unit performs a CRC check on the N data before pushing the N-th data. Performing an error check on the generated data, determining whether to cancel a push operation according to a test result, and a counter every time the FIFO buffer unit is pushed from the input by the header and the sub data. Incrementing and transmitting the incremented counter to a direct memory access (DMA) processor; Popping and waiting for the N sub data defined in the header to be pushed to the FIFO buffer unit, and if the N sub data is pushed to the FIFO buffer unit, the FIFO buffer unit Popping the N sub-datas from the.
이하 본 발명의 실시 예를 첨부한 도면을 참조하여 상세히 설명하기로 하겠 다. 도면들 중 동일한 구성들은 가능한 한 어느 곳에서든지 동일한 부호들을 나타내고 있음을 유의해야 한다. 하기에서 구체적인 특정사항들이 나타나고 있는데, 이는 본 발명의 보다 전반적인 이해를 돕기 위해 제공된 것이다. 그리고 본 발명을 설명함에 있어, 관련된 공지 기능 혹은 구성에 대한 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.Hereinafter, exemplary embodiments of the present invention will be described in detail with reference to the accompanying drawings. It should be noted that the same components in the figures represent the same numerals wherever possible. Specific details are set forth below, which are provided to aid a more general understanding of the present invention. In describing the present invention, when it is determined that description of related known functions or configurations may unnecessarily obscure the gist of the present invention, the detailed description thereof will be omitted.
도 3은 본 발명의 실시 예에 따른 주변 장치(Peripheral)내의 입력부(300)가 FIFO 버퍼 유닛(302)을 사용하여 DMA 처리부(304)로 데이터를 전송하기 위한 블록구성도이다.3 is a block diagram of an
본 발명은 입력부(300)가 헤더(Header)(300b)를 사용하여 도시되지 않은 SoC 외부로부터 수신된 1슬롯의 데이터가 유효한지 여부를 FIFO 버퍼 유닛(302)과 DMA 처리부(304)로 알려준다. 다시말하면, 입력부(300)가 소정의 제어 신호(Signal)를 사용하여 상기 수신된 1슬롯의 데이터에 대한 CRC 체크 결과를 FIFO 버퍼 유닛(302)과 DMA 처리부(304)로 알려주는데, CRC 체크 결과가 '양호(Good)'이면, DMA 처리부(304)를 구동시켜 시스템 메모리(110)로 FIFO 버퍼 유닛(302)에 수신된 데이터를 팝(Pop)하여 전송하게 제어한다. 반면, CRC 체크 결과가 '불량(bad)'이면, 입력부(300)는 FIFO 버퍼 유닛(302)로 하여금 푸쉬 동작 취소(Undo Push)를 하도록 제어한다. According to the present invention, the
FIFO 버퍼 유닛(302)은 입력부(300)로부터 푸쉬 동작 취소(Undo Push)신호를 수신받으면, 입력부(300)로부터 FIFO 버퍼(302a)에 수신된 데이터를 삭제한다. 그리고 DMA 처리부(304)는 FIFO 버퍼 유닛(302)로부터 푸쉬 동작 취소(Undo Push)신 호를 수신하면, 아이들 상태로 천이한다.When the
헤더(300b)에는 앞으로 입력부(300)가 전송할 데이터(300d)에 관련된 정보가 정의되어 있으며, 상기 데이터에 관련된 정보 중 대표적으로 전송할 데이터의 크기가 정의되어있다. 예를 들어 앞으로 전송할 데이터가 10바이트(Byte)라면, 입력부(300)는 10을 의미하는 정보를 헤더(300b)에 설정하여 FIFO 버퍼(302a)로 푸쉬한다. 헤더(300b)의 단위는 디코더(300a)의 종류와 FIFO 버퍼(302a)의 크기에 따라 비트, 바이트, 워드 등이 사용될 수 있다. 본 발명의 실시 예에서는 바이트 단위를 사용하기로 한다. DMA 처리부(304)는 FIFO 버퍼(302)로부터 헤더(300b)를 팝(Pop)하면, 헤더(300b)에 저장된 데이터의 크기 만큼의 데이터가 FIFO 버퍼(302a)에 수신될 때 까지 대기한다.In the
본 발명의 실시 예에서 디코더(300a)가 생성한 한 슬롯의 데이터를 FIFO 버퍼 유닛(302)로 순차적으로 전송하기 위해 바이트 단위로 조각된 각각의 단위들을 서브(Sub) 데이터라 칭하기로 한다.In the embodiment of the present invention, each of the units sliced in byte units to be sequentially transmitted to the
예컨대, 전송할 데이터가 10바이트이고, 헤더(300b)의 단위가 바이트(Byte)라면, 디코더(300a)는 10개의 서브 데이터를 FIFO 버퍼(302)로 전송한다.For example, if the data to be transmitted is 10 bytes and the unit of the
입력부(300)는 도시되지 않은 SoC 외부로부터 수신된 신호를 디코딩하여 생성된 데이터에 대한 CRC 체크결과가 유효하다고 판단되면 마지막 서브 데이터를 FIFO 버퍼(302a)로 푸쉬하여 DMA 처리부(304)를 구동시키기 위한 신호를 발생한다. 그러나 CRC 체크 결과가 유효하지 않다면, 지금까지 푸쉬한 서브 데이터들을 동작 취소(Undo)하기 위한 신호를 FIFO 버퍼 유닛(302)로 전송한다. 이때 FIFO 버퍼 유 닛(302)은 DMA 처리부(304)에도 푸쉬 동작 취소(Undo Push)을 신호로 알려준다.If the
만약 헤더를 사용하지 않을 경우 DMA 처리부가 한 슬롯의 데이터를 완전히 전송시켰다는 가정 하에 다음 슬롯의 데이터를 전송할 수 있다. DMA 처리부(304)가 시스템 메모리(110)로 데이터를 송신하는 동작 중이 아니라면 입력부(300)로부터 전송 신호를 수신하여 동작을 시작하면 되지만 이미 전송 동작이 시작된 상황에서는 입력부(300)로부터 수신된 신호를 별도로 저장해 두지 않으면 안된다. 또한 입력부(300)로부터 DMA 처리부(304)가 직접 신호를 수신하고, 데이터는 FIFO 버퍼 유닛(302)을 통해서 수신하는 경우 예기치 못한 코너 케이스가 발생할 수 있다. 따라서 본 발명의 실시 예에서는 전송할 데이터의 크기가 정의된 헤더를 사용하기로 하며, FIFO 버퍼 유닛(302)을 기준으로 데이터를 푸쉬하는 입력부(300)와 데이터를 팝하는 DMA 처리부(304)의 동작을 구분하여 코너 케이스의 발생을 줄인다.If the header is not used, the DMA processor may transmit data of the next slot under the assumption that the data of one slot is completely transmitted. If the
그럼 이하에서 상기 도 3의 블록 구성에 대해 상세히 설명하기로 한다.Hereinafter, the block configuration of FIG. 3 will be described in detail.
입력부(300)는 디코더(300a), 먹스(300c), CRC 처리부(300e)로 구성되어 있다. 디코더(300a)는 도시되지 않은 SoC 외부로부터 입력된 신호를 디코딩하여 시스템 메모리(110)로 전송할 데이터(300d)와 상기 데이터의 크기가 정의된 헤더(300b)를 생성한다.The
상기 도 3에서는 하나의 데이터(300d)만이 도시되어 있지만, 실제로는 N개의 데이터들이 먹스(300c)를 통해 FIFO 버퍼 유닛(302)로 푸쉬된다.Although only one
그리고, 디코더(300a)는 생성한 데이터(300d)를 언두 푸쉬 FIFO 버퍼(302)로 푸쉬하기 전에 먼저 헤더(Header)(300b)를 먹스(300c)로 푸쉬한다. 헤더(300b)에는 앞으로 FIFO 버퍼(302)가 수신하게될 데이터의 크기 즉, N이 정의되어 있다.The decoder 300a first pushes the
먹스(300c)는 디코더(300a)로부터 소정의 제어 신호를 수신하여 헤더(300b) 또는 서브 데이터(300d)를 FIFO 버퍼 유닛(302)의 FIFO 버퍼(302a)로 전송한다. 서브 데이터(300d)를 전송하기 전에 헤더(300b)를 FIFO 버퍼(302a)로 전송하게 제어하는 제어 신호를 디코더(300a)로부터 수신한다. The mux 300c receives a predetermined control signal from the decoder 300a and transmits the
CRC 처리부(300e)는 상기 디코더(300a)에 의해 디코딩되어 생성된 서브 데이터들에 대해 CRC 체크를 수행하여 디코딩된 데이터가 유효한지 여부를 판단하는 역할을 수행한다. 이때, CRC 처리부(300e)는 디코더(300a)에서 생성된 서브 데이터에 대해 계속 CRC를 계산한다. CRC 계산은 서브 데이터를 누적하는 방식으로 계산한다. 즉, 서브 데이터가 생길 때마다 이전 CRC 결과와 새로운 서브 데이터를 가지고 CRC 값을 다시 계산한다. 따라서 CRC 계산을 위해 서브 데이터를 보관할 필요는 없으며 CRC 값 자체에 이미 이전 서브 데이터 들의 값이 반영되어 있는 것이다. 그리고 디코더(300a)에서 마지막 서브 데이터 즉, N번째 서브 데이터가 생성되면, CRC 체크 결과를 판단한다.The
그리고, CRC 체크를 수행하여 CRC 체크 결과가 "양호(Good)"이면, 마지막 서브 데이터 즉, N 번째 서브 데이터를 FIFO 버퍼 유닛(302)으로 푸쉬하고, "불량(Bad)"이면, FIFO 버퍼 유닛(302)의 FIFO 버퍼 제어부(302b)로 푸쉬 동작 취소(Undo push)신호를 전송하여 FIFO 버퍼(302a)에 저장된 서브 데이터들을 후술할 언두_카운트(Undo_cnt) 신호로 수신된 서브 데이터의 크기만큼 삭제하게 제어한다. If the CRC check result is "good" and the CRC check result is "good", the last sub data, that is, the N-th sub data, is pushed to the
또한, 디코더(300a)는 먹스(300c)로 제어 신호를 전송하여, 먹스(300c)로 하 여금 헤더(300b)와 서브 데이터(300d)중 어느 것을 언두 푸쉬 FIFO 버퍼(302)로 출력할지를 선택하게 한다. CRC 처리부(300e)는 디코더(300a)로부터 먹스(300c)로 마지막 데이터까지 출력되면 CRC를 수행하여 CRC 결과를 알 수 있다. 이때 CRC 결과가 '양호(Good)'하면 마지막 서브 데이터를 FIFO 버퍼 유닛(302)으로 푸쉬(Push)한다. 그전까지 디코더(300a)는 N-1 번째 서브 데이터까지만을 출력한 상태다. CRC 체크가 '불량(Bad)'이면 푸쉬된 데이터의 크기만큼 서브 데이터들을 FIFO 버퍼(302a)에서 삭제시키기 위한 언두 명령을 송신 한다.In addition, the decoder 300a transmits a control signal to the mux 300c so that the mux 300c selects which of the
FIFO 버퍼 유닛(302)은 일반적인 FIFO 버퍼와 같은 푸쉬와 팝 동작을 수행하는 FIFO 버퍼(302a)와 푸쉬 동작 취소(Undo Push)신호를 수신하면 FIFO 버퍼(302a)에서 삭제 요청된 크기 즉, N 만큼 서브 데이터들을 삭제하게 제어하고, DMA 처리부(304)로도 푸쉬 동작 취소 신호를 전송하는 FIFO 버퍼 제어부(302b)로 구성된다.The
FIFO 버퍼 제어부(302b)는 입력부(300)로부터 데이터 크기인 N 보다 FIFO 버퍼(302a)에 저장된 데이터 크기 즉, FIFO 크기가 작으면 헤더를 DMA 처리부(304)가 이미 읽어(Pop)가서 대기 상태로 천이되었음을 의미한다. 따라서, DMA 처리부(304)로 푸쉬 동작을 취소 할 것을 알려준다. 만약 FIFO 버퍼(302a)에 저장된 데이터 크기 즉, FIFO 크기가 상기 헤더에 정의된 데이터 크기보다 많으면 상기 데이터 크기 즉, N-1 만큼 서브 데이터들을 FIFO 버퍼(302a)에서 삭제한다. FIFO 버퍼 유닛(302)에서 푸쉬 동작을 취소 과정은 단지 FIFO 버퍼(302a)의 쓰기 포인터(Write Pointer)의 위치만 변경해 주면 된다.If the data size stored in the
또한, FIFO 버퍼 제어부(302b)는 FIFO 버퍼(302a)로 헤더 및 서브 데이터가 수신되면, 그 사실을 DMA 처리부(304)로 알려줌으로써, DMA 처리부(304)의 동작 상태를 변화시킨다. FIFO 버퍼 제어부(302b)는 현재 FIFO 버퍼(302a)에 헤더 및 서브 데이터가 어느정도 수신되었는지에 대한 크기정보를 카운트하여 DMA 처리부(304)로 전송함으로서, DMA 처리부(304)는 본 발명의 실시 예에 따른 동작을 수행할 수 있게 된다.In addition, when the header and sub data are received by the
FIFO 버퍼 제어부(302b)는 내부의 일종의 레지스터인 카운터에 FIFO 버퍼(302a)에 저장된 헤더 및 서브 데이터 크기를 카운트한 결과를 저장한다. 본 발명에서는 이와 같이 카운터 레지스터에 FIFO 크기를 카운터한 결과를 설정하는 것을 카운터 증가 또는 카운트 감소라는 용어로 사용하기로 하겠다. The FIFO
또한, FIFO 버퍼 제어부(302b)는 입력부(300)로부터 수신된 서브 데이터의 양을 계산한다. 입력부(300)로부터 데이터가 수신되면, FIFO 버퍼 제어부(302b)는 상기 레지스터인 카운터를 증가시키고, 증가 여부를 후술할 피포 카운트(fifo_cnt)(506)를 사용하여 DMA 처리부(304)로 전송한다. 그리고 DMA 처리부(304)가 상기 FIFO 버퍼(302a)의 서브 데이터 또는 헤더를 팝해가면, FIFO 버퍼 제어부(302b)는 상기 카운터를 상기 DMA 처리부(304)가 팝한 크기만큼 감소시킨다. 즉, FIFO 버퍼 제어부(302b)는 상기 FIFO 버퍼(302a)에 서브 데이터 또는 헤더가 들어올 때마다 상기 카운터를 증가시키고, DMA 처리부(304)가 상기 FIFO 버퍼(302a)에서 데이터 또는 헤더를 팝할 때마다 상기 카운터를 감소시킨다. 그리고 FIFO 버퍼 제어부(302b)는 상기 카운터가 카운트한 FIFO 크기를 DMA 처리부(304)로 전송한다.In addition, the FIFO
DMA 처리부(304)의 동작 상태 변화는 하기의 도 4를 참조하여 설명하기로 한 다.The operation state change of the
이하 설명의 편의를 위해 FIFO 버퍼(302a)가 비워있는 상태 즉, FIFO 크기가 "0"인 상태를 가정하여 설명하기로 한다.For convenience of explanation, it will be described on the assumption that the
DMA 처리부(304)는 FIFO 버퍼 유닛(302)의 FIFO 버퍼 제어부(302b)로부터 FIFO 버퍼(302a)의 크기가 "0"보다 크다 즉, "1"이상이라는 신호를 수신받으면, 아이들 상태에서 헤더 상태로 천이가 되어 FIFO 버퍼(302a)로부터 헤더를 팝(Pop)한다. 그리고, FIFO 버퍼 제어부(302b)는 현재 FIFO 버퍼(302a)에 서브 데이터가 수신될 때마다 FIFO 크기를 DMA 처리부(304)로 전송하고, DMA 처리부(304)는 상기 FIFO 버퍼 제어부(304b)로부터 수신한 상기 FIFO 크기와 상기 헤더에 정의된 데이터 크기를 비교한다.When the
DMA 처리부(304)는 상기 데이터 크기보다 상기 FIFO 크기가 같거나 크다면, 전송 상태로 천이하여 FIFO 버퍼(302a)로부터 미리 정해진 소정 크기만큼을 팝하여 시스템 메모리(110)로 전송한다. 이때 DMA 처리부(304)는 예컨대, AHB(Advanced High-Performance Bus)를 이용하여 상기 시스템 메모리(110)로 데이터를 전송한다. 반면, FIFO 버퍼 제어부(302b)로부터 푸쉬 동작 취소(Undo Push)신호를 수신하면, 다시 아이들(Idle) 상태로 천이한다.If the FIFO size is equal to or larger than the data size, the
도 4는 본 발명의 실시 예에 따른 DMA 처리부(304)의 상태 천이도이다.4 is a state transition diagram of the
이하 설명의 편의를 위해 FIFO 버퍼(302a)가 비워있는 상태 즉, FIFO 크기가 "0"인 상태를 가정하여 설명하기로 한다.For convenience of explanation, it will be described on the assumption that the
DMA 처리부(304)의 상태 천이도는 아이들 상태(400)에서 시작한다. DMA 처리 부(304)는 아이들 상태(400)에서 FIFO 버퍼(302a)의 크기가 "0" 보다 크면, 헤더 상태(402)로 천이하여 헤더를 팝하고 대기(Wait)상태(404)로 천이한다. 아이들 상태(400)란, FIFO 버퍼(302a)가 비어있는 상태로서 FIFO 크기가 "0"일 때이다. FIFO 버퍼(302a)의 크기가 헤더에 명시된 크기와 같아지면 DMA 처리부(304)는 전송(Transfer) 상태(406)로 천이하여 데이터를 시스템 메모리(110)로 전송한다. 그러나 대기상태(404)에서 FIFO 버퍼 유닛(302)로부터 푸쉬 동작 취소(Undo-push) 신호가 수신되면, 다시 아이들 상태(400)로 천이한다. 반면, 전송 상태(406)에서 상기 헤더에 정의된 크기만큼 데이터를 전송했다면, 다시 아이들 상태(400)로 천이한다.The state transition diagram of the
도 5는 본 발명의 실시 예에 따른 주변 장치(Peripheral)내의 입력부(300)가 FIFO 버퍼 유닛(302)을 사용하여 DMA 처리부(304)로 데이터를 전송하기 위한 신호 흐름을 도시한 블록 구성도이다.5 is a block diagram illustrating a signal flow for the
상기 도 5에서는 상술한 3가지 블록들간의 동작에 필요한 신호들을 도시하고 있다. 입력부(300)와 FIFO 버퍼 유닛(302) 사이에 필요한 신호들은 푸쉬_데이터(Push_data)(500), 푸쉬_이네이블(Push_en)(502), 푸쉬 동작 취소(Undo_Push)(504), 언두 카운트(Undo_cnt)(506) 이다.5 illustrates signals required for the operation between the three blocks described above. The signals required between the
푸쉬_데이터(500)신호로는 실제로 FIFO 버퍼(302a)에 저장될 서브 데이터들이 전송된다. 푸쉬_데이터(500)의 비트 폭(Bit width) d는 FIFO 버퍼(302a)가 한번에 처리할 수 있는 데이터 크기를 의미하며 8, 16, 32 등이 사용될 수 있다. 즉, 비트 폭은 FIFO 버퍼(302a)가 한 번에 처리할 수 있는 양이며, 슬롯은 디코더(300a)가 한 번에 처리할 수 있는 양이다. FIFO 버퍼(302a)의 비트 폭은 8, 16, 32 등이 주로 사용되지만 슬롯은 512, 1024, 5120 등이 사용된다. 그래서 디코더(300a)에서는 디코딩한 데이터를 FIFO 버퍼(302a)가 한 번에 처리할 수 있는 양으로 나누어서 여러번에 걸쳐 전송한다.As the push_data 500 signal, sub data to be actually stored in the
푸쉬_이네이블(502) 신호는 펄스 형태의 신호를 전송하며, 푸쉬_데이터(500)신호로 전송되는 서브 데이터들이 유효한지 FIFO 버퍼 유닛(302)에 알려주는 역할을 한다. FIFO 버퍼 유닛(302)은 상기 푸쉬 이네이블(502) 신호가 활성(active)일 때 푸쉬_데이터(500)신호로 전송되는 서브 데이터들을 FIFO 버퍼(302a)에 저장한다. 예를 들어 "1"이 활성으로 정의되어 있다면, 본 발명의 실시 예에 따른 시스템 온 칩 외부로부터 수신되는 신호를 시스템 메모리로 전송하기 위한 시스템을 positive logic 이라 칭하고, "1"일 때를 active high라 한다. 즉, 상기 active 라는 용어는 미리 활성으로 정의된 신호라는 의미를 내포한다. The push_enable 502 signal transmits a signal in the form of a pulse and informs the
푸쉬 동작 취소(Undo_Push)(504)신호는 펄스 형태의 신호로서 푸쉬 동작을 취소(Undo_push)할지 여부를 FIFO 버퍼 유닛(302)로 알려준다. 푸쉬 동작 취소(504)가 활성(active)일 때 푸쉬를 취소할 서브 데이터 크기는 언두 카운트(Undo_cnt)(506) 신호를 사용하여 FIFO 버퍼 유닛(302)으로 전송한다. 언두 카운트(506)의 비트 폭(Bit width)인 c 는 log(FIFO depth)이다. 언두 카운트(506)는 최대 FIFO depth 만큼을 2진수로 표현할 수 있어야 하기 때문에 log(FIFO depth)만큼의 비트 폭이 필요하다. The push operation undo (Undo_Push) signal 504 is a signal in the form of a pulse and informs the
반면, FIFO 버퍼 유닛(302)과 DMA 처리부(304)간에 필요한 신호는 피포 카운트(fifo_cnt)(508), 팝 데이터(Pop_data)(510), 팝 이네이블(Pop_en)(512), 푸쉬 동작 취소(Undo_push)(514)가 있다.On the other hand, the signals required between the
피포 카운트(508) 신호는 FIFO 버퍼(302a)의 FIFO 크기를 나타내며, 카운터 레지스터에 설정된 크기이다. FIFO 버퍼 제어부(302b)가 FIFO 버퍼(302a)에 저장된 서브 데이터 및 헤더의 양을 DMA 처리부(304)로 전송하는 신호이다. 피포 카운트(508) 신호의 비트 폭인 c 는 log(FIFO depth)이다.The
팝_데이터(510)는 FIFO 버퍼(302a)로부터 데이터를 수신해오는 신호이다. 팝 이네이블(512) 신호가 활성(active)일 때 FIF 버퍼 제어부(302b)는 팝 데이터(510) 신호에 서브 데이터들을 로드(Load)한다. 푸쉬 동작 취소(514)신호는 FIFO 버퍼 제어부(302b)가 DMA 처리부(304)로 푸쉬 동작 취소 신호를 전송하기 위해 사용한다.Pop_data 510 is a signal for receiving data from
도 6은 본 발명의 실시 예에 따른 입력부(300)의 CRC 처리부(300e)의 CRC 체크결과 입력부(300)에서 송신되는 데이터가 모두 양호할 때의 입력부(300), FIFO 버퍼 유닛(302), DMA 처리부(304)간의 동작 순서 및 데이터의 이동을 나타낸 도면이다.6 illustrates an
입력부(300)와 FIFO 버퍼 유닛(302), DMA 처리부(304)는 하드웨어로서 동시(concurrent)에 동작하게 된다. 도 6에서 실선은 동작의 순서를 나타내며, 점선은 데이터의 이동을 나타낸다.The
입력부(300)는 600단계에서 도시되지 않은 SoC 외부로부터 신호를 수신하면, 상기 수신된 신호에 대해 디코딩을 수행하고, 헤더를 FIFO 버퍼 유닛(302)로 푸쉬한다. 그러면, 602단계에서 FIFO 버퍼 유닛(302)은 카운터를 증가시키고, 카운터가 카운트한 FIFO 크기를 DMA 처리부(304)로 전송한다. 604단계에서 DMA 처리부(304) 는 상기 헤더를 팝(pop)하여 앞으로 수신되어야할 데이터의 크기를 알 수 있다. 이와 동시에 FIFO 버퍼 유닛(302)은 DMA 처리부(304)가 상기 헤더를 팝하였기 때문에 606단계에서 상기 카운터를 감소시킨다.When the
그리고, 608단계에서 입력부(300)는 서브 데이터들을 FIFO 버퍼 유닛(302)으로 순차적으로 푸쉬한다. 610단계에서 FIFO 버퍼 유닛(302)에 데이터가 입력부(302)로부터 푸쉬될 때마다 FIFO 버퍼 제어부(302b)는 상기 카운터를 카운트된 FIFO 크기로 설정하고, 다시 상기 카운터에 설정된 FIFO 크기를 상기 DMA 처리부(304)로 전달하여, 상기 헤더에 정의된 크기만큼의 데이터가 FIFO 버퍼 유닛(302)에 수신되었는지 여부를 알 수 있게 한다. 612단계에서 입력부(300)는 FIFO 버퍼 유닛(302)으로 전송할 데이터가 마지막 데이터라면, 614단계에서 상기 마지막 데이터를 푸쉬하기 전에 CRC 체크를 수행한다. 상기 614단계의 결과 상기 CRC 체크가 "양호"하다면, 616단계에서 상기 마지막 데이터를 FIFO 버퍼 유닛(302)으로 푸쉬한다.In
한편, 618단계에서 대기상태에 있던 DMA 처리부(304)는 620단계에서 상기 FIFO 카운터와 상기 헤더에 정의되어있던 데이터 크기가 같거나 큰지를 검사한다. 만일, 같거나 크다면, 622단계로 진행하여 시스템 메모리(110)로 상기 데이터들을 전송한다.In
도 7은 본 발명의 실시 예에 따른 입력부(300)의 CRC 처리부(300e)의 CRC 체크 결과 디코더(300)로 수신된 신호가 불량(bad)일 때의 입력부(300), FIFO 버퍼 유닛(302), DMA 처리부(304)간의 동작 순서 및 데이터의 이동을 나타낸 도면이다.FIG. 7 illustrates an
상기 도 7에서 설명의 편의를 위해 FIFO 버퍼(302a)가 비워있는 상태 즉, FIFO 크기가 "0"인 상태를 가정하여 설명하기로 한다.In FIG. 7, for convenience of description, it is assumed that the
입력부(300)는 700단계에서 도시되지 않은 SoC 외부로부터 신호를 수신하면, 상기 수신된 신호에 대해 디코딩을 수행하고, 헤더를 FIFO 버퍼 유닛(302)으로 푸쉬한다. 그러면, 702단계에서 FIFO 버퍼 유닛(302)은 카운터를 증가시키고, 증가된 카운터에 설정된 FIFO 크기를 DMA 처리부(304)로 전송한다. 704단계에서 DMA 처리부(304)는 상기 헤더를 팝(pop)하여 앞으로 수신되어야할 데이터의 크기를 알 수 있다. 이와 동시에 FIFO 버퍼 유닛(302)은 DMA 처리부(304)가 상기 헤더를 팝하였기 때문에 706단계에서 상기 카운터를 감소시킨다.When the
그리고, 708단계에서 입력부(300)는 데이터를 FIFO 버퍼 유닛(302)으로 푸쉬한다. 710단계에서 FIFO 버퍼 유닛(302)에 데이터가 푸쉬될 때마다 상기 카운터는 증가하고, 다시 상기 카운터에 설정된 FIFO 크기는 상기 DMA 처리부(304)로 전달되어, 상기 헤더에 정의된 크기 만큼의 데이터가 FIFO 버퍼 유닛(302)에 수신되었는지 여부를 알 수 있게 한다. 712단계에서 입력부(300)는 FIFO 버퍼 유닛(302)으로 전송할 서브 데이터가 마지막 서브 데이터라면, 714단계에서 상기 마지막 서브 데이터를 푸쉬하기 전에 CRC 체크를 수행한다. 상기 714단계의 결과 상기 CRC 체크가 "불량(bad)"이라면, 상기 마지막 서브 데이터를 푸쉬하지 않고, 716단계에서 FIFO 버퍼 유닛(302)으로 푸쉬 동작 취소(undo_push)(504)신호를 전송한다. 이때, 입력부(300)는 언두_카운트(undo_cnt)(506)신호도 같이 전송한다.In
718단계에서 상기 푸쉬 동작 취소(undo_push)신호와 언두_카운트(506)신호를 수신한 FIFO 버퍼 유닛(302)은 상기 언두_카운트(506)신호로 전송된 푸쉬를 취소할 데이터 크기와 현재 FIFO 버퍼(302a) 크기가 설정된 카운터를 비교한다. 상기 718단계의 비교결과 상기 카운터에 설정도니 FIFO 크기가 상기 언두_카운트(506)신호로 전송된 푸쉬를 취소할 데이터 크기보다 작다면, DMA 처리부(304)가 이미 헤더를 팝 했다는 의미이므로, 720단계로 진행하여 DMA 처리부(304)로 푸쉬 취소 신호(undo_push)를 전송한다. 그리고, 722단계에서 FIFO 버퍼 유닛(302)의 FIFO 버퍼 제어부(302b)는 FIFO 버퍼(302)에 저장된 데이터를 삭제한다. 즉, FIFO 버퍼 제어부(302b)는 라이트 포인터(write Pointer)를 상기 언두 푸쉬(undo_push)할 데이터 크기만큼 변경시킨다.In
반면, 상기 718단계의 비교결과 상기 카운터에 설정된 FIFO 크기가 상기 언두_카운트(506)신호로 전송된 푸쉬를 취소할 데이터 크기보다 크거나 같다면, DMA 처리부(304)는 다른 데이터를 전송하는 전송 상태(406)이므로, 724단계에서 언두_카운트(undo_cnt)(506)만큼 상기 카운터를 감소시키고, 725단계에서 상기 언두_카운트(506)신호 만큼 서브 데이터들을 FIFO 버퍼(302a)에서 삭제한다.On the other hand, if the comparison result of
그리고, DMA 처리부(304)는 상기 FIFO 버퍼 유닛(302)로부터 푸쉬 동작 취소(undo_push)신호를 수신하면, 726단계에서 대기 상태(404)에서 아이들 상태(400)로 천이한다.When the
예를 들어, 입력부(300)가 전송할 데이터가 n 바이트(byte)였다고 가정하면, 입력부(300)는 데이터를 전송하기에 앞서 상기 데이터의 크기인 n 이 정의된 헤더를 FIFO 버퍼 유닛(302)의 FIFO 버퍼(302a)로 푸쉬한다. 그리고 n-1 바이트의 서브 데이터를 푸쉬하고, 마지막 서브 데이터 즉, n 번째 서브 데이터를 FIFO 버퍼 유닛(302)으로 푸쉬하기 전에 CRC 체크를 수행한다. CRC 체크 결과가 "불량"이면, 상기 n번째 서브 데이터를 푸쉬하지 않고, FIFO 버퍼 유닛(302)로 n 바이트만큼을 푸쉬 동작을 취소하라는 언두_푸쉬(undo_push)신호를 전송한다. FIFO 버퍼 유닛(302)의 FIFO 버퍼 제어부(302b)는 상기 언두_푸쉬 신호를 수신하면, FIFO 버퍼(302a)에서 언두_푸쉬할 데이터 크기만큼 서브 데이터들을 삭제한다. 그러나, FIFO 버퍼 제어부(302b)의 카운터에 설정된 FIFO 크기가 상기 n 보다 작으면, DMA 처리부(304)가 이미 FIFO 버퍼(302a)에 저장된 헤더를 팝했다는 의미이기 때문에, DMA 처리부(304)로 푸쉬 동작 취소(undo_push) 신호를 전송한다. 그러면, DMA 처리부(304)는 대기상태(404)에서 아이들 상태(400)로 천이한다.For example, assuming that the data to be transmitted by the
반대로 카운터가 n 이상이라면, DMA 처리부(304)는 다른 데이터를 전송 중이기 때문에, 아직 헤더를 팝(pop)해가지 않았다는 의미이다. 따라서 이때는 FIFO 버퍼 제어부(302b)는 FIFO 버퍼(302a)에서 n 바이트를 지우면 된다.On the contrary, if the counter is larger than n, it means that the
도 8은 본 발명의 실시 예에 따른 입력부(300)의 동작 흐름도이다.8 is a flowchart illustrating an operation of the
800단계에서 입력부(300)의 디코더(300a)는 도시되지 않은 SoC 외부로부터 신호를 수신하고, 802단계에서 상기 수신된 신호를 디코딩하여 804단계에서 송신할 서브 데이터들과 헤더를 생성한다. 806단계에서는 입력부(300)의 디코더(300a)는 상기 헤더를 먹스(300c)를 통해 FIFO 버퍼 유닛(302)으로 출력하고, 808단계에서 상기 서브 데이터들을 순차적으로 FIFO 버퍼 유닛(302)으로 출력(Push)한다. 810 단계에서 디코더(300a)를 통해 생성된 마지막 서브 데이터인 경우 812단계에서 CRC 체크부(300e)는 CRC 체크를 수행한다. 상기 812단계에서 CRC 체크 결과가 "양호"이면, 814단계로 진행하여, 상기 마지막 서브 데이터를 FIFO 버퍼 유닛(302)로 전송하고, "불량"이면, 816단계로 진행하여 FIFO 버퍼 유닛(302)으로 푸쉬 동작 취소(ubdo_push)신호를 전송한다.In
도 9는 본 발명의 실시 예에 따른 FIFO 버퍼 유닛(302)의 동작 흐름도이다.9 is an operation flowchart of the
900단계에서 FIFO 버퍼 유닛(302)은 입력부(300)로부터 헤더를 수신하고, 902단계에서 카운터를 증가시킨다. 904단계에서 FIFO 버퍼 유닛(302)은 카운트된 FIFO 크기를 DMA 처리부(304)로 전송한다. 906단계에서 DMA 처리부(304)가 FIFO 버퍼(302a)로부터 헤더를 팝(Pop)했는지 검사하여, 팝 했다면, 908단계로 진행하여 카운터를 감소시킨다. 910단계에서 FIFO 버퍼 유닛(302)은 입력부(300)로부터 서브 데이터를 수신하면, 912단계로 진행하여 카운터를 증가시키고, 914단계에서 입력부(300)로부터 푸쉬 동작 취소(undo_push)신호(504)를 수신했는지 검사한다. 상기 914단계에서 상기 푸쉬 동작 취소 신호(undo_push)를 수신했다면, 916단계에서 상기 카운터에서 카운트된 FIFO 크기와 상기 푸쉬 동작 취소(undo_puch)신호와 같이 수신된 언두_카운트(506)신호로 수신된 삭제할 서브 데이터 크기를 비교한다. 상기 916단계에서 상기 비교결과 상기 카운트된 데이터 크기가 상기 언두_카운트(506)신호로 수신된 삭제할 데이터 크기보다 크거나 같다면, 918단계로 진행하여 언두_카운트(506)만큼 카운터를 감소시키고, 920단계에서 언두_카운트(506)만큼 서브 데이터를 FIFO 버퍼(302a)에서 삭제한다.In
반면, 상기 916단계의 비교 결과 상기 카운트된 FIFO 크기가 상기 언두_카운 트(506)신호보다 작다면, DMA 처리부(304)로 푸쉬 동작 취소(undo_push)(514)를 전송하고, 924단계에서 FIFO 버퍼(302a)에 저장된 서브 데이터들을 모두 삭제한다.On the other hand, if the counted FIFO size is smaller than the undo-
반면, 상기 914단계에서 상기 푸쉬 동작 취소 신호를 수신하지 않았다면, 상기 910단계로 진행하여 입력부(300)로부터 서브 데이터들을 계속 수신한다. In contrast, if the push operation cancel signal is not received in
도 10은 본 발명의 실시 예에 따른 DMA 처리부(304)의 동작 흐름도이다. 10 is a flowchart illustrating an operation of the
1000단계에서 아이들 상태로 있던 DMA 처리부(304)는 1002단계에서 FIFO 크기가 "0"보다 커졌는지 검사한다. FIFO 크기가 "0"보다 커져있다는 뜻은 FIFO 버퍼(302a)에 헤더가 저장되었다는 뜻이므로, 1004단계에서 DMA 처리부(304)는 헤더 상태로 천이된 후, 1006단계에서 헤더를 FIFO 버퍼(302a)로부터 팝(Pop)한다.In
상기 1006단계에서 상기 헤더를 팝한 DMA 처리부(304)는 1008단계에서 대기 상태로 천이되며, 1010단계에서 푸쉬 동작 취소 신호(undo_push)를 수신했는지 여부를 검사한다. 상기 1010단계에서 상기 푸쉬 동작 취소 신호를 수신했다면, 상기 1000단계로 진행하여, 아이들 상태로 천이된다.In
반면, 상기 1010단계에서 상기 푸쉬 동작 취소 신호를 수신하지 않았다면, 1012단계에서 FIFO 크기와 상기 헤더에 정의된 크기와 같거나 큰지를 검사한다. 상기 1012단계에서 상기 FIFO 크기와 상기 헤더에 정의된 크기보다 크거나 같다면, 1014단계로 진행하여 전송 상태로 천이하고, 1016단계에서 FIFO 버퍼(302a)로부터 데이터를 팝(Pop)하고, 1018단계에서 데이터를 전송한다.On the other hand, if the push operation cancellation signal is not received in
DMA 처리부의 처리 속도가 입력부의 처리속도(시간당 처리할 수 있는 데이터의 양 : Throughput)보다 크다면 FIFO 버퍼의 사이즈를 1 슬롯으로 할 수 있어 메모리의 크기를 줄 일 수 있으며, 입력부와 DMA 처리부를 완전히 분리시킴으로써 코너 케이스의 발생을 줄 일 수 있다.If the processing speed of the DMA processing unit is greater than the processing speed of the input unit (amount of data that can be processed per hour: Throughput), the size of the FIFO buffer can be reduced to 1 slot, thereby reducing the size of the memory. The complete separation can reduce the occurrence of corner cases.
Claims (16)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020050130826A KR20070068809A (en) | 2005-12-27 | 2005-12-27 | System and method for transmitting a data in a system on a chip system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020050130826A KR20070068809A (en) | 2005-12-27 | 2005-12-27 | System and method for transmitting a data in a system on a chip system |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20070068809A true KR20070068809A (en) | 2007-07-02 |
Family
ID=38504664
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020050130826A KR20070068809A (en) | 2005-12-27 | 2005-12-27 | System and method for transmitting a data in a system on a chip system |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20070068809A (en) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399321A (en) * | 2018-04-25 | 2019-11-01 | 爱思开海力士有限公司 | Storage system and its operating method |
CN117290154A (en) * | 2023-10-17 | 2023-12-26 | 无锡摩芯半导体有限公司 | AXI_DMA redundancy design method based on automobile function safety |
-
2005
- 2005-12-27 KR KR1020050130826A patent/KR20070068809A/en not_active Application Discontinuation
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399321A (en) * | 2018-04-25 | 2019-11-01 | 爱思开海力士有限公司 | Storage system and its operating method |
US11645010B2 (en) | 2018-04-25 | 2023-05-09 | SK Hynix Inc. | Solid state drive (SSD) memory system improving the speed of a read operation using parallel DMA data transfers |
CN117290154A (en) * | 2023-10-17 | 2023-12-26 | 无锡摩芯半导体有限公司 | AXI_DMA redundancy design method based on automobile function safety |
CN117290154B (en) * | 2023-10-17 | 2024-05-07 | 无锡摩芯半导体有限公司 | AXI_DMA redundancy design method based on automobile function safety |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6192428B1 (en) | Method/apparatus for dynamically changing FIFO draining priority through asynchronous or isochronous DMA engines in response to packet type and predetermined high watermark being reached | |
US7328399B2 (en) | Synchronous serial data communication bus | |
US6389489B1 (en) | Data processing system having a fifo buffer with variable threshold value based on input and output data rates and data block size | |
US5797033A (en) | Direct memory access for storing and retrieving data based on packet size | |
US7725625B2 (en) | Latency insensitive FIFO signaling protocol | |
US8356203B2 (en) | Asynchronous interface circuit and data transfer method | |
EP2097828A2 (en) | Dmac to handle transfers of unknown lengths | |
US9794877B2 (en) | Transmitting device, receiving device, communication device, programs, transmission method, and receiving method for wireless communication of continuous data in the form of packets | |
JP6746791B2 (en) | Clock gating enable generation | |
EP1396786A1 (en) | Bridge circuit for use in retiming in a semiconductor integrated circuit | |
TW201319819A (en) | Method, computer readable medium and computing device for performing data transfers for serial ATA connections using data transfer rate throttling | |
CN114968365A (en) | Adapter register unit and host adapter circuit comprising same | |
KR20070068809A (en) | System and method for transmitting a data in a system on a chip system | |
US20080320178A1 (en) | DMA transfer apparatus | |
US20040128602A1 (en) | Direct memory access with error correction | |
CN112835834B (en) | Data transmission system | |
US7373541B1 (en) | Alignment signal control apparatus and method for operating the same | |
US20090037619A1 (en) | Data flush methods | |
KR100591243B1 (en) | On-chip serialized peripheral bus system and operating method thereof | |
US20210223815A1 (en) | First-In First-Out Buffer with Lookahead Performance Booster | |
US6865654B2 (en) | Device for interfacing asynchronous data using first-in-first-out | |
US20070073927A1 (en) | Method and apparatus for high throughput mass storage device interface in a microprocessor for handheld systems | |
US5701546A (en) | Parallel interface circuit having a n-byte buffer and tansmitting the n byte data on a byte-by-byte basis in response to interrupt request signal | |
KR20070081981A (en) | Interface method and apparatus in cpuless system | |
CN116578516A (en) | EMC-based data and command transmission method and device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Withdrawal due to no request for examination |