NỘI DUNG
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)
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.
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.
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
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 và 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.
2. Modeling
Mã nguồn VHDL mô tả thiết kế của DMAC được lưu trong thư mục RTL.
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.
Phân tích kết quả mô phỏng:
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:
ad ơi cho em xin mã nguồn được k ạ?
Pingback: MUSRA#6: VHDL Code cho bộ DMAC với chức năng chuyển vị ma trận - SMART ELECTRONICs