Nghiên cứu Khoa học
Bộ vi xử lý chuyên dụng
Các bộ vi xử lý có thể được chia thành 2 loại chính: bộ vi xử lý đa năng (general-purpose microprocessors) và bộ vi xử lý chuyên dụng (dedicated microprocessors). Bộ vi xử lý chuyên dụng đối khi còn được gọi là mạch tích hợp ứng dụng cụ thể ASIC (application specific integrated circuits).
Bộ vi xử lý đa năng có khả năng thực hiện nhiều phép tính. Để đạt được mục tiêu này, mỗi phép tính không được nối dây cứng bên trong bộ xử lý mà thay vào đó được biểu diễn bằng một chuỗi lệnh dưới dạng một chương trình được lưu trong bộ nhớ và được thực thi bởi bộ vi xử lý. Chương trình trong bộ nhớ có thể thay đổi được dễ dàng sao cho phép tính khác có thể được thực hiện. Do bản chất tổng quát của bộ xử lý, có thể trong việc thực hiện một phép tính cụ thể, không phải tất cả các tài nguyên sẵn có bên trong bộ vi xử lý đều sử dụng.
Mặt khác, một ASIC được dự định chỉ thực hiện một tác vụ. Do vậy các lệnh để thực hiện một tác vụ được nối cứng bên trong bộ xử lý và một khi đã được sản xuất, ta không thể thay đổi được. Nói cách khác, không có bộ nhớ chương trình nào được cần đến do chương trình được xây dựng ngay chính bên trong mạch. Nếu ASIC hoàn toàn tùy thuộc khách hàng, chỉ có những tài nguyên được yêu cầu bởi phép tính mới bao gồm trong ASIC và do vậy không có nguồn tài nguyên nào bị bỏ phí.
Việc thiết kế một bộ vi xử lý, đa năng hoặc chuyên dụng, có thể được chia thành 2 phần chính: đường dữ liệu và khối điều khiển như được trình bày ở Hình 4.1. Đường dữ liệu chịu trách nhiệm trên tất cả các thao tác dữ liệu. Đường dữ liệu bao gồm (1) các đơn vị chức năng như là mạch cộng, mạch dịch bit, mạch nhân, ALU, mạch so sánh, v.v… (2) các thanh ghi và các phần tử nhớ khác dùng để lưu tạm thời dữ liệu và (3) các bus và các mạch ghép kênh để chuyển dữ liệu giữa các thành phần khác nhau bên trong đường dữ liệu.
Control inputs: các ngõ vào điều khiển.
Data inputs: các ngõ vào dữ liệu
Next-state logic: mạch logic trạng thái kế.
State memory register: thanh ghi bộ nhớ trạng thái.
Output logic: mạch logic ngõ ra.
Control signal: các tín hiệu điều khiển.
Control unit: khối điều khiển.
Datapath: đường dữ liệu.
Status signals: các tín hiệu trạng thái.
Control outputs: các ngõ ra điều khiển.
Data outputs: các ngõ ra dữ liệu.
Khối điều khiển (hoặc bộ điều khiển) chịu trách nhiệm điều khiển tất cả các thao tác của đường dữ liệu bằng cách cung cấp các tín hiệu điều khiển thích hợp cho đường dữ liệu ở thời điểm thích hợp. Dữ liệu bên ngoài có thể đưa vào bên trong đường dữ liệu thông qua các đường ngõ vàodữ liệu. Các kết quả từ phép tính có thể được đưa trở về thông qua các đường ngõ radữ liệu.
Ở một thời điểm, khối điều khiển được gọi là ở trong một trạng thái nào đó được xác định bởi nội dung của bộ nhớ trạng thái. Bộ nhớ trạng thái đơn thuần là một thanh ghi có một hoặc nhiều flipflop D. Khối điều khiển hoạt động bằng cách chuyển tiếp từ trạng thái này đến trạng thái khác – một trạng thái cho một chu kỳ xung clock. Phụ thuộc vào trạng thái hiện tại, các ngõ vào điều khiển và các tín hiệu trạng thái, mạch logic trạng thái kế trong khối điều khiển sẽ xác định trạng thái nào sẽ đi đến kế tiếp trong chu kỳ xung clock kế.
Như vậy, khối điều khiển còn được xem như một máy trạng thái hữu hạn FSM. Trong mỗi trạng thái mạch logic ngõ ra trong khối điều khiển tạo ra tất cả các tín hiệu điều khiển thích hợp để điều khiểnđường dữ liệu. Đường dữ liệu đến lượt mình cung cấp các tín hiệu trạng thái cho mạch trạng thái kế. Dựa trên việc hoàn tất một phép tính, đường ngõ ra điều khiển được xác lập để thông báo cho các thiết bị bên ngoài rằng giá trị trên các đường ngõ ra dữ liệu đã hợp lệ.
Trong các mục trước ta đã nghiên cứu cách thức thiết kế đường dữ liệu và khối điều khiển một cách riêng biệt. Trong mục này ta sẽ nghiên cứu cách ghép chúng lại với nhau để tạo thành bộ vi xử lý chuyên dụng. Có vài mức ở đó một bộ vi xử lý có thể được thiết kế. Ở mức thấp nhất, ta xây dựng một cách thủ công mạch của khối điều khiển lẫn đường dữ liệu và rồi kết nối chúng với nhau. Phương pháp xây dựng này sử dụng mô hình FSM + D (FSM cộng đường dữ liệu) vì FSM và đường dữ liệu được xây dựng riêng biệt. Mục 4.1 sẽ minh họa phương pháp thiết ké bộ vi xử lý theo cách thủ công này.
Mức thiết kế bộ vi xử lý kế tiếp cũng sử dụng mô hình FSM + D. Cũng như ở trên, ta xây dựng theo cách thủ công đường dữ liệu. Tuy nhiên, thay vì xây dựng FSM theo cách thủ công, ta tổng hợp FSM từ VHDL ở mức hành vi. Sẽ có một PROCESS trạng thái kế và một PROCESS ngõ ra trong đoạn mã ở mức hành vi. PROCESS trạng thái kế sẽ tạo ra mạch logic trạng thái kế và PROCESS ngõ ra sẽ tạo ra tất cả các tín hiệu để điều khiểnđường dữ liệu. FSM và đường dữ liệu được kết nối với nhau trong một mô-đun thực thể bằng cách sử dụng các tín hiệu điều khiển và trạng thái. Trên thực tế, đây có lẽ là mức thấp nhất mà ta muốn thiết kế một bộ vi xử lý chuyên dụng.
Lợi ích của việc sử dụng mô hình FSM + D là ta kiểm soát hoàn toàn cách thức mà khối điều khiển và đường dữ liệu được xây dựng.
Mức thiết kế bộ vi xử lý thứ ba sử dụng mô hình FSMD (FSM với đường dữ liệu). Khi sử dụng mô hình này ta vẫn sẽ thiết kế FSM bằng cách sử dụng đoạn mã VHDL ở mức hành vi. Tuy nhiên, thay vì xây dựng đường dữ liệu theo cách thủ công như là một mô-đun riêng, tất cả các thao tác của đường dữ liệu được nhúng bên trong thực thể FSM bằng cách sử dụng các toán tử cài đặt sẵn của VHDL. Trong quá trình thiết kế, trình tổng hợp sẽ tự động tạo ra một FSM và đường dữ liệu riêng biệt. Lợi ích của mô hình này là ta không cần phải thiết kế đường dữ liệu mà vẫn kiểm soát hoàn toàn thao tác nào được thực thi trong trạng thái nào hoặc trong chu kỳ xung clock nào. Nói cách khác ta kiểm soát được việc định thời của mạch.
Sau cùng, một bộ vi xử lý có thể được mô tả hoàn toàn ở mức hành vi sử dụng VHDL. Quá trình này tổng hợp tự động một bộ vi xử lý đầy đủ có khối điều khiển và đường dữ liệu. Nhớ rằng dù ta viết đoạn mã VHDL cho bộ vi xử lý bằng cách sử dụng mô hình FSM + D, mô hình FSMD hoặc mô hình hành vi, sau khi tổng hợp, mạch kết quả của bộ vi xử lý vẫn chứa cả khối điều khiển lẫn đường dữ liệu như là hai thành phần riêng biệt và được kết nối với nhau thông qua các tín hiệu điều khiển và trạng thái như được trình bày ở Hình 4.1.
Ta đã mô tả cách thức thiết kế đường dữ liệu và cách thức sử dụng đường dữ liệu để thực thi một giải thuật cụ thể bằng cách chỉ ra các từ điều khiển để điều khiểnđường dữ liệu ở mỗi chu kỳ xung clock. Ta đã kiểm tra được dữ liệu bằng cách thiết lập các tín hiệu của từ điều khiển một cách thủ công. Tuy nhiên để thực sự có đường dữ liệu hoạt động tự động theo các từ điều khiển, một khối điều khiển được cần đến sẽ tạo ra tín hiệu điều khiển tương ứng với các từ điều khiển ở mỗi chu kỳ xung clock. Như vậy ta cần xây dựng khối điều khiển này và khi được kết hợp với đường dữ liệu, sẽ tạo thành bộ vi xử lý chuyên dụng hoàn chỉnh thực thi giải thuật. Hai thành phần được kết nối với nhau bằngcác tín hiệu điều khiển và các tín hiệu trạng thái như được trình bày ở Hình 4.1 bằng cách sử dụng VHDL ở mức cấu trúc. Các tín hiệu điều khiển được tạo ra bởi khối điều khiển để điều khiển các thao tác của đường dữ liệu trong khi các tín hiệu trạng thái được tạo ra bởi đường dữ liệu để thông báo cho mạch logic trạng thái kế trong FSM nhằm xác định trạng thái kế là gì khi thực thi giải thuật. Khối điều khiển được xây dựng một cách chính xác bằng cách sử dụng phương pháp tổng hợp FSM đã được mô tả.
Khi đã thiết kế đường dữ liệu và các từ điều khiển để giải một bài toán cho sẵn, lúc này ta sẵn sàng xây dựng khối điều khiển cho đường dữ liệu. Ta bắt đầu bằng cách xây dựng giản đồ trạng thái của FSM. Một từ điều khiển được gán một trạng thái trong giản đồ trạng thái. Để thuận lợi, mọi trạng thái đều được cho một tên ở dạng ký hiệu. Trình tự ở đó các trạng thái được kết nối sẽ đi theo trình tự của các phát biểu của giải thuật. Các nhánh có điều kiện trong giải thuật sẽ có hai cạnh đi ra khỏi một trạng thái với các điều kiện được đánh nhãn trên các cạnh: một cạnh đối với điều kiện đúng và một cạnh đối với điều kiện sai. Các điều kiện này là các tín hiệu trạng thái được tạo ra bởi đường dữ liệu và được chuyển đến mạch logic trạng thái kế trong FSM. Một đường dữ liệu tổng quát sẽ cần thêm mạch tổ hợp, mạch so sánh chính xác hơn, kiểm tra các điều kiện này và khi điều kiện là đúng, đường dữ liệu sẽ xác lập tín hiệu trạng thái tương ứng được sử dụng bởi mạch logic trạng thái kế. Cũng có các điều kiện từ các ngõ vào bên ngoài chẳng hạn như tín hiệu Start để bắt đầu việc thực thi giải thuật/ mạch. Ngoài ra tín hiệu Reset bên ngoài được sử dụng để thiết lập lại FSM ở trạng thái ban đầu.
Từ giản đồ trạng thái, ta xây dựng bảng trạng thái kế, bảng này có cùng thông tin như giản đồ trạng thái nhưng có các mã bit thực tế gán cho các trạng thái. Tổng số trạng thái trong giản đồ trạng thái sẽ xác định số flipflop được cần đến cho bộ nhớ trạng thái. Việc gán các mã khác nhau cho các trạng thái có thể tạo ra một mạch tối ưu hơn. Giống như giản đồ trạng thái, bảng trạng thái kế cho ta biết trạng thái kế của FSM sẽ là gì, cho trước trạng thái hiện tại mà FSM đang ở đó và các giá trị hiện tại của các tín hiệu trạng thái và ngõ ra.
Cho đến lúc này, việc thiết kế FSM độc lập với loại flipflop được sử dụng. Tuy nhiên, một FSM có thể được thực hiện bằng cách sử dụng bất kỳ loại flipflop nào trong bốn loại D, T, SR và JK hoặc kết hợp các loại này và việc sử dụng các flipflop khác nhau có thể tạo ra mạch nhỏ hơn. Tuy vậy ta sẽ chỉ sử dụng flipflop D trong mục này. Ta cần biến đối bảng trạng thái kế thành bảng thực hiện đối với flipflop D. Bảng thực hiện trình bày các dữ liệu ngõ vào cần thiết của các flipflop (D) sẽ tạo ra các trạng thái kế như được cho trong bảng trạng thái kế.
Thật ra bảng thực hiện đối với flipflop D giống với bảng trạng thái kế ngoại trừ việc đánh nhãn các điểm nhập. Trong bảng trạng thái kế, nhãn của các điểm nhập là đối với trạng thái kế đi đến trong khi đó ở bảng thực hiện, nhãn của các điểm nhập là đối với ngõ vào flipflop. Ta muốn gán cho ngõ vào giá trị sẽ gây ra giá trị tương ứng trong bảng trạng thái kế. Tuy nhiên vì phương trình đặc tính của flipflop D là = , các điểm nhập trong cả hai bảng giống nhau. Nếu loại flipflop khác được sử dụng, hai bảng này sẽ không giống nhau.
Bảng thực hiện được sử dụng để suy ra các phương trình kích thích cho các ngõ vào của tất cả các flipflop. Các phương trình này phụ thuộc vào các mã trạng thái hiện tại và các giá trị của các tín hiệu trạng thái. Mạch logic trạng thái kế, đây là mạch tổ hợp, được xây dựng từ các phương trình này.
Từ mỗi trạng thái của FSM, các tín hiệu ngõ ra điều khiểnđược tạo ra. Các tín hiệu này là các tín hiệu của từ điều khiển dùng để điều khiểnđường dữ liệu. Vì mỗi từ điều khiểnđược tạo ra trong một trạng thái của FSM, do vậy các tín hiệu điều khiển này chỉ phu thuộc vào trạng thái. Nói cách khác phương trình mạch logic ngõ ra phụ thuộc vào giá trịtrạng thái, đây là nội dụng của các flipflop. Các bảng giá trị của các tín hiệu điều khiển này chỉ là bảng từ điều khiển có các mã trạng thái thực sự.
Ở trạng thái sau cùng, khi dữ liệu sinh ra từ phép tính của giải thuật được xuất ra từ đường dữ liệu, khối điều khiển cũng xuất ra tín hiệu Done để thông báo cho người sử dụng bên ngoài thao tác đã hoàn tất và dữ liệu được xuất ra bởi đường dữ liệu là hợp lệ.
Thí dụ 4.1
Ta sẽ xây dựng FSM theo cách thủ công cho giải thuật tính tổng dựa trên đường dữ liệu tổng quát. Đây là bài toán tạo ra và cộng các số giảm từ đến 1, trong đó là số nhập nào.
Input: nhập n.
Output sum: xuất sum.
Pass through: chuyển qua.
Shift left (right) and fill with 0: dịch trái (phải) và làm đầy bằng 0.
Rotate right: quay phải.
Hình 4.2(b) trình bày 5 từ điều khiển được cần đến. Trong giản đồ trạng thái được trình bày ở Hình 4.3(a) ta có 6 trạng thái: 5 cho 5 từ điều khiển và 1 cho trạng thái bắt đầu thiết lập lại. Các trạng thái này được cho các tên dạng ký hiệu , , v.v… và được chú giải bởi từ điều khiển mà trạng tháiđược gán nhằm dễ dàng tham khảo. Trình tự ở đó các trạng tháiđược kết nối sẽ đi theo trình tự các phát biểu trong giải thuật của Hình 4.2(a). Trạng thái là trạng thái bắt đầu thiết lập lại.
Khi thiết lập lại, FSM đi vào trạng thái này và chờ tín hiệu Start. FSM cũng đi vào trạng thái này nếu FSM tình cờ đi vào một trong các trạng thái không sử dụng. Trạng thái không sử dụng là tổ hợp nội dung của các flipflop không được sử dụng làm mã hợp lệ trong bảng trạng thái kế.
Trong thí dụ này, các tổ hợp 110 và 111 không được sử dụng. Trạng thái khởi động bằng 0. Trạng thái s2 thực thi từ điều khiển 2 để nhập số . Trong trạng thái s4 từ điều khiển 4 cho phát biểu n = n -1 được thực thi. Phát biểu này ở cuối vòng lặp while trong giải thuật. Điều kiện để lặp lại vòng lặp while này là (n <> 0). Vậy thì trạng thái 4 có hai cạnh đi ra: một được đánh nhãn (n <> 0) và một được đánh nhãn ( ≠ 0)’. Cạnh được đánh nhãn ( ≠ 0) có nghĩa là nếu điều kiện (n <> 0) là đúng thì cạnh này được tiếp theo và vòng lặp được lặp lại bằng cách đi trở về trạng thái ở đó từ điều khiển 3 cho phát biểu sum = sum + n một lần nữa được thực thi. Mặt khác, nếu điều kiện (n <> 0)’. (nghĩa là n = 0) là đúng thì cạnh đc đánh nhãn (n <> 0)’ được tiếp theo và vòng lặp được thoát bằng cách tiếp tục đến trạng thái s5, ở đó sum được xuất ra.
Người đọc cẩn thận sẽ lưu ý rằng giản đồ trạng thái ở Hình 4.3(a) này không hoàn toàn tương thích với giải thuật ở Hình 4.2(a). Trong giải thuật, điều kiện (n <> 0) trong vòng lặp while được kiểm tra lúc bắt đầu vòng lặp, trong khi đó giản đồ trạng thái thực hiện việc kiểm tra ở cuối vòng lặp. Vào lúc này, ta sẽ bỏ qua sự khác nhau này và tiếp tục làm việc với giản đồ trạng thái như đã vẽ. Ta sẽ trở lại vấn đề này khi khảo sát cách thức mà tín hiệu trạng thái (n <> 0) được tạo ra.
Bảng trạng thái kếđược trình bày ở Hình 4.3(b) được suy ra trực tiếp từ giản đồ trạng thái ở Hình 4.3(a). Ba flipflop Q2, Q1, Q0 được cần đến để mã hóa 6 trạng thái, 6 hàng biểu diễn 6 trạng thái này bằng các nội dung hiện tại của các flipflop. Để đơn giản, sơ đồ mã hóa nhị phân thông thường được sử dụng để mã hóa các trạng thái.
Cùng với các trạng thái hiện tạiđược liệt kê xuống các hàng của bảng, trạng thái kế cũng phụ thuộc vào tín hiệu ngõ vào điều khiểnStart và tín hiệu trạng thái ((n <> 0) từ đó ta có 4 cột. Thí dụ cột đánh nhãn 10 có nghĩa là tín hiệu ngõ vào Start là đúng (Start = 1) và tín hiệu trạng thái (n <> 0) là sai (n <> 0)=0, điều này kéo theo (n <> 0)’ là đúng. Ba flipflop và hai tín hiệu ngõ vào/ trạng thái cho ta tổng cộng 5 biến hoặc 25 tổ hợp khác nhau để khảo sát trong bảng trạng thái kế. Mỗi điểm nhập trạng thái kế nhận được bằng cách xem xét trạng thái hiện tại tương ứng và các tín hiệu ngõ vào/ trạng thái trong giản đồ trạng thái và xét xem trạng thái kế là gì.