1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE

43 388 6

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 2,23 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BNE

Trang 1

THIẾT KẾ CPU RISC 32 BIT ĐƠN CHU

KỲ THỰC HIỆN LỆNH BNE

Trang 2

MỤC LỤC

DANH MỤC CÁC HÌNH VẼ 3

DANH MỤC CÁC BẢNG BIỂU 5

DANH MỤC CÁC TỪ VIẾT TẮT 6

CHƯƠNG 1 TỔNG QUAN VỀ SYSTEM VERILOG HDL 7

1.1 GIỚI THIỆU 7

1.2 CẤU TRÚC CỦA NGÔN NGỮ 8

1.2.1 Khối xây dựng cơ bản Module 8

1.2.2 Các loại dữ liệu: 8

1.2.3 Mảng array 10

1.2.4 Các câu lệnh điều khiển 12

CHƯƠNG 2 HỆ THỐNG CPU RISC 32-BIT 14

2.1 TỔNG QUAN VỀ CPU RISC 14

2.1.1 Giới thiệu 14

2.1.2 Cấu trúc cơ bản của một máy tính MIPS 15

2.1.3 Khuôn dạng mã lệnh 16

2.2 CÁC KHỐI CẤU TẠO CHÍNH 18

2.2.1 Khối bộ nhớ lệnh IM 18

2.2.2 Khối tập thanh ghi 19

2.2.3 Khối ALU 21

CHƯƠNG 3 THIẾT KẾ CPU MIPS THỰC HIỆN BNE 23

3.1 LƯU ĐỒ HOẠT ĐỘNG THỰC HIỆN BNE 23

3.2 THIẾT KẾ ĐƯỜNG DỮ LIỆU 24

3.3 THIẾT KẾ ĐƯỜNG ĐIỀU KHIỂN 28

3.4 KẾT QUẢ MÔ PHỎNG TRÊN QUARTUS 29

3.4.1 Mạch RTL mô phỏng: 29

3.4.2 Kết quả mô phỏng 32

Trang 3

3.5 KẾT QUẢ KIỂM TRA TRÊN KIT DE2 33

CHƯƠNG 4 KẾT LUẬN 35

4.1 KẾT LUẬN 35

4.2 ỨNG DỤNG 35

4.3 HƯỚNG PHÁT TRIỂN 35

TÀI LIỆU THAM KHẢO 36

PHỤ LỤC 37

Trang 4

DANH MỤC CÁC HÌNH VẼ

HÌNH 1-1: SYSTEMVERILOG TRÊN NỀN TẢNG VERILOG 7

HÌNH 1-2: CẤU TẠO MẢNG 10

HÌNH 2-1: MÔ TẢ CẤU TẠO CPU MIPS 15

HÌNH 2-2: HOẠT ĐỘNG CỦA CPU 15

HÌNH 2-3: KHUÔN MÃ LỆNH CỦA RISC CPU 16

HÌNH 2-4: KHUÔN MÃ CỦA LỆNH BNE 17

HÌNH 2-5: BỘ NHỚ LỆNH 18

HÌNH 2-6: MẠCH RTL MÔ PHỎNG KHỐI IM 18

HÌNH 2-7: KẾT QUẢ MÔ PHỎNG KHỐI IM 19

HÌNH 2-8: KHỐI TẬP THANH GHI 19

HÌNH 2-9: MẠCH RTL MÔ PHỎNG KHỐI RF 20

HÌNH 2-10: KẾT QUẢ MÔ PHỎNG KHỐI RF 20

HÌNH 2-11: KHỐI TÍNH TOÁN ALU 21

HÌNH 2-12: MẠCH TRỪ CỦA KHỐI ALU 22

HÌNH 2-13: MẠCH RTL MÔ PHỎNG KHỐI ALU THỰC HIỆN TRỪ 22

HÌNH 2-14: KẾT QUẢ MÔ PHỎNG KHỐI ALU THỰC HIỆN TRỪ 22

HÌNH 3-1: ĐỌC LỆNH TỪ ĐỊA CHỈ PC 25

HÌNH 3-2: XUẤT GIÁ TRỊ TỪ TRƯỜNG LỆNH 25

