You are currently viewing MUSRA#4: Thiết kế RTL bộ điều khiển truy xuất trực tiếp bộ nhớ DMAC

MUSRA#4: Thiết kế RTL bộ điều khiển truy xuất trực tiếp bộ nhớ DMAC

Mục tiêu: Thiết kế RTL, mô hình hóa bằng VHDL, mô phỏng bằng ModelSim và thực thi một đơn vị điều khiển truy xuất trực tiếp bộ nhớ (DMAC: Direct Memory Access Controller). Đơn vị thực hiện chức năng copy một khối dữ liệu a có gồm L phần tử từ địa chỉ A và ghi tới tới địa chỉ B trong không gian bộ nhớ của hệ thống. Các tham số L, A, B phải được nạp vào các thanh ghi điều khiển (RIR, SAR và DAR) của DMAC trước khi quá trình DMA diễn ra.

Direct Memory Access Controller
Hình 1:. Ví dụ minh họa quá trình DMA cơ bản.

Giới thiệu về truy xuất bộ nhớ trực tiếp DMA (Direct Memory Access)

DMA controller là một đơn vị chức năng cho phép các thiết bị I/O có thể truy cập vào memory một cách độc lập với CPU. DMAC thường có hai giao diện ghép nối:

  • Giao diện ghép nối với CPU: Trong giao diện này CPU đóng vai trò thiết bị Master còn DMA controller là thiết bị Slave. Thông qua giao diện này CPU có thể viết các thông tin điều khiển vào DMA controller và giám sát trạng thái hoạt động của DMA controller.
  • Giao diện giao tiếp với bộ nhớ và thiết bị ngoại vi: trong giao diện này DMA controller là thiết bị Master. DMA controller khởi phát việc đọc dữ liệu từ vị trí nguồn và ghi dữ liệu tới vị trí đích.

Để hỗ trợ cho việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách truy cập trực tiếp vào bộ nhớ, CPU thường có một chân lối vào gọi là chân yêu cầu treo CPU (HOLD Request: Hreq) để thiết bị ngoại vi khi có yêu cầu dùng bus cho biệc trao đổi dữ liệu với bộ nhớ thì thông qua chân này mà báo cho CPU biết. Khi CPU nhận được yêu cầu treo thì nó tự tách ra khỏi hệ thống bus bằng cách đưa các chân kết nối của nó với bus vào trạng thái trở kháng cao và đưa xung HDLA ra ngoài để thông vào rằng CPU cho phép DMAC được sử dụng bus đó.

Khi CPU tách ra khỏi hệ thống bằng việc tự treo để trao quyền sử dụng bus cho DMAC, lúc này DMAC chịu trách nhiệm điểu khiển toàn bộ hoạt động trao đổi dữ liệu của hệ thống. Để làm được điều đó DMAC cần có các tín hiệu điều khiển cần thiết giống như các tín hiểu của CPU và nó phải lập trình được.

Quy trình hoạt động của DMAC:

  • Các thiết bị ngoại vi hoặc CPU sẽ yêu cầu truyền dữ liệu thông qua DMA bằng cách kéo chân dreq (DMA request) lên mức cao.
  • Các DMA sẽ gửi tín hiệu hreq lên trên CPU, báo hiệu cho CPU rằng nó cần sử dụng đường bus dữ liệu và bus địa chỉ của hệ thống.
  • CPU sẽ kết thúc chu trình sử dụng bus hiện tại và đáp ứng yêu cầu của DMA bằng cách đặt tín hiệu hlda lên mức cao để thông báo với DMAC rằng nó có thể sử dụng các bus để thực hiện nhiệm vụ của mình. Tín hiệu hlda phải giữ ở mức cao khi DMA đang thực hiện nhiệm vụ.
  • DMAC sẽ kích hoạt dack cho thiết bị ngoại vi biết rằng nó bắt đầu truyền dữ liệu.
  • Khi DMA bắt đầu truyền dữ liệu từ bộ nhớ sang ngoại vi hoặc từ bộ nhớ tới bộ nhớ bằng cách đặt địa chỉ của byte đầu tiên của khối cần truyền lên bus dữ liệu và kích hoạt memr_n, sau đó đọc byte từ bộ nhớ vào bus dữ liệu. Sau đó nó kích hoạt memw_n để ghi nó vào bộ nhớ, Sau đó thì DMA giảm số từ cần gửi và tăng con trỏ địa chỉ, lặp laị quá trình này cho đến khi số đếm tiến tới 0 và kết thúc nhiệm vụ.
  • Sau khi DMA kết thúc công việc nó sẽ hủy kích hoạt hreq, báo hiệu với CPU rằng CPU có thể lấy lại quyền kiểm soát các đường bus.

