Hàm và thủ tục trong phần cứng má yt nh

Một phần của tài liệu Tìm hiểu lý thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU (Trang 40)

Lệnh lui chuyển h ng số 16 bit vào bên trái cùng của thanh ghi và điền phần còn lại của thanh ghi với giá trị 0.

0000 0000 0011 1101 0000 1001 0000 0000

Đầu tiên ta đọc phần cao của 16bit, tương ứng số 61 vào thanh ghi s0, sử dụng lui:

lui $s0, 61 61 hệ 10 = 0000 0000 0011 1101 hệ 2

Giá trị của thanh ghi s0 khi đó là:

0000 0000 0011 1101 0000 0000 0000 0000

ước kế tiếp là cộng với phần thấp 16 bit, tương ứng với giá trị 2304

ori $s0, $s0, 2304 2304 hệ 10 tương ứng với 0000 1001 0000 0000 hệ 2

Giá trị cuối cùng của thanh ghi s0 là:

0000 0000 0011 1101 0000 1001 0000 0000

1.9.2 ệ

Lệnh nhảy trong tập lệnh MIPS thuôc nhóm J-format J-type bao gồm 6 bit ở trường toán hạng opcode và phần còn lại để xác định cho trường địa chỉ:

j 10000 nhảy đến địa chỉ 10000

2 10000

6 bit 26 bit

Không giống như lệnh nhảy, lệnh r nhánh có điều kiện phải có phải bao gồm 2 toán hạng và địa chỉ r nhánh. V dụ:

bne$s0, $s1, Exit $s1

5 16 17 Exit

5 bit 5 bit 5 bit 16 bit

Nếu địa chỉ của chương trình chỉ gói gọn trong vùng địa chỉ 16 bit, có nghĩa

là chương trình không lớn hơn 216 do đó hầu hết các chương trình này không được

lựa chọn trong các ứng dụng ngày nay. Một sự thay thế khác là việc luôn sử dụng một thanh ghi để cộng vào địa chỉ r nhánh, do đó địa chỉ r nhánh được t nh toán như sau:

Tổng này cho ph p chương trình có thể cho ph p địa chỉ r nhánh trong

khoảng không gian địa chỉ 232 và giải quyết tốt vấn đề k ch cỡ địa chỉ của lệnh r

Câu trả lời đến từ làm thế nào để một lệnh r nhánh được thực thi. Lệnh r nhánh có điều kiện thấy nhiều trong câu lệnh lặp và câu lệnh if. Vì bộ đếm chương trình PC được sử dụng để chứa địa chỉ của lệnh hiện tại, chúng ta có thể r nhánh

trong khoảng 215 từ của lệnh hiện tại nếu chúng ta sử dụng PC như là thanh ghi

dùng để cộng với địa chỉ. Hầu hết các lệnh lặp và lệnh if đều nhỏ hơn 216 từ, vì thế

PC được đưa ra sử dụng như là phương án tối ưu để giải quyết vấn đề địa chỉ cho lệnh r nhánh.

Quay lại đoạn chương trình lặp ở trang 14 được thể hiện b ng lệnh MIPS như sau: Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 lw $t0, 0($t1) # $t0 = save[i] bne $t0, $s5, Exit addi $s3, $s3, 1 # i = i+1 j Loop Exit:

Giả sử chúng ta đặt vòng lặp Loop ở địa chỉ 80000 trong vùng nhớ, đoạn chương trình MIPS trên được biểu di n địa chỉ như sau: (adsbygoogle = window.adsbygoogle || []).push({});

Vì tập lệnh MIPS có liên quan đến byte địa chỉ vì thế địa chỉ là một dãy liên tiếp 4 byte địa chỉ của một từ. Lệnh bne ở dòng thứ 4 s cộng 2 từ hoặc là 8 byte đến địa chỉ ở lệnh kế tiếp 80016 , tương ứng với đ ch của lệnh r nhánh 8 80016 thay vì là địa chỉ 12 80012 hoặc sử dụng địa chỉ 80024. Lệnh nhảy ở dòng cuối

CHƢƠNG II

CÁC THÀNH PHẦN CỦA BỘ XỬ LÝ THEO KIẾN TRÚC MIPS

2.1 T n qu n ơ h MIP

Chúng ta b t đầu minh họa tập lệnh MIPS cơ bản bao gồm tập con của các lệnh cơ bản bao gồm:

 Lệnh tham chiếu đến vùng nhớ: đọc từ load word và ghi từ store word)

 Lệnh toán học và logic: ph p toán cộng add ; trừ (subb , ph p logic và

(and ; hoặc or và dịch slt)

 Lệnh r nhánh với điều kiện b ng beq , lệnh nhảy jump)

