Özel doğrudan bellek erişim modülü
Custom direct memory access module
Yazar: MUSTAFA MERT ESEN
Danışman: PROF. DR. SIDDIKA BERNA ÖRS YALÇIN
İstanbul Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Elektronik ve Haberleşme Mühendisliği Ana Bilim Dalı / Elektronik Mühendisliği Bilim Dalı
Derece: Yüksek Lisans, 2023
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control ; Elektrik ve Elektronik Mühendisliği = Electrical and Electronics Engineering
Dizin: Bilgisayar donanımları = Hardware ; FPGA = FPGA ; Mikroçipler = Microchip ; Sayısal elektronik = Digital electronic

Özet:
Teknolojinin gelişimiyle birlikte elektronik sistemlerde ve cihazlarda performans beklentisi artmaktadır. Elektronik cihazlar üzerinde yapılan işlemler daha da karmaşıklaşırken kullanılan veri genişlikleri de artmaktadır. Bu sebeple yüksek performans beklentilerinin karşılanabilmesi için donanım kullanımı çokça tercih edilmektedir. Günümüz işlemcilerinin veri genişliğinden çok daha büyük genişliklerde giriş ve çıkış verilerine sahip karmaşık algoritmalar için algoritmaya özel donanımlar (Custom IP) tasarlanarak performansın arttırılması sağlanmaktadır. 

Oluşturulan algoritmaya özel tasarımlar işlemlerin bir işlemciye kıyasla çok daha hızlı yapılmasına olanak sağlar. Fakat sadece algoritmaya özel tasarımlar ile giriş verilerinin sağlanması, çıkış verilerinin yönetilmesi, dış dünya ile örneğin Ethernet, UART, PCIE gibi standart arayüzlerle haberleşmenin sağlanması gibi süreçleri yönetmek tasarım sürecini zorlaştıracağı gibi performans kaybına da sebep olabilir. Bu sebeple algoritmaya özel donanımlardan oluşan bir sistem işlemciyle yönetilir. İşlemciye bağlanan Custom IP'ler ile kırmık üstü sistem (System on Chip, SoC) oluşturulur. 

Oluşturulan kırmık üstü sistemde veri haberleşmesinin doğrudan işlemci üzerinden gerçekleşmesi algoritmalarda kullanılan verinin büyüklüğü göz önüne alındığında işlemcinin zamanının çoğunun veri haberleşmesi ile geçeceği anlamına gelir. Bu sebeple birden çok birimin belleğe erişebileceği doğrudan bellek erişim modülü (Direct Memory Access, DMA) yapısı kullanılır. DMA yapısı sayesinde işlemci veri haberleşmesinin içinde doğrudan yer almaktansa DMA'i yöneterek veri haberleşmesindeki yükünü hafifletmiş olur.

DMA kullanılarak oluşturulacak bir SoC tasarımında işlemcinin DMA arayüzü olması gerekir. Bu da işlemci tercihi konusunda bir kısıt oluşturur. Örneğin açık kaynak kodlu bir RISC-V çekirdeği işlemci olarak kullanılmak istenirse, DMA arayüzü eklenmesi gerekir. DMA arayüzünün eklenmesi işlemcinin alanını büyüterek çalışma frekansını düşürür ve performans kaybına neden olur.

Bu çalışmada işlemci seçiminde bir kısıt getirmeyen, işlem birimleri ve dış dünya ile haberleşmeyi sağlayacak, ölçeklenebilir ve geliştirilebilir bir Özel Doğrudan Bellek Erişim Modülü(ÖDBEM) tasarımı anlatılmaktadır. ÖDBEM tasarımı işlemci ile doğrudan bir bağlantı gerektirmez. İşlemci ile ÖDBEM arasındaki haberleşme bellek üzerinde belirlenmiş adresler üzerinden yapılır. İşlemci ile doğrudan bir bağlantı gerektirmediği için işlemcinin fazladan bir arayüz içermesi gerekmez. İşlemcinin belleğe erişebiliyor olması yeterlidir. Böylelikle işlemci tercihi konusunda bir kısıt getirmez. 

