MIPS là viết tắt của Microprocessor without Interlocked Pipeline Stages, một kiến trúc bộ vi xử lý theo kiểu RISC được phát triển bởi MIPS Technologies. Ban đầu, MIPS được thiết kế cho hệ điều hành 32-bit và sau đó được nâng cấp lên 64-bit. Các phiên bản của MIPS bao gồm MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 và MIPS64. Hiện tại, các phiên bản chính được sử dụng là MIPS32 và MIPS64.
Kiến trúc này còn có các tùy chọn mở rộng như MIPS-3D với bộ tập lệnh SIMD, MIPS16e với khả năng nén lệnh để giảm kích thước chương trình, và MIPS MT hỗ trợ xử lý đa luồng.
Trong chương trình học kiến trúc máy tính tại các trường đại học, MIPS là một chủ đề quan trọng. Kiến trúc MIPS đã có ảnh hưởng lớn đến các kiến trúc RISC sau này, chẳng hạn như Alpha.
Lịch sử
Người sáng lập RISC
Jhn L. Hennessy tại Đại học Stanford là người tiên phong trong việc phát triển bộ vi xử lý MIPS đầu tiên. Ông đã giới thiệu khái niệm cơ bản để nâng cao hiệu suất qua việc sử dụng ống vi lệnh sâu. Đường ống là một kỹ thuật đã biết trước đó nhưng chưa được triển khai hoàn toàn. Trong thiết kế truyền thống, mỗi vi lệnh phải được thực hiện xong trước khi vi lệnh tiếp theo được kích hoạt; trong kiến trúc ống, các vi lệnh có thể được xử lý đồng thời. Ví dụ, trong khi vi lệnh toán học được thực hiện, bộ vi xử lý có thể đồng thời lấy vi lệnh tiếp theo từ đơn vị tải/lưu.
Một thách thức lớn đối với kiến trúc đường ống là một số vi lệnh, chẳng hạn như phép chia, cần nhiều thời gian để hoàn tất, khiến CPU phải tạm dừng trước khi tiếp nhận vi lệnh kế tiếp. Một giải pháp cho vấn đề này là sử dụng cơ chế liên khoá cho phép các giai đoạn được đánh dấu là bận tạm dừng giữa các đoạn khác. Nhóm Hennessy đã chỉ ra rằng các liên khoá là một rào cản quan trọng do việc đồng bộ hóa tất cả các mô-đun trong CPU tiêu tốn thời gian, dẫn đến giới hạn tốc độ xung nhịp. Một khía cạnh nổi bật của thiết kế MIPS là nó tối ưu hóa bằng cách thực hiện một pha nhỏ, bao gồm việc truy xuất cache của tất cả vi lệnh trong một chu kỳ, từ đó loại bỏ sự cần thiết của liên khoá và cho phép chu kỳ hoạt động mượt mà hơn.
Mặc dù thiết kế này đã loại bỏ một số vi lệnh quan trọng như phép nhân và phép chia, nhưng hiệu suất toàn diện của hệ thống được cải thiện đáng kể nhờ khả năng chạy ở xung nhịp cao hơn. Khả năng liên khoá giữa các tốc độ của ống và thời gian cần thiết để thiết lập khoá đã được giảm thiểu.
Khác biệt giữa thiết kế MIPS và đối thủ Berkeley RISC nằm ở cách xử lý hàm con. RISC sử dụng kỹ thuật cửa sổ thanh ghi để cải thiện hiệu suất cho các tác vụ phổ biến, nhưng có giới hạn về mức nhảy. Mỗi lần gọi hàm con yêu cầu một tập hợp thanh ghi riêng, điều này cần tài nguyên của thanh ghi. Hennessy tin rằng trình biên dịch thông minh có thể tìm ra thanh ghi rảnh mà không cần phải sắp xếp lại, và việc tăng số lượng thanh ghi không chỉ làm cho điều này đơn giản hơn mà còn nâng cao hiệu suất toàn bộ tác vụ.
Hơn nữa, thiết kế MIPS tương tự như thiết kế RISC điển hình. Để tiết kiệm bit trong vi lệnh, thiết kế RISC giảm số lượng vi lệnh. Thiết kế MIPS sử dụng 6 bit trong tổng số 32 bit cho vi lệnh cơ bản; 26 bit còn lại được dùng cho địa chỉ nhảy hoặc trường 5 bit để chỉ định lên đến 3 thanh ghi với giá trị dịch kết hợp với 6 bit vi lệnh; Một định dạng khác sử dụng 3 thanh ghi với giá trị mã 16 bit trong vi lệnh. Một định dạng khác nữa là 6 bit cho thanh ghi và 4 bit cho vi lệnh.
+======+======+=====+====+====+====+
+ 4b + 6bit + 6 + 6 + 6 + 4b +
+======+======+=====+====+====+====+
Cách mã hóa này giúp tăng số lượng thanh ghi lên 64, trong khi số lượng chỉ lệnh phụ thuộc vào phương pháp mã hóa, thường lên tới hơn 100 chỉ lệnh.
Phần cứng đầu tiên
Vào năm 1984, Hennessy tin tưởng vào tiềm năng thương mại của thiết kế và đã rời Stanford để thành lập MIPS Computer System. Họ cho ra mắt thiết kế đầu tiên, R2000, vào năm 1985, và nâng cấp lên R3000 vào năm 1988. Các bộ vi xử lý 32 bit này đã thiết lập nền tảng cho công ty trong suốt những năm 1980, và được sử dụng chủ yếu trong các trạm làm việc SGI. Tuy nhiên, thiết kế thương mại này khác với nghiên cứu lý thuyết tại Stanford vì nó tích hợp phần lớn các liên khoá vào phần cứng, cung cấp khả năng xử lý phép nhân và chia.
Vào năm 1991, MIPS đã ra mắt bộ vi xử lý 64 bit đầu tiên, R4000. R4000 là một bước tiến trong việc cải thiện TLB, với mỗi mục không chỉ chứa địa chỉ ảo mà còn có ID không gian địa chỉ ảo. Bộ đệm này giải quyết vấn đề hiệu suất của vi hạt nhân (microkernel), vấn đề mà các kiến trúc đối thủ như Pentium và PowerPC thường gặp phải do việc phải xóa TLB thường xuyên. Tuy nhiên, MIPS đã gặp khó khăn về tài chính trong việc đưa sản phẩm ra thị trường. Kiến trúc MIPS là rất quan trọng đối với SGI, và SGI đã mua lại công ty vào năm 1992 để bảo vệ kiến trúc khỏi bị mất. Với vai trò là công ty con của SGI, công ty trở nên nổi tiếng với tên gọi MIPS Technologies.
Sự phát triển của nhân
Trong những năm gần đây, công nghệ sử dụng trong các thế hệ MIPS đã được cung cấp dưới dạng sở hữu trí tuệ cho thiết kế nhúng. Cả lõi cơ bản 32 bit và 64 bit đều được cung ứng, được biết đến với tên gọi 4k và 5k. Những lõi này còn được mở rộng thêm các đơn vị khác như phép toán chấm động, SIMD, và nhiều thiết bị xuất/nhập khác.
Ngôn ngữ hợp ngữ MIPS
MIPS có 32 thanh ghi, và để thực hiện phép toán, dữ liệu phải được đưa vào các thanh ghi (tức là, thao tác giữa các thanh ghi).
- d, t và s là ký hiệu đại diện cho các thanh ghi
- C chỉ hằng số (được mã hóa trong vi lệnh)
- Gạch ngang (-) có nghĩa là không xác định
MIPS có hàng chục chỉ lệnh khác nhau.
Loại vi lệnh | Tên mô tả | Hợp ngữ | Ý nghĩa | Định dạng | Mã vi lệnh | ||
---|---|---|---|---|---|---|---|
Tính toán | Cộng | add $d,$s,$t | $d=$s+$t | r | 0 | 2016 | cộng hai thanh ghi, kích hoạt bẫy nếu tràn bit000000ss sssttttt dddd--- --10000
|
add unsigned | addu $d,$s,$t | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Substract | sub | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Substract unsigned | subu
|
Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Add immediate unsigned | addi | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Cộng hằng không dấu | addiu | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Nhân | mult | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Chia | div | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Chia không dấu | divu | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Truyền dữ liệu | Load double word | ld $t,C($s) | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | |
Load word | lw $t,C($s) | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Load halfword unsigned | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Load byte | lb | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Load byte unsigned | lbu | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Store double word | sd | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Store word | sw | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Store half | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Store byte | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Store upper | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Load upper | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Load upper immediate | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Move from high | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Move from low | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | ||
Move from Control Register | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô | Văn bản ô |
- http://www.mips.com