HÌNH 3-3: TÍNH TOÁN TỪ GIÁ TRỊ XUẤT RA 26

HÌNH 3-4: ĐƯỜNG DỮ LIỆU HOÀN CHỈNH THỰC HIỆN BNE 27

HÌNH 3-5: BỘ ĐIỀU KHIỂN LỆNH BNE 28

HÌNH 3-6: ĐƯỜNG ĐIỀU KHIỂN KHỐI ALU THỰC HIỆN TRỪ 29

HÌNH 3-7: MẠCH RTL MÔ PHỎNG RISC MIPS 29

HÌNH 3-8: MẠCH RTL MÔ PHỎNG CPU MIPS 30

Trang 5

HÌNH 3-9: MẠCH RTL MÔ PHỎNG ĐƯỜNG ĐIỀU KHIỂN 30

HÌNH 3-10: MẠCH RTL MÔ PHỎNG ĐƯỜNG DỮ LIỆU 30

HÌNH 3-11: MẠCH RTL MÔ PHỎNG KHỐI RF 31

HÌNH 3-12: MẠCH RTL MÔ PHỎNG KHỐI PC 31

HÌNH 3-13: KẾT QUẢ MÔ PHỎNG CPU MIPS THỰC HIỆN LỆNH BNE 32

HÌNH 3-14: KẾT QUẢ BẰNG NHAU KIỂM TRA TRÊN KIT 33

HÌNH 3-15: KẾT QUẢ KHÔNG BẰNG NHAU KIỂM TRA TRÊN KIT 34

DANH MỤC CÁC BẢNG BIỂ

Trang 6

BẢNG 1-1: BẢNG TỔNG HỢP MỘT SỐ LOẠI DỮ LIỆU 9 BẢNG 1-2: TỔNG HỢP MỘT SỐ PHÉP TOÁN THÔNG DỤNG 11 BẢNG 2-1: BẢNG TỔNG HỢP ĐƯỜNG ĐIỀU KHIỂN KHỐI ALU 21

Trang 7

DANH MỤC CÁC TỪ VIẾT TẮT

CPU Central Processing Unit

RISC Reduced Instruction Set Computer

MIPS Microprocessor without Interlocked Pipeline StagesISA Instruction Set Architecture

Trang 8

CHƯƠNG 1 TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH PHẦN

CỨNG SYSTEM VERILOG

 SystemVerilog hợp nhất một số ngôn ngữ thiết kế phần cứng và kiểm tra, làphần mở rộng của Verilog HDL, thừa hưởng tất cả các tính năng củaVerilog Những phần mở rộng này cung cấp khả năng mới cho việc mô hìnhhoá phần cứng tại cấp RTL, hệ thống và các cấp kiến trúc, cùng với một bộcác tính năng phong phú khác để kiểm tra hoạt động của mô hình

 Phần lớn các chức năng kiểm tra được dựa trên ngôn ngữ OpenVera doSynopsys cung cấp SystemVerilog đã trở thành tiêu chuẩn IEEE P1800-2005

Trang 9

1.2 Cấu trúc của ngôn ngữ

1.2.1 Khối xây dựng cơ bản Module

 Khối module được sử dụng chủ yếu để biểu diễn các khối thiết kế, nhưngcũng có thể chứa đoạn mã kiểm tra và kết nối giữa các khối kiểm tra và thiết

kế Một số cấu trúc mà module có thể chứa bao gồm:

o Các cổng và khai báo của nó

o Khai báo dữ liệu

o Khai báo liên tục

o Định nghĩa kiểu người dùng định nghĩa

 SystemVerilog cung cấp một số loại dữ liệu tổng hợp của cả hai kiểu dữ liệu Verilog và C Các loại dữ liệu 2 trạng thái có thể được mô phỏng nhanh, tốn

ít bộ nhớ và được sử dụng nhiều hơn trong một số kiểu thiết kế

Trang 10

Bảng 1-1: Bảng tổng hợp một số loại dữ liệu [3]

 Các loại dữ liệu:

