NỘI DUNG
Download mã nguồn ở đây
1. Mục tiêu
Mục tiêu: Thiết kế RTL, mô hình hóa bằng VHDL, mô phỏng và thực thi một đơn vị nhân hai ma trận A và B với nhau. Trong đó, ma trận A có kích thước m×n và ma trận B có kích thước n×k. Phép nhân hai ma trận được mô tả bằng công thức toán học cho trường hợp m=3, n=2, k=3 như sau:
Hình 1. Công thức toán học mô tả phép nhân hai ma trận.
2. Yêu cầu
2.1. Yêu cầu đối với thiết kế:
- Kích thước ma trận đầu vào có thể tùy chỉnh được khai báo như tham số cấu hình của thiết kế.
- Đơn vị xử lý trung tâm (CPU) có thể viết các phần tử của 2 ma trận đầu vào tới bộ đệm bên trong của bộ nhân ma trận.
- CPU kích hoạt quá trình tính toán của bộ nhân ma trận bằng các đặt tín hiệu Start = ‘1’.
- Sau khi quá trình nhân ma trận hoàn thành, nó sẽ báo cho CPU biết bằng cách đặt tín hiệu Done = ‘1’; Bộ nhân ma trận cần giữ trạng thái này cho đến khi Start = 0.
- Khi Done = ‘1’, CPU có thể tiến hành đọc ma trận đầu ra được nhân từ 2 ma trận đầu vào.
- Sau khi kết thúc đọc dữ liệu từ bộ nhân ma trận, CPU xóa tín hiệu Start = ‘0’ để báo phiên làm việc của bộ nhân ma trận kết thúc.
Hình 2. Giao diện ghép nối I/O của đơn vị nhân ma trận.
2.2. Định nghĩa giao diện vào/ra
Bảng 1: Mô tả các tín hiệu vào ra.
TT | Port | Direction | Width | Meaning |
1 | Clk | IN | 1 | Xung clock hệ thống |
2 | nReset | IN | 1 | Xung Reset hệ thống |
3 | Start | IN | 1 | Tín hiệu bắt đầu nhân ma trận |
4 | Data_A | IN | N | Dữ liệu ma trận A vào |
5 | Data_B | IN | N | Dữ liệu ma trận B vào |
6 | WE_A | IN | 1 | Tín hiệu để ghi vào bộ nhớ ma trận A |
7 | WE_B | IN | 1 | Tín hiệu để ghi vào bộ nhớ ma trận B |
8 | Addr_A_in | IN | N | Địa chỉ của bộ nhớ chưa ma trận A |
9 | Addr_B_in | IN | N | Địa chỉ của bộ nhớ chưa ma trận B |
10 | Addr_C_in | IN | N | Địa chỉ của bộ nhớ chưa ma trận C |
11 | Data_out | OUT | N | Dữ liệu ma trận đầu ra |
12 | RE_C | OUT | 1 | Tín hiệu đọc dữ liệu từ bộ nhớ C |
13 | Done | OUT | 1 | Xung kích hoạt khi quá trình nhân hoàn thành |
3. Thuật toán
Do thuật toán nhân ma trận 2 chiều sẽ làm phức tạp trong quá trình thiết kế mạch RTL. Vì vậy để tốt ưu, thuật toán nhân ma trận sẽ được xử lý dạng mảng 1 chiều. Dưới đây là lưu đồ thuật toán :
Mã giả (Pseudo code) mô tả thuật toán.
[initialize input data]
Beginning: wait for start = ‘1’ Done = ‘0’ for i=0 to rowA do for j=0 to columnB do for k=0 to rowB do C[i * columnB + j] += A[i * columnA + k] *B[k * columnB + j] end for end for end for Done = ‘1’ wait for start = ‘0’ go to the beginning End |
|
Các phần tử của ma trận A và B sẽ được trải trên mảng 1 chiều A và B, từ đó cùng 3 vòng lặp for, thay vì C[i][j] += A[i][k] * B[k][j] ta sử dụng công thức :
C[i * columnB + j] += A[i * columnA + k] *B[k * columnB + j]
4. Thiết kế mức RTL
4.1. Mô hình máy FSMD
Sinh viên/Học viên chỉ ra sơ đồ máy trạng thái FSMD mô tả hoạt động của bộ vi xử lý ở đây!
Để bắt đầu xây dựng mạch điện thực hiện chức năng nhân ma trận, trước tiên chúng ta chuyển đổi chương trình thành sơ đồ máy trạng thái phức tạp FSMD như Hình 2. Như tên gọi của nó các trạng thái của FSMD có thể bao gồm các biểu thức số học của tổ hợp các đầu vào và đầu ra bên ngoài hoặc biến. FSMD tương phản với sơ đồ trạng thái FSM thuần túy trong đó chỉ bao gồm các biểu thức boolean của chỉ các đầu vào và đầu ra bên ngoài, không có các biến. Do đó, các sơ đồ trạng thái phức tạp này trông giống như một chương trình tuần tự, trong đó các câu lệnh đã được lập lịch để thực hiện trong các trạng thái.
Sơ đồ trạng thái như dưới đây:
Hình 3: Mô hình máy FSMD.
4.2. Đơn vị xử lý dữ liệu (Datapath)
Bước tiếp theo của chúng ta là phân chia chức năng máy FSMD thành các thành phần cấu trúc gồm đơn vị xử lý dữ liệu datapath và bộ điều khiển như trong Hình 3. Phần datapath phải bao gồm một sự kết nối của các mạch tổ hợp và tuần tự. Phần điều khiển phải bao gồm một FSM thuần túy (tức là chỉ chứa các phép và điều kiện trên biến logic).
Ở đây sử dụng các bộ nhớ dpmemory để lưu trũ các phần tử của ma trận A,B,C, các bộ counter để đếm các biến i,j,k, các bộ xử lý tính toán bộ nhân và bộ công, bộ so sánh các biện đếm.
Hình 4: Cấu trúc của đơn vị xử lý dữ liệu Datapath.
4.3. Đơn vị điều khiển (Control Unit)
Sau khi thiết kế xong datapath chúng ta tín hành chuyển đổi máy trạng thái FSMD trong Hình 2 thành máy trạng thái FSM trong Hình 5 mô tả hoạt động của bộ điều khiển. Máy trạng thái FSM có các trạng thái và chuyển tiếp giống như máy FSMD. Tuy nhiên, trong FSM chúng ta đã thay thế các phép tính và điều kiện phức tạp bằng các phép tính và điều kiện trên các biến logic và tạo ra các tín hiệu điều khiển hoạt động của datapath. Giao diện các tín hiệu vào/ra của bộ điều khiển được mô tả trong Hình 6.
Hình 5: Máy FSM của đơn vị điều khiển.
4.4. Sơ đồ khối tổng thể
Hình 6: Sơ đồ khối tổng thể của bộ nhân ma trận.
5. Mô hình hóa bằng VHDL
Tổ chức top-down của các tệp mã nguồn được mô tả trong hình 7.
Hình 7: Tổ chức của các tệp mã nguồn.
6. Mô phỏng và đánh giá
Hình bên dưới chỉ ra kết quả mô phỏng thiết kế bộ nhân ma trận thực hiện việc nhân 2 ma trận A và B có thể thay đổi kích thước và giá trị mỗi lần tính ở file testbench.
- Input A = {0,1,2 ; 3,4,5 ; 6,7,8}
- Input B = {0,1 ; 2,3 ; 4,5}
- Output C = {10,13 ; 28,40 ; 46,67}
.
Hình 8: Kết quả mô phỏng bằng ModelSim
Thầy cho em xin lại link source code với ạ! Link cũ không dùng được nữa ạ