ÖDBEM ölçeklenebilir bir tasarımdır. İşlem birimleri, harici portlar ve bellek arayüzlerine sahiptir. İşlem birimleri ve harici portların sayısı, bellek arayüzünün veri genişliği değiştirilebilir. Bellek çift portlu olmalıdır. ÖDBEM işlemciden aldığı komutlar ile yönetilir. ÖDBEM, işlemci, bellek, işlem birimleri ve harici portlardan oluşan bir kırmık üstü sistemde; harici portlardan okunan veri belleğe yazılabilir, işlem birimlerinde bir işlem başlatılabilir ve sonucu belleğe veya doğrudan bir harici porta yazılabilir, işlem birimlerinin sıfırlama(reset) girişleri kontrol edilebilir, belleğin bir adresinden başka bir adresine kopyalama yapılabilir, bellekteki veri harici portlara yazılabilir. 

İşlem birimleri, giriş verisi alan ve çıkış üreten herhangi bir algoritmaya ait donanım gerçeklemesi olabilir. İşlem birimleri arayüzü FIFO'dur. Giriş ve çıkış verilerini yazmak için birer FIFO bulundurur. Tasarlanacak basit bir üst modül ile algoritmaya ait donanımın giriş verileri giriş FIFO'sundan okunarak algoritmaya verilir. Oluşan sonuç ise çıkış FIFO'suna yazılır. İşlem birimlerinin çıkış FIFO'sundaki veri daha önceden işlemci tarafından belirlenmiş bir adrese yazılır. Bunun için işlemcinin tekrar bir komut göndermesine gerek olmaz. 

Harici portlar kırmık üstü sistemin dış dünya ile bağlantısını sağlayacak Ethernet, UART, PCIE gibi fziksel portlara karşılık gelir. Harici portların arayüzü FIFO'dur. Bir giriş ve bir çıkış FIFO'su içerir. Tasarlanan bir üst modül ile harici portun giriş FIFO'sundan okunan veri fiziksel portlara yazılır. Benzer şekilde fiziksel portlardan okunan veri harici portlar çıkış FIFO'suna yazılır. 

Çalışma kapsamında ÖDBEM'in tasarım detayları verilmiş, donanım tanımlama dilleri ile ölçeklenebilir ve geliştirilebilir bir tasarım yapılmış, yapılan tasarım davranışsal benzetim yoluyla doğrulanmış, sentez ve gerçekleme yapılarak kaynak tüketim verileri paylaşılmış, sentez sonrası benzetim yapılmış ve doğru çalıştığı gözlemlenmiştir.

Abstract:
As technology advances, performance expectations for electronic systems and devices have increased. While the operations conducted on electronic devices become more complex, the data widths used have also increased. Therefore, hardware usage is preferred in order to meet high performance expectations. To improve performance for complex algorithms with inputs and outputs of data widths much larger than current processors, custom IPs are designed specifically for the algorithm.
 
 Algorithm-specific designs enable processes to be carried out much faster than on a processor. However, managing processes such as providing input data, managing output data and communicating with the outside world through standard interfaces such as Ethernet, UART and PCIE, only using algorithm-specific designs can complicate the design process and cause performance loss. Therefore, a system consisting of algorithm-specific hardware is managed by a processor. Custom IPs connected to the processor are used to create a system-on-chip (SoC).
 
If data communication in the system on chip (SoC) design is via the processor, most of the processor time is spent in data communication due to the use of high data widths in algorithms. Therefore, a direct memory access (DMA) structure is used, where multiple units can access memory. With the help of the DMA structure, the processor does not take part directly in the data communication, but rather manages the DMA to reduce the amount of time spent on data communication.

In a SoC design created using DMA, the processor must have a DMA interface. This creates a constraint on the processor choice. For example, if an open-source RISC-V processor is to be used, the DMA interface must be added. Adding the DMA interface increases the area of the processor, reducing the operating frequency and resulting in a performance loss.

In this study, a Custom Direct Memory Access Module (CDMAM) design is presented that does not impose a constraint on processor selection, provides communication with processing units and external world, is scalable and can be developed. The CDMAM design does not require a direct connection with the processor. The communication between the processor and the CDMAM is done through predetermined addresses on the memory. Since it does not require a direct connection with the processor, the processor does not need to have an additional interface. It is enaugh the processor to be able to access the memory. Thus, it does not impose any constraint on processor selection.


