So sánh giữa cisc và risc năm 2024

- Trong RISC kích thước tập lệnh là nhỏ trong khi ởCISC kích thước tập lệnh là lớn. - RISC sử dụng định dạng cốđịnh (32 bit) và chủ yếu là các hướng dẫn dựa trên đăng ký trong khi CISC sử dụng định dạng biến trong phạm vi từ 16-64 bit cho mỗi lệnh. - RISC sử dụng đồng hồ đơn và chế độ địa chỉ giới hạn. Mặt khác, CISC sử dụng

nhiều chếđộđịa chỉ và 12 đến 24 đồng hồ.

- Sốlượng các thanh ghi mục đích chung mà RISC sử dụng nằm trong khoảng từ 32- 192. Ngược lại, kiến trúc CISC sử dụng 8-24 GPR.

- Cơ chế bộ nhớ đăng ký để đăng ký được sử dụng trong RISC với các hướng dẫn LOAD và STORE độc lập. Ngược lại, CISC sử dụng bộ nhớ vào cơ chế bộ nhớ để thực hiện các hoạt động, hơn nữa, kết hợp các hướng dẫn LOAD và STORẸ - RISC đã phân chia dữ liệu và thiết kế bộ đệm hướng dẫn. Đối với, CISC sử dụng

bộ đệm hợp nhất cho dữ liệu và hướng dẫn, mặc dù các thiết kế mới nhất cũng sử dụng bộđệm tách.

- Hầu hết các điều khiển CPU trong RISC đều được gắn cứng mà không có bộ nhớ điều khiển. Ngược lại, CISC được mã hóa và sử dụng bộ nhớ điều khiển (ROM), nhưng CISC hiện đại cũng sử dụng điều khiển cứng.

STT Cơ sởđể so sánh RISC CISC

1 Nhấn mạnh về Phần mềm Phần cứng

2 Bao gồm Đồng hồđơn Đồng hồ nhiều

3 Kích thước tập lệnh Nhỏ bé Lớn 4 Định dạng hướng dẫn Định dạng cố định (32 bít) Các định dạng khác nhau (16 - 64 bit mỗi lệnh) 5 Chếđộđịa chỉđược sử dụng Giới hạn 3 - 5 chếđộ 12 - 24 chếđộ 6 Thiết kế bộ nhớ cache Tách bộđệm dữ liệu và bộđệm hướng dẫn Bộ nhớ cache thống nhất cho hướng dẫn và dữ liệu 7 Chu kỳ theo hướng

4. Nén mã

