MIPS
MIPS viết tắt của Microprocessor without Interlocked Pipeline Stages, là kiến trúc bộ tập lệnh RISC phát triển bởi MIPS Technologies. Ban đầu kiến trúc MIPS là 32bit, và sau đó là phiên bản 64 bit. Nhiều sửa đổi của MIPS, bao gồm MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 và MIPS64. Phiên bản hiện tại là MIPS32 và MIPS64.
Cũng có một vài tuỳ chọn mở rộng, bao gồm MIPS-3D có bộ tập lệnh SIMD, MIPS16e thêm khả năng nén vi lệnh để làm chương trình nhỏ hơn và MIPS MT thêm xử lý đa luồng.
Chương trình kiến trúc máy tính ở trường đại học thường tìm hiểu về kiến trúc MIPS. Kiến trúc cực kì ảnh hưởng bởi kiến trúc RISC sau này như là Alpha.
Lịch sử
[sửa | sửa mã nguồn]Người tiên phong của RISC
[sửa | sửa mã nguồn]u bởi Jhn L. Hennessy tại đại học Stanford bắt đầu làm việc để trở thành một bộ vi xử lý MIPS đầu tiên. Khái niệm cơ bản để tăng hiệu năng qua việc sử dụng ống vi lệnh sâu. Đường ống là kĩ thuật cơ bản được biết từ trước, nhưng không phát triển toàn diện. CPU được xây dựng từ số đơn vị lẻ như là giải mã vi lệnh, ALU, tải và lưu, và vài thứ khác. Trong truyền thống không có thiết kế tối ưu, một vi lệnh cụ thể trong chương trình phải được thực hiện trước khi tiếp theo mới được kích hoạt; trong kiến trúc ống, vi lệnh có thể xử lý trùng nhau. Ví dụ, tại cùng thời điểm vi lệnh toán có thể được lấy vào bộ vi xử lý chấm động, đơn vị tải/lưu có thể lấy vi lệnh tiếp theo.
Một rào cản quan trọng cho đường ống là vài vi lệnh, như chia, cần nhiều thời gian để hoàn thành và do đó CPU phải chờ trước khi cho vi lệnh kế tiếp vào đường ống. Một giải pháp cho vấn đề này là sử dụng một loạt các liên khoá cho phép giai đoạn được xác định là bận; tạm dừng giữa các đoạn khác. Nhóm Hennessy cho thấy các liên khoá(interlock) là một rào cản chính từ khi học liên lạc tất cả mô-đun trong CPU mà tốn thời gian, và xuất hiện sự giới hạn tốc độ xung. Một khía cạnh khác của thiết kế MIPS là nó vừa một pha nhỏ, bao gồm truy xuất cache, của tất cả vi lệnh trong một chu kì, do đó xoá bỏ sự cần thiết của liên khoá, và cho phép một chu kì thông suốt.
Mặc dù thiết kế loại bỏ một số vi lệnh hữu ích như nhân, chia nhưng nó hiệu năng toàn diện của hệ thống rất cải thiện đáng kể bởi vì chip có thể chạy với xung cao hơn. Khó có thể liên khoá xen vào tốc độ của ống, cũng như thời gian cần thiết để thiết lập khoá.
Khác biệt giữa thiết kế MIPS và đối thủ Berkeley RISC tham gia xử lý hàm con. RISC sử dụng kĩ thuật thanh ghi cửa sổ để cải thiện hiệu năng của tác vụ rất phổ dụng, nhưng giới hạn tối đa mức nhảy. Mỗi lần gọi tiểu hàm cần tập hợp thanh ghi của nó, mà đến lượt cần tài sản của thanh ghi. Hennessy cảm thấy trình biên dịch thông minh thì có thể tìm thấy thanh ghi rảnh mà không cần sắp xếp lại, và chỉ đơn giản tăng số lượng thanh ghi không chỉ làm điều này đơn giản, nhưng là tăng hiệu năng toàn bộ tác vụ.
Cách khác, thiết kế MIPS rất giống với 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 bits của 32 bit cho vi lệnh cơ bản; còn lại là 26 bit là địa chỉ nhảy hoặc sử dụng 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 một giá trị 16 bit mã trong vi lệnh.
còn định dạng khác nữa đó là 6 bit thanh ghi 4bit vi lệnh.
+======+======+=====+====+====+====+
+ 4b + 6bit + 6 + 6 + 6 + 4b +
+======+======+=====+====+====+====+
cách mã hoá này tăng số lượng thanh ghi lênh 64 tghi. Còn số lượng chỉ lệnh thì tuỳ thuộc vào cách mã hoá. Thông thường lên tới hơn 100 chỉ lệnh.
Phần cứng đầu tiên
[sửa | sửa mã nguồn]Trong 1984, Hennessy được thuyết phục về tính thương mại của thiết kế, và rời khỏi Stanford để thành lập MIPS Computer System. Họ cho ra thiết kế đầu tiên, R2000, trong 1985, cải thiện kiến trúc là R3000 trong 1988. Những CPU 32 bit thiết lập cơ bản của công ty họ qua những năm 1980, được sử dụng chính trong sơ ri trạm làm việc SGI. Nhưng thiết kế thương mại này khác với nghiên cứu lý thuyết ở Stanford vì thiết kế hầu hết các liên khoá trong phần cứng, cung cấp đầy đủ nhân,chia vi lệnh.
Vào 1991 MIPS ra đời vi xử lý 64 bit đầu tiên, R4000. R4000 là sự tiến bộ về TLB, mỗi mục không chỉ chứa địa chỉ ảo mà còn id không gian địa chỉ ảo. Bộ đệm này loại bỏ vấn đề nguyên nhân chính về hiệu năng của vi hạt nhân (microkernel) mà sẽ chậm trên các kiến trúc đối thủ (Pentium,PowerPC) bởi vì sự cần thiết để tẩy TLB trên sự chuyển đổi thường xuyên. Tuy nhiên MIPS đã gặp hạn chế tài chính để mang ra thị trường. Kiến trúc thật sư quan trọng đối với SGI, vào thời điểm đó một trong những khách hàng của MIPS, SGI mua lại công ty ngay vào 1992 để bảo lãnh kiến trúc không bị mất. Là công ty con của SGI, công ty trở nên được biết là MIPS Technologies.
Sự tổng hợp nhân
[sửa | sửa mã nguồn]Vài năm gần đây hầu hết công nghệ sử dụng trong vài thế hệ MIPS đã cung cấp sở hữu trí tuệ nhân cho thiết kế nhúng. Cả lõi cơ bản 32 bit lẫn 64 bit được cung ứng, được biết như 4k và 5k. Những lõi này được thêm vào vài đơn vị khác như chấm động, SIMD, rất nhiều thiết bị xuất/nhập, etc.
Hợp ngữ MIPS
[sửa | sửa mã nguồn]MIPS có 32 thanh ghi, dữ liệu phải ở trong thanh ghi mới xử lý (thanh ghi - thanh ghi)
- d,t và s là ký tự ý nói đó là thanh ghi
- C có nghĩa là hằng (encode trong vi lệnh)
- gạch ngang (-) có nghĩa không xác định
mips có vài chục chỉ lệnh.
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 ô |