Các tập con không bao gồm tất cả các lệnh có liên quan đến số nguyên các lệnh dịch bit, ph p nhân, ph p chia s gặp l i và cũng không gồm lệnh thao tác với dấu phảy động. Tuy nhiên chìa khóa cho nguyên lý được sử dụng cho thiết kế một luồng dữ liệu và điều khiển s được chỉ ra.

Các bước cần thiết để thực hiện các lệnh này giống nhau và độc lập với từng lớp lệnh khác nhau. Với tất cả các lệnh đều có hai bước đầu tiên giống nhau đó là:

1. Gửi bộ đếm chương trình PC đến vùng nhớ có chứa lệnh và nhận lệnh tại

vùng nhớ đó.

2. Đọc một hoặc hai thanh ghi, sử dụng các trường lệnh để chỉ ra thanh ghi cần

đọc. Đối với lệnh đọc dữ liệu, chúng ta chỉ cần đọc một thanh ghi nhưng đa số các lệnh khác đòi hỏi chúng ta đọc dữ liệu từ hai thanh ghi.

Sau hai bước này, kế tiếp là hoàn tất lệnh phụ thuộc vào từng lớp lệnh khác nhau. May m n thay, một trong ba lớp lệnh tham chiếu vùng nhớ, ph p toán học và logic và lệnh r nhánh phần lớn là như nhau và độc lập về mã lệnh. Thậm ch là các lớp lệnh khác nhau đều có cùng điểm chung. Lấy v dụ, tất cả các lớp lệnh ngoại trừ lệnh nhảy đều sử dụng đơn vị số học và logic ALU sau khi đọc thanh ghi. Các lệnh tham chiếu đến vùng nhớ sử dụng ALU cho t nh toán địa chỉ, các lệnh liên quan đến số học và logic sử dụng ALU cho việc t nh toán và lệnh r nhánh sử dụng ALU cho việc so sánh giá trị giữa các thanh ghi.

Đối với lệnh tham chiếu vùng nhớ cần phải truy cập vào vùng nhớ để viết đối

với lệnh store sw hoặc là đọc đối với lệnh read lw . Ph p toán số học và logic

phải viết giá trị từ ALU trở lại thanh ghi. Cuối cùng, đối với lệnh r nhánh chúng ta cần thay đổi địa chỉ cơ sở của lệnh kê tiếp; thêm vào đó giá trị con trỏ PC cần được cộng thêm cho 4 để chỉ đến địa chỉ của lệnh kế tiếp. Hình 2.1 chỉ ra mức cao của cơ chế thực hiện lệnh MIPS, tập trung vào các đơn vị chức năng khác nhau và mối liên kết giữa chúng. Mặc dù hình này chỉ ra được hầu hết các luồng dữ liệu bên trong bộ vi xử lý, tuy nhiên lại bỏ qua hai thành phần quan trọng của việc thực thi lệnh.

Tất cả các lệnh b t đầu với việc sử dụng con trỏ PC để nhận lệnh trong vùng nhớ lệnh. Sau khi nhận lệnh, thanh ghi toán hạng được sử dụng bởi lệnh được chỉ ra trong trường lệnh. Một trong các thanh ghi toán hạng sau khi nhận lệnh có thể được dùng để t nh toán địa chỉ vùng nhớ cho lệnh load và lệnh store , hoặc t nh toán kết quả giá trị của ph p toán số học và logic, hoặc dùng để so sánh lệnh nhảy . Nếu lệnh có liên quan đến ph p toán số học và logic thì kết quả sau khi t nh toán ở ALU cần phải được lưu vào thanh ghi. Nếu lệnh là load hoăc store, kết quả của ALU

nhớ đến thanh ghi. Kết quả từ ALU hoặc vùng nhớ cần được viết vào tập thanh ghi. Các lệnh r nhánh sử dụng ALU để xác định địa chỉ của lệnh kế tiếp, giá trị này được lấy từ ALU sau khi t nh tổng của PC với địa chỉ đoạn của lệnh r nhánh hoặc từ bộ cộng của giá trị PC cho 4. Đường n t đậm ch nh là các liên kết bên trong các thành phần chức năng hay được gọi là bus. Đường mũi tên chỉ ra chiều của dữ liệu đi từ nơi này sang nơi khác.

