You are currently viewing Mã nguồn VHDL mức RTL mạch nhân 2 ma trận

Mã nguồn VHDL mức RTL mạch nhân 2 ma trận

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:

dayhocstem Nhân hai ma trận

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.

dayhocstem Nhân hai ma trận

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:

dayhoctem Nhân hai ma trận

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.

dayhocstem Nhân hai ma trận

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.

dayhocstem Nhân hai ma trận

Hình 5: Máy FSM của đơn vị điều khiển.

4.4.  Sơ đồ khối tổng thể

dayhocstem Nhân hai ma trận

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.

dayhocstem Nhân hai ma trận

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}

 dayhocstem Nhân hai ma trận.

Hình 8: Kết quả mô phỏng bằng ModelSim

Download mã nguồn ở đây

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 One Comment

  1. Khanh Ngo

    Thầy cho em xin lại link source code với ạ! Link cũ không dùng được nữa ạ

Trả lời