You are currently viewing MUSRA#5: VHDL Code cho bộ DMAC
Hình 11: Cấu trúc hệ thống testbench cho kiểm tra thiết kế DMAC.

MUSRA#5: VHDL Code cho bộ DMAC

Download mã nguồn VHDL tại đây

Mục tiệu: Thiết kế, mô phỏng 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.

1. Kiến trúc RTL của bộ DMAC

1.1. Giao diện ghép nối với CPU (Interface Ctrl)

Sơ đồ khối kiến trúc của DMAC
Hình 3. Sơ đồ khối kiến trúc tổng thể của DMAC.

Hoạt động của bộ điều khiển giao diện ghép nối giữa DMAC và CPU được mô tả bằng giản đồ thời gian như chỉ ra trong Hình 4. Thuật toán điều khiển giao thức bắt tay giữa DMAC và CPU được mô tả bằng lưu đồ máy trạng thái FSMD trong Hình 7.

Giản đồ thời gian các tín hiệu thực hiện giao thức bắt tay giữa DMAC và CPU.

Hình 4. Giản đồ thời gian các tín hiệu thực hiện giao thức bắt tay giữa DMAC và CPU.

Lưu đồ máy trạng thái thực hiện giao thức bắt tay giữa DMAC và CPU

Hình 5. Lưu đồ máy trạng thái thực diện giao thức bắt tay.

1.2.  Các thanh ghi điều khiển

Kiến trúc RTL của khối các thanh ghi điều khiển bộ DMAC

Hình 6. Kiến trúc RTL của khối các thanh ghi điều khiển.

Tệp các thanh ghi điều khiển bao gồm 6 thanh ghi 8-bit lưu trữ các giá trị thiết lập chế độ làm việc của DMAC. Các thanh ghi trong tệp thanh ghi có thể được truy xuất đọc/viết từ bên ngoài (chẳng hạn CPU) thông quan giao diện ghép nối được chỉ ra bên cạnh trái của sơ đồ trong Hình 6. Trong khi đó các tín hiệu bên lề phải của sơ đồ trong Hình 6 là giao diện ghép nối với đơn vị CCG của DMAC.

Bộ giải mã địa chỉ ADDR_DECODE trong tệp thanh ghi điều khiển nhận dữ liệu đầu vào từ bus Ain và lựa chọn một thanh ghi để viết dữ liệu như thể hiện trong Bảng 3.

Bảng 3: Các thanh ghi được lựa chọn theo giá trị của bus Ain.

AIN Thanh ghi được lựa chọn
“0000” Thanh ghi MDR
“0001” Thanh ghi SAR0
“0010” Thanh ghi SRA1
“0011” Thanh ghi DAR
“0100” Thanh ghi RIR
“0101” Thanh ghi CIR
“0110” Reserved

Trong đó các thanh ghi được định nghĩa như sau:

  • Thanh ghi chọn chế độ làm việc 8-bit MDR (MoDe Register). Thanh ghi này lựa chọn chế độ hoạt động của bộ điều khiển bộ nhớ. Bộ điều khiển đọc dữ liệu từ thanh ghi MDR và lựa chọn chế độ hoạt động thích hợp như chỉ ra trong Bảng 4.

Bảng 4: Chức năng hoạt động của bộ điều khiển bộ nhớ theo thanh ghi MDR[3:0].

MDR[3:0] Chức năng hoạt động
“0001” Truy cập bộ nhớ trực tiếp
“0010” Chuyển vị ma trận
“0100” Sắp xếp mảng dữ liệu
“1000” Ghép hai ma trận

Bảng 5: Chức năng hoạt động của bộ điều khiển bộ nhớ theo thanh ghi MDR[4].

MDR[4] Chức năng hoạt động
‘0’ Single transfer mode: đọc/viết từng từ dữ liệu
‘1’ Burst transfer mode: đọc/viết theo loạt

Bảng 6: Chức năng hoạt động của bộ điều khiển bộ nhớ theo thanh ghi MDR[5].

MDR[5] Chức năng hoạt động
‘0’ Data Width = 8
‘1’ Data Width = 16
  • Thanh ghi địa chỉ khối dữ liệu nguồn: SAR0 và SAR1 16-bit (Source Address Register). Các thanh ghi này lưu giá trị địa chỉ bắt đầu của các khối dữ liệu trong bộ nhớ mà DMAC cần phải truy xuất tới. Thông tin từ các thanh ghi SAR0 SAR1 được sử dụng để tính toán địa chỉ cho việc đọc dữ liệu từ bộ nhớ.
  • Thanh ghi địa chỉ đích: DAR 16-bit (Destination Address Register). Các thanh ghi này lưu giá trị địa chỉ bắt đầu của các khối dữ liệu trong bộ nhớ mà DMAC cần phải truy xuất tới. Thông tin từ thanh ghi DAR sử dụng để để tính toán địa chỉ cho việc ghi dữ liệu vào bộ nhớ.
  • Thanh ghi độ dài khối dữ liệu: BLR 16-bit (Block Length Register). Thanh ghi BLR chứa thông tin về số lượng đơn vị dữ liệu cần xử lý. Thanh ghi này được tách thành 2 thanh ghi 8-bit có thể định địa chỉ một cách tách biệt: thanh ghi RIR (Row Index Register) chỉ số hàng của khối dữ liệu; thanh ghi CIR (Column Index Register) lưu số cột của khối dữ liệu. RIR tương ứng với 8-bit cao của BLR, CIR tương ứng với 8-bit thấp của BLR. Nói cách khác BLR = {RIR:CIR}.
    • Nếu RIR !=0 thì giá trị của RIR là chỉ số hàng của khối dữ liệu cần copy
    • Nếu RIR = 0 thì số hàng của khối dữ liệu cần copy là không xác định, tương ứng với vòng lặp vô hạn