4. Nén mã Một lý do khác mà các chíp CISC có mật độ mã tốt hơn đó là bởi vì chúng tập lệnh có xu hướng được làm ngắn hơn. Theo định nghĩa các chíp RISC 32-bit phải có tập lệnh 32-bit. Còn một chíp CISC 32-bit thì lại khác, có thể có lệnh 8-bit, 16-bit, 32-bit và có cả các lệnh dài hơn nữa. Đây là một trong những đặc điểm làm cho chíp CISC phức tạp, nhưng điều đó cũng làm cho nó thực tế hơn trong các hệ thống nhúng. Tại sao bạn quan tâm đến số bít của tập lệnh ? Bởi vì trong khi một con 68020 có thể đặt vừa một lệnh ADD vào chỉ 8 bít của bộ nhớ chương trình thì một con MIPS R400 lại cần đến 32 bit, như thế là bạn đã ném đi 3/4 bộ nhớ quý giá cho mỗi lần chương trình thực hiện cộng hai số với nhau. Và chíp MIPS không thể cộng nhanh hơn chíp 68K, do đó bạn cũng chẳng được gì hơn ngoài lời nói bạn đang sở hữu một hệ thống RISC. Trong thời gian gần đây một số nhà sản xuất RISC đã đưa ra giải pháp thông minh để giải quyết vấn đề này. Giải pháp này thường được gọi là nén mã, nhưng đó chỉ là sự dùng từ sai. Không có sự nén mã thực sự, giống như PKZIP. Họ chỉ thay đổi tập lệnh của chíp một ít sao cho không phải tất cả các lệnh đều dài 32 bít. 3 ví dụ chính cho vấn đề này đó là ARM, ARC Cores và MIPS. Chúng có các phiên bản nén mã với các tên gọi tương ứng là Thumb, ARCompact và MIPS-16. Chúng đều thêm một số lệnh 16-bit vào tập lệnh 32-bit. Trình biên dịch C của chúng bây giờ có thể lựa chọn dùng các lệnh 16-bit để làm cho mã thực thi nhỏ hơn. Nhỏ hơn bao nhiêu tùy thuộc vào nhiều thứ. Và như bạn đã thấy, tiếp thị bằng cách thổi phồng chẳng bao giờ dễ cả. Tuy nhiên trong các thử nghiệm thực tế độ nén trung bình khoảng 20% đến 30% và tùy thuộc vào chương trình. Nhắc bạn rằng đó chỉ là sự nén của không gian mã, vùng dữ liệu không được nén. Tuy nhiên đó vẫn là một hướng đúng để làm cho kiến trúc RISC hấp dẫn hơn những gì mà chúng đã có. Trong hai trường hợp (ARM Thumb và MIPS MIPS-16) mã thực thi phải xác định rõ ràng giữa chế độ 32-bit và 16-bit. Bạn không thể trộn lẫn hai loại lệnh này với nhau, do đó bạn phải cách ly đoạn mã chạy bằng các phép toán 16-bit ra khỏi đoạn mã chạy bằng các lệnh 32-bit. Bạn thấy đấy, cân bằng giữa tập lệnh ngắn hơn là sự giới hạn của nó. Ví dụ, mã 16-bit không thể xử lý ngắt, quản lý cache, quản lý bộ nhớ, hoặc nhảy. May mắn là trình biên dịch cho Thumb và MIPS-16 đã loại trừ các vấn đề này. ARCompact của ARC không có sự giới hạn này bởi vì nó không chuyển đổi giữa hai chế độ. Nó trộn lẫn cả hai kích thước, do đó bạn không phải vất vả tách rời chương trình của bạn. Một điểm khác nữa, cách giải quyết của IBM cho các chíp PowerPC nhúng đó là CodePack. Không như các tập lệnh nén khác, IBM thực sự nén mã nhị phân thực thi của nó, giống như là sử dụng PKZIP để nén vậy. Bạn nén chương trình sau khi compliled, assembled và linked. Rồi lưu phiên bản được nén này vào ROM hoặc đĩa. Chắc chắn là các chíp PowerPC nhúng phải có thêm phần cứng để giải nén và ném chúng vào bộ nhớ. Thứ nhất sẽ hoàn toàn không dò được mã, bởi vì nó không được lưu trữ theo định dạng mã thông thường. Mã đã bị nén điều này làm cho nó khó bị disassemble. Đó có thể là một thuận lợi nếu bạn muốn bảo vệ mã khỏi những cặp mắt tò mò. CodePack mã hóa phần mềm hiệu quả như nén phần mềm vậy. Thứ hai, bởi vì phải giải nén phần mềm khi đang thực thi, đôi khi có thể mất thời gian lâu hơn dự đoán. Việc xử lý lệnh rẽ nhánh và nhảy thực sự phải khéo léo, bởi vì đích của lệnh rẽ, sẽ không dễ dàng xác định được khi nó bị mã hóa, có thể nằm đâu đó trong ROM. Thứ 3, với mỗi chương trình CodePack dùng một chìa khóa nén riêng do đó các chương trình khác nhau sẽ nén hoàn toàn khác nhau. Điều đó có nghĩa là mã nhị phân đã nén không thể thực thi được trên một chíp PowerPC khác trừ khi bạn cung cấp chìa khóa. Cuối cùng, CodePack có cùng hệ số nén 30% như ARC, ARM và MIPS. Với tất cả độ phức tạp của nó, nó chẳng tốt hơn đáng kể. Tuy nhiên cũng đáng khâm phục IBM bởi vì họ đã đưa ra vài thứ hoàn toàn khác.