Kiến trúc Harvard

Cụm từ kiến trúc Harvard được dùng để chỉ những kiến trúc máy tính mà trong đó phân biệt rõ ràng bộ nhớ dữ liệu và bộ nhớ chương trình, chúng có những đường truyền ("bus") riêng để truy cập vào bộ nhớ dữ liệu và bộ nhớ chương trình (ngược lại, kiến trúc von Neumann có bộ nhớ và bộ nhớ chương trình chung). Kiến trúc Harvard bắt đầu với máy tính Harvard Mark I, nó cho phép các lệnh được đặt trong các bìa đục lỗ (với 24 bit) và dữ liệu thì được chứa trong các thẻ (với 23 ký tự). Những máy tính đầu tiên này rất giới hạn dung lượng dữ liệu, nó được chứa hoàn toàn trong bộ xử lý trung tâm (CPU), và không cho phép truy cập vào khu vực chứa lệnh (chương trình) như với dữ liệu (làm cho việc tạo, load, sửa chữa, v.v. toàn bộ chương trình phải được thực hiện offline).

Trong một máy tính sử dụng kiến trúc von Neumann, CPU có thể đọc một lệnh, hoặc đọc/ghi dữ liệu từ bộ nhớ. Tuy vậy, cả hai quá trình tương tác với lệnh hoặc với dữ liệu, không thể thực hiện cùng lúc, vì nó sử dụng chung một đường truyền và bộ nhớ. Trong một máy tính kiến trúc Harvard, CPU có thể vừa đọc một lệnh, vừa truy cập dữ liệu từ bộ nhớ cùng lúc. Một máy tính kiến trúc Harvard có thể chạy nhanh hơn, bởi vì nó có thể thực hiện ngay lệnh tiếp theo khi vừa kết thúc lệnh trước đó. Tốc độ được tăng lên nhưng phải trả giá bằng sự thiết kế phần cứng phức tạp hơn (cụ thể nhất mà chúng ta thấy, đó là việc phải thiết kế 2 bus khác nhau cho dữ liệu và chương trình).

Những năm gần đây, tốc độ CPU tăng lên rất nhiều lần so với tốc độ truy cập vào bộ nhớ chính. Người ta cần quan tâm đến việc giảm số lần truy cập vào bộ nhớ để đảm bảo tốc độ hoạt động của CPU. Nếu, trong cùng một lúc, mỗi lệnh của CPU cần phải truy cập vào bộ nhớ 1 lần, vậy thì việc tăng tốc độ CPU chẳng còn ý nghĩa gì nữa, bởi vì nó luôn luôn bị giới hạn bởi việc truy cập vào bộ nhớ.

Bộ nhớ có thể được thiết kế để có tốc độ truy cập cao, nhưng nó đồng nghĩa với việc giá sản xuất sẽ cao. Giải pháp là cung cấp một dung lượng nhỏ bộ nhớ đệm, với tốc độ truy cập rất cao, và chúng ta gọi đó là cache (bộ nhớ đệm). Khi bộ nhớ CPU cần tương tác đang nằm trong cache, vì việc tương tác vào đó tốn ít thời gian hơn rất nhiều lần so với khi cache phải thay đổi và lấy dữ liệu từ bộ nhớ chính đưa vào. Việc điều chỉnh cache là một vấn đề quan trọng trong việc thiết kế máy tính.

Những thiết kế chip CPU tốc độ cao ngày này thường kết hợp hai kiến trúc Harvard và von Neumann. Bộ nhớ cache trên chip được phân thành cache chương trình và cache dữ liệu. Kiến trúc Harvard được dùng khi CPU truy cập vào cache. Tuy nhiên, trong trường hợp không có cache, dữ liệu được lấy từ bộ nhớ chính, mà bộ nhớ chính không được chia thành vùng nhớ chương trình và vùng nhớ dữ liệu. Như vậy, kiến trúc von Neumann được dùng ở tầm vực truy cập bộ nhớ chính.

Kiến trúc Harvard cũng thường được dùng trong một số DSP chuyên dụng, thường dùng trong các sản phẩm xử lý âm thanh, hình ảnh. Ví dụ như vi xử lý Blackfin của Analog Devices Inc. dùng kiến trúc Harvard.

Thêm vào đó, hầu hết các vi điều khiển thông dụng được dùng trong các ứng dụng điện tử như là PIC được sản xuất bởi Microchip Technology Inc và AVR của hãng Atmel Corporation, được phát triển dựa trên kiến trúc Harvard. Những vi xử lý này có đặc tính là có lượng bộ nhớ dữ liệu và bộ nhớ chương trình nhỏ, rất phù hợp với kiến trúc Harvard và tập lệnh RISC để đảm bảo hầu hết các lệnh được thực hiện trong 1 chu kỳ máy. Việc phân chia bộ nhớ ra thành bộ nhớ chương trình và bộ nhớ dữ liệu có thể làm cho bus dữ liệu và bus chương trình có kích thước băng truyền khác nhau. Ví dụ như các vi điều khiển PIC có bus dữ liệu 8-bit (phụ thuộc vào dòng PIC), nhưng bus chương trình có thể là 12-bit, 14-bit hoặc 16-bit word. Điều này cho phép mỗi một lệnh đơn có đủ chỗ chứa cho một giá trị hằng. Những CPU RISC khác, ví dụ như ARM, thường cần ít nhất 2 lệnh để load một hằng số đủ kích thước..