Yêu cầu đối với thiết kế:

  • Hỗ trợ giao thức ghép nối tới CPU theo chuẩn Intel bus interface
  • Hỗ trợ giao thức ghép nối với mảng bộ nhớ của MUSRA
  • Độ rộng bus dữ liệu được tham số hóa để có thể thay đổi linh hoạt thep tùy từng ứng dụng
  • Độ rộng bus địa chỉ được tham số hóa để có thể thay đổi linh hoạt theotùy từng ứng dụng
Giao diện ghép nối I/O của DMAC.
Hình 2:. Giao diện ghép nối I/O của DMAC.

Miêu tả chức năng của các chân vào/ra của Sorting Unit được mô tả trong Bảng 1.

Bảng 1: Mô tả các tín hiệu vào/ra của DMA Controller

Signals Direction Width (bits) Reset Description
Generic
DATA_WIDTH 8 N/A Data Width
ADDR_WIDTH 8 N/A Address Width
AIN_WIDTH 4 N/A Ain Width
Common Signals
clk Input 1 N/A TÍn hiệu xung nhịp Clock
rst_n Input 1 0 Tín hiệu Reset tích cực mức thấp
Configuration Port
cs_n Input 1 1 Tín hiệu chọn DMAC
iorin_n Input 1 1 Tín hiệu clock cho phép đọc dữ liệu từ thanh ghi.
iowin_n Input 1 1 Tín hiệu clock cho phép ghi dữ liệu từ dbin vào thanh ghi.
dreq Input 1 0 Tín hiệu yêu cầu DMA
Hreq Output 1 0 Tín hiệu yêu cầu CPU nhường quyền làm chủ bú
hlda Input 1 0 Tín hiệu từ CPU xác nhận CPU từ bỏ quyển sử dụng BUS
dack Output 1 0 Tín hiệu thông báo rằng DMA chuẩn bị truyền dữ liệu.
ain Input AIN_WIDTH N/A Tín hiệu địa chỉ chọn thanh ghi điều khiển của DMA.
dbin Input DATA_WIDTH N/A Dữ liệu cần nạp vào các thanh ghi điều khiển.
Ports for transferring data
memr_n Inout 1 1 Tín hiệu tích cực mức thấp cho phép đọc dữ liệu từ MEM vào DMAC.
memw_n Inout 1 1 Tín hiệu tích cực mức thấp cho phép viết từ DMAC đến MEM.
addr_R Input ADDR_WIDTH N/A Địa chỉ cho đọc dữ liệu vào DMA.
data_i Input DATA_WIDTH N/A Cổng nhận dữ liệu vào DMAC
addr_W Output ADDR_WIDTH N/A Địa chỉ cho viết dữ liệu tới MEM.
data_o Output DATA_WIDTH N/A Cổng xuất dữ liệu ra khỏi DMAC

Thuật toán dịch chuyển khối dữ liệu của DMAC 

Quá trình truy xuất bộ nhớ và di chuyển một khối dữ liệu từ vị trí A tới vị trí B được mô tả bằng thuật toán như trong Bảng 2.

Bảng 2. Mã giả (Pseudo code) mô tả thuật toán.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

this algorithm is for DMA process

— External Memory: M[1K][8]

— Internal BUFFER: BUF[16][8] can operate as a FIFO or RAM block

— var addr_a, addr_b: 16 bit

— var i, j: 16 bit

Beginning:

wait for start = ‘1’

Done = ‘0’

Addr_a = A; — starting address of source data block in memory

Addr_a = B; — starting address of destination data block in memory

for i=0 to L-1 do

BUF[] = M[addr_a];

M[addr_b] = BUF[0]

 Addr_a++;

 Addr_b++;

end for

Done = ‘1’

wait for start = ‘0’

go to the beginning

End

Nguyễn Kiêm Hùng

Hung K. Nguyen studied “Electronic Engineering” in both his bachelor’s and master’s degrees at the Vietnam National University, Hanoi, Vietnam. He received the bachelor’s degree in 2003. After receiving his bachelor’s degree, He worked as an internship in the Research Center of Electronics and Telecommunications. In 2006, He received the master’s degree in electronic engineering from VNU University of Engineering and Technology (VNU-UET). Before pursuing his Ph.D’s degree, He worked as a researcher at the Laboratory for Smart Integrated Systems in VNU University of Engineering and Technology for two years. In 2008, He went to Southeast University, Nanjing, China to get his Ph.D degree. He received the Ph.D. degree in Microelectronics and Solid State Electronics from Southeast University in 2013. After got his Ph.D’s degree, He returned to VNU University of Engineering and Technology to continue his research in VLSI design. He works currently as an assistant professor and senior researcher at VNU Key Laboratory for Smart Integrated Systems. His research interests mainly include multimedia processing, reconfigurable computing, and SoC designs.

Trả lời