Chương 2: Cấu Trúc Và Hoạt động Của Vi Xử Lý
Có thể bạn quan tâm
Trang chủ Tìm kiếm Trang chủ Tìm kiếm Chương 2: Cấu trúc và hoạt động của vi xử lý doc 34 512 KB 14 213 4.9 ( 11 lượt) Xem tài liệu Nhấn vào bên dưới để tải tài liệu Tải về Đang chuẩn bị: 60 Bắt đầu tải xuống Để tải xuống xem đầy đủ hãy nhấn vào bên trên Chủ đề liên quan cấu trúc vi xử lý Hoạt động của Vi xử lý vi xử lý Cấu trúc vi xử lý Vi xử lý Pentium Vi xử lý intel
Nội dung
CHƯƠNG II: CẤU TRÚC VÀ HOẠT ĐỘNG CỦA VI XỬ LÝ. 2.1. SƠ ĐỒ CẤU TRÚC TỔNG QUÁT CỦA VI XỬ LÝ. Sơ đồ khối của một bộ vi xử lý truyền thống 8 bit được trình bày trên hình 2.1. Sơ đồ khối này đặc trưng cho hầu hết các bộ vi xử lý 8 bit đã có trên thị trường như 8085, 8088/8086 và Z80… Các bộ vi xử lý các thế hệ sau sẽ có cấu trúc bên trong khác đi nhưng vẫn giữ được một số nguyên tắc hoạt động cơ bản của sơ đồ này. MARs Data Register SP PC BIU Internal BUS External BUS Acc Queue Cờ ALU CU Các tín hiệu điều khiển và định thời Hình 2.1. Sơ đồ khối của một bộ vi xử lý 8 bit truyền thống Vi xử lý là một mạch số có thể thực hiện nhiều chức năng số khác nhau. Nó sẽ thực hiện một bài toán, một công việc khi được cung cấp một chương trình. Một chương trình là một chuỗi các tín hiệu nhị phân nối tiếp nhau, mỗi chuỗi nhị phân sẽ yêu cầu (cho phép) một chức năng của vi xử lý hoạt động. Quá trình làm việc của vi xử lý bao gồm hai chu kỳ chính lặp lại một cách liên tục đó là: 15 - Chu kỳ lấy các mã lệnh. - Chu kỳ thực hiện các chức năng mà lệnh yêu cầu. Tương ứng với hai chu kỳ trên có thể chia vi xử lý ra hai phần chính: Đơn vị thực hiện lệnh EU (Execution Unit), và đơn vị giao tiếp BUS (Bus Interface). Đơn vị thực hiện lệnh bao gồm bộ giải mã lệnh, hay còn gọi là đơn vị điều khiển CU (Control Unit), sẽ đưa ra các tín hiệu cho phép chọn các khối trong VXL được phép hoạt động tùy theo mã lệnh mà nó nhận được từ BIU. Tức là với các lệnh khác nhau, CU sẽ chọn ra các khối khác nhau trong CPU hoạt động để thực hiện chức năng của lệnh đó. Một bộ phận quan trọng khác của EU là đơn vị số học và logic (ALU - Arithmetic Logic Unit ), ALU là nơi thực hiện tất cả các phép tính số học và logic mà chương trình yêu cầu. Các toán hạng trong các phép tính mà ALU thực hiện có thể nằm trong các thanh ghi dữ liệu, trong bộ nhớ hoặc được xác định trong chính mã lệnh. Các thanh ghi là các ô nhớ có tốc độ truy xuất rất nhanh, nằm ngay bên trong VXL. Chúng được dùng làm nơi lưu trữ các toán hạng cung cấp cho ALU, lưu trữ các dữ liệu vào ra VXL, hoặc lưu trữ các địa chỉ cho phép CPU truy cập bộ nhớ hoặc I/O nhanh chóng hơn. EU không nối với thế giới bên ngoài, nó nhận lệnh từ bộ nhớ lệnh trong BIU. Khi lệnh cần thâm nhập bộ nhớ hay ngoại vi EU sẽ yêu cầu BIU thực hiện. Bộ nhớ lệnh là các ô nhớ chuyên để cất giữ các mã lệnh của chương trình đang thực hiện. Có loại vi xử lý bộ nhớ lệnh bao gồm nhiều ô được gọi là hàng đợi lệnh (Queue Instruction) . Hàng đợi này hoạt động theo nguyên tắc FIFO(Fist Input Fist Output – vào trước ra trước), khi EU lấy đi 1 byte lệnh thì BIU sẽ tự động lấy byte lệnh kế tiếp của chương trình lấp đầy vào hàng đợi. Với hàng đợi lệnh các chu kỳ giải mã lệnh và lấy lệnh có thể xảy ra đồng thời, nâng cao tốc độ vi xử lý. Ở một số loại vi xử lý bộ nhớ lệnh chỉ có 1 byte được gọi là thanh ghi lệnh IR (Instruction Register), với loại CPU này BIU phải chờ EU thực hiện xong lệnh hiện hành mới được phép lấy vào lệnh mới. Đơn vị giao tiếp BUS: BIU thực hiện tất cả các thao tác về BUS do EU yêu cầu. Ngoài ra trong thời gian EU đang thực hiện lệnh, BIU sẽ tự động truy cập tới bộ nhớ lệnh lấy các mã lệnh của chương trình sắp vào bộ nhớ lệnh, sẵn sàng cung cấp cho EU thực hiện. Để giao tiếp bên ngoài BIU cung cấp cho bộ nhớ và ngoại vi các tín hiệu địa chỉ, dữ liệu , điều khiển cần thiết: - Địa chỉ cung cấp ra bên ngoài thông thường được cung cấp từ một thanh ghi địa chỉ do CU chọn, một số trường hợp có thể từ các thanh ghi dữ liệu, hoặc từ ngay mã lệnh mà CU nhận được. - Dữ liệu được truyền ra ngoài từ một thanh ghi dữ liệu, lấy vào một thanh ghi dữ liệu, hoặc lấy trực tiếp vào ALU trong các lệnh số học và logic. - Các tín hiệu điều khiển sẽ được định thời trong bộ điều khiển BUS tùy theo lệnh cụ thể. Riêng các trường hợp lấy mã lệnh, địa chỉ được BIU cung cấp từ bộ đếm chương trình PC (Program Counter), và lấy mã lệnh từ bộ nhớ vào thanh ghi lệnh (hoặc hàng đợi lệnh). Khi bắt đầu hoạt động PC = 0, khi lấy vào 1 byte lệnh PC tăng lên 1. PC sẽ được thiết lập giá trị mới, khi có các lệnh rẽ nhánh chuyển điều khiển chương trình 16 Trong một số vi xử lý bộ đếm chương trình còn được gọi là con trỏ lệnh IP (Instruction Pointer). Để làm việc được VXL phải hoạt động chung với thiết bị khác như là bộ nhớ và ngoại vi, để tạo thành hệ thống VXL. Khi đó bộ vi xử lý được gọi là đơn vị xử lý trung tâm CPU (Central Processing Unit ). Phần kế tiếp sẽ miêu tả cấu trúc và hoạt động cụ thể, của các bộ phận chính trong một CPU. 2.2. CHỨC NĂNG, HOẠT ĐỘNG CỦA CÁC THÀNH PHẦN BÊN TRONG VI XỬ LÝ. 2.2.1. Các thanh ghi (Registers). Các thanh ghi là một bộ phận rất quan trọng trong một CPU. Chúng là một số ít các ô nhớ có tốc độ truy xuất rất nhanh, cách đánh địa chỉ đơn giản để CPU có thể truy xuất dữ liệu một cách nhanh chóng. Các thanh ghi được cho phép hoạt động từ các bộ chọn MUX (Multiplex) được điều khiển từ đơn vị điều khiển CU. Chúng được chọn nhờ số ít các bit nhị phân trong mã lệnh. CPU có càng nhiều thanh ghi, thì tốc độ thực hiện một chương trình càng cao, do giảm được thời gian truy xuất các hằng, biến ngoài bộ nhớ. Giảm được số byte lệnh do không phải cung cấp địa chỉ các dữ liệu toán hạng. Nhưng tất nhiên khi số lượng thanh ghi quá lớn thì việc truy cập chúng cũng trở nên phức tạp như đối với các ô nhớ. Để dễ dàng truy xuất, các thanh ghi được chia ra các nhóm với các chức năng riêng biệt nào đó. Các hãng sản xuất khác nhau đưa ra các tên gọi các thanh ghi khác nhau. Nhưng thông thường CPU 8 bit nào cũng ghi các thanh ghi với các chức năng sau: - Bộ đếm chương trình (PC Program Counter ). Hay gọi là con trỏ lệnh (IP Instruction Pointer). - Thanh ghi lệnh (IR Instruction Register) Một số CPU là hàng đợi lệnh (Instruction Queue). - Thanh ghi địa chỉ bộ nhớ (MAR-Memory Address Register) . - Thanh ghi con trỏ ngăn xếp (SP-Stack Pointer). - Thanh ghi chỉ số (Index Register). - Thanh ghi đa dụng (General Register). - Thanh ghi chứa (Accumulator Register). - Thanh ghi cờ (Flag Register). Các thanh ghi đều được nối chung lên BUS nội trong CPU theo sơ đồ hình 2.2. Thanh ghi bộ đếm chương trình (PC). Ở các CPU 8 bit bộ đếm chương trình thường là 16 bit, nó có nhiệm vụ tạo ra các địa chỉ cung cấp tới bộ nhớ để CPU có thể đọc vào các byte lệnh của chương trình. Sau khi đọc xong một byte lệnh, PC luôn trỏ tới địa chỉ của byte lệnh kế tiếp cần lấy vào. Các CPU có 16 đường địa chỉ, PC sẽ được nối thẳng tới bộ đệm địa chỉ, giá trị của nó sẽ được cung cấp thẳng ra Bus địa chỉ để đưa tới bộ nhớ chương trình. Tức là chương trình có thể nằm bất cứ nơi đâu trong vùng nhớ 64KB mà CPU quản lý. Một số CPU 8 bit quản lý bộ nhớ bằng 20 đường địa chỉ, địa chỉ vật lý 20 bit này được tính toán từ một địa chỉ đoạn và một địa chỉ offset. Địa chỉ đoạn sẽ được dịch trái 4 bit rồi cộng với địa chỉ offset để cung cấp địa chỉ 20 bit cho bộ đệm địa chỉ. Trong trường hợp đọc mã lệnh, địa chỉ đoạn thường được chỉ định trong thanh ghi đoạn lệnh (CS: Code Segment), và địa chỉ offset sẽ chứa trong thanh ghi con trỏ lệnh. 17 Bit 0 Bit 1 ……… Bit n Nạp thanh ghi Chuyển dữ liệu thanh ghi ra BUS 0 1 BUS nội của CPU n Hình 2.2. Nối ghép của thanh ghi tới Bus nội. Quá trình đổi địa chỉ trong CPU: CPU được chế tạo để hoạt động theo các chương trình định sẵn. Trong các hệ thống CPU 8 bit (8 đường dữ liệu), chương trình đơn giản bao gồm các byte (8 bit) xếp lần lượt trong các vùng nhớ có thể địa chỉ hóa được. Khi hệ thống bắt đầu hoạt động, bộ đếm chương trình sẽ được khởi động một giá trị qui định trước trỏ tới lệnh đầu tiên mà hệ thống sẽ thực hiện. Khi không có các cơ chế điều khiển chương trình, thì sau khi đọc xong một byte lệnh PC sẽ được tự động tăng lên 1, và như vậy chu kỳ đọc lệnh tiếp theo sẽ lấy lệnh tại địa chỉ kế tiếp trong bộ nhớ. Có thể có các chương trình được thực hiện từ tuần tự từ đầu đến cuối, lúc đó PC sẽ tuần tự tăng lên sau mỗi lần lấy vào 1 byte lệnh như một bộ đếm bình thường. Các chương trình như vậy rất ít xảy ra trong thực tế, do các bài toán thực tế luôn phải có phương hướng giải quyết khác nhau với các điều kiện khác nhau. Có rất nhiều lệnh gây ra việc thay đổi địa chỉ không theo qui luật tuần tự. Sự thay đổi tuần tự này không gây nên một sự rối loạn nào, BUS địa chỉ của CPU dễ dàng đưa ra ngay một địa chỉ bất kỳ, dù cách xa bước nhảy tuần tự bình thường như thế nào đi nữa. Và các bộ nhớ bán dẫn với nguyên tắc truy cập ngẫu nhiên cũng sẽ chấp nhận cơ chế này. Có ba cách để đổi địa chỉ chương trình không theo qui luật tăng tuần tự là: - Đổi địa chỉ bằng lệnh nhảy và rẽ nhánh. - Đổi địa bằng chương trình con. - Đổi địa chỉ bằng ngắt. Đổi địa chỉ bằng lệnh nhảy và rẽ nhánh: Đổi địa chỉ bằng lệnh nhảy được chia ra hai loại: Nhảy tuyệt đối (Jump) và nhảy tương đối (Jump Relative) Khi CPU nhận được mã của lệnh nhảy tuyệt đối thì hai byte tiếp theo sẽ được gửi đến nạp vào bộ đếm chương trình PC. Tức là PC được thiết lập tức thời một giá trị mới, giá trị này có thể là một số bất kỳ trong khoảng 0000H .....FFFFH. bất chấp giá trị cũ. Và byte lệnh tiếp theo được lấy vào sẽ nằm ở địa chỉ mới này. 18 Khi CPU nhận được lệnh nhảy tương đối, thanh ghi PC sẽ được cộng thêm hoặc trừ đi một lượng nào đó. Lượng thêm vào hay bớt đi thường là một số nhị phân 7 bit chỉ thị trong mã lệnh, phép trừ sẽ được thực hiện nếu bit cao nhất của byte này bằng 1, và cộng thêm nếu bit này bằng 0. Tức là điều khiển chương trình sẽ chuyển đến địa chỉ mới nằm trong khoảng từ -128.....127 byte so với vị trí hiện tại của lệnh nhảy. Đổi địa chỉ bằng rẽ nhánh được thực hiện bằng các lệnh nhảy có điều kiện. Tức là CPU thực hiện các lệnh nhảy tuyệt đối hoặc tương đối giống như trên nếu thỏa mãn điều kiện, nếu điều kiện không thỏa PC sẽ tiếp tục được tăng lên 1 theo qui luật tuần tự. Điều kiện ở đây là các cờ trạng thái bằng 1 hoặc bằng 0 (Sẽ xét tới trong phần thanh ghi cờ ). Ví dụ sau một lệnh so sánh hai số, có thể thực hiện lệnh JE (Jump Equal- Nhảy nếu bằng). Lúc này PC có giá trị mới theo lệnh nhảy nếu hai số so sánh bằng nhau, ngược lại PC sẽ tăng lên 1. Đổi địa chỉ bằng chương trình con: Cách đổi địa chỉ này được thực hiện bằng các lệnh gọi (Call) và quay về (Return). Khi có một đoạn lệnh nào đó cần sử dụng trong nhiều lần trong một chương trình, Để tránh viết lặp lại đoạn lệnh đó nhiều lần, có thể viết nó dưới dạng một chương trình con. Khi cần thực hiện đoạn lệnh này thì gọi nó bằng lệnh gọi (CALL), tương tự như một lệnh nhảy tới đầu chương trình con, thực hiện xong điều khiển sẽ được chuyển trở về chương trình chính bằng lệnh quay về. Khi gặp lệnh gọi giá trị của PC sẽ được lưu trữ trong bộ nhớ tại một nơi đặc biệt gọi là ngăn xếp, rồi được nạp giá trị mới được chỉ thị trong mã lệnh gọi, chương trình sẽ được chuyển tới địa chỉ mới bất kỳ trong khoảng từ 0000.....FFFFH giống như lệnh nhảy. Khi có lệnh quay về, giá trị PC sẽ được phục hồi từ đỉnh ngăn xếp, chương trình sẽ quay về nơi nó đã chuyển đi (quay về lệnh nằm kế lệnh gọi). Các lệnh gọi chương trình con cũng có hai dạng không điều kiện và có điều kiện giống như các lệnh nhảy. Đổi địa chỉ bằng ngắt: Đổi địa chỉ bằng ngắt gần giống như việc đổi địa chỉ bằng các lệnh gọi và quay về. Thanh ghi PC cũng được lưu trữ và nạp giá trị mới khi có phục vụ ngắt, và được phục hồi khi có lệnh quay về. Khác biệt ở chỗ phục vụ ngắt được gọi bằng xung phần cứng, mà không phải bằng lệnh gọi như trong chương trình con. Địa chỉ chương trình phục vụ ngắt có thể là một địa chỉ cố định được qui định trước, hoặc được lấy từ vùng nhớ gọi là bảng vector ngắt. Có hai loại ngắt: ngắt không che, và ngắt có thể che được bằng phần mềm: Với ngắt không che, chương trình ngắt luôn được thực hiện khi có tín hiệu yêu cầu. Còn với ngắt che, khi có tín hiệu yêu cầu CPU sẽ kiểm tra cờ ngắt, nếu cờ ngắt =1 chương trình ngắt thực hiện, cờ ngắt bằng 0 chương trình ngắt sẽ bị bỏ qua. Cờ ngắt có thể thiết lập hay xóa bằng lệnh phần mềm. Các cơ chế ngắt sẽ được mô tả kỹ trong phần hệ thống ngắt của vi xử lý. Thanh ghi lệnh IR (Instruction Pointer). Thanh ghi lệnh nằm ở ngõ vào của bộ giải mã lệnh. Trong bộ nhớ, các lệnh của 1 chương trình bao gồm hai phần: mã hoạt động (Op Code) và phía sau là các toán hạng (Operand). Op Code sẽ phân biệt các lệnh: Số học, logic, di chuyển dữ liệu, bit, nhảy, chương trình con ….Còn các toán hạng sẽ chỉ ra dữ liệu cần xử lý trong lệnh nằm ở đâu hoặc bằng bao nhiêu. Thanh ghi lệnh sẽ là nơi các mã lệnh đi qua (từ ngoài bộ nhớ vào bộ giải mã lệnh). Còn các toán hạng sẽ đi tới các khối khác nhau của vi xử lý tùy theo mã lệnh. Ví dụ một lệnh cộng sẽ có 1 byte Op Code để phân biệt với các lệnh khác, và các byte tiếp theo sẽ chỉ ra toán hạng của phép cộng. Nó có thể là 1 giá trị sẽ được đưa thẳng tới ALU, hoặc có thể là 1 địa chỉ để lấy dữ liệu từ bộ nhớ cung cấp 19 cho ALU, khi đó địa chỉ này sẽ được đưa tới BIU để truy cập dữ liệu, cũng có thể phần toán hạng chỉ thị dữ liệu cho lệnh nằm trong một thanh ghi dữ liệu ngay bên trong CPU. Trong mã lệnh của vi xử lý 8 bit thường phần Op code có kích thước giống nhau (1byte). Với 8 bit sẽ phân biệt 256 tổ hợp, có nghĩa là CPU 8 bit có khả năng xử lý dễ dàng 256 lệnh. Trong thực tế số lệnh của CPU 8 bit ít hơn con số này mà vẫn đủ cho tất cả các công việc. Có rất nhiều sự trùng lặp trong các mã lệnh, chúng bao gồm nhiều công việc giống nhau nhưng sử dụng các toán hạng khác. Trong thực tế thường chỉ có khoảng hơn 20 nhiệm vụ khác nhau cho 1 CPU, còn lại là các kiểu khác nhau của cùng một nhiệm vụ. Trong một số CPU 8 bit thanh ghi lệnh được thay thế bằng hàng đợi lệnh, Khi đó tất cả các byte mã lệnh của chương trình đều qua hàng đợi lệnh (kể cả mã hoạt động và các toán hạng). Khi bộ giải mã lệnh nhận được mã hoạt động, các toán hạng sẽ được chuyển từ hàng đợi lệnh tới các nơi khác nhau trong CPU. Với một hàng đợi lệnh, quá trình giải mã lệnh và quá trình lấy lệnh có thể thực hiện một cách đồng thời, tốc độ hoạt động của CPU sẽ được tăng lên. Start Nạp MAR1 = 1000 Nạp MAR2 = 2000 Nạp dữ liệu tại ô nhớ có địa chỉ MAR1 = 1000 vào Acc Nạp dữ liệu từ Acc vào ô nhớ có địa chỉ MAR2 Tăng MAR1 Tăng MAR2 Yes Đủ 10 ô nhớ chưa ? No Start Hình 2.3: Giải thuật di chuyển 10 ô nhớ từ địa chỉ 1000 qua địa chỉ 2000 Thanh ghi địa chỉ bộ nhớ: (MAR: Memory Address Register). Thanh ghi MAR được để sử dụng để giữ địa chỉ của ô nhớ cần truyền dữ liệu với CPU trong một chương trình. Dữ liệu này có thể là dữ liệu vào ra thông thường trong các lệnh đọc ghi, hoặc là các toán hạng trong các lệnh số học và logic. Thay vì phải chỉ thị địa chỉ cụ thể của ô nhớ cần truy cập trong mã lệnh, chương trình có thể sử dụng MAR để lưu trữ địa chỉ này. Trong chu kỳ truy xuất, giá trị trong thanh ghi này sẽ đưa ra BUS địa chỉ để xác định ô nhớ cần truy cập. Như vậy sẽ giảm được độ dài của mã 20 lệnh, tức là giảm được độ lớn của chương trình, làm tăng tốc độ thực hiện chương trình và giảm dung lượng lưu trữ cần thiết cho hệ thống. Trong một số CPU các thanh ghi địa chỉ bộ nhớ nằm ngay ở nhóm các thanh ghi đa năng. Một số CPU khác các thanh ghi này là chuyên dụng. Các lệnh sử dụng thanh ghi địa chỉ bộ nhớ bao gồm ít byte lệnh và được thực hiện nhanh chóng hơn các lệnh chỉ ra trực tiếp địa chỉ của ô nhớ. Đặc biệt trong các lệnh thao tác chuỗi dữ liệu các thanh ghi này đóng một vai trò rất quan trọng. Nhờ những thanh ghi này mà CPU có thể di chuyển, so sánh một khối dữ liệu bằng một lệnh đơn giản với độ dài chỉ 1 hoặc 2 byte. Ví dụ lưu đồ hình 2.3 sử dụng một chương trình chuyển 10 byte từ vùng nhớ 1000H qua vùng nhớ 2000H. Trong đó vòng lặp kể từ bước thứ ba trở đi là của một lệnh di chuyển chuỗi. Thanh ghi con trỏ ngăn xếp (SP-Stack Pointer). Tất cả các CPU đều có một vùng nhớ RAM làm nhiệm vụ ngăn xếp. Vùng nhớ này hoạt động theo nguyên tắc LIFO (Last Input Fist Output- vào trước ra sau), dữ liệu nào đưa vào trước tiên sẽ được lấy ra sau cùng. Để thực hiện chức năng này CPU sử dụng thanh ghi con trỏ ngăn xếp. Vào đầu chương trình thanh ghi này sẽ được gán một giá trị trỏ tới một địa chỉ của vùng nhớ RAM. Ngăn xếp sẽ được truy cập bằng những lệnh đặc biệt là PUSH (nạp dữ liệu vào) và POP (lấy dữ liệu ra). Khi có dữ liệu nào được nạp vào ngăn xếp SP tự động giảm đi, ngược lại khi lấy dữ liệu ra khỏi ngăn xếp SP sẽ được tự động tăng lên. Ví dụ vào đầu chương trình SP được gán 0100H, giá trị của SP sẽ trỏ đến ô nhớ có địa chỉ 0100H (hình 2.4a). Khi CPU lệnh nạp thanh chứa Acc vào ngăn xếp(PUSH Acc), giá trị của Acc sẽ được cất vào ô nhớ có địa chỉ SP-1 =00FFH (hình 2.4b), và giá trị của SP bây giờ sẽ là 00FFH. Nếu lấy giá trị ra một thanh ghi đa năng, SP sẽ tăng lên 1 trở lại như cũ (hình 2.4c). (a) (b) Memory Memory Push Acc Pop Reg. Acc SP 100H (c) Memory Reg. Acc 0FFH SP 100H Hình 2.4: Thao tác với ngăn xếp Khi gặp các lệnh gọi chương trình con hoặc yêu cầu ngắt, giá trị của bộ đếm chương trình sẽ được nạp vào đỉnh của ngăn xếp, SP sẽ tự động giảm đi 2. Khi có lệnh quay về (Return), thanh ghi PC sẽ được phục hồi từ đỉnh ngăn xếp. Vì vậy chương trình sẽ quay về chỗ đã gọi nó, nếu trong chương trình con không còn dữ liệu nào nạp vào mà chưa lấy được ra. Vậy trong chương trình con nếu nạp vào ngăn xếp cái gì, thì trước khi có lệnh quay về phải lấy hết ra. Nếu không thanh PC phục hồi từ đỉnh ngăn xếp sẽ 21 chuyển điều khiển của chương trình tới địa chỉ không được quản lý, mà không phải về nơi đã gọi nó. Thanh ghi chỉ số: (Index). Thanh ghi chỉ số cũng là một thanh ghi địa chỉ, được sử dụng để địa chỉ hóa các ô nhớ trong chương trình. Với CPU 8 bit thanh ghi chỉ số thường là16 bit. Khi thanh ghi chỉ số đã được nạp một giá trị nào đó, thì vùng nhớ 256 byte kể từ địa chỉ đó có thể truy cập tới bằng kiểu chỉ số. Tức là các lệnh yêu cầu thao tác với các dữ liệu trong vùng nhớ này, chỉ cần chỉ thị trong lệnh khoảng cách từ địa chỉ chứa trong thanh ghi chỉ số tới địa chỉ cần truy cập, mà không cần phải chỉ thị cụ thể địa chỉ của ô nhớ đó. Ví dụ khi thanh ghi chỉ số giữ giá trị 1000H, thì lệnh xử lý dữ liệu tại ô nhớ 1010H chỉ cần cung cấp chỉ số là 10H, mà không phải đưa ra giá trị 1010H như cách địa chỉ hóa thông thường. Có thể biểu diễn hoạt động địa chỉ hóa của thanh ghi chỉ số như hình 2.5. Internal Bus Index Register Bộ cộng Bus địa chỉ Hình 2.5: Cung cấp địa chỉ bằng thanh ghi chỉ số. Giá trị của thanh ghi chỉ số sẽ được cộng với khoảng cách từ ô nhớ cần thao tác, để cho ra địa chỉ cần thiết trong những lệnh có chế độ định vị địa chỉ chỉ số. Các thanh ghi đa năng (General Register). Các thanh ghi này thông thường chiếm một số lượng lớn trong các CPU. Các CPU 8 bit thông thường cũng có các thanh ghi đa năng 8 bit, các thanh ghi này cũng có thể ghép chung từng cặp để tạo thành các thanh ghi 16 bit . Tuy không có các chức năng chuyên dụng như các thanh ghi khác, nhưng chúng có thể thực hiện hầu hết các chức năng mà các thanh ghi khác đảm nhiệm . Thường thì các thanh ghi đa năng được sử dụng lưu trữ dữ liệu vào ra CPU, hoặc làm các biến tạm thời trong một chương trình. Ngoài ra khi sử dụng chung từng cặp chúng có thể là nơi lưu trữ dữ liệu, và làm các biến 16 bit, hoặc giữ địa chỉ của ô nhớ mà chương trình cần truy cập. Trong các lệnh về chuỗi thì chúng có thể được sử dụng làm các bộ đếm số lần lặp, địa chỉ trong các lệnh về chuỗi dữ liệu…. Thanh ghi chứa: (Accumulator Register). Thanh ghi chứa thường được các CPU sử dụng làm nơi chứa một toán hạng trong các lệnh số học và logic, tức là nó thường án ngữ một đầu vào của đơn vị số học và logic 22 ALU. Đồng thời thanh chứa còn được sử dụng để lưu kết quả cuối cùng của phép tính mà ALU vừa thực hiện. Với các chức năng này chiều dài các lệnh tính toán sẽ được giảm ngắn, do không phải chỉ thị cả hai toán hạng và nơi lưu trữ kết quả. Ngoài ra thanh chứa còn được sử dụng trong các phép quay dịch, và hầu hết các lệnh về di chuyển và xử lý dữ liệu như một thanh ghi đa năng thông thường. Các CPU trước đây chỉ có một thanh ghi chứa, nên các lệnh logic và số học bắt buộc phải di chuyển dữ liệu tới thanh ghi chứa. Càng ngày CPU càng có nhiều thanh chứa hơn, nên chương trình được thực hiện nhanh chóng hơn, do giảm bớt được các lệnh di chuyển dữ liệu đến thanh chứa. Thanh ghi cờ (Flag Register). Thanh ghi cờ còn được gọi là thanh ghi mã trạng thái CCR (Condition Code Register) bao gồm các bit độc lập. Mỗi bit chỉ có hai trạng thái 0 hoặc 1 được gọi là các cờ. Các cờ rất ít khi tác động lẫn nhau, chúng chỉ tác động một cách độc lập tùy theo trạng thái của các phép tính mà ALU thực hiện. Trạng thái các cờ là cơ sở để CPU thực hiện các quyết định, nếu thỏa điều kiện chương trình thực hiện theo hướng này, còn ngược lại sẽ theo một hướng khác, tạo ra sự rẽ nhánh cho các chương trình phù hợp với bài toán thực tế. Trong CPU 8 bit thường thanh ghi cờ 8 bit, số lượng các bit được sử dụng và các kiểu cờ hiệu khác nhau tùy thuộc vào từng loại CPU. Các cờ thông thường của một CPU gồm: Cờ nhớ (Carry Flag). Cờ nhớ được sử dụng làm bit dữ trữ khi kết quả các phép tính mà ALU thực hiện vượt ra ngoài giới hạn lưu trữ cho phép của thanh chứa. Ví dụ khi sử dụng các thanh ghi 8 bit để cộng hai số 8 bit, kết quả có thể là 9 bit và cờ C sẽ giữ bit thứ 9. Tương tự khi cộng hai số 16 bit cờ C sẽ giữ bit thứ 17 của kết quả. Cờ nhớ cũng được thiết lập mức 1 khi ALU thực hiện phép trừ, giảm hoặc so sánh có kết quả âm. Tức là cờ CF =1 khi số bị trừ nhỏ hơn số trừ. Ngoài ra cờ nhớ còn được sử dụng như bit thứ 9 trong các lệnh quay dịch, ví dụ khi dịch trái bit ở MSB sẽ bị rớt ra ngoài, cờ C sẽ giữ lấy bit đó. Cờ dấu S ( Sign Flag). CPU có hai cách biểu diễn một số: Cách thứ nhất nó dùng tất cả các bit của một thanh ghi để biểu diễn một số dương. Ví dụ một thanh ghi 8 bit có thể biểu diễn các số thập phân dương từ 1 tới 255. Cách thứ hai CPU sử dụng bit trọng số cao nhất để làm bit dấu. Ví dụ như thanh ghi 8 bit thì bit D7 sẽ là bit dấu. Khi D7 ở mức 0 thì các bit D0...D6 giữ một số nhị phân dương nằm trong khoảng 0 tới 127. Khi D7=1 thì thanh ghi sẽ giữ số nhị phân âm trong khoảng –128 tới -1 Tổ hợp nhị phân từ 0000 0000......0111 1111 biểu diễn các số từ 0...127 tổ hợp tiếp theo 1000 0000 trong số có dấu được xem như là -128 và tiếp theo 1000 0001 = -127. Khi tiếp tục đếm lên tới tổ hợp 1111 1111 = -1. Cờ dấu S sẽ báo khi dấu thay đổi, cờ dấu =0 khi kết quả phép tính trong bộ chứa là số dương (bit D7=0). Nếu bit D7=1 kết quả là một số âm 7 bit thì SF=1. Dựa vào cờ này mà các chương trình này sẽ có cách tính thích hợp với các số có dấu. Cờ tràn V (overflow) . Cờ tràn VF sẽ được thiết lập mức 1 khi có sự tràn bit 1 từ D6 sang D7, tức là khi dấu của số 7 bit thay đổi từ (+) sang (-). Cờ VF luôn được thiết lập khi có tràn, nó được 23 dùng cho các số được biểu diễn theo cách 7 bit hay cách 8 bit. Vì thế cần phải chú ý để nó không ảnh hưởng gì đến chương trình. Cờ tràn sẽ bị xóa khi D7 trở về mức 0 Cờ ZERO ZF. Khi ALU thực hiện các phép tính có kết quả trong thanh ghi chứa bằng 0, lúc đó cờ Z sẽ được thiết lập lên mức 1. Còn ngược lại cờ Z=0. Thông thường cờ Z để thông báo trạng thái so sánh bằng, kết quả của phép trừ = 0 , các phép logic = 0. Khi thực hiện các phép cộng, mặc dù kết quả có dư ra bit thứ 9 nhưng nếu thanh chứa có giá trị 0 thì cờ ZF vẫn = 1. Ví dụ cộng FF+01 kết quả là 100 thì số 1 ở cờ CF còn thanh chứa có giá trị 00 do đó cờ ZF =1. Cờ Z đặc biệt tiện lợi cho các vòng lặp sử dụng bộ đếm xuống. Vòng lặp có thể giảm một thanh ghi nào đó, cho đến khi nó trở về 0 thì ngưng. Với các công dụng như trên ZF cùng với CF được sử dụng rất nhiều trong các chương trình. Cờ nửa nhớ HF (Half Carry Flag ). Cờ nửa nhớ trong một số CPU còn được gọi là cờ phụ AF (Auxiliary Flag) không giống như CF, đóng vai trò bit thứ 9 của thanh chứa. Nó giống cờ tràn nhiều hơn, cờ nửa nhớ sẽ được thiết lập mức 1 khi có sự tràn bit 1 từ D3 qua D4. Tám bit của bộ chứa bao gồm 2 nibble riêng biệt, các bit 7-4 gọi là nibble trọng số lớn MS(Most Significant) và 3-0 là nibble trong số nhỏ LS(Least Significant). Mỗi nibble là mã số thập phân hoặc HEXA đơn. Khi thực hiện các phép tính với số BCD (tức số thập phân) cần phải ghi nhận số nhớ của 4 bit thấp trong đơn vị 8 bit. Ta gọi số nhớ này là số nửa nhớ. Một số CPU cờ nữa nhớ được gọi là cờ nhớ phụ AF (Auxiliary Flag ) nó sử dụng như cờ tràn như trong các phép tính 16 bit. Cờ chẵn lẻ PF (Parity Flag). Cờ chẵn lẻ được sử dụng thông báo số các bit 1 trong kết quả của phép tính logic là chẵn hoặc lẻ tùy theo từng loại CPU. Cờ chẵn lẻ thường được sử dụng trong các chương trình truyền các dữ liệu nối tiếp, trạng thái của cờ có thể được phát ra để bên thu có thể kiểm tra xem dữ liệu nhận được đúng hay sai. Chú ý là cờ chẵn lẻ không tác động khi ALU thực hiện các phép tính số học. Cờ trừ Subtract. Cờ trừ thường được viết tắt là N (Negative) để phân biệt với cờ dấu S (Sign). Cờ trừ được thiết lập khi CPU thực hiện các phép tính trừ như (trừ, so sánh , giảm). Cờ này thường ít được sử dụng trong các chương trình. Ngoài các cờ sử dụng cho việc thông báo trạng thái các phép tính như đã mô tả ở trên, thanh ghi cờ còn có các cờ điều khiển sử dụng cho các mục đích khác như: Cờ định hướng DF (Direction Flag). Cờ này được sử dụng cho các lệnh xử lý chuỗi dữ liệu. Ví dụ như di chuyển chuỗi từ vùng nhớ này sang vùng nhớ khác, so sánh chuỗi…. Khi thực hiện CPU lần lượt xử lý từng byte 1 trong chuỗi. Để có được các thao tác này CPU sử dụng các thanh ghi địa chỉ và sau mỗi lần xử lý 1 byte nó tự động tăng hoặc giảm thanh ghi địa chỉ. Việc tăng hay giảm thanh ghi địa chỉ, tức là chuỗi được thao tác từ dưới lên trên hay từ trên xuống dưới, sẽ tùy thuộc vào cờ định hướng. Thông thường DF=1 các lệnh xử lý chuỗi sẽ thực hiện từ địa chỉ cao đến địa chỉ thấp. Trong một số CPU các lệnh xử lý chuỗi tăng và giảm địa chỉ khác nhau, nghĩa là cùng là di chuyển chuỗi nhưng có một lệnh thực hiện theo chiều tăng địa chỉ, và một lệnh thực hiện theo chiều giảm địa chỉ. Các CPU như thế sẽ không có định hướng. Cờ ngắt IF : (Interrupt Flag). 24 Cờ ngắt được thiết lập =1 bằng lệnh SI (Set Interrupt ) và xóa bằng lệnh CLI(Clear Interrupt). Khi cờ ngắt=1 cho phép CPU ghi nhận tín hiệu yêu cầu ngắt có che, và thực hiện chương trình ngắt. Khi cờ ngắt =0, mặc dù có tín hiệu yêu cầu, chương trình ngắt sẽ không được thực hiện. Với các yêu cầu ngắt không che NMI (Non-Mask able Interrupt) cờ ngắt không có ý nghĩa. Cờ bẫy TF: (Trap Flag). Cờ bẫy được thiết lập =1 và xóa = 0 bằng các lệnh lập xóa cờ bẫy, khi cờ bẫy bằng 1, CPU hoạt động ở chế độ chạy từng bước để gỡ rối sửa sai chương trình. Cụ thể là khi CPU thực hiện xong một lệnh nó chuyển qua chương trình con giám sát (Monitor). Chương trình con giám sát được thực hiện bởi người sử dụng để kiểm tra lại kết quả của lệnh vừa thực hiện ở các ô nhớ, các thanh ghi, các cờ. Sau đó CPU lại quay về thực hiện lệnh tiếp theo của chương trình chính. Chương trình con giám sát sẽ được đặt tại một địa chỉ xác định tùy theo loại CPU. 2.2.2. Đơn vị điều khiển CU: (Control Unit). Đơn vị điều khiển còn được gọi là bộ giải mã lệnh, nó là nơi cung cấp các tín hiệu điều khiển, cho phép tất cả các bộ phận khác trong CPU làm việc. Đơn vị điều khiển nhận các mã lệnh từ hàng đợi lệnh, mã lệnh này sẽ được hệ thống các mạch điện tử giải mã, tạo ra một dãy các tín hiệu cho phép. Tùy theo từng lệnh cụ thể mà các khối khác nhau trong CPU sẽ được cho phép hoạt động. Các bộ vi xử lý khác nhau cơ bản ở cấu trúc của đơn vị điều khiển. Một lệnh của họ vi xử lý này có thể là một lệnh hoàn toàn khác trong một họ vi xử lý khác. Do cấu trúc các mạch điện tử bên trong của đơn vị điều khiển khác nhau, mà CPU của các hãng khác nhau sẽ có các tập lệnh khác nhau. Vì thế một chương trình viết cho hệ thống vi xử lý, sử dụng CPU của hãng nào thì phải tuân theo tập lệnh , và trình biên dịch của hãng đó, nếu không chương trình sẽ không thể thực hiện mặc dù cấu trúc bộ nhớ và I/O tương đương nhau. Đơn vị điều khiển của các CPU truyền thống có thể thực hiện bằng hai phương pháp chính là: Thực hiện bằng cách nối ghép cứng hệ thống các cổng logic, hoặc sử dụng bộ nhớ. Đối với loại thứ nhất tập lệnh sẽ không thể thay đổi. Đối với loại sử dụng bộ nhớ, mã lệnh lấy từ ngoài bộ nhớ sẽ đóng vai trò là địa chỉ của bộ nhớ, còn các đường dữ liệu của bộ nhớ này sẽ đóng vai trò là các tín hiệu cho phép. Nếu cho phép lập trình lại bộ nhớ này có thể tạo ra các lệnh mới cho vi xử lý, hoặc có thể thay đổi tập lệnh cho nó. Nhờ có đơn vị điều khiển mà mã lệnh sẽ được giảm, vì nếu cung cấp các tín hiệu cho phép ngay trong mã lệnh thì mỗi khối chức năng trong CPU sẽ phải được cho phép hoặc không cho phép bằng một bit của mã lệnh. Nhưng khi có đơn vị điều khiển, mỗi lệnh của chương trình đều phải tốn thời gian giải mã. Để khắc phục nhược điểm này người ta chế tạo ra các CPU không có đơn vị điều khiển, các tín hiệu cho phép các khối chức năng bên trong CPU hoạt động sẽ được lấy trực tiếp từ mã lệnh. Khi đó để đảm bảo mã lệnh không quá dài số lệnh thực hiện được của CPU loại này ít hơn loại truyền thống rất nhiều, tuy nhiên nó vẫn đủ để thực hiện tất cả các công việc, các lệnh phức tạp sẽ được thực hiện bằng các thuật toán thích hợp từ các lệnh đơn giản. Các CPU loại này được gọi là các CPU có tập lệnh rút gọn RISC (Reduce Instruction Set Computer). Còn các CPU có đơn vị điều khiển như đã mô tả ở trên được gọi là các CPU có tập lệnh đầy đủ CISC (Complex Instruction Set Computer). 2.2.3. Bộ điều khiển BUS. 25 Bộ điều khiển BUS nhận tín hiệu cho phép hoạt động từ bộ giải mã lệnh. Nó định thời các tín hiệu địa chỉ, dữ liệu và điều khiển để các CPU liên lạc với thế giới bên ngoài. Thông thường bộ điều khiển BUS được chia thành 3 phần: Bộ kiểm soát địa chỉ, bộ kiểm soát dữ liệu và bộ định thời các tín hiệu điều khiển. Bất cứ một lệnh truy cập bộ nhớ vào/ra nào cũng cần cung cấp đầy đủ ba nhóm tín hiệu địa chỉ, dữ liệu và điều khiển. Địa chỉ từ một thanh ghi địa chỉ bộ nhớ hay lấy trực tiếp từ mã lệnh trước tiên được cung cấp lên Bus nội (Internal Bus) đưa tới bộ đệm địa chỉ, sau đó theo định thời của từng lệnh bộ đệm này sẽ được mở để cung cấp địa chỉ ra Bus địa chỉ bên ngoài xác định bộ nhớ vào ra làm việc với CPU. Chú ý rằng bộ đệm địa chỉ có một chiều truyền ra. Tương tự như vậy với bộ kiểm soát dữ liệu, chỉ khác là bộ đệm dữ liệu là hai chiều, hoặc mở cho dữ liệu từ ngoài đi vào Bus nội trong các chu kỳ đọc, hoặc mở cho dữ liệu từ Bus nội cung cấp ra bên ngoài trong các chu kỳ ghi. Tuỳ theo lệnh truy cập là đọc hay ghi mà các tín hiệu điều khiển sẽ được định thời cung cấp ra bên ngoài một cách thích hợp. Ngoài ra BIU còn nhận các tín hiệu điều khiển cung cấp từ bên ngoài để thực hiện một số chu kỳ truy xuất đặc biệt khác như ngắt, DMA…. 2.2.4. Đơn vị số học và logic ALU : (Arithmetic Logic Unit). Đơn vị số học và logic (ALU) là một bộ phận quan trọng trong CPU để thực hiện các phép toán số học và logic bao gồm: Phép toán Cộng Trừ Nhân Chia And Or Xor Not Dịch trái Dịch phải Quay trái Quay phải Dịch phải số học Dạng lệnh gợi nhớ ADD M SUB M MUL M DIV M AND M OR M XOR M NOT SHL SHR RRL RRR ASR Ý nghĩa lệnh Cộng số M với Acc Trừ Acc đi M Nhân Acc với M Chia Acc cho M And Acc với M Or Acc với M Xor Acc với M Đảo Acc Dịch trái Acc Dịch phải Acc Quay trái Acc Quay phải Acc Dịch phải số học Acc Khi CPU thực hiện các bài toán thực tế, chương trình phải có các hướng giải quyết với các điều kiện khác nhau bằng các lệnh nhảy. Trước khi thực hiện các lệnh nhảy, chương trình thường thực hiện các lệnh so sánh để thiết lập các bit của thanh ghi cờ. Các lệnh so sánh và nhảy cũng được ALU đảm nhiệm. Các lệnh này được viết như trong bảng sau: Lệnh So sánh Dạng lệnh gợi nhớ CMP M Nhảy Jxx L Ý nghĩa lệnh So sánh Acc với M, lập cờ EQ nếu bằng, lập cờ GT nếu M>Acc. Thực hiện lệnh tại nhãn L nếu điều kiện thoả mãn: 26 JGT: nhảy nếu lớn hơn JGE: nhảy nếu lớn hơn hoặc bằng. JEQ: nhảy nếu bằng JLE: nhảy nếu nhỏ hơn hoặc bằng JLT: nhảy nếu nhỏ hơn JNE: nhảy nếu không bằng. Ngoài ra còn một số lệnh di chuyển dữ liệu trong hệ thống vi xử lý tác động tới ALU như: Lệnh Nạp Chuyển đổi Xoá Dạng gợi nhớ LDA M EX M CLA Ý nghĩa của lệnh Nạp giá trị M vào Acc. Chuyển đổi giá trị giữ M và Acc. Xoá Acc Trong thực tế các loại CPU của các hãng khác nhau, sẽ có các lệnh với cách viết gợi nhớ khác nhau. Cấu trúc ALU. Trong các bài toán các phép toán cần thực hiện, có thể bao gồm hai toán hạng (như cộng ) hoặc một toán hạng (not). Phép toán một số còn gọi là phép toán đơn (monadic operation), phép toán hai số gọi là phép toán hai ngôi (dyadic operation). Để thực hiện các phép toán trên ALU có cấu trúc như hình vẽ 2.6. ALU nối với BUS hệ thống bằng hai nhóm đường. Nhóm bên phải chỉ sử dụng để nhập dữ liệu vào ALU, nhóm này thường được sử dụng để đưa một toán hạng vào ALU trong các phép toán. Nhóm bên trái được nối với thanh chứa Acc và từ thanh chứa nối ra BUS hệ thống. Nhóm tín hiệu này có thể là vào hoặc ra. Thanh chứa được sử dụng cho các công việc: - Giữ toán hạng thứ hai trong các phép toán hai ngôi. - Giữ toán hạng duy nhất trong các phép toán đơn . - Giữ kết quả của các phép toán . Một số CPU không có thanh chứa mà sử dụng bộ nhớ tạm thời là một thanh ghi ngoài ALU, các loại này không phổ biến lắm nên ta xem xét Acc như một phần của ALU. Bus nội Acc Các hàm số cơ bản Các tín hiệu chọn hàm Flags Hình 2.6: Cấu trúc ALU. 27 2.3. CẤU TRÚC CỦA CÁC BỘ VI XỬ LÝ CÔNG NGHỆ CAO. Trong thập kỷ 90 và cho tới ngày nay việc cải tiến về tốc độ và cấu trúc vi xử lý có các bước tiến vượt bậc. Để nâng cao tốc độ tính toán với nhu cầu đa phương tiện, đa nhiệm hàng loạt bộ vi xử lý mới ra đời với công nghệ cao, các kỹ thuật mới và có thêm các khối chức năng chuyên dụng. Sơ đồ khối tổng quát cho các bộ vi xử lý này có thể biểu diễn trên hình 2.7. Sơ đồ này không chỉ thị cho một bộ vi xử lý cụ thể, tuy nhiên nó bao gồm các đặc trưng chính của tất cả các bộ vi xử lý hiện đại. Hầu hết các bộ vi xử lý hiện đại có 32 bit dữ liệu, nhưng một số vi xử lý có số đường dữ liệu là bội số của 32. Ngoài ra còn có các vi xử lý truy cập dữ liệu bằng nhiều BUS 32 bit, hoặc nhiều BUS 64 bit khác nhau. Trong các vi xử lý 32 bit, thông thường đơn vị xử lý số nguyên (IU – Integer Unit) là 32 bit và các thanh ghi trong tập thanh ghi (RF) cũng là 32 bit. Các vi xử lý 64 bit ngày càng nhiều trên thị trường, trong các bộ vi xử lý này thường có các thanh ghi 64 bit. Bus địa chỉ của hầu hết các bộ vi xử lý hiện đại thường là 32 bit để truy cập trực tiếp 232 ô nhớ, cũng có một số vi xử lý có số đường địa chỉ nhiều hơn, khi đó BUS nội của nó cũng nhiều hơn 32 bit. Prefetch Unit and Instruction Queue Data Bus Bus Interface Unit Instruction Cache Branch (Icache) Target (BIU) Address Bus Cache Data Cache (BTC) (Dcache) Control Bus Memory Management Units (MMU) Special Function Units (SFU) Decoding Unit Control Unit (CU) Internal Bus IU Integer Register File (IRF) FPU Floating Point Register File (FRF) Integer Operation Units Floating Point Operation Units Hình 2.7: Sơ đồ khối của các bộ vi xử lý hiện đại. 28 2.3.1. Đơn vị giao tiếp BUS (BIU). Data Bus Address Bus Control Bus Data Interface Tới Prefetch Unit Tới Cache Address Interface Control Interface MMU Tới CU Internal Bus Hình 2.8: Đơn vị giao tiếp BUS (BIU) Đơn vị giao tiếp BUS là hệ thống bộ đệm để kiểm soát các tín hiệu giữa các khối bên trong vi xử lý với các hệ thống bên ngoài. Sơ đồ khối của một bộ BIU biểu diễn trên hình 2.8, nó được chia thành 3 phần chính là: - Giao tiếp dữ liệu. - Giao tiếp địa chỉ. - Giao tiếp điều khiển. Khối giao tiếp dữ liệu có nhiệm vụ kết nối BUS dữ liệu của hệ thống với các khối bên trong vi xử lý. Thông thường dữ liệu truyền giữa giao tiếp dữ liệu và các khối khác bên trong vi xử lý thông qua BUS nội. Nhưng cũng có một số đường truyền khác, như trên hình vẽ khối giao tiếp dữ liệu truyền trực tiếp với các khối như đơn vị tiền đọc lệnh và hàng đợi lệnh (PUIQ) và với bộ nhớ cache. Khối giao tiếp dữ liệu có nhiệm vụ kiểm soát các địa chỉ cung cấp ra bên ngoài. Các địa chỉ thông thường được tạo ra bởi đơn vị quản lý bộ nhớ (MMU), vì vậy MMU được nối trực tiếp tới khối giao tiếp địa chỉ. Khối giao tiếp điều khiển thực hiện việc gửi và nhận một số tín hiệu trạng thái và điều khiển từ CPU cung cấp ra hệ thống bên ngoài và từ các thiết bị bên ngoài cung cấp cho vi xử lý. Hầu hết các đường điều khiển của giao tiếp điều khiển được nối tới đơn vị điều khiển (CU), tất nhiên CU còn được kết nối tới các khối khác bên trong vi xử lý. Các tín hiệu điều khiển cung cấp từ trong ra chỉ thị các trạng thái hoạt động bên trong của vi xử lý, các tín hiệu tích cực thông báo cho bộ nhớ và vào/ra trong các chu kỳ đọc ghi dữ liệu, chỉ thị sự khác nhau trong các chế độ truy cập, các chế độ địa chỉ, chấp nhận các yêu cầu ngắt, các yêu cầu về Bus …. Các tín hiệu cung cấp từ bên ngoài chỉ thị trạng thái của các thiết bị, thông báo cho vi xử lý nhận biết các trường hợp Bus lỗi, nhận các yêu cầu ngắt hoặc yêu cầu về Bus của các thiết bị bên ngoài, nhận biết việc hoàn tất một chu kỳ Bus, nhận tín hiệu yêu cầu cấm bộ nhớ cache nội…. Số lượng, cơ chế hoạt động của các tín hiệu điều khiển của các CPU khác nhau có thể khác nhau. 2.3.2. Khối tiền đọc lệnh và hàng đợi lệnh. (PUIQ) PUIQ bao gồm các mạch logic thực hiện việc đọc trước các lệnh từ Icache và sắp chúng vào hàng đợi lệnh FIFO. Một hàng đợi lệnh thông thường có từ 8 tới 32 byte. 29 Lệnh sắp ở trên cùng sẽ được chuyển tới đơn vị giải mã lệnh (DU - Decoder Unit). DU sẽ giải mã các lệnh và truyền các tín hiệu điều khiển thích hợp tới CU. Hầu hết các bộ vi xử lý hiện đại ngày nay đều có cấu trúc siêu hướng (superscalar), cấu trúc này cho phép nhiều lệnh không tranh chấp có thể thực hiện một cách đồng thời. 2.3.3. Khối chức năng đặc biệt. Để tăng tốc độ xử lý cho các nhu cầu đa phương tiện, một số vi xử lý có các khối chức năng chuyên dụng nằm trong khối các chức năng đặc biệt (SFU – Special Function Unit). Một SFU thông thường có các khối chức năng sau: - Khối đồ hoạ (Graphics Unit). - Khối xử lý tín hiệu (Signal processing Unit). - Khối xử lý ảnh (Image Processing Unit). - Khối xử lý ma trận và vector (Vector and Matrix Processor). Một số bộ vi xử lý có nhiều hơn một SFU, với nhiều bộ SFU sẽ giảm thiểu thời gian trễ trong giao tiếp giữa giao tiếp của SFU với các khối khác làm tăng tốc độ hoạt động của toàn bộ hệ thống với các nhu cầu đa phương tiện ngày một tăng cao. 2.3.4. Bộ nhớ cache. Bộ nhớ cache là bộ nhớ có tốc độ truy xuất rất nhanh nằm giữa CPU và bộ nhớ chính (main memory). Dữ liệu sẽ được truyền theo từng khối từ bộ nhớ chính tới cache sẵn sàng cung cấp cho CPU. Với bộ nhớ cache có kích thước hợp lý sẽ cho phép cải thiện hiệu suất của toàn bộ hệ thống, vì nhờ có nó mà CPU có thể truy cập dữ liệu nhanh hơn nhiều so với việc truy cập trong bộ nhớ chính. Gần như tất cả các bộ vi xử lý hiện nay đều có cấu trúc đường ống (Pipeline), với cấu trúc này cho phép thực hiện đồng thời nhiều lệnh tại cùng một thời điểm. Vì vậy trong khi CPU đang thực hiện một chu kỳ lệnh, nó có thể đồng thời truy cập bộ nhớ để lấy dữ liệu cho một lệnh khác. Nếu chỉ có một bộ nhớ cache thì rõ ràng việc truy cập đồng thời như mô tả ở trên sẽ không thực hiện được. Do đó trong hầu hết các bộ vi xử lý hiện đại đều có hai bộ nhớ cache được sử dụng riêng cho mã lệnh (Icache) và dữ liệu thông thường (Dcache). Thông thường hai loại cache này có dung lượng giống nhau, nhưng trong một số vi xử lý chúng có dung lượng khác nhau. Cache nhận thông tin từ bộ nhớ chính thông qua Bus dữ liệu và BIU sẽ chỉ định kích thước khối dữ liệu trong mỗi lần truy cập của cache. Secondary cache32 byte. Icache Trong hầu hết các bộ vi xử lý hiện đại kích thước này là 16 hoặc thường được nối trực tiếp tới khối tiền đọc lệnh (Prefetch Unit), nó có thể truyền tới khối này một hoặc nhiều lệnh trong một chu kỳ. Trong nhiều bộ vi xử lý, Dcache được cache control logic nối tới các khối xử lý dữ liệu bằng một Bus riêngSecondary gọi là ODB (operation data bus) như trên hình 2.9. ODB có độ rộng đủ lớn (128 hoặc 256 bit) để có thể cung cấp nhiều toán Instruction hạng tại cùng một thời điểm, điều này sẽ làm tăng tốc độ hoạt động của hệ thống. Tới Prefetch Unit Cache (Dcache) BIU Internal Bus Data Cache IU FPU SFU (Dcache) ODB Hình 2.9: Bộ nhớ cache trong vi xử lý. 30 Nhiều vi xử lý hiện đại có thiết kế thêm cache ngoài (cache thứ cấp - secondary cache). Cache bên trong còn được gọi là cache sơ cấp. Cache ngoài nằm giữa bộ nhớ chính và cache nội trong phân cấp bộ nhớ, nó có thời gian truy cập nhanh hơn so với bộ nhớ chính và thường có dung lượng lớn hơn cache nội. Với cache ngoài hiệu suất hệ thống được cải thiện vì bộ nhớ này cho phép CPU truy cập dữ liệu trong một bộ nhớ có tốc độ cao và dung lượng tương đối lớn. Một số vi xử lý có bộ điều khiển và giao tiếp logic nối trực tiếp với cache ngoài như hình 2.9. Dung lượng của cache ngoài có thể lên tới vài Mbytes. Một số vi xử lý hiện đại còn có bộ nhớ cache phân nhánh đích (BTC – Branch Target Cache). Trong một hệ thống đường ống (pipeline), khi một nhánh lệnh có xung đột thì các lệnh thuộc nhánh đó cần được lấy ra ngoài đường ống, và các lệnh đích (nằm đầu tiên trong nhánh được thực hiện) cần được lấy vào đường ống. Nếu lệnh đích nằm ngoài bộ nhớ, CPU sẽ phải thực hiện chu kỳ trễ trong quá trình thực hiện lệnh, còn nếu lệnh đích đầu tiên nằm trong BTC chúng sẽ được đẩy vào đường ống nhanh chóng hơn. Như vậy BTC cũng làm tăng tốc độ của hệ thống. Trong một số vi xử lý BTC không chứa các lệnh đích mà chỉ chứa địa chỉ của lệnh đích. Icache 32 i Prefetch Unit 32 i Decoding Unit Pipeline Operation Unit 1 Pipeline Operation Unit 2 ……………… Pipeline Operation Unit n Hình 2.10: Xử lý lệnh theo kiến trúc siêu hướng. Trong hầu hết các vi xử lý hiện đại đều có đặc tính xử lý lệnh song song (ILP – Instruction Level Parallelism), đặc tính này được thực hiện bằng cấu trúc siêu hướng (superscalar). Trong cấu trúc này khối tiền đọc lệnh sẽ gửi đồng thời i lệnh tới bộ giải mã lệnh như mô tả trên hình 2.10. Sau đó bộ điều khiển (CU) sẽ tạo ra các chỉ thị cho một số đường ống thực hiện. Hiệu suất thực hiện lệnh sẽ cao nhất khi số đường ống đúng bằng số lệnh gửi tới để có thể thực hiện đồng thời i lệnh cùng một thời điểm. Trong thực tế điều kiện này không phải lúc nào cũng có thể thực hiện được, do các 31 giới hạn của vùng bán dẫn không phải lúc nào cũng đáp ứng được sự hoạt động của các khối trên cùng một chip, và các bài toán thực tế cũng không cần thiết yêu cầu các khối luôn đồng thời hoạt động tại tất cả các thời điểm. Vì vậy trong thực tế thường có các đường ống ngưng hoạt động do các nguyên nhân như: dữ liệu cần xử lý của lệnh trong ống tuỳ thuộc vào kết quả của lệnh sau nó, hoặc các lệnh điều khiển rẽ nhánh còn tuỳ thuộc vào các lệnh chưa được thực hiện trong một đường ống khác, điều này sẽ làm cho việc xử lý lệnh trong ống trễ lại. Khối điều khiển CU trong các vi xử lý có thể là các mạch điện tử nối cứng hoặc có thể lập trình được. Các CPU loại CISC thường có CU lập trình được, còn các CPU loại RISC thường có CU nối cứng để tăng tốc độ xử lý lệnh cũng như để thực hiện hầu hết các lệnh chỉ trong một chu kỳ. 2.3.5. Khối xử lý số nguyên (Integer Unit). Hình 2.11 mô tả cấu trúc của một IU, để thực hiện đồng thời nhiều phép tính tại cùng một thời điểm IU sẽ có nhiều mạch cộng/trừ nhân/chia. Để cung cấp dữ liệu trong IU có các thanh ghi (IRF – IU Register File) với dung lượng thông thường là bội số của 32 hoặc 64 (tuỳ thuộc vào loại CPU là 32 hay 64 bit). Các CPU loại CISC thường có 8 tới 16 thanh ghi, còn các CPU loại RISC thường có ít nhất 32 thanh ghi, có một số CPU loại RISC có tới 100 thanh ghi. Dữ liệu thường chuyển tới các khối trong IU theo hai đường. Bộ tạo các tín hiệu giải mã lệnh sẽ nhận các chỉ thị từ CU và trực tiếp chọn ra các khối hoạt động thích hợp cho từng lệnh. Với các lệnh xử lý số nguyên sẽ nó sẽ đưa chỉ thị chọn mạch tới IU, các lệnh xử lý dấu phẩy động sẽ chỉ thị tới FPU, còn các chức năng đặc biệt sẽ được chỉ thị tới SFU. Dữ liệu cần xử lý sẽ được đưa tới khối được chọn thông qua ODB như trình bày trên hình 2.11. Hầu hết các CPU đều có bộ dịch vòng (barrel shift) để thực hiện các lệnh dịch nhiều bit chỉ trong một chu kỳ máy. Control Unit (CU) Decoded Instruction Dispatcher Tới FPU hoặc SFU Internal Bus … Add/ Sub 1 … IRF Add/ Sub j … Mul/ Div i Mul/ … Div k … Internal Bus Dcache Barrel Shifter 2.3.6. Khối xử lý dấu phẩy động. Hình 2.11: Khối xử lý số nguyên.. 32 Control Unit (CU) Decoded Instruction Dispatcher Tới IU hoặc SFU Internal Bus … FAdd/ … FSub j FAdd/ FSub1 FMul/ FDiv i … … … FMul/ FDiv k FSQRT FRF Internal Bus Dcache FPU có cấu trúc tương tự như nhưxử biểu diễnphẩy trên động. hình 2.12, các dữ liệu cũng được Hình 2.12:IU Khối lý dấu truyền tới các khối mạch tương tự như đã mô tả đối với IU. FPU cũng có tập thanh ghi riêng (FRF – Floating Point Register File), thông thường với CPU loại CISC số lượng thanh ghi trong FRF là 8, còn đối với CPU loại RISC là 32. Các bộ FRF trong các CPU hiện đại thường được thiết kế theo chuẩn IEEE81 và IEEE85, tức là 32 bit cho độ chính xác đơn (single – precision) và 64 bit cho độ chính xác kép (double – precision). Vì vậy nên các thanh ghi trong FRF thường là 64 bit ngay cả đối với các CPU 32 bit. Một số CPU có dạng dấu phẩy động mở rộng lên tới 80 bit, khi đó các thanh ghi FRF cũng phải có dung lượng 80 bit. Các chuẩn của DEC Alpha và VAX về dấu phẩy động cũng hoàn toàn tương đương với các chuẩn IEEE đã nêu trên. 2.3.7. Khối quản lý bộ nhớ (MMU – Memory Management Unit). Các chức năng cơ bản của MMU bao gồm: 1. Chuyển đổi địa chỉ ảo (logic) thành địa chỉ thực (địa chỉ vật lý), sau đó truyền các địa chỉ vật lý tới cache hoặc thông qua BIU và Bus địa chỉ tới các thiết bị bên ngoài. 2. Tạo nên cơ cấu phân trang trong chế độ bộ nhớ ảo. 3. Tạo nên cơ chế phân đoạn trong khối phân đoạn địa chỉ. 4. Thực hiện chế độ bảo vệ bộ nhớ trong cả hai cơ chế phân trang và phân đoạn. 5. Thực hiện và quản lý một bộ đệm chuyển đổi địa chỉ (TLB - Translation Lookaside Buffer) truy cập nhanh, hoặc một bộ chuyển đổi địa chỉ cache (ATC - Address Translation Cache) cho việc chuyển đổi số trang từ địa chỉ ảo thành địa chỉ vật lý. Từ Prefetch Unit Tới Icache Tới BIU Translation Lookaside Buffer (TLB) Internal Bus Paging Unit Segmentation Unit Từ IU Hình 2.13: Khối quản lý bộ nhớ MMU. 33 Sơ đồ khối của một bộ MMU như biểu diễn trên hình 2.13. Trong thực tế tất cả các bộ vi xử lý hiện đại đều có khối phân trang và một bộ đệm chuyển đổi một phía (TLB) hoặc khối chuyển đổi địa chỉ cache (ATC). Chỉ có CPU họ X86 là có một khối phân đoạn. Trong trường hợp một TLB bị mất, MMU sẽ có các logic giám sát việc truy cập tới các bảng và các thư viện trang trong bộ nhớ chính, và nạp TLB với số trang bị mất. Một bộ vi xử lý hiện đại có thể có hàng trăm chân kết nối, điều này cho phép có thể có nhiều Bus dữ liệu, phân biệt riêng các đường dữ liệu và địa chỉ, phân biệt các đường giao tiếp với bộ nhớ chính và các đường giao tiếp với cache thứ cấp (secondary cache), và có thể có rất nhiều các tín hiệu thông báo trang thái và điều khiển. Một bộ vi xử lý có thể có nhiều đường cấp nguồn và nối masse nằm trên các phía của chip, điều này cho phép các đường nối nguồn và masse bên trong chip ngắn hơn, việc thiết kế chip đơn giản hơn và vì thế có thể giảm được giá thành của nó. Ngoài ra thông External BUS thường các đường kết nối ngắn hơn sẽ có thời gian trễ và sự lan truyền tín hiệu ngắn hơn. 2.4. CÁC VI XỬ LÝ INTEL THẾ HỆ TRƯỚC (8086/8088, 80186, 80286). BUS Interface 2.4.1. Vi xử lý 8086/8088. BIU EU 1. Sơ đồ khối và chức năng các khối . Sơ đồ khối của 8086/8088 trình bày trên hình 2.14 bao gồm hai phần chính. Đơn vị giao tiếp BUS (BIU -Bus Interface Unit) có chức năng lấy lệnh đọc các toán hạng và ghi kết quả, và đơn + vị thực hiện lệnh (EU-Execution Unit) để thực hiện các lệnh. Hai bộ phận này hoạt động gần như độc lập nhau trong hầu hết các trường hợp. BIU thực byte hiện việc lấy lệnh sắp vào hàng đợi sẵn sàng cho EU lấy,6 vì thế thời gian lấy lệnh và queue thực hiện lệnh xảy ra một cách đồng thời. Khi có các lệnh điều khiển chương trình, BIU sẽ xóa hàng đợi lệnh để lấy các lệnh tại địa chỉ mới. Đơn vị số học ES và logic (ALU- Arithmetic Logic Unit) thực hiện tất cả các phép toán mà chương trình báo trạngUnit tháiControl các phép toán mà CSyêu cầu. Thanh ghi cờ sẽ thôngExecution ALU thực hiện.DS System SS IP AH BH CH DH AL BL CL DL SP BP SI DI ALU Flags EU 34 Hình 2.14: Sơ đồ khối vi xử lý 8086/8088. Đơn vị thực hiện và điều khiển hệ thống có nhiệm vụ lấy lệnh từ hàng đợi lệnh giải mã để cung cấp các tín hiệu cho phép các khối khác trong CPU hoạt động theo đúng yêu cầu của lệnh, tức là nó quyết định hầu hết các hoạt động của CPU. Bộ cộng địa chỉ thực hiện việc tính toán các địa chỉ để cung cấp địa chỉ vật lý thực sự cho việc truy cập bộ nhớ. Một địa chỉ vật lý cung cấp ra ngoài sẽ được tính bằng cách dịch trái thanh ghi đoạn 4 bit, rồi cộng với địa chỉ độ dời (offset). 2. Các thanh ghi. Thanh ghi con trỏ lệnh : (IP - Instruction Pointer) Sử dụng trong việc cung cấp địa chỉ offset của vùng nhớ mã lệnh. Sau khi lấy vào một lệnh BIU sẽ đổi giá trị trong IP để trỏ tới mã lệnh sẽ thực hiện trong chu kỳ kế tiếp. Ở các lệnh thông thường sau khi lấy vào một byte mã lệnh IP sẽ tự động tăng lên 1. Ở các lệnh nhảy giá trị của IP sẽ được xóa đi để nạp một giá trị mới, giá trị mới này được cung cấp trong lệnh nhảy. Trong các lệnh gọi chương trình con trước khi xóa giá trị cũ để nạp giá trị mới giá trị cũ của IP được cất vào đỉnh ngăn xếp, và khi có lệnh quay về nó sẽ được phục hồi. Khi phục vụ ngắt quá trình biến đổi IP cũng thực hiện tương tự như khi xảy ra lệnh nhảy. Các thanh ghi đa năng: các thanh ghi đa năng ngoài chức năng lưu trữ dữ liệu và địa chỉ thông thường mỗi thanh ghi còn có các chức năng đặc biệt như sau: + Thanh ghi tích lũy AX (Accumulator) : thường sử dụng giữ một toán hạng và kết quả của các phép toán nhân và chia. + Thanh ghi cơ sở BX (Base) thường được sử dụng chỉ địa chỉ cơ sở của một vùng nhớ truy cập theo phương pháp định vị chỉ số cơ sở. + Thanh ghi đếm : CX (Counter) thường dùng làm bộ đếm cho các vòng lặp, bộ đếm các lần quay và dịch. + Thanh ghi dữ liệu : DX (Data) Sử dụng lưu các dữ liệu chuyển giao trong các chương trình, nó cũng sử dụng chứa kết quả trong các phép toán nhân và chia. 35 Các thanh ghi con trỏ và chỉ số : + Thanh ghi con trỏ ngăn xếp (SP - Stack Pointer) là thanh ghi luôn giữ địa chỉ offset của đỉnh vùng nhớ ngăn xếp. Khi sử dụng các lệnh truy cập tới vùng nhớ ngăn xếp thì chỉ có thanh ghi SP thay đổi. Còn thanh ghi đoạn ngăn xếp SS sẽ không thay đổi. + Thanh ghi con trỏ cơ sở (BP - Base Pointer) có chức năng giữ địa chỉ offset của bộ nhớ truy cập theo chỉ số giống như BX. + Các thanh ghi chỉ số (Index): Bao gồm thanh ghi chỉ số nguồn (Source Index) và chỉ số đích (Destination Index) , sử dụng giữ địa chỉ offset trong các lệnh truy cập giữ liệu. Ngoài ra chúng còn sử dụng cho các lệnh về chuỗi. Các thanh ghi đoạn : CPU họ X86 truy cập bộ nhớ theo các đoạn, bằng cách sử dụng các thanh ghi đoạn 16 bit dịch trái 4 bit sau đó cộng với địa chỉ offset để cung cấp địa chi vật lý cho bộ nhớ. Do đó các đoạn sẽ là các phần 64 KB. Trong một chương trình CPU sẽ quản lý 4 đoạn bằng 4 thanh ghi đoạn sau: + Thanh ghi đoạn mã lệnh (CS - Code Segment) chứa địa chỉ đoạn mã lệnh của chương trình hiện hành. + Thanh ghi đoạn dữ liệu (DS - Data Segment) chứa địa chỉ đoạn của vùng nhớ dữ liệu sử dụng trong chương trình (các hằng các biến). + Thanh ghi đoạn ngăn xếp (SS - Stack Segment) chứa địa chỉ đoạn vùng nhớ ngăn xếp. + Thanh ghi đoạn mở rộng (ES - Extra Segment) chứa địa chỉ đoạn mở rộng, đoạn thường dùng cho các dữ liệu dạng chuỗi (string). Thanh ghi cờ : (Flags Register) Là một thanh ghi 16 bit trong đó chỉ sử dụng 9 bit. Trong đó bao gồm 6 cờ thông báo trạng thái các phép toán, và 3 cờ sử dụng cho các thao tác điều khiển, vị trí các cờ trong thanh ghi cờ được biểu diễn trên hình 2.15. Chức năng của các cờ như đã mô tả trong mục 2.1. D15 * D0 * * * O D I T S Z * A * P * C Hình 2.15: Cấu tạo thanh ghi cờ. 3. Hoạt động của 8088/8086. CPU 8088 có tuyến dữ liệu 8 bit, còn đối với 8086 là 16 bit. Cả hai CPU này đều có 20 bit địa chỉ, vì thế chúng có thể quản lý 220 địa chỉ bộ nhớ khác nhau. CPU 8086/8088 có cơ chế định địa chỉ bộ nhớ theo cách phân đoạn, địa chỉ vật lý 20 bit cung cấp ra ngoài Bus luôn được tính từ hai giá trị địa chỉ logic 16 bit là: địa chỉ đoạn (segment address) và địa chỉ độ dời (offset address). Địa chỉ đoạn sẽ được dịch trái 4 bit, sau đó cộng với giá trị địa chỉ độ dời thành địa chỉ vật lý 20 bit. Khi bắt đầu hoạt động các thanh ghi đoạn lệnh CS được khởi động giá trị F000H, thanh ghi con trỏ lệnh IP, và thanh ghi cờ của 8086/8088 bằng 0. Chu kỳ lệnh đầu tiên giá trị của CS được dịch trái 4 bit rồi cộng với giá trị trong thanh ghi con trỏ lệnh IP. Địa chỉ 20 bit (bằng F0000H) này sẽ được cung cấp ra BUS địa chỉ xác định tới ô nhớ chứa lệnh đầu tiên mà hệ thống sẽ thực hiện, mã lệnh trong ô nhớ này được lấy qua BUS dữ liệu đưa vào hàng đợi lệnh của BIU. Sau đó giá trị trong thanh ghi con trỏ lệnh IP được tự động tăng lên một, quá trình tính toán địa chỉ như trên sẽ lặp lại và mã lệnh kế tiếp trong bộ nhớ sẽ được lấy và sắp tiếp vào hàng đợi cho tới khi hàng đợi 36 đầy. Đồng thời với quá trình lấy lệnh nói trên, mã lệnh trong hàng đợi sẽ được CU giải mã để đưa ra các tín hiệu cho phép cung cấp tới các khối tương ứng với yêu cầu của lệnh. Ví dụ đối với các lệnh tính toán CU sẽ cung cấp tín hiệu chọn một hàm trong ALU, và toán hạng thứ hai của hàm. Đối với một lệnh truyền dữ liệu trong các thanh ghi CU sẽ cung cấp các tín hiệu cho phép mở ngõ vào thanh ghi nhận và ngõ ra thanh ghi truyền. Với các lệnh truyền dữ liệu với bộ nhớ hoặc vào ra, CU sẽ cung cấp tín hiệu cho phép tới bộ giao tiếp BUS, và đẩy địa chỉ chỉ thị trong phần toán hạng của lệnh ra BUS địa chỉ xác định tới ô nhớ hoặc vào ra truyền dữ liệu với CPU, kèm theo các tín hiệu điều khiển thích hợp cho phép bộ nhớ hoặc vào ra truyền dữ liệu với CPU thông qua BUS dữ liệu. Tất nhiên việc cung cấp các tín hiệu ra bên ngoài luôn tuân theo một cơ chế định thời nhất định. Đối với các lệnh tính toán và truyền dữ liệu nói trên, khi lệnh thực hiện xong mã lệnh kế tiếp trong hàng đợi sẽ được thực hiện. Riêng đối với các lệnh điều khiển chương trình, khi lệnh thực hiện giá trị trong thanh ghi IP (có thể cả giá trị trong CS) sẽ bị biến đổi, hàng đợi lệnh sẽ được xóa trắng, lệnh kế tiếp sẽ được BIU lấy ở địa chỉ mới cung cấp. Khi yêu cầu ngắt của thiết bị bên ngoài được CPU chấp nhận, thì tại bất kỳ lệnh loại nào khi lệnh thực hiện xong hàng đợi cũng bị xóa trắng và lệnh kế tiếp mà CPU thực hiện sẽ được lấy tại vị trí mới cung cấp bởi cơ chế ngắt. Quá trình lấy lệnh và thực hiện lệnh nói trên sẽ diễn ra liên tục cho đến khi CPU gặp phải lệnh treo, mất nguồn hay clock, hoặc tạm ngưng khi gặp các yêu cầu treo BUS. 2.4.2. CPU 80186. TIMER IN1 INT3/INTA1 CPU 80186 là một vi xử lý 16 bit được nâng cấp từ 8086 tích hợp thêm một số khối INT2/INTA0 TIMER OUT1 chức năng mới. CLKOUT Sơ đồ khối của 80186 biểu diễn trên hình 2.16. Vcc GND NMI EU Clock Generator 16 bit ALU 16 bit General Register INT1 INT0 Programmable Interrupt Control TIMER IN0 TIMER OUT0 Programmable Timer Max count Reg. A Max count Reg. B Control Registers Control Reg. 16 bit Counter S0-S2 SRDY ARDY TEST HOLD HOLDA RES RESET BIU Chip select Unit DRQ0 20 bit source point 20 bit dest. point 16 bit sequent Reg. 6 byte Prefetch queue DRQ1 Programmable DMA Unit Internal Bus Programmable Control Registers 16bit transfer count UCS DEN RD ALE A16/S3 – PCS5/A1 LCS A19/S6 LOCK WR DT/R BHE/S7 AD0-AD15 MCS0-3 PCS0-4 PCS6/A2 Hình 2.16: Sơ đồ khối CPU 80186. Control Reg. 37 Khác với 8086 cần bộ tạo xung clock ở ngoài, trong 80186 khối tạo xung clock được chế tạo ngay trong chip, tần số xung sẽ tuỳ thuộc vào tần số của thạch anh nối vào các chân X1 X0. Khối này còn cung cấp xung chuẩn ra bên ngoài để đồng bộ hoạt động giữa CPU và các thiết bị khác. 80186 có hai kênh DMA độc lập và bộ điều khiển DMA lập trình tích hợp trong chip, với 8086 cần có bộ điều khiển DMA nối ghép thêm ở bên ngoài. Khối định thời cung cấp 3 bộ định thời 16 bit có thể lập trình. Khối logic chọn mạch cho bộ nhớ và vào ra lập trình được sẽ cung cấp các tín hiệu cho phép bộ nhớ và vào ra thay cho bộ giải mã địa chỉ bên ngoài. Như vậy có thể thấy rằng 80186 bao gồm một hệ thống 8086 chuẩn trong cùng một chip. Với cấu hình này 80186 có độ lưu thoát dữ liệu cao gấp đôi hệ thống 8086 chuẩn 5Mhz. 80186 hoàn toàn tương thích với các chương trình viết cho 8086/8088, ngoài ra nó còn có thêm 10 lệnh mới. Ngoài các tín hiệu cung cấp từ các khối chức năng mới các tín hiệu còn lại của 80186 hoàn toàn giống với CPU 8086. Tập các thanh ghi sử dụng trong 80186 cũng hoàn toàn với các thanh ghi của 8086/8088. 2.4.3. CPU 80286. ADDRESS UNIT (AU) ADDRESS LATCH AND DRIVER PHYSICAL ADDRESS ADDER OFFSET ADDER SEGMENT BASE SEGMENT SEGMENT LIMIT SIZE CHECK PROCESSOR EXTENTION INTERFACE PREFETCH BUS CONTROL DATA TRANSCEIVERS BUS 6 BYTE PREFETCH QUEUE UNIT (IU) ALU REGISTER CONTROL LIMIT CHECK EXECUTION UNIT (EU) INSTRUCTION UNIT (IU) 3 DECODER INSTRUCTION INSTRUCTION DECODER QUEUE Bộ vi xử lý 80286 là một 8086, nó ra đời cùng thời gian với Hìnhbiến 2.17:tướng Sơ đồkhác khối của của 80286. 80186 nhưng được phát triển theo một hướng khác. Thay vì phối ghép các bộ điều khiển ngoại vi trong chip như 80186, 80286 có mạch quản lý bộ nhớ (MMU) để làm việc với bộ nhớ ảo với cơ chế bảo vệ bộ nhớ và khả năng địa chỉ hoá bộ nhớ vật lý với dung lượng đạt tới 16 Mbytes. 80286 là bộ vi xử lý đầu tiên được thiết kế làm việc với 38 mô trường đa nhiệm hoặc nhiều người sử dụng, cơ chế này bao gồm việc duy trì các môi trường trong khi chuyển qua các nhiệm vụ khác, việc bảo vệ hệ thống, quản lý bộ nhớ ảo. CPU 80286 được sử dụng trong các máy tính IBM PC/AT đầu tiên cũng như các máy tính tương thích với nó. Sơ đồ khối của 80286 biểu diễn trên hình 2.17 có thể chia thành 4 khối xử lý riêng biệt. Khối EU (Execution Unit) thực hiện tất cả các phép toán mà chương trình yêu cầu. Khối giao tiếp Bus (BU – Bus Unit) là bộ phận cung cấp tất cả các tín hiệu trong các chu kỳ đọc/ghi bộ nhớ và vào ra và các thiết bị bên ngoài khác của hệ thống, ví dụ như bộ đồng xử lý toán học 80287. Khối lệnh (IU – Instruction Unit) thực hiện việc giải mã các lệnh sắp vào hàng đợi sẵn sàng cho khối thực hiện lệnh (EU – Execution Unit) có thể truy cập. Điều này là một ví dụ giải thích việc các bộ vi xử lý hiện đại có thể thực hiện đồng thời một số lệnh (trong một đường ống) thay vì phải chờ thực hiện xong một lệnh rồi mới thực hiện lệnh kế tiếp. Khối tạo địa chỉ (AU – Address Unit) có nhiệm vụ tạo ra địa chỉ truy cập bộ nhớ và vào ra gửi tới BU. 80286 có thể hoạt động ở một trong hai chế độ địa chỉ bộ nhớ là : chế độ địa chỉ thực (real address mode), hoặc chế độ địa chỉ ảo bảo vệ (protected virtual address mode) hay còn gọi là chế độ bảo vệ (protect mode). Trong chế độ thực 80286 sẽ tạo ra địa chỉ vật lý 20 bit từ các địa chỉ đoạn và địa chỉ độ dời 16 bit giống như 8086, và như vậy dung lượng nhớ cực đại trong chế độ thực cũng là 2 20 giống như 8086. Khi hoạt động trong chế độ địa chỉ ảo bảo vệ, AU sẽ thực hiện chức năng của một khối quản lý bộ nhớ (MMU – Memory Management Unit). Trong chế độ này 80286 sử dụng 24 đường địa chỉ để truy cập tới một dung lượng 224 = 16 Mbytes bộ nhớ vật lý. Trong chế độ bảo vệ 80286 cũng cung cấp lên tới 1 Gbyte bộ nhớ ảo sử dụng bảng mô tả. 2.5. VI XỬ LÝ I386, I486 VÀ PENTIUM. 2.5.1. Một số vấn đề trong hệ thống đa nhiệm (nhiều người sử dụng). Khái niệm về hệ thống đa nhiệm. Trong các hệ thống phân chia thời gian phục vụ đồng thời nhiều người sử dụng, CPU sẽ thực hiện chương trình của người này trong vài msec, sau đó sẽ chuyển qua thực hiện chương trình của người khác. Quá trình cứ tiếp tục như vậy cho tới khi tất cả các chương trình đều được thực hiện. Do tốc độ quá nhanh nên mọi người có cảm giác máy tính chỉ làm việc riêng với mình. Một hệ điều hành có khả năng phối hợp các hoạt động phân chia theo thời gian như trên có thể gọi là hệ điều hành đa nhiệm, vì mỗi người sẽ có ít nhất một tác vụ (task) được hoạt động dưới sự điều khiển của hệ thống. MS DOS không phải là một hệ điều hành đa nhiệm, vì thế các máy tính tuy có sử dụng các bộ vi xử lý tiên tiến của Intel (80286 trở lên) được thiết kế để có thể làm việc đa nhiệm, nhưng vì chạy dưới mô trường DOS nên vẫn chỉ là đơn nhiệm. Các hệ điều hành Unit, OS/2 hoặc Windows là các hệ điều hành đa nhiệm. Các hệ điều hành đa nhiệm có thể làm việc theo hai cách: định kỳ theo thời gian hoặc theo mức ưu tiên đặt trước. Vấn đề về bảo tồn môi trường làm việc. 39 Các thanh ghi, dữ liệu trong bộ nhớ … dùng trong một tác vụ được gọi là môi trường. Khi chuyển từ tác vụ này sang tác vụ khác, thì môi trường của tác vụ bị gián đoạn cần được bảo vệ, để đảm bảo nó tiếp tục thực hiện đúng khi được phục vụ trở lại. Thông thường để bảo vệ các môi trường, là bảo quản các thông tin này trong một vùng nhớ đặc biệt hoặc một ngăn xếp, có thể phân chia cho mỗi tác vụ một vùng nhớ hoặc vùng ngăn xếp riêng biệt. Khi cần thiết có thể cất môi trường của tác vụ này và lấy môi trường của tác vụ khác. Vấn đề tranh chấp khi sử dụng chung tài nguyên. Khi nhiều người sử dụng chung một số tài nguyên, trong hệ thống sẽ làm nảy sinh sự tranh chấp. Vì vậy hệ điều hành phải có các cờ báo bận cho các tài nguyên đang được sử dụng, và phải sắp xếp các yêu cầu cho các tài nguyên sử dụng chung theo hàng đợi để phục vụ lần lượt. Vấn đề về bảo vệ bộ nhớ. Một vấn đề về bộ nhớ có thể xảy ra trong hệ thống nhiều người làm việc là khi có hai hoặc nhiều người cùng một lúc muốn thay đổi nội dung của một vùng nhớ dùng chung. Hệ điều hành phải có cơ chế bảo vệ, sao cho một vùng nhớ đang được dùng cho tác vụ này, không bị hoạt động của các tác vụ khác làm cho sai lệch. Chính bản thân hệ điều hành cũng cần được bảo vệ bởi vì trong khi thực hiện một tác vụ, một người sử dụng nào đó có thể có các lệnh ghi vào vùng nhớ chứa mã lệnh của hệ điều hành. Để giải quyết vấn đề này hệ điều hành thường được xây dựng theo cơ chế nhiều lớp, các lớp sẽ được gán các mức đặc quyền thâm nhập sao cho: người sử dụng chỉ được quyền thâm nhập vào vùng dữ liệu ở mức ngoài cùng, có mức đặc quyền thấp nhất (lớp ngoài cùng sẽ chứa mã lệnh và dữ liệu dành cho người sử dụng). Khi muốn thâm nhập vào các lớp trong, người sử dụng phải thâm nhập qua các cơ chế phức tạp, để không có khả năng gây lỗi cho hệ điều hành. Bản thân hệ điều hành sẽ để mã lệnh và dữ liệu của nó ở lớp trong cùng, và nó được gán quyền thâm nhập vào tất cả các lớp. Các bộ vi xử lý của Intel thường có bốn mức đặc quyền. Việc quản lý bộ nhớ. Có hai lý do khiến cho bộ nhớ cần được quản lý một cách đặc biệt khi làm việc đa nhiệm là: bộ nhớ bán dẫn thường có kích thước bé, không đủ cả hệ điều hành lẫn các chương trình của người sử dụng, và các vùng nhớ phải được bảo vệ nghiêm ngặt để không bị chương trình của người sử dụng làm hỏng. Một số hệ điều hành có cả chức năng quản lý bộ nhớ, nhưng để tăng tốc độ hoạt động của hệ thống tốt nhất là có riêng một khối quản lý bộ nhớ (MMU) thực hiện bằng phần cứng. Để giải quyết các vấn đề nêu trên MMU sẽ phải quản lý một cơ chế nhớ khác, đó là chế độ bộ nhớ ảo. Đó là sự kết hợp của các loại bộ nhớ : cache (SRAM tốc độ cao), bộ nhớ chính (DRAM) và bộ nhớ phụ (ổ đĩa) chúng hoạt động dưới sự quản lý của MMU, sao cho dưới quan điểm lập trình và đối với người sử dụng tập hợp các bộ nhớ trên giống như là một bộ nhớ thuần nhất với dung lượng lớn (gần bằng dung lượng của ổ đĩa cứng), nhưng lại làm việc với tốc độ cao (gần bằng tốc độ của bộ nhớ chính). Bộ nhớ ảo có thể quản lý bằng cách chia bộ nhớ thành các mảng nhỏ có độ lớn tính theo đoạn, động tác này được gọi là phân đoạn (đối với các bộ vi xử lý Intel từ 80286 trở đi), hoặc có thể phân theo trang (từ 80386 trở lên). Trong bộ nhớ ảo như vậy, từng mảng mã lệnh và từng mảng dữ liệu dùng cho chương trình hiện tại được nạp từ ổ đĩa vào DRAM, và chúng sẽ được truy cập theo cơ chế của MMU khi cần thiết. Nếu chương trình đang chạy cần một mảng nào đó chưa có trong DRAM thì nó sẽ được 40 nạp vào DRAM. Nếu DRAM không còn đủ chỗ chứa thì một mảng nào đó của DRAM (xác định theo các tiêu chuẩn nhất định nào đó) sẽ bị đẩy trở lại ổ đĩa hoặc bị ghi đè lên. Một cơ chế tương tự cũng sẽ điều khiển hoạt động truyền dữ liệu giữa bộ nhớ cache và bộ nhớ chính. Nói cách khác DRAM làm bộ nhớ đệm cho ổ đĩa, còn bộ nhớ cache sẽ đóng vai trò làm bộ nhớ đệm cho DRAM. Trong các CPU thông thường một đoạn có thể có dung lượng lên tới 4GB, còn một trang thông thường có độ lớn là 4KB. Bộ nhớ chính trong một hệ thống vi xử lý (còn được gọi là bộ nhớ vật lý) là các bộ nhớ bán dẫn (ROM+RAM) có dung lượng lớn nhất bị hạn chế bởi Bus địa chỉ của CPU. Theo quan điểm bộ nhớ ảo thì bộ nhớ vật lý chẳng qua chỉ là chỗ chứa các mảng (các đoạn hay các trang) hiện đang có liên hệ với hệ điều hành hoặc với chương trình của người sử dụng. Để truy cập các bộ nhớ ảo chương trình sẽ dùng địa chỉ ảo (hay còn gọi là địa chỉ logic) còn để truy cập tới bộ nhớ vật lý cần phải dùng địa chỉ vật lý. Trong các CPU có MMU, khi CPU cần đọc lệnh hoặc toán hạng thì nó đưa ra địa chỉ logic của lệnh hay toán hạng đó. MMU nhận địa chỉ logic và chuyển đổi (dịch) nó ra địa chỉ vật lý, địa chỉ này sẽ được cung cấp ra Bus để truy cập bộ nhớ vật lý. Có hai cách hoạt động trong chế độ địa chỉ ảo là phân đoạn và phân trang. - Chuyển đổi địa chỉ trong hệ thống làm việc theo cách phân đoạn. Trong các hệ thống sử dụng bộ vi xử lý Intel từ 80286 tới Pentium, khi làm việc theo cách phân đoạn bảng mô tả (descriptor) sẽ được sử dụng làm bộ chuyển đổi địa chỉ như hình 2.18. Địa chỉ logic sẽ bao gồm hai phần: Bộ chọn (Selector) và độ dời (Offset). Trong bộ chọn có hai bit dành riêng để mã hoá mức đặc quyền thâm nhập vào một đoạn nào đó của chương trình đang chạy. Trong bảng mô tả, mỗi phần tử của bảng sẽ bao gồm hai phần: một phần chứa địa chỉ cơ sở đoạn dùng để tìm ra địa chỉ vật lý của toán hạng, một phần chứa các bit quản lý (gồm các bit điều khiển và các bit bảo vệ của đoạn), hai trong số các bit này sẽ chứa quyền thâm nhập của đoạn. Khi một chương trình có nhu cầu thâm nhập đoạn nào đó, MMU sẽ so sánh mức đặc quyền của đoạn được ghi trong phần các bit quản lý. Nếu mức đặc quyền trong phần chọn lớn hơn hay bằng mức đặc quyền trong phần quản lý, thì MMU cho phép chương trình thâm nhập vào đoạn được yêu cầu. Nếu không chương trình yêu cầu thâm nhập không được MMU trao quyền thâm nhập, và MMU sẽ gây ra ngắt để báo cho CPU biết có sự vi phạm đặc quyền thâm nhập, bộ nhớ nhờ cơ chế này sẽ được bảo vệ. Chuyển đổi địa chỉ trong hệ thống làm việc theo cách phân trang. Trong các hệ thống dụngtính cácđịa bộ chỉ vi xử lý phân Intel từ 80386 tới Pentium, ngoài việc Bộsửphận kiểu đoạn quản lý bộ nhớ ảo theo đoạn, MMU còn có khả năng quản lý theo trang. Việc quản lý bộ nhớ ảo theo trang Selector được áp dụng trong rất nhiều loại CPU, các bộ vi xử lý loại RISC Offset và họ 680x0 của hãng Motorola đều sử dụng cách quản lý này. Việc các bộ vi xử lý Intel vẫn dùng cách quản lý theo đoạn là để đảm bảo tính tương thích với 80286. Trong chế độ phân trang, độ lớn được chọn là 4KB để đạt được tốc Địa thường chỉ cơ sở Cáccủa bit trang bảo vệ, độ tối ưu khi phải trao đổi trang quađiều lại giữa củacác đoạn khiểnbộ nhớ bán dẫn và đĩa. Trong chế độ phân trang, địa chỉ logic được đưa qua bộ phận tính địa chỉ theo kiểu phân đoạn để thu được địa chỉ tuyến tính, địa chỉ tuyến tính này sẽ được chuyển đổi thành địa chỉ vật lý trong bộ phận tính địa chỉ theo kiểu phân trang (hình 2.19). Bảng mô tả 41 Hình 2.18: Chuyển đổi địa chỉ trong hệ thống phân đoạn. Trong các bộ vi xử lý từ 80386 trở lên có các thanh ghi điều khiển CR0 – CR3 dài 32 bit. Khi muốn CPU làm việc theo kiểu phân trang cần phải đưa bit điều khiển thích hợp vào CR0, lúc này CR3 sẽ chứa địa chỉ cơ sở của danh mục bảng trang. Địa chỉ tuyến tính sẽ bao gồm 3 phần: - Phần danh mục (Directory) sẽ cộng với nội dung CR3 để trỏ tới một danh mục trong bảng các danh mục trang. - Phần bảng trang (Page Table) sẽ được cộng với nội dung danh mục mong muốn thu được ở trên để trỏ tiếp vào một bảng trang trong các bảng trang. - Phần độ dời (Offset) sẽ được cộng với nội dung của bảng trang thu được ở trên để trỏ tiếp tới toán hạng hoặc mã lệnh cần tìm trong giới hạn cho phép của khuôn trang. Bộ phận tính địa Bộ phận tính địa chỉ kiểu phân đoạn chỉ kiểu phân trang địa chỉ ảo địa chỉ tuyến địa chỉ vật lý tính Hình 2.19: Phân đoạn và phân trang. Địavật chỉlýtuyến tínhđộ phân trang được biểu diễn trên hình 2.20. Hoạt động tạo địa chỉ theo chế Trong bảng phân trang, mỗi mục cho một khuôn trang 4KB bao gồm các bit địa chỉ cơ Offset sở của khuôn trangDirectory và các bit quảnTable lý. Trong danh mục bảng trang cũng vậy, mỗi mục 31 lý. Trong 0 của bảng trang bao gồm các bit địa chỉ cơ sở của bảng trang và các bit quản số các bit quản lý có bit U/S (User/Supervisor) dùng để mã hoá các mức đặc quyền (U/ S = 1 biểu thị mức đặc quyền của hệ điều hành và nó 31 tương ứng 0 với mức 1, 2, 3 trong chế độ phân đoạn; U/S = 0 biểu thị mức đặc quyền của người sử dụng ứng với mức 3 trong chế độ phân đoạn) bit R/W (read/write) dùng để biểu thị quyền được đọc ghi vào 0 tạo thành mã các mức đặc quyền thâm nhập trang hoặc bảng trang. Tổ hợp31hai bit này (đọc/ghi) khác nhau (11 là mức cao nhất và 00 là mức thấp nhất). Bộ nhớ vật lý 31 Bảng trang 0 Thanh ghi điều khiển CR3 Danh mục bảng trang Hình 2.20: Chuyển đổi địa chỉ trong hệ thống phân trang. 42 2.5.2. Bộ vi xử lý 80386. Bộ vi xử lý 80386 là bước phát triển tiếp theo của 80286, đây là bộ vi xử lý 32 bit đầu tiên với Bus địa chỉ 32 bit (khả năng địa chỉ hoá 4 Gbyte). ALU và các thanh ghi thao tác với các dữ liệu có độ dài 32 bit làm tốc độ xử lý nhanh hơn. 80386 là một bộ vi xử lý công nghệ cao được thiết kế cho các hệ thống yêu cầu hiệu suất rất cao và hoạt động tối ưu với yêu cầu đa nhiệm. 80386 có các thanh ghi 32 bit và các đường dữ liệu có thể chuyển các địa chỉ hoặc các dữ liệu 32 bit. Bộ xử lý địa chỉ cho phép truy cập 4Gbyte dung lượng nhớ vật lý và 64Tbyte dung lượng nhớ ảo với mỗi đoạn cực đại 4Gbyte. Bên trong 80386 còn tích hợp các mạch chức năng cho việc quản lý bộ nhớ, cơ cấu bảo vệ, các thanh ghi chuyển đổi địa chỉ, các cấu trúc phần cứng công nghệ cao phục vụ cho các yêu cầu đa nhiệm. Cấu trúc xử lý lệnh theo đường ống và Bus tốc độ cao của 80386 cho phép rút ngắn thời gian thực hiện các lệnh và tăng độ lưu thoát của toàn bộ hệ thống. 80386 có được chia thành hai thế hệ chính: 386DX có Bus địa chỉ và dữ liệu đều là 32 bit đóng trong vỏ gốm 132 chân, và 386SX có cấu trúc giống như 386DX nhưng có Bus địa chỉ 24 bit và Bus dữ liệu 16 bit sử dụng cho các hệ thống có giá thành hạ. 80386 bao gồm: một khối xử lý trung tâm (Central Processing khối quản lý 3 – INPUT ADDER unit), mộtREQUEST PRIORITIZER ADDER bộ nhớ MMU và một khối giao tiếp Bus. Sơ đồ khối của 80386 trình bày trên hình 2.21. DESSCRIPTOR REGISTERS PAGE CACHE LIMIT & ATTRIBUTE PLA CONTROL & ATTRIBUTE PLA PROTECTION TEST UNIT BARREL SHIFTER ADDER PIPELINE/ Bus SIZE CONTROL DECODER & SEQUENCING INSTRUCTION DECODER PREFETCHER/ LIMIT CHECK CONTROL ROM 3 DECODER INSTRUCTION QUEUE 16 BYTE CODE QUEUE MULTIPLY/ DIVIDE REGISTER FILE ADDRESS DRIVER MUX/ TRANS CEIVER 43 Hình 2.21: Sơ đồ khối vi xử lý 80386. Khối xử lý trung tâm bao gồm khối lệnh và khối thực hiện lệnh. Khối thực hiện lệnh có 8 thanh ghi 32 bit sử dụng cho việc tính toán địa chỉ và lưu trữ dữ liệu, ngoài ra còn có bộ dịch vòng (barrel shifter) 64 bit sử dụng để tăng tốc độ các phép toán quay, dịch, nhân, chia. Khối lệnh sẽ thực hiện nhiệm vụ giải mã các mã lệnh sắp vào hàng đợi sẵn sàng cung cấp cho khối thực hiện lệnh. Khối quản lý bộ nhớ (MMU) bao gồm một khối phân đoạn và một khối phân trang. Bộ phân đoạn cho phép tăng cường hiệu quả quản lý bộ nhớ ảo. Cơ cấu phân trang sẽ hoạt động sau và thông qua quá trình phân đoạn, mỗi đoạn được chia thành một hoặc nhiều trang 4 KB. Để thực hiện hiệu quả hệ thống quản lý bộ nhớ ảo, 80386 hỗ trợ tất cả các quá trình khởi động lại cho các trang và các đoạn lỗi. Bộ nhớ được tổ chức thành một hoặc nhiều đoạn với độ dài có thể thay đổi được, mỗi đoạn có thể có độ dài cực đại lên tới 4 GB. Mỗi nhiệm vụ thực hiện trên hệ thống 80386 có thể bao gồm 16381 đoạn, vì vậy nó có dung lượng nhớ cực đại lên tới 64 TB. Khối phân đoạn cung cấp 4 mức đặc quyền để ngăn cách và bảo vệ các ứng dụng cũng như hệ điều hành không bị thân nhập bởi các ứng dụng khác. Sự bảo vệ từ phần cứng này cho phép thiết kế các hệ thống với khả năng đa nhiệm cao. BARREL SHIFTER SEMENT. UNIT REGISTER FILE DESCRIPTOR REGISTER ALU LIMIT & ATTRIBUTE PLA PAGING UNIT CACHE UNIT ADDRESS DRIVERS 8 KB CACHE WRITE BUFFERS 4x80 TRANSLATION LOOKASIDE BUFFER DATA BUS TRANSCEIVER PREFETCHER FLOATING POINT UNIT CONTROL & PROTECTION TEST UNIT FP REGISTER FILE CONTROL ROM 32 BYTE CODE QUEUE 2x16 BYTE 32 BYTE CODE QUEUE 2x16 BYTE BUS CONTROL REQUEST SEQUENCER BUS BURST CONTROL BUS SIZE CONTROL CACHE CONTROL PARITY GENERATOR AND CONTROL 80386 có hai chế độ hoạt động : chếSơđộđồthực Hình là 2.22: khối(Real CPUMode) 80486.và chế độ bảo vệ (Protect Mode). Trong chế độ thực 80386 hoạt động với tốc độ nhanh hơn rất nhiều so với các thế hệ trước đó do có cấu trúc Bus 32 bit. Chế độ thực cũng cần được thực hiện trước 44 để thiết lập các thông số cho chế độ bảo vệ. Chế độ bảo vệ sẽ quản lý bộ nhớ theo cách phức tạp hơn để cho phép hệ thống hoạt động đa nhiệm. Bộ giao tiếp Bus của 80386 cũng được thiết kế với các cấu trúc mới cho phép tăng cường tốc độ giao tiếp như: bộ tạo địa chỉ theo cấu trúc đường ống, Bus dữ liệu có kích thước động, các byte trên Bus dữ liệu có thể đọc riêng rẽ tuỳ theo các tín hiệu cho phép. 2.5.3. Vi xử lý 80486. 80486 về cơ bản có cấu trúc tương tự như 80386, nhưng được tăng cường thêm ngay bên trong một bộ nhớ cache với dung lượng 8KB dùng chung cho lệnh và dữ liệu. 80486 còn được cấy thêm bộ đồng xử lý toán học dấu phẩy động (FPU). Khả năng thao tác của 80486 vì thế cao hơn, nhưng khả năng địa chỉ hoá bộ nhớ thì vẫn giống như 80386. Sơ đồ khối của 80486 biểu diễn trên hình 2.22. 2.5.4. Vi xử lý Pentium. TLB BRANCH TARGET BUFFER ICACHE 8KB PREFETCH BUFFER BUS UNIT ROM CONTROL DECODER PAGE UNIT CONTROL UNIT FPU ADDRESS UNIT U-PIPELINE ADDRESS UNIT V-PIPELINE CONTROL Điều khiển Register file ADDER INTEGER REGISTER FILE ALU U-PIPELINE ALU V-PIPELINE BARREL SHIFTER DIVIDER MUL DCACHE 8KB TLB Pentium là bộ vi xử lý đầu tiên trong họ có Bus dữ liệu 64 bit, Bus địa chỉ của nó vẫn là 32 bit. So với 80486, Pentium được tăng cường thêm dung lượng cache 8KB, nhờ vậy khi thực hiện các chương trình nó dành riêng 8KB cho dữ liệu và 8KB cho mã Hình 2.23: Sơ đồ khối vi xử lý Pentium. 45 lệnh. Ngoài bộ FPU có tốc độ gấp 10 lần trong 486, Pentium còn được tích hợp thêm hai bộ IU có khả năng hoạt động song song để thực hiện các phép tính với số nguyên. Các cải tiến này làm tăng đáng kể tốc độ hoạt động của Pentium so với các thế hệ trước nó. Sơ đồ khối một bộ vi xử lý Pentium biểu diễn trên hình 2.23. Cấu trúc hai bộ nhớ cache dành riêng cho lệnh và dữ liệu, mỗi bộ cache có bộ đệm chuyển đổi địa chỉ riêng cho phép bộ vi xử lý thực hiện đồng thời việc thực hiện lệnh và truy cập dữ liệu, hiệu quả hệ thống sẽ cao hơn cơ chế đường ống. Có 256 đường nối giữa Icache và các bộ đệm tiền đọc lệnh (Prefetch buffers) cho phép đọc trước 32 byte mã lệnh. Pentium là vi xử lý có cấu trúc superscalar hai đường (two-issues superscalar), cho phép hai chu kỳ đọc và giải mã lệnh có thể thực hiện đồng thời. Pentium có hai cấu trúc đường ống xử lý số nguyên song song: U pipeline và V pipeline. U pipeline có bộ dịch vòng để thực hiện nhanh chóng các phép quay dịch, nhân chia. Pentium còn có hai cấu trúc đường ống FPU riêng biệt cùng với các tập thanh ghi sử dụng cho tính toán số nguyên và dấu phẩy động. Cache dữ liệu có cấu trúc hai cổng truy cập, có thể cho phép việc truy cập đồng thời các cấu trúc đường ống U pipeline và V pipeline. 2.6. VI XỬ LÝ Z80. Z80 là bộ vi xử lý 8 bit của hãng Zilog được chế tạo với công nghệ HMOS có mã lệnh tương thích với các loại CPU 8085 và 8080 của Intel. Z80 có Bus địa chỉ 16 bit định vị tuyệt đối trong các chương trình, tức là 16 bit này có thể cung cấp thẳng từ lệnh hoặc từ các thanh ghi 16 bit, mà không sử dụng các địa chỉ đoạn (Segment) và địa chỉ độ dời (offset) như 8088/8086. Sơ đồ khối của Z80 được biểu diễn trên hình 2.24 bao gồm các khối: ALU thực hiện các phép toán số học và logic thông dụng như: cộng, trừ, And, Or, Xor, Not và các phép quay dịch. Bộ điều khiển dữ liệu (Data Bus Control): thực hiện vai trò kiểm soát Bus dữ liệu, cho phép CPU truyền dữ liệu với thế giới bên ngoài. Bộ điều khiển Bus địa chỉ (Address Control): kiểm soát Bus địa chỉ mở cho địa chỉ trong CPU cung cấp ra Bus tại các thời điểm thích hợp trong các chu kỳ truy xuất bộ nhớ và vào ra. Thanh ghi lệnh (INST. REG.) là nơi chứa mã lệnh lấy vào từ bộ nhớ sẵn sàng để giải Bus dữ liệu 8 bit mã thực hiện. Khối giải mã lệnh và điều khiển CPU (Instruction Decode & CPU control): lấy lệnh Data Bus từ thanh ghi lệnh giải mã cung cấp các tín hiệu điều khiển các khối trong CPU và cung control cấp các tín hiệu định thời cho bộ nhớ vào/ra hoạt động, ngoài ra nó còn nhận các tín hiệu điều từ bên ngoài để thay đổi các chế độ hoạt động. Các tín khiển hiệu điều Các thanh ghi baovàgồm 18 thanh ghi 8 bit và 4 thanh ghi 16 bit: khiển hệ thống Instruction Thanh ghi bộ đếm chương trình PC 16 bitINST. cung cấp địa chỉ tuyệt đốiALU ra Bus địa chỉ CPU decode & REG. trong các chu kỳ lấy mã lệnh từ bộ nhớ. CPU Thanh ghi con trỏ ngăn xếp SP 16 bit luôn giữ địa chỉ đỉnh ngăn xếp. control Các thanh ghi chỉ số IX, IY được dùng trong kiểu định CPU vị chỉ số, trong chế độ này dữ liệu toán hạng của lệnh sẽ nằm trong ô nhớ có địa chỉregisters là tổng của thanh ghi chỉ số và số độ dời được chỉ ra trong lệnh. Các tín hiệu điều khiển CPU Address control Bus địa chỉ 16 bit Hình 2.24: Sơ đồ khối CPU Z80 46 Thanh ghi địa chỉ trang ngắt I (Interrupt page address) sử dụng cung cấp 8 bit địa chỉ cao của chương trình phục vụ ngắt, 8 bit địa chỉ thấp sẽ được cung cấp từ thiết bị yêu cầu ngắt. Thanh ghi làm tươi bộ nhớ RAM động R (Refresh): sử dụng lưu 7 bit địa chỉ hàng cung cấp tới Bus địa chỉ làm tươi RAM động sau mỗi chu kỳ lấy lệnh. Thanh chứa A (Accumulator) của Z80 là thanh ghi 8 bit, nó sử dụng giữ một toán hạng và kết quả cuối cùng trong tất cả các phép toán số học và logic. Thanh ghi cờ F (flags) bao gồm 7 cờ : CF, ZF, OF, HF, PF, SF, NF. Các thanh ghi đa năng bao gồm: B, C, D, E, H, L có thể sử dụng riêng rẽ như các thanh ghi 8 bit, hoặc có thể sử dụng từng cặp BC, DE, HL để trở thành các thanh ghi 16 bit. Ngoài ra Z80 còn có nhóm các thanh ghi bổ phụ : A’, B’, C’, D’, E’, H’, L’ sử dụng để chứa dữ liệu tạm thời cho các thanh ghi A, B, C, D, E, H, L khi cần thiết bằng các lệnh chuyển đổi dữ liệu (Exchange). 2.7. HỌ VI XỬ LÝ MOTOROLA M68000. Họ vi xử lý M68000 được sử dụng rất rộng rãi trong các thế hệ máy PC có chức năng mạnh về đồ hoạ cho các ứng dụng CAD/CAM, các máy tính chuyên dụng cho ngành y tế, công nghiệp, tự động điều khiển, các tổng đài chuyển mạch. MC68000 được dùng là CPU cho các họ máy vi tính Apple Macintosh. Họ M68000 là một trong các sản phẩm cạnh tranh rất mạnh với Intel, các đặc tính cơ bản của chúng được trình bày trong bảng sau: Thuộc tính Data Bus Address Speed (MHz) Icache 68000 16 24 8, 10, 12, 16 68010 16 16 8, 10, 12 3 words 68020 8, 16, 32 32 16, 20, 25, 33 256 bytes 68030 8, 16, 32 32 16, 20, 25, 33, 40, 50 256 bytes 68040 32 32 25, 40 4 KB 68060 32 32 50, 60, 66, 75 8 KB 47 Internal Dcache Internal FPU MMU Memory max Ngoài Ngoài 16 MB Ngoài Ngoài 16 MB Ngoài Ngoài 4 GB 256 bytes 4 KB 8 KB Ngoài Trong 4 GB Trong Trong 4 GB Trong Trong 4 GB Họ 68000 thường bảo vệ bộ nhớ bằng hai mức đặc quyền. Mức đặc quyền người sử dụng sử dụng cho các chương trình ứng dụng, và mức đặc quyền giám sát (supervisor) sử dụng cho các chức năng của hệ điều hành. Các chương trình ứng dụng sẽ không được phép truy cập vào bất kỳ thanh ghi nào trong mức giám sát, còn các chương trình ở mức giám sát có thể truy cập bất kỳ thanh ghi nào của vi xử lý. Các thanh ghi của họ 68000 bao gồm: Các thanh ghi cho phần xử lý số nguyên có : 16 thanh ghi chung ( 8 thanh ghi dữ liệu 32 bit D0- D7 và 8 thanh ghi địa chỉ 32 bit A0 – A7), một thanh ghi bộ đếm chương trình PC 32 bit và một thanh ghi mã điều kiện CCR (Condition Code Register) 8 bit. Các thanh ghi dấu phẩy động bao gồm: 8 thanh ghi dữ liệu cho dấu phẩy động 80 bit (FP0 – FP7), một thanh ghi điều khiển dấu phẩy động 8 bit (FPCR), một thanh ghi trạng thái dấu phẩy động 32 bit (FPSR) và một thanh ghi địa chỉ dấu phẩy động 32 bit (FPIAR). Các thanh ghi này có thể trong các bộ FPU nằm ngay bên trong CPU, cũng có thể thuộc các bộ FPU kết nối bên ngoài CPU. 48 This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.Tìm kiếm
Chủ đề
Atlat Địa lí Việt Nam Đồ án tốt nghiệp Đơn xin việc Bài tiểu luận mẫu Mẫu sơ yếu lý lịch Giải phẫu sinh lý Trắc nghiệm Sinh 12 Lý thuyết Dow Hóa học 11 Đề thi mẫu TOEIC Tài chính hành vi Thực hành Excel adblock Bạn đang sử dụng trình chặn quảng cáo?Nếu không có thu nhập từ quảng cáo, chúng tôi không thể tiếp tục tài trợ cho việc tạo nội dung cho bạn.
Tôi hiểu và đã tắt chặn quảng cáo cho trang web nàyTừ khóa » Sơ đồ Khối Vi Xử Lý 8086
-
A. Sơ đồ Khối Của 8086 - Tài Liệu Text - 123doc
-
Cấu Trúc Bên Trong Của Vi Xử Lí 8086 Doc - Tài Liệu Text - 123doc
-
[PDF] CHƯƠNG II: HỌ VI XỬ LÝ INTEL 80x86
-
CẤU TRÚC VI XỬ LÝ 8086/8088 - TaiLieu.VN
-
Sơ đồ Khối & Nguyên Lý Hoạt động Của Bộ Vi Xử Lý 8088
-
Họ Vi Xử Lí 8086 Intel - SlideShare
-
[PDF] Chương 2 – Bộ Vi Xử Lý Intel 8086/8088
-
Vi Xử Lý Và Cấu Trúc Máy Tính Vi Xử Lý 8086 (1) | Xemtailieu
-
CẤU TRÚC VI XỬ LÝ 8086/8088 - Tailieunhanh
-
[PDF] KIẾN TRÚC MÁY TÍNH - Topica
-
Cấu Trúc Vi Xử Lý 8086/8088 - Tài Liệu đại Học
-
Bài Giảng Kỹ Thuật Vi Xử Lý Học Viện Công Nghệ Bưu Chính Viễn Thông
-
Intel 8086 - Wikimedia Tiếng Việt