Các bộ xử lý ARM như cortex-a9 có sử dụng microcode không?


12

Bộ xử lý ARM (gần đây và cũ) có sử dụng vi mã không? Nếu vậy thì để làm gì? Không phải hướng dẫn của họ đủ đơn giản để được thực thi trực tiếp mà không được dịch thành micro-op?

Câu trả lời:


14

TL, DR; Mặc dù bộ xử lý ARM sử dụng các khái niệm tương tự với CPU được mã hóa vi mô (ví dụ: có một khối phần cứng giải mã các hướng dẫn thành một hoặc nhiều hoạt động vi mô ), chúng không được mã hóa theo nghĩa truyền thống sử dụng ROM để lưu trữ từng lệnh vi mô, cũng như những hướng dẫn / thao tác vi mô này có thể được sửa đổi sau khi được sản xuất trong phần cứng thực tế. Thật vậy, bộ xử lý ARM sử dụng điều khiển cứng trong bộ giải mã lệnh để tạo ra các hoạt động vi mô.

Tuy nhiên, trên thực tế, việc sửa đổi bộ giải mã lệnh có thể tương tự như sửa đổi bộ xử lý vi mã hóa, bởi vì ARM cấp phép mã nguồn ngôn ngữ mô tả phần cứng ( HDL ) cho các nhà sản xuất riêng lẻ, giúp việc sửa đổi cấp phần cứng dễ dàng hơn đáng kể. Xem phần Bộ giải mã lệnh trong Wikibook Thiết kế bộ vi xử lý để biết thêm sự khác biệt giữa các bộ giải mã lệnh RISC và CISC điển hình.


Trong khi bản thân kiến ​​trúc ARM không được mã hóa theo nghĩa truyền thống, các hướng dẫn riêng lẻ được giải mã thành các hoạt động vi mô nhỏ hơn . Một bộ xử lý ARM hiện đại khác xa với "đơn giản" - mặc dù bản thân các hướng dẫn rất trực giao, có rất nhiều công nghệ hiện đại (ví dụ: pipelining, hướng dẫn siêu thanh, thực hiện không theo thứ tự, lưu vào bộ đệm, hướng dẫn phức tạp mở rộng như các đơn vị dấu phẩy động hoặc hướng dẫn NEON) mà lõi A9 hiện đại có. Thật vậy, bất kỳ bộ xử lý nào cũng có thể đủ đơn giản để thực thi mà không cần dịch sang các thao tác vi mô, nhưng điều này về cơ bản là đặt "tất cả trứng của bạn vào một giỏ" - bạn không thể sửa bất kỳ lỗi nào có thể có trong tập lệnh, cũng như không mở rộng / sửa đổi sau khi sản xuất.

Tuy nhiên, nếu chúng ta chỉ nói về giai đoạn giải mã hướng dẫn , thì thực sự nhiều bộ xử lý ARM không được mã hóa theo cách cho phép sửa đổi sau thực tế, mặc dù điều này có thể là do hầu hết các nhà sản xuất cấp phép công nghệ ARM đều được cấp quyền truy cập vào thực tế mã nguồn phần cứng (được viết bằng HDL). Điều này giúp giảm mức tiêu thụ điện năng vì không yêu cầu giai đoạn vi mã, nhưng các hướng dẫn riêng lẻ được "biên dịch" thành các khối phần cứng thực tế. Điều này cũng cho phép sửa lỗi errata của mỗi nhà sản xuất.

Thật vậy, ngay cả trong CPU dựa trên CISC (ví dụ x86), không có yêu cầu sử dụng vi mã. Tuy nhiên, trong thực tế, sự phức tạp của tập lệnh, kết hợp với sự khác biệt khác nhau về cấp phép, tiêu thụ năng lượng và ứng dụng, làm cho sự lựa chọn vi mã lý tưởng cho trường hợp x86. Tuy nhiên, trong trường hợp của ARM, nó ít hữu ích hơn khi các thay đổi đối với tập lệnh (bộ giải mã) dễ thực hiện và kiểm soát hơn về mặt phần cứng (do nhà sản xuất có thể tùy chỉnh).