o Loại cấu trúc: wire và reg

 Để mô hình các kết nối phần cứng giữa các thành phần trongmạch Loại wire hoạt động như dây thực trong mạch, còn regthì giữ giá trị của nó đến khi một giá trị khác được ghi đè vàogiống như một thanh ghi Khai báo của loại này nằm trong khốimodule chính nhưng nằm ngoài các khối các liên tục

 Cú pháp: reg (wire) tên_biến

o Loại hành vi: integer, real, time, parameter, logic,…

 Để khai báo biến dựa trên hành vi, tính chất của biến đó như một biến là số nguyên, số thực, logic,…

 Cú pháp: tên_dữ_liệu tên_biến; parameter tên_biến = giá_trị;

Trang 11

o Loại gán có dấu: signed và unsigned:

 Giá trị dùng cho các phép toán số học có thể là số có dấu hoặckhông dấu, mặc định dấu này sẽ được gán cho những loại dữliệu thích hợp nhưng người dùng có thể gán một cách thủ côngtheo mong muốn

 Cú pháp: tên_dữ_liệu (un)signed tên_biến;

 Mảng cố định có thể được chia ra làm hai loại: mảng “đóng gói” chỉ loạimảng có chiều được khai báo trước tên của một biến Ngược lại, mảng

“không đóng gói” có chiều được khai báo sau

Trang 12

Bảng 1-2: Tổng hợp một số phép toán thông dụng

Trang 13

1.2.4 Các câu lệnh điều khiển

 Câu lệnh if-else

o Kiểm tra điều kiện để quyết định có thực hiện một phần của mã lệnh hay không Nếu điều kiện là đúng thì đoạn mã sẽ được thực hiện, ngược lại đoạn mã khác sẽ được thực hiện

o Cấu trúc câu lệnh:

case (địa chỉ) địa chỉ 0: Đoạn mã;…

Trang 14

 Câu lệnh thiết lập khối ban đầu

o Khối được thực hiện chỉ một lần khi bắt đầu

o Cấu trúc câu lệnh:

initial beginĐoạn mã gán giá trị;

end

 Câu lệnh khối always

o Khối khai báo luôn được thực hiện, có thể kèm theo danh sách các biến nhạy và sẽ gán lại giá trị khi các biến này thay đổi

Trang 15

CHƯƠNG 2 HỆ THỐNG CPU RISC 32-BIT

2.1.1 Giới thiệu

 RISC là một thiết kế CPU dựa trên tập lệnh đơn giản hóa cung cấp hiệu năngcao hơn khi kết hợp với một kiến trúc vi xử lý có khả năng thực hiện các lệnhbằng cách sử dụng ít hơn chu kỳ bộ vi xử lý cho mỗi lệnh Một máy tính dựa trên cách thiết kế này được gọi là một máy tính có tập lệnh rút gọn

 RISC có các đặc điểm:

o Tất cả các hoạt động cần thiết xảy ra trong bộ xử lý

o Khuôn mã lệnh có chiều dài cố định

o Sử dụng các lệnh nạp và lưu trữ vào các đơn vị bộ nhớ

o Số chế độ định địa chỉ bị giới hạn bởi độ rộng của trường lệnh

o Số các thao tác bị giới hạn hơn so với các loại vi xử lý khác

 MIPS là một loại máy tính RISC dùng kiến trúc tập lệnh (ISA) MIPS là một kiến trúc lưu - tải (còn gọi là kiến trúc “thanh ghi - thanh ghi”), có nghĩa là

nó chỉ thực hiện các phép toán số học và logic giữa các thanh ghi của CPU, yêu cầu các lệnh tải hoặc lưu để truy cập vào bộ nhớ

 Thiết kế của MIPS được đơn giản hóa để chỉ chứa các tập lệnh:

o Các lệnh thực thi trên bộ nhớ dữ liệu: lw, sw

o Các lệnh tính toán số học, logic: add, sub, and, or, slt, …

o Các lệnh tính toán số học, logic trực tiếp: addi, andi, ori, …

o Các lệnh rẽ nhánh, nhảy: beq, bne, j, …

Trang 16

2.1.2 Cấu trúc cơ bản của một máy tính MIPS

 Tổ chức của một bộ xử lý MIPS:

