Thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC Thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC Thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
Trang 1THIẾT KẾ LÕI MỀM CHO BỘ XỬ LÝ
THEO KIẾN TRÚC RISC
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
LƯU THỊ THẢO
THIẾT KẾ LÕI MỀM CHO BỘ XỬ LÝ
THEO KIẾN TRÚC RISC
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của tôi dưới sự hướng dẫn của TS Nguyễn Kim Khánh
Các số liệu, kết quả nêu trong luận văn là trung thực và mọi trích dẫn trong báo cáo đều được ghi rõ nguồn gốc trong phần tài liệu tham khảo Nếu có sử dụng bất hợp pháp kết quả công trình nghiên cứu của người khác trong báo cáo tôi xin hoàn toàn chịu trách nhiệm
Tác giả
Lưu Thị Thảo
Trang 4LỜI CẢM ƠN
Lời đầu tiên tôi muốn bày tỏ lòng biết ơn sâu sắc và kính trọng của mình tới thầy giáo, TS Nguyễn Kim Khánh Trong quá trình tìm hiểu, nghiên cứu để hoàn thành luận văn, tôi gặp không ít khó khăn, nhưng những lúc như vậy, tôi luôn nhận được sự động viên, khích lệ của thầy Thầy đã giúp đỡ tôi rất nhiều trong quá trình nghiên cứu, hướng dẫn tận tình trong cách thức và phương pháp nghiên cứu khoa học cũng như hỗ trợ tôi trong việc tìm tài liệu
Để có được những kết quả trong luận văn này, tôi xin gửi lời cảm ơn sâu sắc đến Thầy, Cô Viện Công nghệ thông tin và Truyền thông, Trường Đại học Bách khoa Hà Nội đã tạo điều kiện cho tôi được học hỏi thông qua các môn học cũng như hoàn thành khóa học
Cuối cùng tôi xin bày tỏ lòng cảm ơn chân thành đến gia đình, người thân và bạn bè đồng nghiệp đã khích lệ và động viên tôi hoàn thành luận văn này.!
Tác giả
Trang 5MỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỤC LỤC 3
DANH MỤC THUẬT NGỮ 6
DANH MỤC BẢNG 7
DANH MỤC HÌNH 8
MỞ ĐẦU 10
1 Lý do chọn đề tài 10
2 Mục đích nghiên cứu 11
3 Đối tượng – Phạm vi nghiên cứu 11
4 Bố cục luận văn 11
5 Phương pháp nghiên cứu 12
CHƯƠNG 1: GIỚI THIỆU VỀ LÕI MỀM CỦA BỘ VI XỬ LÝ VÀ ĐỊNH HƯỚNG THỰC HIỆN CỦA LUẬN VĂN 13
1.1 Nhiệm vụ của đề tài 13
1.2 Định hướng giải quyết vấn đề 13
1.3 Cơ sở lý thuyết 14
1.3.1 Khái niệm chung về lõi mềm 14
1.3.2 Kiến trúc RISC 14
1.3.3 Sơ đồ khối của thiết kế RISC 27
1.4 Nội dung thực hiện và công cụ sử dụng 29
1.5 Kết chương 29
Trang 6CHƯƠNG 2: THIẾT KẾ CPU 8 BIT DỰA TRÊN KIẾN TRÚC RISC 30
2.1 Nhiệm vụ 30
2.2 Tổ chức bộ nhớ của CPU 30
2.3 Tập lệnh của CPU 31
2.3.1 Thiết kế tập lệnh 31
2.3.2 Định nghĩa tập lệnh 32
2.3.3 Tập lệnh của bộ xử lý RISC 8 bit 38
2.4 Chế độ địa chỉ của lệnh 41
2.4.1 Các lệnh địa chỉ đầy đủ 41
2.4.2 Các lệnh địa chỉ gián tiếp trong CPU 42
2.5 Tổng thể thiết kế 42
2.5.1 Mô hình thiết kế 42
2.5.2 Cách thức hoạt động 44
2.6 Cụ thể thiết kế các khối 44
2.6.1 Khối Program Counter (PC) 44
2.6.2 Khối RAM, ROM 46
2.6.3 Tập thanh ghi đa dụng (General Pupose Registers) 47
2.6.4 Thanh ghi cờ trạng thái (State Register) 49
2.6.5 Khối ALU 50
2.6.6 Đơn vị giải mã lệnh 54
2.6.7 Đơn vị điều khiển thực thi 54
2.7 Kết chương 56
CHƯƠNG 3: KẾT QUẢ THỰC THI 57
Trang 73.1 Khối Program Counter (PC) 57
3.2 Khối ROM 57
3.3 Khối RAM 58
3.4 Mô tả thanh ghi 58
3.5 Mô tả tập thanh ghi đa dụng (General Pupose Registers) 59
3.6 Mô tả thanh ghi IO 60
3.7 Mô tả thanh ghi cờ trạng thái (State Register) 60
3.8 Mô tả bộ MUX 61
3.9 Khối ALU 62
3.10 Đơn vị điều khiển thực thi 62
3.11 Đơn vị giải mã lệnh 63
3.12 Kết chương 64
CHƯƠNG 4: KẾT LUẬN 65
4.1 Đánh giá kết quả 65
4.2 Phạm vi ứng dụng 65
4.3 Hướng phát triển của đề tài 66
TÀI LIỆU THAM KHẢO 67
Trang 8DANH MỤC THUẬT NGỮ
ALU Arithmetic and Logic Unit Đơn vị số học và logic
CPU Central Processing Unit Bộ xử lý trung tâm
CISC Complex Instruction Set
Computer
Máy tính có tập lệnh lớn và phức
tạp
CU Control Unit Đơn vị điều khiển
FPGA Field Programmable Gate
Arrays
Loại mạch tổ hợp có thể lập trình được
GPR General Purpose Register Thanh ghi đa năng
PC Program Counter Bộ đếm chương trình
MCU Microprogrammed Control Unit Đơn vị điều khiển vi chương trình
RISC Reduce Instruction Set
Computer
Máy tính có tập lệnh rút gọn và đơn
giản VHDL Verilog Hardware Description
Language
Ngôn ngữ mô tả phần cứng
Trang 9DANH MỤC BẢNG
Bảng 1.1 Tóm tắt tập lệnh 22
Bảng 1.2 Các lệnh tương đương 24
Bảng 1.3 Tập mã lệnh 24
Bảng 2.1 Bảng xác định điều kiện tràn khi thực hiện X + Y 34
Bảng 2.2 Bảng xác định điều kiện tràn khi thực hiện X – Y 35
Bảng 2.3 Tập lệnh của bộ xử lý RISC 8 bit 40
Bảng 2.4 Các tín hiệu vào/ra của khối Program Count 46
Bảng 2.5 Các tín hiệu vào/ra của khối ROM 47
Bảng 2.6 Các tín hiệu vào/ra của khối RAM 47
Bảng 2.7 Các tín hiệu vào/ra của khối General Purpose Register 48
Bảng 2.8 Các tín hiệu vào/ra của khối State Register 50
Bảng 2.9 Nhóm lệnh cơ bản của ALU 51
Bảng 2.10 Tìm nạp toán hạng 52
Bảng 2.11 Các tín hiệu điều khiển 54
Trang 10DANH MỤC HÌNH
Hình 1.1 Quy trình thiết kế 13
Hình 1.2 Dạng lệnh trong kiểu định vị thanh ghi 17
Hình 1.3 Dạng lệnh trong kiểu định vị tức thì thanh ghi 18
Hình 1.4 Dạng lệnh thâm nhập bộ nhớ trong của một số kiến trúc RISC 18
Hình 1.5 Chu kỳ lệnh của RISC 25
Hình 1.6 Chu kỳ lệnh của MCU không sử dụng Pipeline 25
Hình 1.7 Chu kỳ lệnh sử dụng Pipeline 26
Hình 1.8 Hiện tượng nghẽn đường ống 26
Hình 1.9 Sơ đồ chân của RISC 27
Hình 1.10 Kiến trúc của RISC 27
Hình 2.1 Giao diện của bộ xử lý theo kiến trúc RISC 30
Hình 2.2 Định dạng lệnh cho mỗi loại 41
Hình 2.3 Các bước thực thi một lệnh 44
Hình 2.4 Sơ đồ khối của Program Counter 44
Hình 2.5 Program Counter Symbol 45
Hình 2.6 Program ROM Symbol 46
Hình 2.7 RAM Symbol 46
Hình 2.8 Tập thanh ghi đa dụng 47
Hình 2.9 Sơ đồ khối của thanh ghi trạng thái 49
Hình 2.10 State Register Symbol 49
Hình 2.11 ALU Symbol 51
Hình 2.12 Đơn vị tìm nạp toán hạng 52
Trang 11Hình 2.13 Sơ đồ trạng thái của đơn vị điều khiển thực thi 55
Hình 3.1 Kết quả thực thi khối PC 57
Hình 3.2 Kết quả thực thi khối ROM 57
Hình 3.3 Kết quả thực thi khối RAM 58
Hình 3.4 Kết quả thực thi mô tả thanh ghi 58
Hình 3.5 Kết quả thực thi mô tả thanh ghi đa dụng 59
Hình 3.6 Kết quả thực thi mô tả thanh ghi IO 60
Hình 3.7 Kết quả thực thi mô tả thanh ghi cờ trạng thái 60
Hình 3.8 Kết quả thực thi mô tả bộ MUX 61
Hình 3.9 Kết quả thực thi khối ALU 62
Hình 3.10 Kết quả thực thi mô tả đơn vị điều khiển thực thi 62
Hình 3.11a Kết quả thực thi mô tả tín hiệu điều khiển giải mã ALU 63
Hình 3.11b Kết quả thực thi mô tả tín hiệu điều khiển giải mã thanh ghi đa dụng 63 Hình 3.11c Kết quả thực thi mô tả tín hiệu điều khiển giải mã State Register 64
Trang 12MỞ ĐẦU
1 LÝ DO CHỌN ĐỀ TÀI
Cùng với sự phát triển của xã hội, lĩnh vực Công nghệ thông tin và Truyền thông đã vươn lên chiếm vị thế ngày càng cao trong tất cả các lĩnh vực kinh tế, xã hội, cũng như trong đời sống Công nghệ thông tin bây giờ không chỉ được hiểu trong chiếc máy tính mà nó còn đi sâu vào các mặt đời sống xã hội, thông qua các
hệ nhúng, Một thành phần quan trọng của máy tính là bộ xử lý trung tâm (CPU)
Có rất nhiều công sức được đầu tư vào việc chế tạo các CPU nhằm tạo ra các máy tính đáp ứng yêu cầu ngày càng cao của xã hội Với sự phát triển nhanh chóng của công nghệ silicon và chi phí giảm của mạch tích hợp, bộ xử lý RISC đang gia tăng
sử dụng rộng rãi trong mọi lĩnh vực RISC (Reduced Instruction Set Computer) là một phần mở rộng của các nguyên tắc kiến trúc máy tính với tập lệnh đơn giản hóa Thiết kế đơn giản cung cấp hiệu năng vượt trội là lý tưởng để sử dụng Một số ứng dụng điển hình bao gồm: xử lý dữ liệu thương mại, các ứng dụng tính toán chuyên sâu khoa học và kỹ thuật, và kiểm soát thời gian thực
Để thiết kế một CPU với đầy đủ chức năng cần một công cụ đủ mạnh Từ đó dẫn đến sự ra đời của các ngôn ngữ mô tả phần cứng như VHDL,Verilog Ngôn ngữ mô tả phần cứng (VHDL) sẽ được sử dụng trong luận văn này Từ ngôn ngữ VHDL các nhà thiết kế phần cứng có thể thiết kế ra những thiết bị phần cứng như CPU, bộ vi điều khiển… một cách nhanh chóng và cũng có thể thực hiện mô phỏng
và kiểm tra khả năng hoạt động của thiết bị trước khi đưa vào sản xuất, nhờ vậy có thể giảm bớt thời gian, chi phí sản xuất
Luận văn đã được viết với mục đích nhằm nghiên cứu về thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC, phục vụ cho nhu cầu nghiên cứu các lĩnh vực chuyên sâu về thiết bị phần cứng sau này
Xuất phát từ những lợi ích thực tế mà bộ xử lý có thể mang lại và niềm hy
vọng của bản thân, tác giả đã mạnh dạn chọn đề tài “Thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC” làm đề tài nghiên cứu cho luận văn tốt nghiệp của mình
Trang 13- Thiết kế tập lệnh của bộ xử lý RISC 8 bit bằng ngôn ngữ VHDL
- Mô phỏng và đánh giá kết quả trên phần mềm Max + Plus II
3 ĐỐI TƯỢNG – PHẠM VI NGHIÊN CỨU
Thiết kế được xây dựng với mục đích tạo ra bộ xử lý đơn giản dựa trên kiến trúc RISC, phục vụ cho nhu cầu nghiên cứu các lĩnh vực chuyên sâu về thiết bị phần cứng
4 BỐ CỤC LUẬN VĂN
Luận văn được chia làm 4 chương với nội dung cụ thể như sau:
Chương 1: Giới thiệu về lõi mềm của bộ vi xử lý và định hướng thực hiện của luận văn
Chương này phân tích về nhiệm vụ của luận văn, định hướng giải quyết vấn
đề đặt ra, và tìm hiểu lý thuyết liên quan sẽ sử dụng
Chương 2: Thiết kế CPU 8 bit dựa trên kiến trúc RISC
Chương này trình bày tổ chức bộ nhớ CPU, tập lệnh của CPU và mô hình thiết kế cụ thể từng khối của bộ xử lý theo kiến trúc RISC 8 bit
Chương 3: Kết quả thực thi
Chương này trình bày kết quả thực thi của từng khối, mô phỏng bằng phần mềm Max + Plus II (dùng ngôn ngữ VHDL)
Chương 4: Kết luận
Trang 14Chương này trình bày tóm tắt kết quả đạt được và hướng phát triển tiếp theo của luận văn
5 PHƯƠNG PHÁP NGHIÊN CỨU
Trang 15CHƯƠNG 1: GIỚI THIỆU VỀ LÕI MỀM CỦA BỘ VI XỬ LÝ
VÀ ĐỊNH HƯỚNG THỰC HIỆN CỦA LUẬN VĂN
Tên đề tài: Thiết kế lõi mềm cho bộ xử lý theo kiến trúc RISC
Đề tài bao gồm các nội dung cần phải thực hiện:
- Nghiên cứu kiến trúc RISC
- Thiết kế tập lệnh bằng ngôn ngữ VHDL
- Thử nghiệm và đánh giá
1.2 ĐỊNH HƯỚNG GIẢI QUYẾT VẤN ĐỀ
Quy trình thiết kế mà luận văn dựa vào để thực hiện:
Phân tích yêu cầu đề tài Chuẩn bị cơ sở lý thuyết Thiết kế mô hình tổng thể Thiết kế chi tiết trên lý thuyết Thiết kế bằng ngôn ngữ VHDL
Mô phỏng trên phần mềm Cài đặt trên kit thật
Đánh giá kết quả đạt được
Hình 1.1 Quy trình thiết kế
Trang 16Trong luận văn sẽ thực hiện hầu hết các vấn đề trong quy trình trên, bao gồm:
1 Nghiên cứu kiến trúc RISC: Tìm hiểu kiến trúc RISC và tập lệnh của nó
2 Thiết kế tập lệnh bằng ngôn ngữ VHDL: Sử dụng ngôn ngữ VHDL để thiết kế lõi mềm cho bộ xử lý dựa vào kiến thức đã tìm hiểu được về kiến trúc RISC
3 Dựa vào thiết kế, mô phỏng và đánh giá kết quả đạt được
Lõi mềm (Soft – Core processor) là một dạng của xu hướng thiết kế kiến trúc máy tính thông thường, được biết như máy tính có thể cấu hình lại Nó là mô hình ngôn ngữ mô tả phần cứng (Hardware Description Language - HDL) của bộ vi xử
lý có thể được tối ưu để dùng trong các ứng dụng và được tổng hợp cho đối tượng FPGA hoặc ASIC
Trong nhiều ứng dụng, lõi mềm cung cấp một số lợi ích hơn việc đặt mua các bộ xử lý đã được thiết kế sẵn như giảm giá thành sản phẩm, linh hoạt, không
phụ thuộc vào nền tảng sẵn có, hạn chế tối đa sự hao mòn
Ngày nay, lõi mềm và FPGA được sử dụng nhiều trong các ứng dụng nhúng
RISC (Reduce Intruction Set Computer - Máy tính với tập lệnh đơn giản hóa)
là một phương pháp thiết kế các VXL theo hướng đơn giản hóa tập lệnh, trong đó thời gian thực thi tất cả các lệnh đều như nhau
VXL RISC được biết đến đầu tiên là siêu máy tính CDC 6600 được Jim Thornton và Seymour Cray thiết kế năm 1964, nó có 74 mã lệnh cộng với 12 máy tính đơn giản được gọi là “bộ xử lý ngoại vi” để xử lý I/O CDC 6600 sử dụng kiến
Trang 17trúc Load/Store, nó hỗ trợ 2 phương pháp đánh địa chỉ, có 11 đơn vị được Pipeline,
5 đơn vị đọc dữ liệu và 2 đơn vị để lưu dữ liệu (bộ nhớ của nó được tổ chức theo băng do đó các đơn vị đọc ghi có thể hoạt động đồng thời) Tốc độ xung đồng hồ/lệnh nhanh hơn 10 lần so với tốc độ truy xuất bộ nhớ
Một máy tính khác được thiết kế với kiến trúc Load/Store là Data General Nova Đây là một máy tính nhỏ 16 bit được thiết kế năm 1968 bởi một công ty Mỹ tên là Data General
Tuy nhiên VXL RISC được biết đến nhiều nhất là dự án được tài trợ bởi chương trình VLSI (Very Large - ScaleIntegration) của DARPA (Defense Advanced Research Projects Agency) Chương trình này đã cho ra đời rất nhiều cải tiến liên quan đến thiết kế, sản xuất chip và cả đồ họa máy tính
Dự án RISC cho ra đời VXL RISC - I năm 1982 VXL này chứa 44.420 transistor, với 32 lệnh nhưng hoàn toàn vượt xa các VXL đơn chip cùng thời VXL RISC - II ra đời năm 1983 với 39 lệnh, chứa 40.760 transistor và nhanh gấp 3 lần RISC - I
Cũng khoảng thời gian đó Jonh L.Hennessy thực hiện dự án MIPS ở đại học Stanford năm 1981 MIPS hầu như chỉ tập trung vào kỹ thuật Pipeline nhằm tận dụng tối đa khả năng của các VXL Cho dù đã được sử dụng trước đó, nhưng với MIPS, kỹ thuật này đã thực sự được cải tiến vượt bậc Nhưng vấn đề quan trọng nhất ở đây, và có lẽ cũng phiền toái nhất, là nó đòi hỏi tất cả các lệnh bắt buộc phải được thực thi trong 1 chu kỳ máy Nếu đáp ứng được yêu cầu này, Pipeline có thể hoạt động ở tốc độ rất cao và đây cũng là yếu tố quyết định đến tốc độ của VXL Tuy nhiên nó cũng có mặt trái là phải bỏ đi rất nhiều lệnh có ích như nhân, chia
Hầu hết các dự án trên đều nhằm mục đích cải tiến các kỹ thuật hiện có, phải chờ đến năm 1975, dự án đầu tiên nhằm cho ra đời 1 chip RISC hoàn chỉnh được thực hiện bởi IBM Được đặt tên theo số của ngôi nhà nơi dự án được thực hiện, dự
án này đã cho ra đời họ VXL IBM 801 được sử dụng rộng rãi trong các phần cứng
của IBM
Trang 18Đến năm 1986, tất cả các dự án dựa trên kiến trúc RISC bắt đầu cho ra đời sản phẩm Ngày nay, hầu hết các chip RISC, đều được thiết kế dựa trên kiến trúc RISC - II của Berkeley
Các hệ thống phổ biến ngày nay sử dụng cấu trúc RISC:
- Họ MIPS, trong các máy tính SGI, PlayStation và Nintendo 64 game consoles
- Họ POWER trong các SuperComputers/mainframes của IBM
- Freescale (trước đây là Motorola SPS) và IBM’s PowerPC trong Nintendo Gamecube, Microsoft Xbox 360, Nintendo Wii and Sony PlayStation 3 game consoles, và cho tới gần đây là Apple Macintosh
- SPARC và UltraSPARC, trong tất cả các hệ thống của Sun
- Hewlett – Packard PA – RISC
- DEC Alpha
- ARM – Palm, Inc Ban đầu sử dụng Motorola 680 x 0 (CISC) trong những PDA đầu tiên, nhưng hiện tại là ARM (RISC); Nintendo sử dụng 1 chip ARM7 trong Game Boy Advance và Nintendo DS Nhiều nhà sản xuất điện thoại di động, như Nokia cũng dựa trên kiến trúc của ARM Trải qua một thời gian dài tập lệnh của RISC ngày càng tăng, vì thế nhiều người bắt đầu sử dụng thuật ngữ “Load/Store” để mô tả RISC CPU, vì đây là mấu chốt của kiến trúc RISC Thay vì CPU xử lý nhiều phương pháp đánh địa chỉ, kiến trúc Load/Store sử dụng những đơn vị chuyên biệt để thực hiện những dạng rất đơn giản các quá trình Load và Store
1.3.2.2 ĐẶC TÍNH CƠ BẢN CỦA KIẾN TRÚC RISC
- Chu kỳ lệnh được chia thành 2 chu kỳ: Tìm nạp lệnh và thực thi lệnh
- Lệnh được thực thi trong 1 chu kỳ xung clock
- Lệnh có chiều dài cố định (16 bit hay 32 bit), và có định dạng dễ giải mã
Trang 19- Tập lệnh có số lượng lệnh ít
- Ít chế độ định địa chỉ
- Hạn chế lệnh truy xuất bộ nhớ, chỉ truy xuất thông qua con trỏ dữ liệu
- Tất cả các lệnh được thực hiện thông qua các thanh ghi của CPU
- Thường sử dụng mạch logic để điều khiển thực thi lệnh hơn là sử dụng vi chương trình (Microprogram) như CISC
- Số lượng thanh ghi đa năng khá nhiều (ít nhất là 32 Register)
- Đều được thiết kế kiểu Pipeline lệnh
Trong bộ xử lý RISC, các lệnh số học và logic chỉ được thực hiện theo kiểu thanh ghi và tức thì, còn những lệnh đọc và ghi vào bộ nhớ là những lệnh có toán hạng bộ nhớ thì được thực hiện với những kiểu định vị khác
Đây là kiểu định vị thường dùng cho các bộ xử lý RISC, các toán hạng nguồn và kết quả đều nằm trong thanh ghi mà số thứ tự được nêu ra trong lệnh Hình 1.2 là ví dụ về kiểu thanh ghi và dạng các lệnh tương ứng trong một số kiến trúc RISC
Hình 1.2 Dạng lệnh trong kiểu định vị thanh ghi
Trang 20Hình 1.4 Dạng lệnh thâm nhập bộ nhớ trong của một số kiến trúc RISC
Trang 214 Kiểu định vị gián tiếp bằng thanh ghi + độ dời
Đây là kiểu đặc thù cho các kiến trúc RISC Địa chỉ toán hạng được tính như sau: Địa chỉ toán hạng = Thanh ghi (địa chỉ ) + độ dời
Kiểu định vị trực tiếp chỉ là một trường hợp đặc biệt của kiểu này khi thanh ghi (địa chỉ) = 0 Trong các bộ xử lý RISC, một thanh ghi (R0 hoặc R31) được mắc
vào điện thế thấp (tức là 0) và ta có định vị trực tiếp khi dùng thanh ghi đó như là thanh ghi địa chỉ
Một vài bộ xử lý RISC, ví dụ bộ xử lý PowerPC, dùng kiểu định vị này
Thiết kế dựa trên tập lệnh của Atmel AVR AT90S1200 Bằng cách này, thiết
kế có thể sử dụng các công cụ assempler, simulater do Atmel cung cấp Tập lệnh được chia thành 4 nhóm lệnh: (xem bảng 1.1)
- Nhóm lệnh số học và logic: Gồm các lệnh tính toán số học và logic
- Nhóm lệnh rẽ nhánh: Gồm các lệnh nhảy không điều kiện, nhảy có điều
kiện theo các cờ trạng thái, lệnh gọi hàm và Return
- Nhóm lệnh truyền dữ liệu: Gồm các lệnh di chuyển dữ liệu giữa các
thanh ghi, ô nhớ RAM và Port IO bên ngoài
- Nhóm lệnh về bit: Gồm các lệnh bit như xóa, đặt bit, lệnh dịch xoay
ARITHMETIC AND LOGIC INSTRUCTIONS
ADC Add with Carry Two Registers S,Z,C,N,V,H SUB Subtract Two Registers S,Z,C,N,V,H
Trang 22SUBI Subtract Constant from Register S,Z,C,N,V,H SBC Subtract with Carry Two Registers S,Z,C,N,V,H SBCI Subtract with Carry Constant from Register S,Z,C,N,V,H
ANDI Logical AND Register and Constant S,Z,N,V
ORI Logical OR Register and Constant S,Z,N,V
COM One’s Complement Register S,C,Z,N,V NEG Negate (2’s Complement) Register S,C,Z,N,V,H
CBR Clear Bit(s) in Register S,Z,N,V
RCALL Relative Subroutine Call None
CPC Compare with Carry (Rd – Rr - C) S,C,Z,N,V,H CPI Compare Register with Immediate (Rd - K) S,C,Z,N,V,H BRBS Branch if Status Flag Set None
BRBC Branch if Status Flag Cleared None
BREQ Branch if Equal (Z = 1) None
BRNE Branch if Not Equal (Z = 0) None
Trang 23BRCS Branch if Carry Set (C = 1) None BRCC Branch if Carry Cleared (C = 0) None BRSH Branch if Same or Higher (C = 0) None BRLO Branch if Lower (C = 1) None BRMI Branch if Minus (N = 1) None
BRGE Branch if Greater of Equal, Signed (S = 1) None BRLT Branch if Less than Zero, Signed (S = 0) None BRHS Branch if Half Carry Set (H = 1) None BRHC Branch if Half Carry Cleared (H = 0) None BRVS Branch if Overflow Flag is Set (V = 1) None BRVC Branch if Overflow Flag is Cleared (V = 0) None
DATA TRANSFER INSTRUCTIONS
LDI Load Immediate to Register None
LD Z Load Indirect with Z-Pointer None
LD Z+ Load Indirect and Post-Increment with Z-Pointer None
LD –Z Load Indirect and Pre-Decrement with Z-Pointer None
ST Z Store Indirect with Z-Pointer None
ST Z+ Store Indirect and Post-Increment with Z-Pointer None
ST –Z Store Indirect and Pre-Decrement with Z-Pointer None
BIT INSTRUCTIONS
CBI Clear Bit in I/O Register None
Trang 24ROL Rotate Left through Carry S,C,Z,N,V ROR Rotate Right through Carry S,C,Z,N,V ASR Arithmetic Shift Right S,C,Z,N,V
SEV Set Two’s Complement Overflow V
CLV Clear Two’s Complement Overflow V
SHE Set Half-carry Flag in SREG H
CLH Clear Half-carry Flag in SREG H
Bảng 1.1 Tóm tắt tập lệnh
Theo thiết kế thì RISC có 6 chế độ định địa chỉ RA, RB được xem như là toán hạng đích và toán hạng nguồn
Lệnh có một toán hạng là RA: vừa là thanh ghi nguồn vừa là thanh ghi đích
Ví dụ như lệnh: dịch, xoay, set bit
Trang 25Lệnh có hai toán hạng là RA và RB Sau khi tính toán kết quả được ghi vào RA.Ví dụ như lệnh toán học và logic…
Toán hạng là I/O register Địa chỉ được chứa trong 6 bit trong từ lệnh Cách định địa chỉ này được sử dụng trong lệnh IN và OUT
Toán hạng là ô nhớ RAM có địa chỉ chứa trong thanh ghi Z Cách định địa chỉ được sử dụng trong lệnh LD và ST
Cách định địa chỉ này được sử dụng trong lệnh RJMP, RCALL Địa chỉ lệnh
kế được tính bằng PC + Offset Offset được chứa trong từ lệnh
Toán hạng là hằng số 8 bit được cho trong từ lệnh
Lệnh của RISC có chiều dài cố định và dễ giải mã Trong thiết kế này, lệnh
có chiều dài là 16 bit
4 Mã máy
Trong tập lệnh có thể ghép các lệnh tương đương để có thể sử dụng chung
mã máy Chính vì vậy mà tập mã máy sẽ được rút gọn hơn giúp cho việc giải mã đơn giản hơn Bảng 1.2 chỉ ra các lệnh tương đương sử dụng chung mã máy và bảng 1.3 là bảng tập mã máy
Trang 26Bảng 1.2 Các lệnh tương đương
Bảng 1.3 Tập mã lệnh
Trang 271.3.2.5 PIPELINE PROCESSING
Trong kiến trúc của RISC chu kỳ lệnh được chia thành 2 chu kỳ nhỏ: Chu kỳ tìm nạp lệnh (Fetch) và chu kỳ thực thi lệnh (Execute) được thể hiện ở hình 1.5
Hình 1.5 Chu kỳ lệnh của RISC
Trong chu kỳ tìm nạp lệnh, mã máy của 1 lệnh được nạp vào thanh ghi lệnh,
PC bắt đầu nạp lệnh mới Tại chu kỳ thực thi lệnh đơn vị điều khiển sẽ giải mã để biết lệnh cần thực hiện và toán hạng cần tác động, tính toán kết quả, chốt kết quả, và ghi lại kết quả tại pha cuối cùng của chu kỳ thực thi lệnh
Chu kỳ lệnh của RISC sẽ được chia thành 2 chu kỳ Fetch và Execute Nếu 2 chu kỳ này hoạt động nối tiếp nhau, chu kỳ đầu tìm nạp lệnh chu kỳ 2 thực thi lệnh như hình 1.6, thì 1 chu kỳ lệnh sẽ phải mất 2 chu kỳ xung Clock
Hình 1.6 Chu kỳ lệnh của MCU không sử dụng PipeLine
Ý tưởng của việc sử dụng đường ống ở đây là cho 2 chu kỳ Fetch và Execute cùng hoạt động song song, có nghĩa là trong 1 chu kỳ xung Clock MCU sẽ tìm nạp lệnh mới và thực thi lệnh cũ xem hình 1.7, vì vậy để thực hiện một chu kỳ lệnh chỉ tốn 1 xung clock, do đó RISC sẽ hoạt động nhanh hơn
Trang 28Hình 1.7 Chu kỳ lệnh sử dụng Pipeline
Tại chu kỳ Reset = 0 lệnh 0 được tìm nạp, sau đó tại chu kỳ 1 lệnh 0 sẽ được thực hiện đồng thời PC sẽ tìm nạp lệnh 1 Và tại chu kỳ 2, lệnh 1 sẽ được thực thi, đồng thời PC sẽ tìm nạp lệnh 2 cứ như thế MCU sẽ tìm nạp và thực thi chương trình song song với nhau, PC sẽ trỏ đến lệnh đang được tìm nạp và sẽ được thực thi
ở chu kỳ kế
Khi gặp lệnh rẽ nhánh đường ống sẽ bị nghẽn Vì trong khi lệnh rẽ nhánh được thực thi thì lệnh kế đó đã được đưa vào đường ống, nhưng trong trường hợp lệnh rẽ nhánh nhảy đến thực thi 1 lệnh khác với lệnh đã nạp trong đường ống thì hiện tượng nghẽn đường ống sẽ xảy ra xem hình 1.8
Hình 1.8 Hiện tượng nghẽn đường ống
Để giải quyết việc nghẽn đường ống thì: Vì đường ống chỉ có 2 đơn vị hoạt động song song Khi lệnh kế tiếp thực thi đang vào đường ống thì lệnh rẽ nhánh cũng đang thực thi, nếu lệnh rẽ nhánh có yêu cầu rẽ nhánh thì PC sẽ phải nạp giá trị mới và tìm nạp lệnh tại điểm nhảy đến thay vì nạp lệnh kế để đưa vào đường ống Như vậy việc nghẽn đường ống đã được khắc phục
Trang 291.3.3 S Ơ ĐỒ KHỐI CỦA THIẾT KẾ RISC
Hình 1.9 Sơ đồ chân của RISC
Có 3 port I/O Port B, Port C, Port D mỗi port có độ rộng 8 bit (3 port = 24 pins), và có 2 chân Input là Clock và Reset (tích cực thấp) Mỗi Port có 8 bit (theo thiết kế Port này chỉ là Port xuất)
Hình 1.10 Kiến trúc của RISC
Kiến trúc của RISC được chia thành 2 đơn vị:
- Đơn vị giải mã và điều khiển lệnh (Control Unit): Gồm có các Modul giải
mã lệnh và Modul điều khiển
Trang 30- Đơn vị đường dữ liệu: Gồm có Program Couter, thanh ghi lệnh, ALU, RAM,
Status Register, General Purpose Register, Data Mux, I/O
1.3.3.3 ĐẶC ĐIỂM TỪNG KHỐI TRONG KIẾN TRÚC RISC
1 PC (Program Counter)
Program Counter chứa địa chỉ lệnh thực thi, nó gửi địa chỉ lệnh đến ROM chương trình
2 Program ROM (Read Only Memory)
Chương trình ROM nhận lệnh từ PC và chốt vào thanh ghi lệnh (IR)
3 Instruction Register (IR)
Thanh ghi lệnh (IR) nhận lệnh từ ROM sau đó chuyển lệnh đến đơn vị điều khiển
4 Control Unit (CU)
Đơn vị điều khiển (CU) nhận lệnh từ IR để giải mã, sau khi giải mã xong thì điều khiển các tín hiệu đồng bộ để thực thi lệnh
5 General Purpose Register
Do RISC hạn chế về truy xuất ô nhớ, nên RISC không có các lệnh truy xuất trực tiếp từ ô nhớ của RAM chỉ có lệnh LD và ST dùng truy xuất gián tiếp thông qua con trỏ Z là thanh ghi đa dụng
Tập thanh ghi đa dụng chứa 16 thanh ghi, cung cấp đồng thời 2 toán hạng thanh ghi cho ALU, và địa chỉ là nội dung thanh ghi Z trỏ tới ô nhớ RAM
6 ALU (Arithmetic and Logic Unit)
ALU có nhiệm vụ thực thi các phép tính trên 2 toán hạng
7 DATA MUX
Data Mux dùng để chọn dữ liệu để ghi vào tập thanh ghi đa dụng hoặc làm toán hạng cho ALU
Trang 318 Khối I/O
Modul I/O gồm 3 thanh ghi mà các bit được đưa ra ngoài ở chânngõ ra Các thanh ghi I/O có thể được đọc và ghi thông qua các bus dữ liệu
9 RAM (Random Access Memory)
RISC có 2 đơn vị: tìm nạp lệnh và thực thi lệnh hoạt động song song nên đòi hỏi phải có bộ nhớ chương trình và bộ nhớ dữ liệu riêng biệt Vì vậy bộ nhớ chương trình sẽ được lưu trong ROM và bộ nhớ dữ liệu được cất trong RAM RAM sẽ được khởi động với giá trị là 00H
Thiết kế đường dữ liệu (Datapath) và đơn vị điều khiển (Control Unit) theo kiến trúc RISC 8 bit Microcontroller
Phần thiết kế bằng ngôn ngữ VHDL và mô phỏng được thực hiện trên môi trường Max + Plus II của hãng Altera
Luận văn đã tiến hành nghiên cứu về kiến trúc của RISC, bao gồm những nội dung chính sau:
- Tìm hiểu tổng thể kiến trúc RISC
- Nghiên cứu chi tiết kiến trúc RISC
- Nghiên cứu cụ thể chức năng và cách thức hoạt động của các khối trong kiến trúc RISC
- Tìm hiểu tập lệnh của kiến trúc RISC từ đó phân tích đặc điểm chung và riêng của chúng để hình thành quy tắc giải mã lệnh
- Bên cạnh đó là các lý thuyết về thiết kế lõi mềm,
Trang 32CHƯƠNG 2: THIẾT KẾ CPU 8 BIT DỰA TRÊN
KIẾN TRÚC RISC 2.1 NHIỆM VỤ
Thiết kế bộ xử lý bao gồm tập lệnh RISC và sử dụng Single Instruction – Single Data (SISD) thực hiện lệnh Đặc điểm chính của nó là:
- Thanh ghi đa dụng 8 bit
- Độ rộng ROM 16 bit bộ nhớ cấp phát 256
- Độ rộng RAM 16 bit bộ nhớ cấp phát 256
- ALU với thao tác số học và logic cơ bản
Hình 2.1 Giao diện của bộ xử lý theo kiến trúc RISC
2.2 TỔ CHỨC BỘ NHỚ CỦA CPU [9]
CPU có khả năng định vị địa chỉ 4096 byte nhớ thông qua bus địa chỉ 12 bit
Bộ nhớ này phân chia thành 16 trang mỗi trang là 256 byte, trang đầu tiên nằm trong CPU, 4 bit có trọng số cao nhất của tuyến địa chỉ thiết lập địa chỉ trang (Page), 8 bit có trọng số thấp nhất của nó chỉ độ dời (Offset) Bộ nhớ được phân thành 16 trang (Page 0 Page15)
Trang 332.3 TẬP LỆNH CỦA CPU
2.3.1 THIẾT KẾ TẬP LỆNH [4]
Phân loại các lệnh sử dụng trong bộ xử lý:
Thao tác số học: Các phép tính số học cơ bản là nền tảng cho hoạt động của
bộ vi xử lý Các phép tính số học nhị phân dùng như đầu vào giá trị của hai toán hạng và kết quả là một giá trị đầu ra duy nhất Ngoài ra, trừ, nhân, và chia là tất cả các thao tác nhị phân Thao tác số học, có một toán hạng đầu vào duy nhất và tạo ra một kết quả duy nhất Phủ định số học giống như trừ đi một giá trị từ con số không,
là một hoạt động nguyên phân thường được triển khai thực hiện trong các bộ vi xử
lý Các thao khác bao gồm các hàm ví dụ như sin, cos, và logarit
Thao tác logical: Các phép tính logic thao tác trên các bit riêng lẻ giá trị được biểu diễn như là các số nhị phân Các phép tính logic nhị phân, yêu cầu hai toán hạng đầu vào, bao gồm AND, OR, và loại trừ OR (XOR) Thao tác logic bổ sung bit - by - bit, NOT, là một ví dụ về một thao tác logic đơn nguyên
Thao tác điều khiển: Người lập trình cho rằng, các lệnh trong một chương
trình sẽ được thực hiện theo thứ tự mà chúng xuất hiện trong mã nguồn Chúng được thực hiện theo một thứ tự tuần tự đơn giản Tuy nhiên, sức mạnh thực sự của một hệ thống máy tính dựa trên khả năng so sánh giá trị và đưa ra quyết định dựa trên sự so sánh này Quyết định lựa chọn 1 trong 2 khả năng sau: 1) Thực hiện lệnh tiếp theo trong chuỗi nếu kết quả so sánh là False, hoặc 2) Rẽ nhánh đến một lệnh
đã xác định ở một nơi khác trong chương trình nếu kết quả so sánh là True Loại thao tác này được gọi là rẽ nhánh có điều kiện Thao tác điều khiển khác bao gồm một rẽ nhánh không điều kiện, trong đó quyết định nhị phân luôn luôn cho kết quả
là True, và thao tác nhảy (Jump) tương tự, trong đó trình tự thực hiện luôn luôn chuyển đến các lệnh mục tiêu được chỉ định
Thao tác truyền dữ liệu: Các thao tác truyền dữ liệu được sử dụng để di
chuyển các giá trị từ một vị trí lưu trữ này đến vị trí lưu trữ khác mà không thay đổi giá trị trong mã nguồn lưu trữ ban đầu Thao tác truyền dữ liệu được sử dụng để di
Trang 34chuyển giá trị giữa các thanh ghi hoặc để đọc các giá trị, hoặc viết các giá trị từ bộ nhớ Thao tác truyền dữ liệu thực sự là sao chép một giá trị từ một vị trí lưu trữ này đến vị trí lưu trữ khác thay vì di chuyển vật lý giá trị
Mỗi lệnh phải được đặc tả thao tác của chính nó, các toán hạng được thao tác
và lệnh tiếp theo được thực thi Chúng ta sẽ giả định rằng có một máy tính ngầm xác định lệnh tiếp theo được thực hiện Trong đặc tả các toán hạng, chúng ta có thể chỉ định cụ thể hoặc ngầm định Nếu chúng ta chỉ định mỗi toán hạng một cách cụ thể, mỗi thao tác nhị phân sẽ cần ba trường, hai trường để xác định các toán hạng đầu vào và một trường xác định toán hạng đích Chúng ta có thể làm giảm số lượng các trường của toán hạng cần thiết trong mỗi lệnh Số lượng các toán hạng được chỉ định cụ thể dẫn đến các tùy chọn sau đây:
Three - address machine: Một máy ba địa chỉ rõ ràng xác định cả hai đầu vào toán hạng và đích cho các giá trị đầu ra trong mỗi lệnh số học Ví dụ, trong ngôn ngữ assembly định dạng phép cộng add r1, r2, r3 để xác định tổng của thanh ghi r2 và r3 kết quả được lưu trong thanh ghi r1 (Nó giống như r1 = r3 + r2)
Two - address machine: Trong một máy hai địa chỉ này, chỉ có hai toán hạng nguồn được quy định một cách cụ thể Các toán hạng đích mặc nhiên giả định giống như trong các toán hạng nguồn Ví dụ, add r2, r3 tức là tính tổng của r2 và r3 và kết quả lưu vào r2 Cách tiếp cận này làm giảm số lượng bit cần thiết trong lệnh để xác định toán hạng Tuy nhiên, mức giảm này đi kèm với sự phức tạp hơn trong việc xác định các toán hạng trong ngôn ngữ assembly