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 1THIẾT KẾ CPU RISC 32 BIT ĐƠN CHU
KỲ THỰC HIỆN LỆNH BNE
Trang 2MỤ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 33.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 4DANH 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 5HÌ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 6BẢ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 7DANH 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 8CHƯƠ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 91.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 10Bả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 11o 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 12Bảng 1-2: Tổng hợp một số phép toán thông dụng
Trang 131.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 15CHƯƠ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 162.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 17o Đườ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 18Hì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 192.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 222.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 24CHƯƠNG 3 THIẾT KẾ CPU MIPS 32-BIT ĐƠN CHU KỲ THỰC
HIỆN LỆNH BNE
Trang 25Mô 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 26Hì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 274 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 28Hình 3-4: Đường dữ liệu hoàn chỉnh thực hiện bne [4]
Trang 29Tó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ế