Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
679,72 KB
Nội dung
BÀI TẬP LỚN Môn: Kiến trúc máy tính *** Yêu cầu: 1. Tìm hiểu kiến trúc MIPS - Mô hình lập trình: Tập thanh ghi, không gian địa chỉ. - Các kiểu dữ liệu - Tập lệnh - Quản lý bộ nhớ - PiPeline 2. Tìm hiểu phần mềm mô phỏng MipsIt hoặc PCSim 3. Lập trình hợp ngữ cho MIPS 1. Giới thiệu. RICS- Reduced Instruction Set Computer, là một dạng của kiến trúc vi xử lý, là một phương pháp thiết kế các bộ vi xử lý theo hướng đơn giản hóa tập lệnh, trong đó thời gian thực thi tất cả các tập lệnh đều như nhau. Đầu tiên, các dự án về RICS được bắt đầu từ IBM, Stanford và UC Berkeley vào cuối những năm 70 đầu những năm 80. Hiện nay, các bọ vi xử lý phổ biến là ARM, SuperH, MIPS, SPARC, DEC Alpha, PA-RICS, PIC và PowerPC của IBM. MIPS- Microprocessor without Interlocked Pipeline Stages, là một kiến trúc xử lý kiểu RICS được phát triển bởi công ty MIPS technologies. Các bộ xử lý MIPS được phát triển như là một phần của chương trình nghiên cứu VLSI ở trường đại học Stanford đầu những năm 80.Nhóm nghiên cứu Stanford có một nền tảng mạnh mẽ trong biên dịch đã đưa họ đến sự phát triển một bộ xử lý, cái mà giảm bớt sự có mặt của trình biên dịch ở cấp phần cứng, trái ngược với sự tăng lên của phần cứng với phần mềm,nó là một bước tiến dài trong triết lý thiết kế phần cứng. Năm 1984, Hennessy rời khỏi trường Stanford để xây dựng hệ thống máy tính MIPS sau khi nhận ra nhu cầu thương mại tương lai của thiết kế. Phiên bản MIPS R2000 đầu tiên ra đời năm 1985, sau đó là phiên bản MIPS R3000 năm 1988. Kiến trúc tập lệnh MIPS (ISA) được phát triển từ kiến trúc tập lệnh MISO I đến kiến trúc tập lệnh MIPS V. Vào cuối những năm 1990, kiến trúc MIPS đã được thiết kế xung quanh hai kiến trúc cơ bản sau: • MIPS32 cho kiến trúc 32-bit. Kiến trúc MIPS-32bit dựa vào tập lệnh MIPS II ISA với một vài lệnh được thêm vào từ tập lệnh MIPS III đến tập lệnh MIPS V ISA. • MIPS64 cho kiến trúc 64-bit , kiến trúc MIPS-64bit thì dựa vào tập lệnh của MIPS V ISA. Ngày này, kiến trúc MIPS được sử dụng rộng dãi trong các hệ thống nhúng như Series2 TiVo, các thiết bị Window CE, các bộ định tuyến Cisco, các thiết bị chơi game như Nitendo 64, Sony PlayStation MIPS được thiết kế một bộ tập lệnh đơn giản dễ hiểu nên việc nghiên cứu kiến trúc MIPS rất hữu ích cho việc nghiên cứu về kiến trúc máy tính. 2. Tìm hiểu về MIPS. Kiến trúc MIPS là kiến trúc các thanh ghi. Tất cả các phép toán số học và logic đều chỉ xoay quanh thanh ghi(hay các hằng số được lưu trữ như là một thành phần của lệnh). Kiến trúc MIPS cũng bao gồm một số các câu lệnh đơn giản dùng để đọc dữ liệu từ bộ nhớ vào thanh ghi và ghi dữ liệu từ thanh ghi sang bộ nhớ. Vì vậy kiến trúc MIPS được gọi là kiến trúc nap/lưu trữ,trong kiến trúc nạp/lưu trữ chỉ có những câu lệnh có thể truy cập vào bộ nhớ là các câi lệnh nạp/lưu trữ còn các câu lệnh khác chỉ có thể truy cập tới thanh ghi. 2.1. Các thành phần cơ bản của kiến trúc MIPS. Kiến trúc MIPS bao gồm các thành phần sau: • MIPS instruction set architecture(ISA)-Kiến trúc tập lệnh MIPS: Nó định nghĩa một tập các câu lệnh 32bit và 64 bit để đảm bảo tương thích với mọi bộ xử lý áp dụng kiến trúc MIPS. Tập lệnh MIPS bao gồm tổng cộng 111 câu lệnh ở hệ 32 bit, ví dụ như một câu lệnh MIPS dưới đây: Ở trên là câu lệnh Assembly(trái) và số nhị phân(phải) đại diện cho một câu lệnh cộng của MIPS. Câu lệnh gọi bộ xử lý để tính tổng các giá trị trong thanh ghi 7 và 8 và lưu trữ kết quả trong thanh ghi 12. Các tín hiệu “$” để chỉ một hoạt động được đăng ký trên thanh ghi.Những màu nhị phân bên cạnh đại diện cho 6 phần của câu lệnh MIPS. Việc xử lý xác định các loại câu lệnh ở ô đầu tiên và cuối cùng.Các toán hạng được đặt ở các ô màu xanh và màu vàng còn kết quả được đặt ở ô thứ 4. Ô màu cam đại diện cho số lượng chuyển đổi cái mà không phải sử dụng các thao tác thêm. • MIPS privileged resource architecture(PRA)-Kiến trúc tài nguyên phân quyền: Nó đưa ra một tập các môi trường đảm bảo cho ISA hoạt động. PRA cung cấp các cơ chế cần thiết để quản lý các tài nguyên của bộ xử lý: bộ nhớ ảo, cache, các ngoại lệ… • MIPS application specific extension(ASE)-Các thành phần mở rộng tùy chọn cho ứng dụng:Nó cung cấp các chức năng nâng cao được thiết kế riêng biệt cho các chức năng khác nhau. • MIPS user defined struction(NDIs)-Câu lệnh được người dùng định nghĩa: Đây là các câu lệnh đặc biệt cho các úng dụng khác nhau cho mục đích ứng dụng khác nhau khi một bộ xử lý áp dụng kiến trúc MIPS. Máy tính làm việc bởi lấy lệnh ngôn ngữ máy từ bộ nhớ, giải mã và tính toán chúng. Ngôn ngữ máy và các giá trị sẽ được tính toán và mã hóa thành mã nhị phân. Máy tính chỉ làm việc với các giá trị nhị phân, để thực hiện xây dựng một kiến trúc máy tính sử dụng kiến trúc MIPS thì các thành phần cơ bản phải bao gồm là: o Program counter(PC): con trỏ chương trình. o Memory : Bộ nhớ. o Instruction Register: tập các thanh ghi lệnh. o Register File: tập các thanh ghi. o ALU: Khối đơn vị số học và logic. o CU: khối đợn vị kiểm soát Tất cả các thành phần ngoại trừ CU, thì đều được kết nối với nhau bằng bus. Bus là tập hợp đường dẫn điện tử với sự khác nhau về sự thiết lập giá trị nhị phân được vận chuyển trên đường dẫn đó. Hầu hết các bus của kiến trúc Mips đều có bề rộng 32-bits. 2.2 Đồ hình truyền dữ liệu: Đây là một minh họa về đường đi của dữ liệu trong kiến trúc MIPS. Ngày nay việc cài đặt đường ống và siêu vô hướng là chung nhất cho các bộ xử lý hiệu năng cao. 2.3. Tập thanh ghi trong kiến trúc MIPS. Thuật ngữ register để ám chỉ một thành phần nhớ điện từ. Kiến trúc MIPS cung cấp một tập hợp gồm 32 thanh ghi chung, một thanh ghi chương trình (hay còn được gọi là con trỏ chương trình PC), và có thêm hai thanh ghi đặc biệt. Tất cả các register của kiến trúc Mips đều là thành phần với khả năng nắm giữ 32-bits số nhị phân. Mỗi register có khả năng nắm giữ một giá trị 32-bits. Khi viết ở mức hợp ngữ, hầu hết các lệnh yều cầu một chương trình đặc biệt mà các thanh ghi trong tập thanh ghi (register file) sẽ được sử dụng trong quá trình tính toán lệnh. Một sự thỏa thuận sẽ được thông qua để chi tiết rằng thanh ghi nào sẽ được sử dụng tương ứng với một ngữ cảnh cụ thể. Các thanh ghi sẽ được gọi bằng tên tương ứng, cái mà sẽ giúp nhắc nhở chúng ta về sự thỏa thuận này. 2.3.1. Thanh ghi CPU. Tập thanh ghi MIPS Tên Số Ý nghĩa $zero $0 hằng số 0 $at $1 Asembler Temporary $v0-$v1 $2-$3 Giá trị trả lại của hàm hoặc biểu thức $a0-$a3 $4-$7 Các tham số của hàm $t0-$t7 $8-$15 Thanh ghi tạm $s0-$s7 $16-$23 Thanh ghi lưu trữ $t8-$t9 $24-$25 Thanh ghi tạm $k0-$k1 $26-$27 Dự trữ cho nhân OS $gp $28 Con trỏ toàn cục $sp $29 Con trỏ stack $fp $30 Con trỏ frame $ra $31 Địa chỉ trả về Thanh ghi zero( có tên là $zero) là đặc biệt, nó là nguồn gốc của giá trị zero. Không có một giá trị nào được ghi vào thang ghi zero. Thanh ghi 1( có tên là $at), được gọi cho hợp ngữ tạp thời, thanh ghi này dành cho tính toán các lệnh marco, và không nên được sử dụng cho các chương trình hợp ngữ. Các thanh ghi $k0 và $k1 được sử dụng bởi các nhân( kernel) của hệ điều hành, và không nên bị thay đổi bởi chương trình người dùng. Thanh ghi cuối cùng $31 được sử dụng giống như là một thanh ghi liên kết bởi lệnh nhảy và lệnh liên kết, cái mà sẽ được sử dụng để gọi một thủ tục. Thanh ghi $31 được sử dụng để ghi nhớ địa chỉ trả về của một thủ tục được gọi. Các thanh ghi $v0 và $v1 dùng để lưu trữ giá trị trả về của hàm. Các thanh ghi $t0-$t9 là các thanh ghi có nhớ lời gọi. Dùng cho các giá trị tạm thời mà không cần phải nhớ mỗi khi có lời gọi. Các thanh ghi $s0-$s7 là các thanh ghi có nhớ lời gọi.dùng cho các giá trị không thay đổi mỗi khi có lời gọi. Thanh ghi $sp là con trỏ stack, trỏ tới vị trí cuối cùng trỏ tên stack. Thanh ghi $rp là con trỏ frame. Thanh ghi $ra ghi lại địa chỉ trả về mỗi khi có lời gọi hàm. Thanh ghi $gp là con trỏ toàn cục trỏ tới vị trí giữa của khối bộ nhớ 64K vùng heap, nơi chứa các biến và hằng số toàn cục. Hai thanh ghi đặc biệt được gọi là thanh ghi HI và thanh ghi LO, chúng được sử dụng để kiểm soát kết quả của một lệnh thực hiện nhân hoặc chia số nguyên. 2.3.1.1. Thanh ghi chương trình(PC). Sau khi một chương trình được viết như là một chương trình bằng ngôn ngữ hợp ngữ sử dụng một trình tạo văn bản, chương trình được chuyển thành mã máy bằng một chương trình sử dụng gọi một trình biên dịch hợp ngữ. Mã của ngôn ngữ máy được ghi vào một file trên đĩa. Khi mà một người muốn thực hiện chương trình này, một chương trình sử dụng khác, gọi một đường dẫn nạp chương trình, sẽ nạp và liên kết với tất cả các khối ngôn ngữ máy cần thiết bên trong bộ nhớ chính. Các lệnh riêng biệt sẽ được ghi nhớ tuần tự vào bộ nhớ. Con trỏ chương trình( PC) là một thanh ghi được khởi tạo bởi hệ điều hành đến địa chỉ của lệnh đầu tiên của chương trình trong bộ nhớ. Chú ý rằng địa chỉ trong con trỏ chương trình được gửi đến đầu vào địa chỉ của bộ nhớ thông qua một bus. Sau khi một lệnh được lấy từ bộ nhớ và được nạp vào thanh ghi lệnh( IR) con trỏ PC sẽ được tăng để CPU có được địa chỉ cho lệnh tuần tự tiếp theo cho quá trình lấy lệnh. 2.3.1.2. Các thanh ghi lệnh. Thanh ghi lệnh IR là thanh ghi 32-bits dùng để nắm bản sao chép của lệnh được gọi đến gần đây nhất. Trong kiến trúc MIPs thì có 3 định dạng lệnh khác nhau được định nghĩa: định dạng R, định dạng I và định dạng J. 2.3.1.3. Các quy ước sử dụng các thanh ghi. Mặc dù không có bất kì một yêu cầu nào từ phần cứng của bộ xử lý, nhưng luôn tồn tại một sự thỏa thuận cho việc làm thế nào 32 thanh ghi sẽ được sử dụng. Bởi vì những sự gợi ý này là không hề bắt buộc bởi phần cứng, do đó chúng ta có thể sử dụng các thanh ghi chung một cách thoải mái, tuy nhiên các chương trình đó sẽ không giống để làm việc với các chương trình khác. Thanh ghi $v0 và thanh ghi $v1 được sử dụng trả về kết quả cho một thủ tục. Các thanh ghi từ $a0 đến $a3 được sử dụng để gọi bốn tham số đầu của một thủ tục. Các tham số duy trì được gọi thông qua stack. Những thanh ghi này là không dành riêng cho lời gọi một thủ tục duy nhất. Lời gọi một thủ tục có thể thay đổi giá trị của các thanh ghi này. Các thanh ghi từ $t0 đến $t9 là các thanh ghi tạm thời, không dành riêng cho các lời gọi các thủ tục. Các thanh ghi này sẽ được bảo đảm để được ghi nhớ bởi một lời gọi. Thêm vào đó thì các thanh ghi từ $s0 đến $s7 được gọi là các thanh ghi lưu trữ, những thanh ghi này có thể được dành riêng cho lời gọi các thủ tục. Thanh ghi $sp là con trỏ stack, đây là thanh ghi rất hữu dụng cho việc cài đăt stack. Nó luôn trỏ tới đỉnh của một stack. Trình biên dịch MIPS không sử dụng một con trỏ nền (frame pointer). Đối với một kết quả, các thanh ghi con trỏ nền $fp được sử dụng như là lưu trữ lời gọi thanh ghi $s8. Thanh ghi $ra được sử dụng để lưu giá trị địa chỉ trả về trong một thủ tục. Thanh ghi $gp trỏ đến vùng nhớ được dùng để lưu trữ các biến toàn cục và các biến hằng. Thanh ghi $at được dành cho trình biên dịch hợp ngữ. Trình biên dịch hợp ngữ thường sử dụng thanh ghi này để thông dịch lệnh giả mã. Các lệnh giả mã không phải là các lệnh của bộ xử lý, đó chỉ là các lệnh được hỗ trợ bởi trình biên dịch hợp ngữ. Mỗi một giả mã được thông dịch bởi trình biên dịch hợp ngữ thành một hoặc nhiều lệnh của bộ vi xử lí. 2.3.2. Thanh ghi FPU. Kiến trúc MIPS đưa ra các thanh ghi FPU sau: - 32 thanh ghi dấu chấm phẩy động. Các thanh ghi này có độ dài 32-bit nếu là bộ FPU 32-bit hoặc 64 bit nếu là bộ FPU 64-bit. - 5 thanh ghi điều khiển FPU dùng để nhận diện và quản lý FPU - 8 bộ mã điểu khiển số dấu chấm động là các thành phần của thanh ghi FCSR,FP control/status register. 2.3.2.1. Dữ liệu trong thanh ghi FPU. FPU hỗ trợ hai dạng dữ liệu: số dấu chấm động và số dấu chấm tĩnh: - Số dấu chấm động độ chính xác đơn và kép được định nghĩa theo chuẩn IEEE. - Số dấu chấm tĩnh là các số nguyên có dấu hỗ trợ bởi kiến trúc CPU. Các dạng số dấu chấm động được cung cấp bởi FPU là: - Số dấu chấm động chíng xác đơn 32-bit (kiểu S): S(bit dau) phần mũ phần lẻ 1bit 8 bit 23 bit - Số dấu chấm động với độ chính xác kép (kiểu D) S(bit dau) phần mũ phần lẻ 1bit 11 bit 52 bit - Số dấu chấm động đơn kẹp đôi (kiểu PS): S phần mũ phần lẻ S phần mũ phần lẻ 1 bit 8 bit 23 bit 1 bit 8 bit 23 bit Các định dạng số dấu chấm tĩnh hỗ trợ bởi FPU: - Kiểu Word 32-bit. S Interger 1 bit 31 bit - Kiểu LongWord (kiểu L) S Interger 1 bit 63 bit 2.3.2.2. Các thanh ghi đa năng. Trong phiên bản 1 của kiến trúc số dấu chấm động chỉ có trong kiến trúc MIPS64 nhưng ở phiên bản 2 thì chúng được hỗ trở trong cả kiến trúc MIPS32. FPU 32-bits có 32 thanh ghi 32-bits.FPRs, mỗi thanh chứa một kiểu dữ liệu 32 bits. Kiểu xác định kép(Double-pricesion-kiểu D) được lưu trữ trong các cặp thanh ghi chẵn, lẻ của FPRs, còn số nguyên dài(kiểu L) và kiểu Paired single(kiểu PS) thì không được hỗ trở. FPU 64-bits có 32 thanh ghi 64 bits số dấu chấm động, mỗi thanh ghi có thể chứa mọi kiểu dữ liệu. Để tương thích với FPU 32-bits, bit FR trong thanh ghi CP0 Status được sử dụng trong MIPS64 phiên bản 1 hoặc bất kỳ bộ xử lý phiên bản 2 nào hỗ trợ FPU 64-bits để điểu chỉnh FPU sang trạng thái mà các thanh ghi FPRs được coi như các thanh ghi 32 bits, và sẽ lưu trữ các kiểu dữ liệu giống FPRs 32-bits. o FR =0 : chế độ 64-bits o FR =1 : chế độ 32-bits. Khi đó chỉ 32 bits đầu được sử dụng, 32 bits sau không dùng. [...]... đâu to trong Doubleword 2.5.2 Cách thức đánh địa chỉ: Kiến trúc Mips được biết đến với tập lệnh máy tính đơn giản Các nhà thiết kế kiến trúc Mips cung cấp một tập hợp các lệnh cơ bản Trong trường hợp muốn gọi một giá trị từ bộ nhớ chính hoặc ghi một giá trị vào bộ nhớ chính, chỉ một phương thức đánh địa chỉ được cài đặt trong phần cứng của máy tính Phương pháp đánh địa chỉ này được hiểu như là phương... của bất kì một kiến trúc nào Một lệnh trong MIPS32 có độ dài 32 bits, còn trong MIPS64 là 64 bits Lệnh được mô tả bằng hợp ngữ Chúng ta có một danh sách các lệnh cho kiến trúc Mips, mỗi một lệnh sẽ được gán một mã nhị phân duy nhất, để có một danh sách các tập lệnh đầy đủ của kiến trúc Mips, chúng ta có thể tham khảo cuốn “MIPS RISC Architecture” của tác giả Kane và Heinrich Một máy tính sẽ có 2 lệnh... địa chỉ Trong kiến trúc MIPs, địa chỉ của bộ nhớ được đánh từ 0 đến 4,294,967,295 Trong kiến trúc Mips thì một từ nhớ là 32-bits và một byte là 8-bits Như vậy trong kiến trúc MIPs thì một từ bao gồm 4-Bytes, và đơn vị địa chỉ nhỏ nhất có thể của thông tin được tham biến trong bộ nhớ là một byte Địa chỉ của byte đầu tiên trong từ nhớ cũng là địa chỉ của từ nhớ Tất cả các lệnh trong kiến trúc MIPs đều... giờ cũng bao gồm 4 byte Cấu trúc lệnh nạp của ngôn ngữ hợp ngữ có vài cái dễ nhầm lẫm Nếu ai đó viết một trình biên dịch hợp ngữ cho kiến trúc Mips mới, cấu trúc sau đây sẽ làm việc tốt hơn của vân chuyển đến người dùng những gì mà lệnh thực hiện hiện thời: Lw $s1,[$a0+8] Sau đây là một ví dụ về lệnh nạp từ nhớ: Sw $s1, 12($a0) Khi mà phần cứng tính toán lệnh này, nó sẽ tính địa chỉ thật của vùng nhớ... register + constant • Địa chỉ của toán hạng bộ nhớ được tính toán bởi phép cộng nội dung của hai thanh ghi Nếu như một thanh ghi là bằng 0, phương thức đánh địa chỉ này trở thành giống nhưa phương thức trên với hằng số 0 Trong phương thức này, địa chỉ được tính toán như sau: Address = contents of register 1+ contents of register 2 Kiến trúc Mips là một kiến trúc nạp và ghi( Load/Store architecture), điều này... địa chỉ trong câu lệnh nạp và ghi bộ nhớ Tất cả các kiến trúc MIPS chấp nhận hai phương thức đánh địa chỉ sau đây: • Địa chỉ của toán hạng được tính toán bởi phép cộng nội dung của một thanh ghi và một hằng số Nếu như là hằng số bằng 0, nội dung của thanh ghi được sử lí giống như là địa chỉ của một toán hạng Trong phương thức này, địa chỉ bộ nhớ được tính toán giống như sau: Address = contents of a register... thông đến giống như là một mảng tuyến tính dài, và địa chỉ thực là một con trỏ đến một vài vùng của mảng mà hệ điều hành chỉ định giống như là một khối dữ liệu Con trỏ chương trình PC là con trỏ trong cùng một mảng, nhưng đến một khối khác được gọi khối chương trình Hệ điều hành cung cấp một mảng khác trong bộ nhớ được gọi là khối ngăn xếp 2.6 Tập lệnh trong MIPS Tập lệnh (Instruction Set) luôn là phần... add) và trừ( substract) Các giá trị của các phép toán( source values) sẽ được lấy ra từ register file và sau khi tính toán thì kết quả sẽ được lưu lại vào register file Khi lập trình bằng hợp ngữ, chúng ta sử dụng một kiểu gợi nhớ để cho biết rằng với phép toán nào đó thì chúng ta muốn máy tính thực hiện và chúng ta cụ thể vùng nhớ cụ thể register file nào thì sẽ được sử dụng tên của vùng nhớ đó Chúng... chúng ta sẽ có lệnh của ngôn ngữ lập trình hợp ngữ để làm việc đó như sau: add $v1,$a1,$s1 Một lệnh giả mã tương ứng sẽ có dạng: $v1 = $a1 + $s1 Kiến trúc MIps bao gồm các lệnh bit logic như: “AND”, “OR” , và “Exclusive-OR” , và có các lệnh để thực hiện các cấu trúc kiếm soát như: “if … then … else … ” Các lệnh nhân thực hiện nhân hai giá trị 32-bits và sản sinh ra một kết quả là 64-bits, kết quả này... đường ống, chúng ta sẽ có năm lệnh khác nhau trong năm tầng khác nhau của việc tính toán, chúng sẽ di chuyển thông qua đường ống Như vậy chúng ta cần năm chu trình tín hiệu đồng hồ cho bất kì một lệnh nào để thực hiện chúng thông qua đường ống, nhưng khi mà chúng ta có năm lệnh được tính toán một cách đồng thời, tốc độ tính toán trung bình là một lệnh trên một chu trình xung đồng hồ Chúng ta có các . từ kiến trúc tập lệnh MISO I đến kiến trúc tập lệnh MIPS V. Vào cuối những năm 1990, kiến trúc MIPS đã được thiết kế xung quanh hai kiến trúc cơ bản sau: • MIPS32 cho kiến trúc 32-bit. Kiến trúc. BÀI TẬP LỚN Môn: Kiến trúc máy tính *** Yêu cầu: 1. Tìm hiểu kiến trúc MIPS - Mô hình lập trình: Tập thanh ghi, không gian địa chỉ. - Các kiểu dữ liệu - Tập lệnh - Quản lý. thiết kế một bộ tập lệnh đơn giản dễ hiểu nên việc nghiên cứu kiến trúc MIPS rất hữu ích cho việc nghiên cứu về kiến trúc máy tính. 2. Tìm hiểu về MIPS. Kiến trúc MIPS là kiến trúc các thanh