o Hoạt động của một bộ xử lý:

 Tìm nạp lệnh từ bộ nhớ lệnh

 Giải mã lệnh để xác định hoạt động cần thực hiện

 Thực thi lệnh đã giải mã bao gồm các hoạt động như nhận dữ liệu từ bộ nhớ hoặc các cổng vào và ra, sử dụng các dữ liệu này

để thực hiện các phép toán số học hoặc logic Kết quả của quá trình thực thi này có thể được dùng để ghi dữ liệu lại vào các đơn vị lưu trữ hoặc các cổng vào và ra

Trang 17

o Đường điều khiển:

Xác định lệnh tiếp theo và nạp lệnh này từ bộ nhớ lệnh

Tiến hành giải mã lệnh để thực hiện hoạt động cần thiết

Xuất ra các tín hiệu điều khiển các đơn vị cần thiết

Chỉ đến lệnh tiếp theo trong chuỗi lệnh

Nhập hoặc xuất dữ liệu từ các đơn vị lưu trữ

 Bộ xử lý MIPS chỉ thực hiện một hoạt động duy nhất dựa trên lệnh yêu cầu Mỗi lệnh chỉ ra các toán hạng cần thiết trong lệnh, các toán hạng này được chứa trong tập thanh ghi của đường dữ liệu ($t0, $s1, $s2, …) Ví dụ:

Trang 18

Hình 2-3: Khuôn mã lệnh của RISC CPU [5]

Các trường của khuôn mã lệnh:

o op: 6-bit opcode chỉ ra lệnh cần thực hiện

o rs, rt: 5-bit chỉ địa chỉ của hai thanh ghi nguồn

o rd: 5-bit chứa địa chỉ của thanh ghi đích

o shamt: 5-bit được dùng trong các lệnh dịch bit

o funct: 6-bit được dùng để hỗ trợ cho các lệnh dạng R chỉ ra lệnh cần thực hiện

o immediate lệnh dạng I: 16-bit chứa giá trị offset

o immediate lệnh dạng J: 26-bit chứa địa chỉ đích đến trong lệnh jump

 Khuôn dạng mã máy của lệnh rẽ nhánh không bằng bne:

o Mục đích: so sánh giá trị các thanh ghi sau đó thực hiện lệnh rẽ nhánh

có điều kiện theo PC

o Mô tả: 16 bit offset được dịch trái 2 bit được thêm vào địa chỉ của lệnh tiếp theo để thực hiện lệnh rẽ nhánh Nếu giá trị của trường rs và

rt không bằng nhau thì lệnh rẽ nhánh này sẽ được thực hiện, ngược lại

sẽ thực hiện lệnh tiếp theo

o Cú pháp: bne $s2, $s1, label

o Ý nghĩa: if ($s2 != $s1) pc += i << 2

Trang 19

2.2 Các khối cấu tạo chính

2.2.1 Khối bộ nhớ lệnh IM

 Là khối lưu trữ tập các lệnh cần thực thi, có một ngõ vào là địa chỉ 32 bit và một đầu ra chứa giá trị 32 bit của thanh ghi tương ứng với địa chỉ đầu vào được lấy từ bộ PC Giá trị xuất ngõ ra là khuôn mã lệnh của lệnh cần thực hiện

 Mạch mô phỏng RTL:

Hình 2-6: Mạch RTL mô phỏng khối IM

Trang 20

 Kết quả mô phỏng:

Hình 2-7: Kết quả mô phỏng khối IM

2.2.2 Khối tập thanh ghi

 Một tập thanh ghi bao gồm một chuỗi các các thanh ghi có thể được đọc và ghi khi cung cấp địa chỉ 5 bit của thanh ghi cần được truy cập, được xây dựng từ các D Flip-flop Dữ liệu ra là giá trị chứa trong hai thanh ghi 32 bit,

có thể đọc hai thanh ghi cùng một lúc Ngoài ra, có thể viết dữ liệu vào thanhghi bằng đường ghi dữ liệu 32 bit chỉ khi có tín hiệu điều khiển ghi Tập thanh ghi nhận giá trị địa chỉ từ khối IM, từ địa chỉ đó chọn thanh ghi tương ứng để xuất dữ liệu của thanh ghi cho khối ALU thực hiện tính toán