Đầu tiên hình 2.1 chỉ ra luồng dữ liệu đến một đơn vị cụ thể từ hai nguồn khác nhau. V dụ như giá trị viết vào con trỏ PC có thể đến từ hai bộ cộng và dữ liệu viết đến tập thanh ghi có thể đến từ ALU hoặc vùng nhớ dữ liệu. Trong thực tế, các đường dữ liệu này không đơn giản chỉ có bấy nhiêu; chúng ta phải thêm một thành phần để lựa chọn một trong số các nguồn dữ liệu và lái một trong số các nguồn đó đến đ ch. Thiết bị lựa chọn này rất phổ biến và được gọi với tên là bộ hợp kênh, mặc dù thiết bị này cũng có thể được gọi với tên khác là lựa chọn dữ liệu. Thứ hai, một vài đơn vị phải được điều khiển phụ thuộc vào kiểu lệnh thực thi. V dụ như

vùng nhớ dữ liệu phải được đọc đối với lệnh load lw và ghi đối với lệnh store

(sw . Tập thanh ghi phải được viết đối với lệnh load lw và lệnh liên quan đến

ph p toán số học và logic. Giống như bộ hợp kênh, các hoạt động được thực hiện trực tiếp b ng các đường điều khiển được thiết lập trong các trường lệnh khác nhau.

Hình 2.2 chỉ ra luồng dữ liệu của hình 2.1 với 3 bộ hợp kênh được thêm vào, đường điều khiển cho các đơn vị ch nh. Đơn vị điều khiển có lệnh là đầu vào dùng để xác định đường điều khiển nào được thiết lập cho các đơn vị chức năng ch nh và hai bộ hợp kênh. ộ hợp kênh thứ ba, có giá trị b ng PC 4 hoặc địa chỉ đ ch của lệnh r nhánh được viết đến PC được thiết lập dựa vào đầu ra zero của ALU, được

sử dụng trong lệnh so sánh b ng beq . ộ điều khiển hợp kênh trên cùng s thay

thế giá trị của PC PC 4 hoặc là địa chỉ của lệnh r nhánh ; bộ hợp kênh này được

điều khiển bởi cổng and với đầu vào là đầu ra ero của ALU và t n hiệu điều khiển (adsbygoogle = window.adsbygoogle || []).push({});

cho biết đó là lệnh r nhánh. ộ hợp kênh ở giữa có đầu ra đi đến tập thanh ghi dùng để lái đầu ra của ALU trong trường hợp lệnh có liên quan đến ph p toán số học hoặc đầu ra của vùng nhớ dữ liệu trong trường hợp lệnh load dùng để ghi dữ

liệu ra tập thanh ghi. Cuối cùng bộ hợp kênh còn lại dùng để xác định một trong hai t n hiệu t n hiệu đầu vào của ALU từ tập thanh ghi lệnh số học gián tiếp hay từ trường địa chỉ đoạn của lệnh load, store hay lệnh r nhánh . Đường t n hiệu điều khiển ALU được đưa vào để xác nhận thao tác đọc, ghi dữ liệu từ vùng nhớ dữ liệu hay ghi dữ liệu lên tập thanh ghi.

Mặc dù rất d để tiếp cận về vấn đề này, song trên thực tế không sử dụng phương thức này trong cơ chế tập lệnh MIPS vì nó làm chậm quá trình đáp ứng ngay lập tức lệnh thực thi và các lớp lệnh khác chiếm nhiều chu k xung nhịp. Sau khi thiết kế đường điều khiển cho máy đơn giản, bước kế tiếp chúng ta xem x t một

2.2. Thành ph n logic

Các đơn vị chức năng trong thực hiện MIPS bao gồm hai thành phần logic khác nhau: các thành phần để t nh toán giá trị của dữ liệu và các thành phần chứa đựng trạng thái. Các thành phần dùng để thực hiện các giá trị của dữ liệu được gọi là thành phần kết hợp được, có nghĩa là trạng thái của đầu ra chỉ phụ thuộc vào trạng thái đầu vào hiện tại. Cho giá trị các đầu vào giống nhau một thành phần có thể kết hợp được s cho cùng giá trị của đầu ra. ALU được chỉ ra trong hình 5.1 là một thành phần có thể kết nối được. Cho một tập các giá trị đầu vào s nhận được các giá trị tương ứng ở đầu ra vì không có thành phần lưu trữ ở trong.

Các thành phần khác trong thiết kế không thể kết hợp được nhưng để thay thế trạng thái chứa trong nó. Một thành phần chứa được các trạng thái chỉ có thể thực hiện được nếu như nó có bộ nhớ bên trong. Chúng ta gọi các thành phần này là các thành phần trạng thái bởi vì nếu chúng ta ng t nguồn của máy, có thể khởi động lại nó b ng cách tải lại các thành phần trạng thái với giá trị được lưu trữ trước khi chúng ta ng t nguồn. Hơn nữa, nếu chúng ta lưu trữ và phục hồi các thành phần trạng thái vì vậy chúng ta có một máy không bao giờ mất nguồn. Trong hình 5.1, thành phần lệnh, vùng nhớ dữ liệu và tập thanh ghi là v dụ của các thành phần trạng thái.

Một thành phần trạng thái phải có t nhất hai đầu vào và một đầu ra. Các đầu vào bao gồm giá trị của dữ liệu và xung nhịp để xác định khi nào dữ liệu được viết. Đầu ra từ thành phần trạng thái cho biết giá trị được viết trong sườn trước của xung nhịp. V dụ, một thành phần logic đơn giản nhất là -flip-flop; là thành phần có

ch nh xác 2 dầu vào D, clock và 1 đầu ra Q . Trên thực tế thành phần flip-flop

của MIPS được sử dụng cho vùng nhớ và thanh ghi. Xung nhịp được sử dụng để xác định khi nào thành phần trạng thái được viết; thành phần này có thể viết ở mọi thời điểm. Thành phần logic chứa trạng thái này được gọi là thành phần tuần tự vì đầu ra phụ thuộc vào đầu vào và giá trị bên trong trạng thái. V dụ, thanh ghi là một thành phần tuần tự vì giá trị đầu ra phụ thuộc vào số thanh ghi và nội dung bên trong thanh ghi đó.

Phương thức xung nhịp là phương thức dùng để xác định khi nào dữ liệu nên được đọc và được ghi. Thật đơn giản để chỉ ra tầm quan trọng của việc xác định thời gian cho việc đọc và ghi dữ liệu bởi vì nếu một t n hiệu được ghi và đọc trong cùng một thời điểm s gây ra sự xung đột giữa giá trị cũ và giá trị mới. Phương thức xung nhịp s giải quyết được vấn đề này. Phương pháp k ch th ch mức sườn là phương pháp mà các dữ liệu được lưu trữ trong thành phần tuần tự chỉ được cập nhật trong một sườn xung nhịp. Vì chỉ có thành phần trạng thái có thể lưu trữ dữ liệu, mọi thành phần liên kết khác có đầu vào là tập các thành phần trạng thái và đầu ra của thành phần trạng thái được viết cho thành phần liên kết. Giá trị đầu vào được nạp ở xung nhịp trước còn giá trị đầu ra được viết ở xung kế tiếp.

Hình 2.3 chỉ ra 2 thành phần trạng thái trong một khối liên kết logic trong một chu k đơn: Tất cả các t n hiệu phải được nhân ra từ thành phần trạng thái 1, thông qua thành phần liên kết và thành phần trạng thái 2 trong thời gian một xung nhịp.

Trong một hệ thống đồng bộ số, xung nhịp xác định khi nào thành phần trạng thái s viết giá trị vào bộ nhớ trong. Mọi đầu vào đến thành phần trạng thái đều phải chứa giá trị trước khi xung nhịp k ch th ch để nhận giá trị mới.

Thành phần trạng thái 1 Thành phần trạng thái 2 Thành phần liên kết logic Clock Thành phần trạng thái Thành phần liên kết logic

Phương thức sườn kích thích cho ph p một thành phần trạng thái có thể được đọc, ghi trong cùng một chu k xung nhịp mà vẫn không tạo ra hiện tượng chạy đua

của dữ liệu. ĩ nhiên xung nhịp này phải đủ dài để giá trị đầu vào có thể ổn định giá

trị khi sườn k ch th ch sảy ra. Vấn đề hồi tiếp không thể sảy ra trong một chu k bởi vì sườn k ch th ch không thể sảy ra chỉ trong một xung nhịp và nếu có sảy ra thì thiết kế phần cứng cũng không cho ph p chúng sảy ra. Phương thức sườn k ch th ch cho ph p chúng ta đọc nội dung của thanh ghi và viết giá trị đến thanh ghi thông qua một số thành phần liên kết logic và ghi giá trị vào thanh ghi cũng trong một chu k như trong hình 2.4.

2.3 Các thành ph n thực thi t p nh MIPS

Để thiết kế tập lệnh cho bộ xử lý chúng ta s b t đầu từ việc thiết kế các thành phần cho toàn bộ quá trình nhận lệnh, giải mã lệnh và thực thi lệnh. Hình 5.5 chỉ ra thành phần đầu tiên mà chúng ta cần: đơn vị vùng nhớ để lưu trữ lệnh của một chương trình và địa chỉ dùng để truy cập đến lệnh tương ứng. Hình 2.5 cũng chỉ ra

một thanh ghi, bộ đếm chương trình PC được dùng để lưu giữ địa chỉ của lệnh

Một phần của tài liệu Tìm hiểu lý thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU (Trang 40)