Thiết kế vi xử lý 16 bit trên nền tảng công nghệ FPGA
Bảng 2.3 Bảng từ điều khiển cho datapath ở hình 2.4 sử dụng 3 từ điều khiển
Control Word Instruction IE ALU2 ALU1 ALU0 Load Clear OE
6 5-3 2 1 0
1 i = 0 × ××× 0 1 0
2 i = i+ 1 0 100 (add) 1 0 0
3 output i × ××× 0 0 1
Từ điều khiển thứ nhất khởi tạo i = 0. Thanh ghi trong datapath được sử dụng để lưu giá trị của i. Từ khi thanh ghi có chức năng xóa, chúng ta có thể cấp tín hiệu xóa để xóa thanh ghi về 0. ALU khơng cần thiết trong thao tác này do đó, nó khơng quan trọng các đầu vào ALU là gì, hoặc hoạt động gì được chọn cho ALU thực hiện. Do đó, bốn dịng điều khiển IE (để chọn đầu vào), và ALU2, ALU1, và ALU0 (để chọn hoạt động ALU) là tất đều thiết lập X của ("không quan tâm"). Load là 0 bởi vì chúng tơi khơng cần phải lưu trữ đầu ra ALU tới thanh ghi. Tại thời điểm này, chúng ta cũng không muốn đưa ra đầu ra giá trị từ thanh ghi, do đó tín hiệu điều khiển dịng đầu ra OE được đặt là 0.
Từ điều khiển 2 tăng i, vì vậy chúng ta cần cộng thêm 1 vào giá trị được lưu trữ trong thanh ghi. Mặc dù, ALU có một hoạt động tăng, chúng ta không thể sử dụng nó bởi vì ALU được thiết kế để có hoạt động tăng giá trị tốn hạng A thay vì các toán hạng B (xem Bảng 2.1), và đường dữ liệu của ta được kết nối đầu ra của thanh ghi đi vào toán hạng B. Bây giờ, chúng ta có thể sửa đổi các ALU có một hoạt động tăng tốn hạng B, hoặc chúng ta có thể sửa đổi các đường dữ liệu để các đầu ra của thanh ghi có thể được chuyển đến tốn hạng A của ALU. Tuy nhiên, cả hai giải pháp yêu cầu những sửa đổi của đường dữ liệu, và điều này làm thất bại mục đích của việc sử dụng một general datapath. Thay vào đó, những gì chúng ta có thể làm là sử dụng tiện ích ALU hoạt động Add(100) để tăng giá trị được lưu trữ trong thanh ghi lên 1. Chúng ta có thể đưa vào toán hạng A giá trị 1 bằng cách thiết lập IE là 0 kể từ khi đó dịng đầu vào của MUX được gắn liền với hằng số '1'. Các tốn hạng B sẽ có giá trị của thanh ghi. Cuối cùng, chúng ta cần phải tải các kết quả
Thiết kế vi xử lý 16 bit trên nền tảng công nghệ FPGA
Từ điều khiển 3 đưa ra đầu ra kết quả giá trị i đã tăng lên. Trong từ điều khiển này cũng vậy, chúng ta không quan tâm đến các yếu tố đầu vào đến ALU và hoạt động của ALU, nên khơng có giá trị mới nạp vào thanh ghi. Vì khơng muốn xóa thanh ghi và chỉ đơn giản là muốn xuất ra ngồi dữ liệu trong thanh ghi, vì vậy chỉ khẳng định tín hiệu OE bằng cách thiết lập nó thành 1.
2.2.1.2. Dedicated Datapath
Khi thiết kế một bộ vi xử lý chuyên dụng để thực hiện một thuật toán nhất định, có những khi chúng ta khơng muốn sử dụng một general datapath và xây dựng một control unit để điều khiển nó. Những bất lợi của việc sử dụng một general datapath là sẽ thường có một số bộ phận trong datapath khơng cần thiết trong việc giải quyết vấn đề. Ví dụ, bộ dịch trong general datapath không cần thiết trong các phép tính cộng. Các bộ phận phụ khơng chỉ lãng phí mà chúng cịn làm tăng kích thước và năng lượng tiêu thụ của các mạch. Hơn nữa, khi một datapath tùy chỉnh nhỏ hơn so với một general datapath, nên cũng sẽ u cầu ít tín hiệu kiểm sốt. Bởi vì ít tín hiệu điều khiển cần phải được tạo ra, kết quả là control unit sẽ đơn giản hơn và nhỏ gọn hơn khi thiết kế. Do đó, chúng ta được hưởng lợi không chỉ từ một datapath nhỏ hơn mà còn là một đơn vị điều khiển nhỏ hơn, và dẫn đến sẽ có một bộ vi xử lý nhỏ hơn nhiều. Nên, thay vì sử dụng một general datapath, chúng ta có thể muốn thiết kế một dedicated datapath với tùy chỉnh chỉ để giải quyết các thuật toán cho trước.
Mình đang cố gắng để xây dựng một mạch để thực hiện một thuật toán nhất định, và các đường dữ liệu có trách nhiệm thực hiện tất cả các thao tác dữ liệu theo quy định của thuật tốn. Vì vậy, datapath phải có khả năng thực hiện tất cả các lệnh thao tác dữ liệu và tạo ra tất cả các tín hiệu trạng thái có điều kiện cho các thuật tốn. Trong dedicated datapath hoặc thiết kế RTL, mình đang quan tâm tới làm thế nào để chuyển dữ liệu từ một thanh ghi tới thanh ghi (tương tự hoặc khác) thông qua một số đơn vị chức năng nơi dữ liệu được sửa đổi. Khi xây dựng datapath để thực hiện một thuật toán cụ thể, chúng ta cần phải quyết định các vấn đề sau:
Thiết kế vi xử lý 16 bit trên nền tảng công nghệ FPGA
Cần những đơn vị chức năng nào và số lượng là bao nhiêu?
Một đơn vị chức năng nào đó có thể được chia sẻ giữa hai hoặc nhiều hoạt động hay không?
Làm thế nào cho thanh ghi và đơn vị chức năng kết nối với nhau để tất cả những chuyển động dữ liệu được chỉ định bởi các thuật tốn có thể được thực hiện?
2.2.1.2.1. Chọn thanh ghi
Trong hầu hết các trường hợp, một thanh ghi là cần thiết cho mỗi biến được sử dụng bởi các thuật toán. Tuy nhiên, nếu thời gian tồn tại của hai biến không trùng nhau thì hai biến đó có thể chia sẻ bằng cách sử dụng cùng một thanh ghi. Thời gian tồn tại của một biến là thời gian từ khi biến được sử dụng lần đầu đến khi nó được sử dụng cuối cùng.
Nếu hai hoặc nhiều biến chia sẻ cùng một thanh ghi, thì các kết nối truyền dữ liệu đưa đến thanh ghi và ra khỏi thanh ghi thường phức tạp hơn khi thanh ghi hiện tại có nhiều hơn một nguồn và đích. Có nhiều điểm đến khơng phải là vấn đề quá lớn ảnh hưởng tới kích thước mạch. Tuy nhiên, có nhiều nguồn sẽ yêu cầu mạch bổ sung để lựa chọn một nguồn trong số các nguồn đó sẽ được chuyển đến thanh ghi.
Sau khi quyết định có bao nhiêu thanh ghi là cần thiết, chúng ta vẫn cần phải xác định xem có sử dụng một tập thanh ghi duy nhất hay từng thanh ghi riêng biệt hoặc kết hợp cả hai để lưu trữ các biến nhập. Hơn nữa, các thanh ghi xây dựng để thực hiện các chức năng đặc biệt như các bộ đếm và các thanh ghi dịch cũng có thể được sử dụng. Quyết định lựa chọn các loại thanh ghi sử dụng sẽ ảnh hưởng đến các kết nối truyền dữ liệu giữa các thanh ghi và đơn vị chức năng được kết nối.
2.2.1.2.2. Lựa chọn các đơn vị chức năng
Sau đây là cách để quyết định lựa chọn loại đơn vị chức năng được yêu cầu. Ví dụ, nếu các thuật tốn u cầu phép cộng của hai số, thì datapath phải bao gồm một bộ cộng. Tuy nhiên, chúng ta vẫn cần phải xét xem có nên sử dụng một bộ cộng chuyên dụng, một sự kết hợp bộ cộng/bộ trừ, hoặc một ALU (trong đó có các
Thiết kế vi xử lý 16 bit trên nền tảng công nghệ FPGA
những hoạt động dữ liệu nào cần thiết đối với các thuật tốn. Nếu thuật tốn chỉ có một phép cộng và một phép trừ, thì bạn có thể sử dụng các đơn vị bộ cộng / bộ trừ kết hợp. Mặt khác, nếu các thuật tốn u cầu phép tính cộng, chúng ta chỉ cần sử dụng thêm một bộ cộng hoặc một số bộ cộng.
Sử dụng một bộ cộng có thể làm giảm kích thước datapath về số lượng các đơn vị có chức năng, nhưng nó cũng có thể làm tăng kích thước datapath vì nhiều đường truyền dữ liệu phức tạp là cần thiết. Ví dụ, nếu các thuật tốn có chứa hai phép tính cộng sau đây:
a = b + c d = e + f
Sử dụng hai bộ cộng riêng biệt sẽ cho kết quả trong datapath thể hiện trong Hình 2.6 (a), trong khi đó, sử dụng một bộ cộng sẽ yêu cầu sử dụng bổ sung thêm 2 multiplexers 2-to-1 để chọn thanh ghi sẽ cung cấp đầu vào cho các toán hạng bộ cộng như trong Hình 2.6 (b).
a. Sử dụng hai bộ cộng riêng biệt b. Sử dụng một bộ cộng