Trang 22

2.2.3 Khối ALU

 Khối ALU là khối được sử dụng cho quá trình tính toán các phép tính số học,logic như: add, sub, bne, zero, … Là khối tính toán chính của hệ thống, mọi phép toán đều phải thông qua khối này Khối có hai ngõ vào 32 bit, giá trị nhận từ khối RF sẽ được dùng để tính toán, kết quả được xuất ra để sử dụng hoặc bật cờ báo cần thiết Ngõ vào điều khiển được sử dụng để chọn phép toán mà khối ALU sẽ thực hiện

Trang 23

 Đối với lệnh bne thì khối ALU chỉ cần thực hiện lệnh trừ do đó có thể đượcđơn giản hóa chỉ để thực hiện một phép trừ

 Mạch mô phỏng RTL:

Hình 2-13: Mạch RTL mô phỏng khối ALU thực hiện trừ

 Kết quả mô phỏng kiểm tra:

Hình 2-14: Kết quả mô phỏng khối ALU thực hiện trừ

Trang 24

CHƯƠNG 3 THIẾT KẾ CPU MIPS 32-BIT ĐƠN CHU KỲ THỰC

HIỆN LỆNH BNE

Trang 25

Mô tả hoạt động của lưu đồ:

Khi hệ thống được cấp nguồn, chương trình bắt đầu chạy ở trạng thái chờ xungclock cạnh lên, nạp các giá trị ban đầu Khi có xung clock cạnh lên, chương trình sẽnạp lệnh kế tiếp được lưu trong PC Các giá trị sẽ được truy xuất vào và ra từ RFtương ứng dựa trên địa chỉ theo trường op từ bộ IM CPU sẽ thực hiện tuần tự cáclệnh có trong IM cho đến khi CPU đọc được lệnh bne thì CPU sẽ thực hiện các hoạtđộng sau:

 Bật cờ báo là lệnh rẽ nhánh và gửi tín hiệu điều khiển đến khối ALU để thựchiện phép toán thích hợp

 Sau khi khối ALU nhận được giá trị hai thanh ghi từ RF thì khối này sẽ thựchiện phép toán trừ Kết quả đạt được sẽ đem so với mức logic 0

 Nếu kết quả bằng 0 thì có nghĩa là giá trị hai thanh ghi bằng nhau, không rẽnhánh, thực hiện lệnh tiếp theo trong khối IM Ngược lại, nếu khác 0 thì giátrị hai thanh ghi khác nhau, thực hiện lệnh rẽ nhánh

 Sau khi rẽ nhánh thì CPU lại tiếp tục thực hiện tuần tự các lệnh tiếp theo saunhánh

Đường dữ liệu là đường thể hiện dòng đi của các tín hiệu của mạch, thể hiện cơbản hoạt động của một mạch Đường điều khiển được thiết kế qua các bước:

1 Bộ đếm chương trình PC chứa địa chỉ của các lệnh, được sử dụng để tìm nạp lệnh từ bộ nhớ lệnh và cập nhật PC cho các lệnh tiếp theo Đầu tiên lệnh thựcthi được đọc từ bộ nhớ lệnh, PC được kết nối với địa chỉ đầu vào của bộ nhớ lệnh Từ địa chỉ từ PC này, bộ nhớ lệnh đọc ra lệnh 32-bit, có nhãn là Instr Hoạt động của vi xử lý phụ thuộc vào chỉ dẫn cụ thể được nạp vào, trong trường hợp này thì khuôn mã lệnh bne sẽ được đọc ra

Trang 26

Hình 3-1: Đọc lệnh từ địa chỉ PC [4]

2 Đối với lệnh bne, từ lệnh đã đọc được từ bộ nhớ lệnh, lệnh này chứa bốn trường giá trị bao gồm trường 6 bit op dùng để điều khiển hoạt động của khốiđiều khiển; hai trường 5 bit chứa địa chỉ của thanh ghi đầu vào tương ứng và một trường offset chứa giá trị cần rẽ nhánh đến