Mặc dù có microcode thực sự có thể đơn giản hóa thiết kế bộ xử lý trong một số trường hợp (vì mỗi lệnh tồn tại dưới dạng "chương trình vi mô" trái ngược với phần cứng thực tế), đây thực sự chỉ là một bộ giải mã lệnh (ví dụ: phần mở rộng Thumb-2 , cho phép biến- hướng dẫn độ dài để tồn tại bằng cách thêm một bộ giải mã lệnh riêng biệt cùng với bộ giải mã lệnh ARM). Mặc dù về mặt chức năng, các đơn vị này có thể được thực hiện bằng microcode, điều này sẽ không khôn ngoan về mức tiêu thụ điện năng, vì bạn cần xác định đầu ra cho từng tín hiệu điều khiển trong chính CPU, ngay cả khi không bắt buộc. Cái này không Tuy nhiên, có bất cứ điều gì liên quan đến mức độ "phức tạp" của CPU thực tế, vì các lõi ARM có tất cả các cấu trúc hiện đại mà người ta mong đợi (pipelining, bộ đệm hướng dẫn / dữ liệu, bộ đệm micro-TLB, dự đoán nhánh, bộ nhớ ảo, v.v ... ).

Trong trường hợp ARM, với tính trực giao của tập lệnh, độ phức tạp liên quan đến việc thực hiện phương pháp mã hóa như vậy sẽ vượt trội hơn lợi ích của việc thay đổi trực tiếp phần cứng có liên quan trong khối giải mã lệnh. Mặc dù điều này là chắc chắn có thể, nhưng cuối cùng nó lại "phát minh lại bánh xe", do bạn có khả năng trực tiếp sửa đổi (và biên dịch / kiểm tra / mô phỏng) các thay đổi trong phần cứng.


Bạn có thể "nghĩ" mã nguồn ARM là một loại mã hóa trong trường hợp này, mặc dù thay vì lưu trữ từng chương trình vi mô / vi chương trình trong ROM có thể được sửa đổi sau thực tế, chúng được triển khai trực tiếp trong phần cứng trong bộ giải mã lệnh. Với bộ giải mã lệnh được viết bằng VHDL / Verilog, việc thay đổi các hướng dẫn hiện có cũng đơn giản như sửa đổi mã nguồn, biên dịch lại và kiểm tra phần cứng mới (ví dụ: trên một FPGA hoặc trình giả lập). Điều này trái ngược với sự phức tạp của phần cứng x86 hiện đại, khó kiểm tra / mô phỏng hơn trong quá trình phát triển, và thậm chí còn khó sửa đổi hơn sau khi sản xuất (vì kích thước của các bóng bán dẫn vượt xa những gì người ta có thể chạy bên trong ngay cả loại hiện đại đắt tiền nhất Các GPU, do đó thêm một lợi ích cho việc sử dụng một cửa hàng vi mã).phần cứng vật lý sử dụng một đồ họa.


Vì vậy, microcode của ARM nằm trên phần cứng, phải không?
Kraken

1
@Kraken theo một nghĩa nào đó, vâng; thay vì sử dụng bộ vi xử lý , mỗi lệnh được bộ giải mã lệnh dịch trực tiếp thành các thao tác vi mô / lệnh vi mô riêng lẻ (một hoặc nhiều chu kỳ xung nhịp) cho opcode đó. Các Hướng dẫn Decoder bài viết từ các thiết kế vi xử lý Wikibook cũng rất hữu ích trong việc giải thích sự khác nhau giữa bộ giải mã lệnh RISC và CISC thông thường.
Đột phá

cảm ơn. Điều này làm rõ rất nhiều cho tôi. Cảm ơn một lần nữa. +1 cho nỗ lực.
Kraken
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.