- Kiến trúc bộ xử lý
- Kiến trúc bộ hướng dẫn RISC và CISC
- Tính toán bộ hướng dẫn phức tạp (CISC)
- Tính toán bộ hướng dẫn giảm (RISC)
Hệ thống nhúng là trái tim và cốt lõi của hầu hết các sản phẩm điện tử hiện có trên thị trường. Đó là việc thực hiện kỹ thuật trong đó phần cứng đáp ứng phần mềm. Chúng ta bị bao quanh bởi một thế giới các hệ thống nhúng, với các máy tính mini trong khóa cửa sinh trắc học, máy bay, ô tô, máy điều hòa nhịp tim, v.v. Những hệ thống nhỏ, thông minh và mạnh mẽ này giúp chúng ta thực hiện các công việc hàng ngày.
Đã bao giờ suy nghĩ về cách cơ thể chúng ta hoạt động, hệ thống thần kinh, não bộ và khả năng đa nhiệm vụ. Nếu bạn kết hợp tất cả các chức năng này, bạn sẽ có được một bức tranh tổng thể về một hệ thống nhúng sinh học. Bộ não của chúng ta che giấu chi tiết phức tạp về hoạt động diễn ra bên trong nó nhưng vẫn cho phép chúng ta kiểm soát nó ở mức tối đa. Sự phức tạp tương tự cũng xảy ra đối với bộ xử lý hoặc bộ điều khiển được sử dụng trong các hệ thống nhúng. Chúng ẩn các chi tiết phức tạp và cung cấp cho chúng tôi một giao diện cấp cao để làm việc. Đối với mức độ trừu tượng, người ta có thể liên hệ cách mã để thêm hai số trong ngôn ngữ lập trình mức cao khiến các thanh ghi trong chip xử lý các bit và đưa ra đầu ra trở lại cho người dùng.
Kiến trúc bộ xử lý
Bộ xử lý trung tâm, đề cập đến cả bộ vi xử lý và vi điều khiển, thực hiện các tác vụ cụ thể với sự trợ giúp của Bộ điều khiển (CU) và Bộ logic số học (ALU). Khi các lệnh được gửi từ RAM, CPU hoạt động với sự trợ giúp của hai đơn vị trợ giúp của nó bằng cách tạo các biến và gán giá trị và bộ nhớ cho chúng. Điều thực sự quan trọng là phải biết cách CPU thực hiện tất cả các hành động này với sự trợ giúp của kiến trúc của nó. Nếu bạn muốn biết thêm về cách hoạt động của vi điều khiển, bạn có thể đọc bài viết cơ bản về vi điều khiển này.
Mỗi CPU đều có một bộ nhớ gắn liền với nó để lưu trữ chương trình và dữ liệu. Chương trình và dữ liệu làm việc với CPU để lấy đầu ra. Chương trình cung cấp hướng dẫn trong khi dữ liệu cung cấp thông tin cần làm việc. Để truy cập chương trình và dữ liệu, CPU sử dụng các bus, các bus này là các dây dẫn, chính xác hơn đây là các dấu vết dây như bạn có thể đã thấy trên bảng mạch in. Trong những năm qua, vi điều khiển và bộ vi xử lý đã phát triển bằng cách thích ứng với nhiều kiến trúc khác nhau, dựa trên ứng dụng hoặc yêu cầu thiết kế, việc lựa chọn vi điều khiển bị ảnh hưởng bởi kiểu kiến trúc được sử dụng trong đó. Hãy cùng điểm qua những kiến trúc phổ biến.
Kiến trúc Von-Neumann / Princeton
Cách thức mà CPU truy cập vào chương trình và dữ liệu, cho biết về kiến trúc của CPU. Trước đó, một bus duy nhất đã được sử dụng để truy cập vào chương trình và dữ liệu. Loại kiến trúc này được gọi là Kiến trúc Von Neumann hoặc đơn giản hơn là Kiến trúc Princeton. Một bus duy nhất để lấy mã và dữ liệu có nghĩa là chúng sẽ cản trở nhau và làm chậm tốc độ xử lý của CPU vì mỗi bên phải đợi cái kia hoàn thành việc tìm nạp. Hạn chế này còn được gọi là tình trạng thắt cổ chai Von-Neumann.
Kiến trúc Harvard
Để tăng tốc quá trình, Kiến trúc Harvard đã được đề xuất. Trong kiến trúc này có các bus dữ liệu riêng biệt cho dữ liệu và chương trình. Vì vậy, nó có nghĩa là kiến trúc này đề xuất sử dụng bốn xe buýt
- Một tập hợp các bus dữ liệu mang dữ liệu vào và ra khỏi CPU.
- Một tập hợp các bus địa chỉ để truy cập dữ liệu.
- Một tập hợp các bus dữ liệu để mang mã vào CPU.
- Một bus địa chỉ để truy cập mã.
Việc sử dụng bus địa chỉ và bus dữ liệu riêng biệt có nghĩa là thời gian thực thi của CPU thấp nhưng điều này đi kèm với chi phí phức tạp trong việc thiết kế kiến trúc. Kiến trúc Von Neumann nghe có vẻ hơi lười biếng nhưng nó có ưu điểm là thiết kế đơn giản.
Kiến trúc Harvard dễ thực hiện hơn rất nhiều khi CPU và các đơn vị bộ nhớ chia sẻ cùng một không gian hoặc RAM và ROM được tích hợp sẵn (trên chip) với đơn vị xử lý, chẳng hạn như trong bộ vi điều khiển có khoảng cách tính bằng micromet và milimét. Tuy nhiên, khó có thể triển khai cùng một kiến trúc khi bộ nhớ giữ mã nằm ngoài bộ xử lý, chẳng hạn như trong x86 IBM PC’s. Một tập hợp các dấu vết dây riêng biệt cho cả dữ liệu và địa chỉ trên bo mạch chủ sẽ làm cho bảng mạch phức tạp và đắt tiền. Hãy hiểu nó với một ví dụ về bộ xử lý.
Một bộ xử lý có bus dữ liệu 64 bit và bus địa chỉ 32 bit sẽ cần khoảng 100 bus (96 cho bus dữ liệu và địa chỉ và một vài bus khác cho các tín hiệu điều khiển) để triển khai kiến trúc Von-Neumann. Cấu trúc tương tự nếu được thực hiện với kiến trúc Harvard sẽ tốn khoảng 200 dấu vết dây kép với một số lượng lớn chân cắm ra khỏi bộ xử lý. Cũng vì lý do đó mà chúng ta không thấy kiến trúc Harvard thuần túy được triển khai cho PC và máy trạm. Thay vào đó, một kiến trúc Harvard sửa đổi được sử dụng trong đó phân cấp bộ nhớ với bộ nhớ đệm CPU được sử dụng để phân tách chương trình và dữ liệu. Phân cấp bộ nhớ phân tách lưu trữ dựa trên phân cấp thời gian phản hồi của các tiến trình.
Bản hướng dẫn kiến trúc
Khi chương trình (mã) được tải vào bộ nhớ của hệ thống (RAM), nó sẽ được CPU (đề cập đến cả bộ vi xử lý và vi điều khiển) tìm nạp để hoạt động trên dữ liệu, nó tương tự như chúng ta đưa ra hướng dẫn khi chúng ta huấn luyện chó các hành động và lệnh nhất định. Khi các hướng dẫn đó được thực hiện trên các bóng bán dẫn nhất định đi từ mức logic này sang mức logic khác để điều đó xảy ra. Vì vậy, về cơ bản với sự trợ giúp của hướng dẫn, lập trình viên giao tiếp với bộ xử lý. Mỗi CPU đều có tập lệnh riêng, một tập hợp các lệnh dựa trên kiến trúc và khả năng của nó.
CPU hiểu các lệnh này trong sự kết hợp của 0 và 1 còn được gọi là opcode. Đối với một lập trình viên con người, thực sự khó nhớ sự kết hợp của số 0 và số 1 đối với mọi lệnh liên quan đến CPU. Để giúp công việc của một lập trình viên trở nên dễ dàng, chúng tôi được cung cấp các giao diện cấp cao của các hướng dẫn này và trình biên dịch chuyển đổi chúng ở dạng 0 và 1 để xử lý. Ngoài ra trong tập lệnh của mỗi CPU, nó có một số lệnh giới hạn mà nó có thể hiểu được.
Hiệu suất của CPU
Bạn có thể đã nghe thuật ngữ xung nhịp của CPU liên quan đến hiệu suất của CPU. CPU thường có tốc độ xung nhịp tính bằng MHz (Mega-Hertz) hoặc GHz (Giga-Hertz) như xung nhịp 25 GHz. Con số liên quan đến tốc độ xung nhịp cho biết số lần xung nhịp bên trong CPU tích tắc trong chu kỳ mỗi giây. Tính thực tế của tốc độ xung nhịp có thể được hiểu là các lệnh được thực hiện dựa trên chu kỳ xung nhịp của CPU tỷ lệ với số chương trình CPU có thể chạy tại một thời điểm.
Các hoạt động của CPU phụ thuộc vào số lượng hướng dẫn được viết trong chương trình, nhiều hướng dẫn, nhiều thời gian thực hiện bởi CPU để thực hiện chúng. Nó cũng phụ thuộc vào số lượng chu kỳ đồng hồ mà mỗi lệnh được thực thi, một số lệnh nhất định cần nhiều chu kỳ đồng hồ để được thực thi hơn những lệnh khác nên chúng làm chậm hiệu suất của CPU. Các lệnh trong một chương trình và các chu kỳ cần thiết để thực hiện mỗi lệnh tỷ lệ nghịch với nhau. Thay đổi một cái sẽ ảnh hưởng đến cái khác. Đây là điểm mà ngành công nghiệp CPU được phân chia.
Kiến trúc bộ hướng dẫn RISC và CISC
Như đã nói ở trên Việc thực thi một chương trình và hiệu suất của CPU phụ thuộc vào số lượng lệnh trong một chương trình trong đó các lệnh được đề xuất cho CPU cụ thể đó như một phần của tập lệnh và yếu tố thứ hai là số chu kỳ đồng hồ trong mà mỗi lệnh được thực thi. Dựa trên hai yếu tố này, hiện có hai bộ hướng dẫn. Đầu tiên trong số đó là Tính toán tập lệnh phức hợp (CISC) trong khi cái còn lại là Tính toán tập lệnh rút gọn (RISC). Chúng ta hãy thảo luận chi tiết về từng kiến trúc này để hiểu sự khác biệt giữa Kiến trúc RIC và CISC.
Tính toán bộ hướng dẫn phức tạp (CISC)
CISC là viết tắt của Complex Instruction Set Computing. Động cơ chính của CISC là giảm số lượng lệnh mà một chương trình thực thi, điều này được thực hiện bằng cách kết hợp nhiều lệnh đơn giản như chế độ địa chỉ, tải, v.v. và để tạo thành một lệnh phức tạp duy nhất. Lệnh CISC bao gồm một loạt các lệnh đơn giản cũng như một số lệnh đặc biệt cần nhiều hơn một chu kỳ xung nhịp để thực thi. Các lệnh CISC có thể trực tiếp hoạt động trên bộ nhớ mà không cần sự can thiệp của các thanh ghi, có nghĩa là nó loại bỏ sự cần thiết của một số lệnh cơ bản như tải các giá trị và yêu cầu bộ nhớ (RAM). Các hướng dẫn CISC nhấn mạnh vào phần cứng hơn là phần mềm, có nghĩa là thay vì đặt tải lên trình biên dịch,CISC sử dụng bóng bán dẫn làm phần cứng để giải mã và thực hiện các lệnh. Tuy nhiên, vì lệnh phức tạp và bao gồm nhiều bước, chúng được thực hiện với số lượng chu kỳ đồng hồ nhiều hơn.
Một loại suy đơn giản để liên hệ là khi bạn đang nói để mở cuốn sách và đọc 3 thứ chương của 2 nd trang. Trong chuỗi hoạt động này, bạn thực hiện nhiều bước như tìm cuốn sách từ trong cặp của mình thay vì xáo trang sang chương 3 rồi chuyển sang trang thứ 2 của chương và sau đó bắt đầu đọc. Một loạt các bước nếu kết hợp trong một chỉ dẫn duy nhất của việc đọc trang 44 (đó là 2 nd số trang của 3 thứ chương), chúng tôi có được một hướng dẫn CISC.
Tính toán bộ hướng dẫn giảm (RISC)
Con chip tích hợp đầu tiên được Jack Kilby thiết kế vào năm 1958, nó là một bộ tạo dao động và vào năm 1970, Bộ vi xử lý thương mại đầu tiên của Intel ra mắt. Mặc dù khi bắt đầu các bộ xử lý không có CISC. Nhưng với nhu cầu tính toán cao, kiến trúc CISC ngày càng phức tạp và khó xử lý. Một bản thiết kế lại toàn bộ kiến trúc CISC được gọi là RISC do John Coke của IBM đưa ra. Do đó, để phân biệt giữa hai kiến trúc, thuật ngữ RISC và CISC đã được đưa ra.
RISC là viết tắt của tính toán tập lệnh giảm. Động cơ chính của RISC là tạo ra sự đồng nhất về kích thước và việc thực thi các hướng dẫn. Điều này được thực hiện bằng cách giới thiệu tập lệnh đơn giản có thể được thực hiện như một lệnh cho mỗi chu kỳ, điều này được thực hiện bằng cách chia nhỏ lệnh phức tạp như tải và lưu trữ thành lệnh khác nhau, trong đó mỗi lệnh mất khoảng một chu kỳ đồng hồ để thực thi. Các kiến trúc RISC bao gồm hướng dẫn đơn giản có cùng kích thước có thể được thực hiện trong một chu kỳ đồng hồ duy nhất. Máy dựa trên RISC cần nhiều RAM hơn CISC để giữ các giá trị khi nó tải từng lệnh vào thanh ghi. Thực hiện giảng dạy duy nhất cho mỗi chu kỳ cho RISC máy dựa lợi dụng pipelining(pipelining là quá trình trong đó lệnh tiếp theo được tải trước khi lệnh đầu tiên được thực thi, điều này làm tăng hiệu quả của việc thực thi). Kiến trúc RISC nhấn mạnh