3 Từ giá trị của hai trường thanh ghi, giá trị này hoạt động như là một địa chỉ thanh ghi, chỉ đến thanh ghi cần thực hiện Tương ứng với địa chỉ này thì giá trị của hai thanh ghi sẽ được đọc ra lần lượt theo hai ngõ ra RD1 và RD2 Đối với giá trị trường offset, do đang hoạt động trên hệ thống 32 bit nên giá trị này cần được biến đổi thành 32 bit Giá trị offset này sẽ được đưa qua một

bộ mở rộng dấu Bộ này vừa có chức biến đổi ngõ vào thành 32 bit mà còn gán dấu cho giá trị vì offset có thể có giá trị âm hoặc dương

Trang 27

4 Giá trị của opcode được đưa vào bộ điều khiển, từ đó điều khiển khối ALU thực hiện phép toán cần thiết, đối với lệnh bne thì đường điều khiển sẽ đưa vào khối ALU thực hiện phép toán trừ Sau đó, kết quả phép trừ này sẽ được

so sánh nếu bằng 0 thì cờ báo không bằng sẽ không được bật khi đó kết quả xuất ra bằng 0 Ngược lại, nếu kết quả phép trừ khác 0 thì có nghĩa là giá trị hai thanh ghi khác nhau do đó cờ báo không bằng sẽ được bật lên và kết quả xuất ra bằng 1

5 Sau khi đã có kết quả của cờ không bằng từ khối ALU thì nó được kết hợpvới cờ rẽ nhánh được điều khiển từ bộ điều khiển qua một cổng logic AND.Ngõ ra của cổng AND này hoạt động như cổng chọn kênh của bộ MUX 2:1,chọn giữa thực hiện lệnh kế tiếp hoặc lệnh rẽ nhánh Lệnh kế tiếp trong chuỗilệnh của hệ thống là lệnh có giá trị PC + 4 Lệnh rẽ nhánh là lệnh từ lệnh tiếptheo cộng với khoảng cách từ lệnh đó đến lệnh cần rẽ nhánh đến mang giá trị

PC + 4 + offset Khi ngõ ra cổng AND = 0 tức là một hoặc cả hai điều kiệnkhông thỏa đó là lệnh hiện tại là lệnh rẽ nhánh và hai giá trị thanh ghi phảikhác nhau, CPU sẽ thực hiện lệnh tiếp theo trong chuỗi lệnh Ngược lại, khingõ ra cổng AND = 1 thì có nghĩa điều kiện rẽ nhánh là đúng, hệ thống sẽthực hiện lệnh rẽ nhánh đến vị trí cần thiết

Trang 28

Hình 3-4: Đường dữ liệu hoàn chỉnh thực hiện bne [4]

Trang 29

Tóm tắt các bước đường dữ liệu của lệnh bne:

 PC giữ địa chỉ của lệnh hiện tại

 Chỉ dẫn được đọc ra từ bộ nhớ lệnh

 Giá trị PC + 4 được tính toán

 Giá trị của offset được thêm vào bộ mở rộng

 Giá trị ReadAddress đọc địa chỉ thanh ghi được thiết đặt

 Tín hiệu điều khiển được thiết lập để trừ trong ALU

 Các giá trị ReadData được đọc từ hai thanh ghi vào ALU

 Cờ NotZero và lệnh điều khiển branchne được cho qua cổng logic AND để chọn PC + 4 hoặc PC + 4 + offset và ghi vào PC (ở cuối xung đồng hồ)

Bộ điều khiển giải mã các tín hiệu điều khiển dựa trên opcode Hầu hết cácthông tin điều khiển xuất phát từ opcode, nhưng chỉ dẫn loại R cũng sử dụng trườngfunct để xác định hoạt động ALU của các chỉ thị Instr31:26 và Instr5:0 Tuy nhiên đốivới lệnh rẽ nhánh bne thuộc dạng khung lệnh I nên trường funct đã không được sửdụng, do đó trường funct này đã được lược bỏ khỏi thiết kế

Ngày đăng: 21/01/2018, 20:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w