CDMAM is a scalable design. It has processing elements, external ports and memory interfaces. The number of processing elements and external ports can be changed. The width of the data of the memory interface can be changed.

The memory should have two ports. One port should be connected to the processor, and the other port should be connected to the CDMAM module.  The data widths of the processor and the CDMAM module can be different. In such cases, the memory should be designed to support this difference. 

In the presented work, the design is described where the data width of the CDMAM module is twice that of the processor. However, with small modifications to the design, solutions can be achieved for different data width combinations as well. There doesn't need to be a direct interface between the processor and the CDMAM module. 

Communication between the processor and the CDMAM module can be done through the memory. Specific addresses are used on the memory for this purpose. These addresses enable the transmission of commands from the processor to the CDMAM module and allow the CDMAM module to transmit its status signals to the processor. The address values are designed to be configurable during the design. When writing an application on the processor, these addresses should be determined to match those of the CDMAM module. A command written by the processor to the predetermined command address on the memory is read and processed by the CDMAM module. Once the command is processed and completed, the CDMAM module writes the information about the completion to the command addresses on the memory, which is then read by the processor.

In a system composed of a processor, memory, processing elements and external ports, CDMAM can write data read from external ports to memory, start a process in a processing element and write the result to memory or directly to an external port, control the reset inputs of processing elements, copy from one address to another in memory, write data in memory to external ports.

Processing elements can be hardware implementations of any algorithm that takes input data and produces output. The interface of the processing element is FIFO. It has one input and one output FIFO. The input data is provided to the algorithm by a simple top module that reads the input data from the input FIFO. The resulting output is written to the output FIFO. The data in the output FIFO of the processing element is written to a predetermined address by the processor without the need to send another command from the processor.

External ports correspond to physical ports such as Ethernet, UART, PCIE which provide the system's connection to the outside world. The interface of the external ports is FIFO. It contains one input and one output FIFO. Data read from the input FIFO of the external port is written to the physical ports by a top module designed. Similarly, data read from the physical ports is written to the output FIFO of the external ports. 

The CDMAM design has a simple and effective command structure. It can perform all the operations described in the 4 basic commands. These commands are send, copy, get, and reset. 

CDMAM commands are written by the processor to the address specified as the command address in the memory. This address is continuously read by CDMAM, and when a command is written by the processor, it is read and processed. CDMAM commands consist of four components: operation code, source, destination, and length.

The operation code includes validity, operation type, and parameters. Validity determines whether the code written by the processor is valid or not. This allows CDMAM to determine if there is a command that needs to be processed. 
The operation type determines which of the operations to perform: send, copy, receive, or reset.

The source determines the source of the data transfer, which can be a memory address or a connection number. The destination determines the destination of the data transfer, which can also be a memory address or a connection number. The length represents the size of the data transfer in bytes.

The send command allows sending data to a processing unit or an external port. In this command, the source specifies the memory address, and the destination specifies the connection number. Sending data to processing units implies performing an operation within a processing unit. If this operation results in an output, information about the size of the output and the memory address to write it to or the external port to send it to should be sent to the processing unit initially.Thus, there is no need to send a new command to CDMAM to read the output generated in the processing units. When a processing unit produces an output, CDMAM reads it and writes it to the necessary location.

The copy command allows copying data from one memory address to another. In this command, the source and destination represent the memory addresses. With the help of CDMAM, a data specified by the processor with its start address and size can be quickly copied to the specified destination address.

The get command enables reading data from external ports and writing it to memory. In this command, the source represents the connection number of the external port from which the data will be read, and the destination represents the memory address where the data will be written. The length parameter is not used in this command. The size of the data is determined by reading the first word of the data from the external port.

The reset command allows managing the reset inputs of processing units. With this command, one or more processing units can be reset. In this command, the terms source, destination, and size are not used. Instead, it utilizes another designated address in memory called the reset address. Each bit of the data written to this address represents the reset input for a specific processing unit. The processor sets the bit to one for the processing unit or units it wants to reset and sends a reset request to CDMAM. To complete the reset process, the relevant value at the reset address is set to zero, and another reset request is sent.

In the scope of this work, the design details of CDMAM have been given, a scalable and developable design has been made with hardware description languages, the design has been verified by behavioral simulation, resource consumption has been shared by synthesis and implementation, post synthesis simulations have been made and it has been observed that it works correctly.