1.3.  Kiến trúc lõi DMAC

Hình 8 chỉ ra sơ đồ khối thiết kế mức RTL của đơn vị xử lý dữ liệu datapath của lõi DMAC.

Hoạt động chức năng của đơn vị điều khiển lõi DMAC được mô tả bằng lưu đồi máy trạng thái như chỉ ra trong Hình 9.

Thiết kế Datapath của lõi DMAC
Hình 8. Thiết kế Datapath.
Máy trạng thái FSM of đơn vị điều khiểu lõi DMAC
Hình 9: FSM of controller.

2.  Modeling

Mã nguồn VHDL mô tả thiết kế của DMAC được lưu trong thư mục RTL.

Tổ chức dạng cây của các file mã nguồn VHDL của bộ DMAC
Hình 10: Tổ chức dạng cây của các file mã nguồn.

3.  Simulation

Xem video quá trình mô phỏng ở đây.

Mô hình hệ thống dùng cho mô phỏng: Bên cạnh bản mô tả mức RTL của DMAC, mô hình mô phỏng còn đưa vào 2 mô hình mức hành vi (behavioral) của CPU và bộ nhớ để tạo nên một hệ vi xử lý hoàn chỉnh như chỉ ra trong Hình 11. Hệ thống dùng cho mô phỏng được mô tả trong tệp DMAC_tb.vhd lưu trong thư mục tb.

Cấu trúc hệ thống testbench cho kiểm tra thiết kế DMAC
Hình 11: Cấu trúc hệ thống testbench cho kiểm tra thiết kế DMAC.

Phân tích kết quả mô phỏng: 

Kết quả mô phỏng bộ DMAC trên ModelSIM
Hình 12. Kết quả mô phỏng.
Nội dung của bộ nhớ lấy mẫu tại thời điểm 2018 ns, trước khi quá trình DMA lần thứ nhất diễn ra
Hình 13: Nội dung của bộ nhớ lấy mẫu tại thời điểm 2018 ns, trước khi quá trình DMA lần thứ nhất diễn ra.
Nội dung của bộ nhớ lấy mẫu tại thời điểm 2892 ns, sau lần DMA thứ nhất và trước khi quá trình DMA lần thứ hai diễn ra
Hình 14: Nội dung của bộ nhớ lấy mẫu tại thời điểm 2892 ns, sau lần DMA thứ nhất và trước khi quá trình DMA lần thứ hai diễn ra.
Nội dung của bộ nhớ lấy mẫu tại thời điểm 6593 ns, sau lần DMA thứ hai
Hình 15: Nội dung của bộ nhớ lấy mẫu tại thời điểm 6593 ns, sau lần DMA thứ hai.

 Hình 12 chỉ ra dạng sóng kết quả mô phỏng bộ DMAC bằng phần mềm ModelSim. Quá trình kiểm chứng được bắt đầu bằng viết các từ điều khiển từ CPU tới các thanh ghi điều khiển của DMAC từ khoảng thời gian 100ns đến 425ns với việc đặt tín hiệu cs_n = ‘0’ và tạo ra các tổ hợp tín hiệu điều khiển thích hợp gồm iowin_in, ain, dbin.

Trong khoảng thời gian từ 425ns đến 1300ns CPU tiến hành khởi tạo dữ liệu cho bộ nhớ MEM_BLOCK.

Từ khoảng 1325ns đến 1945ns, CPU tiến hành đọc ngược dữ liệu từ bộ nhớ để kiểm tra dữ liệu hiện tại của MEM_BLOCK, để kiểm tra bộ nhớ đã được khởi tạo đúng.

Hai bước kiểm tra trên để kiểm chứng quá trình viết tới các thanh ghi điều khiển và bộ nhớ không ảnh hưởng tới nhau.

Từ khoảng thời gian 1955ns đến 2105ns CPU viết lại các từ điều khiển tới thanh ghi điều khiển của DMAC sau đó tạo tín hiệu bắt tay cho phép DMAC làm chủ bus và hoạt động từ khoảng thời gian 2105ns đến 2830ns.

Từ 2830ns đến 2980ns lặp lại quá trình viết từ điều khiển với những giá trị mới.  Quá trình DMA do DMAC điều khiển diễn ra từ 2980ns đến 6310ns.

Như vậy kết quả mô phỏng chứng tỏ thiết kế của bộ DMAC hoạt động đúng yêu cầu.

Video quá trình mô phỏng:

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.

This Post Has 2 Comments

  1. nghĩa

    ad ơi cho em xin mã nguồn được k ạ?

Trả lời