Tải bản đầy đủ (.pdf) (104 trang)

Tìm hiểu lý thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.79 MB, 104 trang )

ĐOÀN VŨ THỊNH

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------

Đoàn Vũ Thịnh

CÔNG NGHỆ THÔNG TIN

TÌM HIỂU LÝ THUYẾT VÀ THỰC NGHIỆM VỀ
CÔNG NGHỆ FPGA TRONG THIẾT KẾ CPU
THEO KIẾN TRÚC MIPS

LUẬN VĂN THẠC SĨ KỸ THUẬT
CÔNG NGHỆ THÔNG TIN

KHOÁ 2010

Hà Nội – Năm 2012


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
--------------------------------------Đoàn Vũ Thịnh

TÌM HIỂU LÝ THUYẾT VÀ THỰC NGHIỆM VỀ
CÔNG NGHỆ FPGA TRONG THIẾT KẾ CPU
THEO KIẾN TRÚC MIPS

Chuyên ngành: Công nghệ Thông tin


LUẬN VĂN THẠC SĨ KỸ THUẬT
CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS. TS Trịnh Văn Loan

Hà Nội – Năm 2012


LỜI CAM ĐOAN
Tôi tên là Đoàn Vũ Thịnh, hiện đang là học viên cao học ngành Công nghệ Thông
tin, khóa 2010 của trường Đại học Bách khoa Hà Nội. Tôi xin cam đoan và hoàn
toàn chịu trách nhiệm về lời cam đoan này:
 Toàn bộ nội dung của Luận văn Thạc sỹ này là do chính tôi thực hiện dưới
sự hướng dẫn tận tình của PGS. TS Trịnh Văn Loan.
 Trong quá trình thực hiện Luận văn tôi có kế thừa kiến thức trong những tài
liệu tham khảo (phần tài liệu tham khảo).
 Các kết quả mô phỏng, thí nghiệm sử dụng để kết luận và đánh giá trong
Luận văn là hoàn toàn chân thực.
Hà Nội, ngày 30 tháng 8 năm 2012

Đoàn Vũ Thịnh

i


LỜI CẢM ƠN
Trải qua khoảng thời gian học tập theo chương trình cao học của Trường Đại
học Bách khoa Hà Nội, tôi đã được các thầy cô giảng dạy trong chương trình cao
học truyền đạt cho nhiều kiến thức mới. Tôi xin chân thành cảm ơn PGS.TS Trịnh

Văn Loan người đã tận tình hướng dẫn và giúp đỡ tôi thực hiện Luận văn Thạc sỹ
này. Tôi cũng xin cảm ơn đến các thầy cô của Trường Đại học Bách khoa Hà Nội
đã giảng dạy và tạo nhiều điều kiện thuận lợi để tôi hoàn thành khóa học này. Cảm
ơn các đồng nghiệp tại Trường Đại học Nha Trang cũng như các bạn học viên lớp
Cao học Công nghệ Thông tin khóa 2010 đã trao đổi, góp ý và giúp đỡ tôi trong lúc
học tập cũng như lúc thực hiện luận văn này.
Đoàn Vũ Thịnh

ii


DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT
Đơn vị số học và Logic

ALU

Arthimetic Logic Unit

ASIC

Application Specific Intergrated Circuit Mạch tích hợp có ứng dụng
chuyên biệt

CPLD Complex Programmable Logic Device

Thiết bị Logic khả trình có cấu
trúc phức tạp

CU


Control Unit

Đơn vị điều khiển

I/O

Input/Ouput

Vào/Ra

IOE

Input Output Element

Thành phần Vào Ra

LAB

Logic Array Block

Khối mảng logic

LE

Logic Element

Thành phần logic

LUT


Look up Table

Bảng tra

MIPS

Microprocessor without Interlocked

Bộ xử lý không có các đoạn

Pipeline Stages

đường ống khóa lẫn

Multiplexor

Bộ hợp kênh

MUX

FPGA Field Programmable Gate Arrays

Mảng các cổng khả trình

PLD

Programmable Logic Device

Thiết bị Logic khả trình


RAM

Random Access Memory

Bộ nhớ truy cập ngẫu nhiên

ROM

Read Only Memory

Bộ nhơ chỉ đọc
RAM tĩnh

SRAM Static RAM

iii


DANH MỤC BẢNG
Bảng 1.1 Kiến trúc cơ bản của MIPS ...................................................................... 4
Bảng 1.2 Các toán hạng trong MIPS ....................................................................... 9
Bảng 1.3 Ngôn ngữ MIPS assembly ........................................................................ 9
Bảng 1.4 ảng chuyển đổi hệ 16-2 ........................................................................ 10
Bảng 1.5 Mã hóa lệnh MIPS ................................................................................. 12
Bảng 1.6 Ph p toán có liên quan đến logic trên C và MIPS ................................... 13
Bảng 1.7 Tổng hợp kiến trúc của tập lệnh MIPS ................................................... 18
Bảng 1.8 Các thanh ghi qua lời gọi thủ tục ............................................................ 25
Bảng 1.9 Quy ước thanh ghi MIPS ........................................................................ 25
Bảng 1.10 Tổng hợp các toán hạng, ngôn ngữ asembly và thanh ghi trong MIPS .. 26
Bảng 2.1 Các bit điều khiển của ALU. .................................................................. 46

Bảng 2.2 ảng trạng thái của đường điều khiển ALU ........................................... 47
Bảng 2.3 Ảnh hưởng của 7 t n hiệu điều khiển ...................................................... 50
Bảng 2.4 Thiết lập các đường điều khiển b ng cách xác định các giá trị từ trường lệnh ..... 51
Bảng 2.5 Các chức năng điều khiển của lệnh đơn chu k ...................................... 55
ản

Khuôn dạng của lệnh MIPS 32-bit ......................................................... 59

ản

Tập lệnh MIPS của bộ vi xử lý ............................................................... 60

iv


DANH MỤC HÌNH

................................................ 6
. .................... 8
.................................................................... 16
22
............................................... 29
.......................................... 30
nh 1.7

.............................................................................. 30

............................................................................ 34

............................................................................................... 36

............. 38
.................................................................. 38

......................................... 39
... 40
-

41
....................... 42
.......... 44

............................................ 45
.............................. 48
.......................................... 49
......................... 51
....................................................... 52
........................................................... 53
.............. 55
57

v


........................................ 61
Hình 3.2

n nh n l nh c a CPU ................................................................ 63

Hình 3.3


nh gi i mã l nh ......................................................................... 64

Hình 3.4

n th c thi l nh ........................................................................... 66

Hình 4.1 Ki n trúc c

u khi n – CU ..................................................... 67

Hình 4.2

n nh n l nh ............................................................................... 68

Hình 4.3 Giai

n gi i mã l nh ........................................................................... 69

Hình 4.4

n th c hi n l nh ........................................................................ 70

vi


MỤC LỤC
LỜI CAM ĐOAN ................................................................................................... i
LỜI CẢM ƠN ........................................................................................................ii
DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT ..........................................iii
DANH MỤC BẢNG ............................................................................................. iv

DANH MỤC HÌNH ............................................................................................... v
MỞ ĐẦU ................................................................................................................ 1
CHƢƠNG I: KIẾN TRÚC TẬP LỆNH MIPS .................................................... 3
1.1. Giới thiệu...................................................................................................... 3
1.2. Các toán hạng của MIPS ............................................................................... 5
1.3. Mô tả các lệnh trong máy t nh ....................................................................... 9
1.4. Các trường của MIPS .................................................................................. 10
1.5 Các ph p toán liên quan đến logic ................................................................ 13
1.6 Lệnh h trợ ra quyết định ............................................................................. 15
......................................................................................... 16
......................................................... 18
1.7 Hàm và thủ tục trong phần cứng máy t nh .................................................... 19
1.8 Liên kết với thế giới ..................................................................................... 28
1.9 Địa chỉ 32 bit và ph p toán với h ng số có độ dài 32bit ............................... 30
....................................................................... 30
..................................................... 31
CHƢƠNG II: CÁC THÀNH PHẦN CỦA BỘ XỬ LÝ THEO KIẾN TRÚC
MIPS .................................................................................................................... 33
2.1 Tổng quan cơ chế MIPS............................................................................... 33
2.2. Thành phần logic ........................................................................................ 37
2.3 Các thành phần thực thi tập lệnh MIPS ........................................................ 39
2.4 Chi tiết các thành phần................................................................................. 45
CHƢƠNG III: THIẾT KẾ TẬP LỆNH MIPS VỚI VHDL .............................. 59

vii


3.1. Tổng quan ................................................................................................... 59
3.2. Mô tả kiến trúc MIPS với VH L ................................................................ 61
- CU)..................................... 61

n nh n l nh (Instruction Fetch) .............................................. 62
3.2.3. Gi i mã l nh (Decode) ......................................................................... 64
3.2.4. Th c thi l nh (Execute) ........................................................................ 65
CHƢƠNG IV: KẾT QUẢ ĐẠT ĐƢỢC ............................................................. 67
4.1 Những mặt đạt được ................................................................................... 67
4.2 Những mặt còn hạn chế .............................................................................. 71
4.3 Hướng phát triển tiếp theo của luận văn ...................................................... 71
TÀI LIỆU THAM KHẢO ................................................................................... 72
PHỤ LỤC ............................................................................................................. 73

viii


MỞ ĐẦU
Kiến trúc MIPS được phát triển vào những năm 80 của thế kỷ XX do John L.
Hennesy sáng lập. Nền tảng kiến trúc MIPS được ứng dụng rộng rãi trong các dòng
vi xử lý của các hãng sản xuất linh kiện bán dẫn như Sony, NEC hay Motorola. Từ
đó, kiến trúc MIPS được thay đổi không ngừng để có thể đáp ứng được nhu cầu của
người dùng từ đơn mức lệnh đến kiến trúc Pipeline. Với công nghệ FPGA cho ph p
người dùng có thể tự thiết kế, kiểm chứng hoạt động của kiến trúc MIPS trước khi
đưa vào sản xuất hàng loạt chip cho thị trường.

ên cạnh đó, FPGA còn phát huy

hiệu quả trong giảng dạy và nghiên cứu ở các trường Đại học và Viện nghiên cứu
trong các ngành như: kiến trúc máy t nh, xử lý t n hiệu số, thiết kế mạch số… Và để
có cái nhìn trực quan hơn về kiến trúc MIPS nên tôi đã chọn đề tài ”Tìm hiểu lý
thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU theo kiến trúc
MIPS”.
Như đã nói ở trên, kiến trúc MIPS được phát triển từ những năm cuối của thế

kỷ XX từ đó nó đã được ứng dụng rộng rãi trong các hãng sản xuất linh kiên bán
dẫn và còn phát triển tiếp tục với các phiên bản sau này. Việc tập trung mô tả kiến
trúc này giúp chúng ta có cái nhìn trực quan hơn về MIPS cũng như việc sử dụng
FPGA như một lõi của CPU cho phép thực hiện các công việc mà không phải tiến
hành thiết kế, chế tạo một bộ vi xử lý thực thụ.
Mục đ ch nghiên cứu của luận văn là tìm hiểu kiến trúc tập lệnh MIPS và
tiến hành mô tả cách thức hoạt động của nó trên FPGA. Trong giới hạn của luận văn
này tôi chỉ tiến hành mô tả kiến trúc MIPS đơn mức lệnh và đơn chu k .
Đề tài đã hoàn thành được mục tiêu đặt ra ở trên và mang lại lợi ích cho việc
học tập cũng như nghiên cứu kiến trúc của các bộ vi xử lý khác, mở ra hướng
nghiên cứu rộng hơn của công nghệ FPGA sau này. Đề tài cũng hoàn tất việc cài đặt
các module và chương trình hoàn thiện trên kit FPGA thực tế.
Phương pháp nghiên cứu tôi sử dụng ở đây là b ng thực nghiệm, toàn bộ các
quá trình đều được thiết kế trên phần mềm Quartus II, sử dụng ngôn ngữ mô tả phần
cứng VHDL và nạp chương trình lên KIT E1 để khảo sát sau khi trải qua giai đoạn

1


mô phỏng trên Quartus II.
Luận văn được trình bày trong 4 chương:
 Chƣơn

: Giới thiệu tổng quan về kiến trúc tập lệnh MIPS bao gồm: mô

tả các lệnh trong máy tính theo kiến trúc MIPS. Các toán hạng, các trường lệnh
trong một lệnh MIPS cụ thể. Một số lệnh đặc trưng cho tập lệnh MIPS.
 Chƣơn

: Các thành phần bộ xử lý theo kiến trúc tập lệnh MIPS. Về mặt


logic, nêu ra các thành phần logic đáp ứng cho kiến trúc MIPS. Về mặt thiết kế tập
lệnh, tiến hành khảo sát các khối logic tương ứng với các lệnh MIPS cơ bản. Về
phần thiết kế thành phần, chính là khảo sát các bộ ALU, CU, các tín hiệu điều
khiển, các luồng dữ liệu trong một chu trình thực thi lệnh.
 Chƣơn

: Thiết kế tập lệnh MIPS với VHDL. Mô tả kiến trúc MIPS, các

thành phần logic, thành phần liên kết b ng ngôn ngữ mô tả phần cứng. Thiết kế đơn
vị điều khiển, thiết kế quy trình nhận lệnh, thực thi và giải mã lệnh. Kiểm chứng với
một số lệnh cụ thể như lw, sw, beq.
 Chƣơn 4: Nêu ra các kết quả đạt được, những mặt còn hạn chế và hướng
phát triển tiếp theo của đề tài.

2


CHƢƠNG I

KIẾN TRÚC TẬP LỆNH MIPS
1.1. G

th u
Để có thể điều khiển được máy t nh b ng phần cứng b t buộc ta phải ra

lệnh b ng ngôn ngữ của phần cứng. Từ dùng để giao tiếp được gọi là lệnh và ngôn
ngữ đó được gọi là tập lệnh. Trong chương này ta s tìm hiểu tập lệnh thực sự của
máy t nh ở cả hai kh a cạnh được viết bởi người lập trình và ở cả khía cạnh được
đọc bởi các phần cứng có liên quan của máy t nh.

Việc lựa chọn ngôn ngữ s b t đầu với tập lệnh MIPS – tập lệnh được thiết
kế từ những năm 1980 với hơn 100 triệu các dòng vi xử lý phổ biến được sản xuất
năm 2002 của các hãng sản xuất chip như: ATI Technologies,

roadcom, Cissco,

NEC, Nintedo, Silicon Graphics, Sony, Texas Instruments và Toshiba ….
Tất cả các máy t nh đều phải thực hiện được ph p toán số học, do đó ngôn ngữ
assembly MIPS được ký hiệu như sau:
add

a, b, c

Lệnh trên thực hiện thao tác t nh tổng giá trị của hai biến b và c và đặt tổng có
được vào biến a. Ký hiệu này là yêu cầu b t buộc của m i lệnh số học MIPS: chỉ thực
hiện một thao tác và luôn luôn sử dụng đến 3 biến. V dụ, giả sử ta muốn t nh tổng
của b, c, d, e và đặt tổng của chúng vào biến a thì các lệnh tuần tự phải như sau:
add

a, b, c

add

a, a, d

add

a, a, e

Vì thế ta cần sử dụng đến 3 lệnh ở trên để t nh tổng của 4 biến. Các từ bên

ph a phải của dấu

được gọi là các chú giải cho người đọc và được máy t nh bỏ

qua. Chú ý r ng không giống như các ngôn ngữ lập trình khác, m i dòng lệnh chỉ có
duy nhất một lệnh và không có ký hiệu kết thúc ở cuối m i dòng lệnh như ngôn ngữ
lập trình C/Pascal.

3


Ph p toán cộng các số tự nhiên cũng giống như ph p cộng có ba toán hạng: hai
số được cộng với nhau và đặt vào tổng. Việc này đòi hỏi m i lệnh cần có ch nh xác 3
toán hạng, không nhiều hơn cũng không t hơn để có thể đơn giản hóa phần cứng.
Ví dụ: Cho đoạn chương trình C sau đây chứa năm biến a, b, c, d, e
a = b+c;
d = a-e;
Một lệnh MIPS thực hiện trên hai toán hạng nguồn và đặt kết quả vào toán
hạng đ ch. Hai lệnh của ngôn ngữ lập trình bậc cao được chuyển sang ngôn ngữ
MIPS assembly như sau:
add

a, b, c

sub

d, a, e

Một v dụ khác, phức tạp hơn có tới 5 biến f, g, h, i và j:
f = (g + h) – (i + j);

Trình biên dịch phải tách đoạn chương trình trên thành một số lệnh assembly
vì m i lệnh MIPS chỉ thực hiện một ph p toán. Đầu tiên lệnh MIPS thực hiện thao
tác cộng hai số g và h. Đặt kết quả có được sang một biến tạm, t0:
add

t0, g, h

0

Thao tác kế tiếp là ph p trừ nhưng ta cần t nh tổng của i và j trước thì mới
thực hiện ph p trừ được. Vì thế lệnh tiếp theo là t nh tổng của i và j và kết quả được
đặt ở t1
add

t1, i, j

Cuối cùng là ph p trừ của tổng thứ nhất và tổng thứ hai, kết quả đặt trong
biến f
sub

f, t0, t1

(g+h) – (i+j)

-

Bảng 1.1 Kiến trúc cơ bản của MIPS
o
Ph p toán số học


nh

V

n h

Gh h

Cộng

add a,b,c

a=b+c

Luôn có 3 toán hạng

Trừ

sub a,b,c

a=b-c

Luôn có 3 toán hạng

4


1.2. C

to n h n


MIP

Không giống như chương trình của các ngôn ngữ lập trình bậc cao, các toán
hạng của các lệnh số học bị hạn chế trong lệnh MIPS. Đó là sự giới hạn của số vùng
lưu trữ đặc biệt được thiết kế bởi phần cứng được gọi là các thanh ghi – các viên
gạch để xây dựng nên máy t nh. Thanh ghi là thành phần nguyên thủy của thiết kế
phần cứng và hầu hết người lập trình nhìn thấy khi chương trình hoàn tất. K ch
thước của thanh ghi trong kiến trúc MIPS là 32 bit. Thứ nữa là sự khác biệt cơ bản
giữa biến của ngôn ngữ lập trình và thanh ghi ch nh là giới hạn số thanh ghi, số
thanh ghi phổ biến của kiến trúc MIPS hiện nay là 32 thanh ghi 32 bit. Nguyên do
của sự giới hạn 32 thanh ghi có l do nguyên lý thiết kế càng nhỏ thì càng nhanh.
Số lượng rất nhiều các thanh ghi có thể làm tăng số chu k xung nhịp, đơn
giản vì s cần một t n hiệu đủ dài để truy cập hết số thanh ghi đó. Quan điểm nhỏ hơn
thì nhanh hơn không hoàn toàn ch nh xác bởi l 31 thanh ghi không h n đã nhanh
hơn 32 thanh ghi. Sự thật đ ng sau nguyên nhân này có l do những người thiết kế
máy t nh làm thế nào để cân b ng được giữa việc tạo ra nhiều thanh ghi với tốc độ xử
lý trong chu k nhanh nhất. Một lý do khác của việc không sử dụng thanh ghi có độ
dài hơn 32 bit có l xuất phát từ tập lệnh của chúng. Ở chương tới ta s đi thiết kế
phần cứng để đáp ứng được tập lệnh MIPS, s thấy được vai trò của thanh ghi.
Mặc dù chúng ta có thể viết câu lệnh đơn giản chỉ cần sử dụng số thanh ghi
từ 0-31 nhưng câu lệnh của MIPS lại sử dụng dấu

để biểu thị thanh ghi. Chúng ta

s sử dụng s0, s1 để biểu thị các thanh ghi tương ứng với các biến trong ngôn ngữ
lập trình C cũng như Java và các thanh ghi t0, t1 như là các thanh ghi tạm để biên
dịch từ chương trình sang câu lệnh MIPS.
Cho lại v dụ sau:
f = ( g + h ) - ( i + j );

Các biến f, g, h, i, j tương ứng với các thanh ghi s0, s1, s2, s3, s4.
Chương trình được biên dịch cũng giống như trước đây với việc sử dụng thêm hai
thanh ghi tạm t0 và t1 để lưu hai giá trị tạm thời của tổng.
add

$t0, $s1, $s2

5


add

$t1, $s3, $s4

sub

$s0, $t0,$t1

#

– (i+j)

-

Ngôn ngữ lập trình có các biến đơn giản được chứa các thành phần dữ liệu
đơn giản như trong v dụ trên nhưng cũng có các kiểu biến phức tạp với các kiểu dữ
liệu phức tạp như kiểu mảng và kiểu dữ liệu có cấu trúc. Sự phức tạp của kiểu dữ
liệu có cấu trúc là có thể chứa đựng nhiều kiểu dữ liệu phức tạp hơn nữa và nhiều
hơn số thanh ghi có thể lưu trữ. Vậy làm thế nào để máy t nh có thể truy cập đến
những kiểu dữ liệu có cấu trúc như thế?

Như đã đề cập bộ xử lý chỉ có thể lưu giữ một số lượng t các dữ liệu n m
trong các thanh ghi nhưng vùng nhớ máy t nh lại chứa đựng hàng triệu thành phần
dữ liệu khác. Cho nên câu trả lời cho câu hỏi ở trên ch nh là sử dụng vùng nhớ để
lưu trữ các kiểu dữ liệu phức tạp.
hiện trên các thanh ghi.

o các lệnh liên quan đến số học chỉ được thực

o đó tập lệnh MIPS phải h trợ lệnh chuyển dữ liệu từ

vùng nhớ đến các thanh ghi được gọi là lệnh chuyển dữ liệu data transfer
instruction . Để truy cập một từ trong vùng nhớ, lệnh phải được cung cấp địa chỉ
của vùng nhớ. Vùng nhớ vừa lớn lại là mảng một chiều chứa các phần tử, với địa
chỉ b t đầu là 0. Hình 1.1 mô tả địa chỉ của phần tử thứ 3 là 2 và giá trị của vùng
nhớ thứ 2 là 10. Đây là địa chỉ đơn giản của MIPS, hình 1.2 chỉ ra địa chỉ thực sự
của vùng nhớ.









3
2

100
10


1

101

0

1

Address

Data

Processor

Memory

6


Giả sử một mảng A có 100 phần tử, các biến g và h như trong v dụ trước
tương ứng với các thanh ghi s1 và s2. Giả sử r ng địa chỉ cơ sở của A được lưu
bởi thanh ghi s3. Cho câu lệnh trong C như sau:
g = h + A[8];
Mặc dù chỉ có một ph p gán duy nhất nhưng lại là lệnh có liên quan đến thao
tác với vùng nhớ.

o vậy nhiệm vụ đầu tiên là phải chuyển dữ liệu của ô nhớ A 8

đến thanh ghi. Địa chỉ của mảng thành phần này ch nh là tổng địa chỉ cơ sở của

mảng A được lưu trữ tại s3 với thành phần 8 được chọn. Kết quả được đặt tại
thanh ghi tạm cho câu lệnh kế tiếp. ựa vào hình 1.1 câu lệnh được viết như sau:
lw

$t0, 8($s3)

Câu lệnh tiếp theo t nh tổng của h chứa bởi thanh ghi s2 với A 8

chứa

bởi thanh ghi t0 và đặt tổng tương ứng vào g chứa bởi thanh ghi s1 :
add

$s1, $s2, $t0

# g = h + A[8]

H ng số trong câu lệnh chuyển dữ liệu được gọi là đoạn offset và thanh ghi
được cộng từ địa chỉ được gọi là thanh ghi cơ sở base register . Để liên kết giữa
biến với thanh ghi, trình biên dịch cần phải định r kiểu cấu trúc dữ liệu như mảng
và kiểu dữ liệu có cấu trúc với vùng nhớ để trình biên dịch sau đó có thể đặt địa chỉ
tương ứng đến lệnh chuyển dữ liệu. Vì các byte 8 bit rất hữu dụng trong nhiều
chương trình nên đa số kiểu kiến trúc địa chỉ đơn giản là byte. Hình 1.2 chỉ ra địa
chỉ thực cho địa chỉ MIPS ở hình 1.1; byte truy cập thứ 3 là 8. Trong kiến trúc
MIPS, các từ có địa chỉ là bội số của 4. Để lấy được byte địa chỉ cho v dụ trên thì
địa chỉ đoạn được cộng với địa chỉ cơ sở s3 phải là 4x8 =32 s có được thành phần
tương ứng A 8 chứ không phải là A 8 4 .
Để bổ sung cho lệnh load là lệnh store; copy dữ liệu từ thanh ghi sang vùng
nhớ. Khuôn dạng của lệnh store tương tự như lệnh load: tên của ph p toán, kế tiếp
là thanh ghi được lưu trữ, cuối cùng là địa chỉ đoạn thành phần của mảng được lựa

chọn và cuối cùng là thanh ghi cơ sở. Lệnh MIPS của store là sw (store word).
V dụ: giả sử biến h được lưu trong thanh ghi s2 và địa chỉ cơ sở của A
được lưu trong s3. Cho câu lệnh được viết trong C như sau:

7


A[12] = h + A[8];



12





8

100
10

4

101

0

1


Address
Processor

Data
Memory

Các bước thực hiện cũng giống như v dụ trước nhưng có một điều
khác ở đây là địa chỉ đoạn của phần tử thứ 8 đã khác.
lw

$t0, 32($s3)

add

$t0, $s2, $t0

# thanh ghi $t0 = h+$t0

Câu lệnh cuối là lưu tổng t nh được ở trên vào phần tử A 12 , địa chỉ đoạn là
48 được cộng vào địa chỉ cơ sở s3.
sw

$t0, 48($s3)

Nhiều lúc trong một chương trình s sử dụng đến ph p toán đối với h ng số,
v dụ như việc tăng giá trị của con trỏ để chỉ đến phần tử kế tiếp của mảng. Trên
thực tế có hơn một nửa số ph p toán số học của SPIM sử dụng đến ph p toán này.
Với việc sử dụng các lệnh đã được biết từ đầu đến giờ chúng ta phải đọc dữ liệu từ
vùng nhớ m i khi sử dụng tới chúng. V dụ để cộng một giá trị của h ng số 4 vào
thanh ghi s3 ta phải thực hiện như sau:

lw

$t0, AddConstant4($s1)

add

$s3, $s3, $t0

# $s3 = $s3+$t0 ($t0 = 4)

Trong đó, AddConstant4 ch nh là vùng nhớ của số 4.
Để thay thế cho lệnh load dữ liệu từ vùng nhớ vào thanh ghi như trên, MIPS
h trợ lệnh số học thao tác đối với h ng số add immediate hay addi).

8


o vậy để cộng 4 với giá trị thanh ghi s3 ta chỉ cần thực hiện như sau:
addi

$s3, $s3, 4

# $s3 = $s3+4

Ph p toán với h ng số có tần số xuất hiện nhiều ở các lệnh liên quan đến số
học và logic, do đó ph p toán s nhanh hơn nếu h ng số đó được load từ vùng nhớ.
Bảng 1.2 Các toán hạng trong MIPS
To n h n
32 thanh ghi


230 từ nhớ

V

G ả th h

s0, s1, …

Trong MIPS dữ liệu phải load vào thanh

t0, t1, …

ghi để thực hiện các ph p toán số học

Memory[0],

Truy cập dữ liệu chỉ b ng lệnh chuyển dữ

Memory 4 ,…

liệu. MIPS sử dụng byte địa chỉ để truy

Memory[4294967292] cập đến vùng nhớ là bội số của 4

Bảng 1.3 Ngôn ngữ MIPS assembly
o

Số học

nh


V

n h

add

add $s1, $s2, $s3

$s1 = $s2 + $s3

subtract

subb $s1, $s2, $s3 $s1 = $s2 - $s3

add immediate addi $s1, $s2, 100 $s1 = $s2 + 100
Chuyển dữ liệu
1.3. M tả

load word

lw $s1, 100($s2)

$s1 = Memory[$s2 + 100]

store word

sw $s1, 100($s2)

Memory[$s2 + 100] = $s1


nh tron

t nh

Sự khác nhau giữa cách con người ra lệnh cho máy t nh và máy t nh nhận ra
được lệnh đó. Trước tiên là sự mô tả số học trong máy t nh. Con người ngay từ nhỏ
đã được giáo dục về cách tư duy số học với hệ đếm 10, nhưng những số được thể
hiện trong phần cứng máy t nh lại là chu i các mức t n hiệu điện mức cao và mức
thấp và được gọi là cơ số 2. M i bit của dãy số nhị phân được gọi là một nguyên tử
nguyên tố của máy t nh và vì thế tất cả các thông tin trong máy t nh đều là các bit
nhị phân. Chúng ta có thể sử dụng nhiều cách mô tả khác nhau để nói về số nhị

9


phân này: cao hoặc thấp high/low , mở hoặc t t on/off , đúng hoặc sai true/false ,
1 hoặc 0.
Vì hầu hết các lệnh đều có liên quan đến thanh ghi do đó chúng ta cần phải
biết tên thanh ghi tương ứng với số thanh ghi. Trong lệnh MIPS assembly thì các
thanh ghi $s0- s7 tương ứng với thanh ghi thứ 16 đến thanh ghi thứ 23 và thanh ghi
t0 - t7 tương ứng với thanh ghi thứ 8 đến thanh ghi thứ 15.
V dụ: cho lệnh MIPS sau đây, hãy chỉ ra ý nghĩa thực sự của lệnh này
add

$t0, $s1, $s2

0

17


18

8

0

32

M i một đoạn của lệnh trên được gọi là một trường field . Trường đầu tiên
và cuối cùng 0 và 32 nói cho máy t nh hiểu r ng đây là lệnh cộng hai số. Trường
thứ hai và thứ ba cho biết đây là toán hạng đầu tiên và thứ hai của ph p cộng 17 =
s1; 18 = s2 . Trường thứ tư s nhận giá trị của tổng vừa t nh được 8 = t0 .
Trường thứ năm không dùng trong trường hợp này s được đặt b ng 0. Vì thế đây là
lệnh cộng hai thanh ghi s1 và s2, kết quả được lưu ở thanh ghi t0.
000000

10001

10010

01000

00000

100000

6 bit

5 bit


5 bit

5 bit

5 bit

6 bit

Bảng 1.4 ảng chuyển đổi hệ 16-2
H

H

H

H

H

H

H

H

0hex

0000two


4hex

0100two

8hex

1000two

Chex

1100two

1hex

0001 two

5hex

0101 two

9hex

1001 two

Dhex

1101 two

2hex


0010 two

6hex

0110 two

Ahex

1010 two

Ehex

1110 two

3hex

0011 two

7hex

0111 two

Bhex

1011 two

Fhex

1111 two


Chỉ cần thay thế số hệ 16 b ng 4 bit tương ứng. Nếu số bit nhị phân vượt quá
4 thì tiến hành lấy theo thứ tự từ phải sang trái.
4 C

trƣ n

MIP

op

rs

rt

rd

shamt

funct

6 bit

5 bit

5 bit

5 bit

5 bit


6 bit

10


nghĩa các trường của lệnh MIPS của lệnh thuộc khuôn dạng R như sau:
 op: Ph p toán cơ bản của lệnh, được gọi là opcode.
 rs: Thanh ghi toán hạng nguồn thứ nhất.
 rt: Thanh ghi toán hạng nguồn thứ hai.
 rd: Thanh ghi toán hạng đ ch, lưu giữ kết quả của ph p toán.
 shamt: Shift aumount được giải th ch ở lệnh dịch bit sau.
 funct: Function, trường nà dùng để lựa chọn các ph p toán cụ thể của trường
op và được gọi là function code.
Vấn đề nảy sinh khi một lệnh cần một trường dài hơn khuôn dạng ở trên, v
dụ lệnh đọc một từ ở ô nhớ cần phải chỉ ra hai thanh ghi và một h ng số. Nếu
trường địa chỉ được sử dụng 5 bit như ở trên thì h ng số được sử dụng để đọc địa
chỉ từ ô nhớ chỉ giới hạn ở 25 = 32. H ng số này được sử dụng để truy cập đến phần
tử bất k ở trong mảng hay ở dữ liệu có cấu trúc và thường cần đến giá trị lớn hơn
32. Trường lệnh 5 bit trong trường hợp này là không đủ. Vì thế xung đột sảy ra giữa
ý muốn các lệnh có cùng độ dài và có cùng khuôn dạng.
V dụ, lệnh có khuôn dạng R-type Register hay còn được gọi là R-format.
Lệnh có khuôn dạng I-type Immediate hay còn được gọi là I-format được sử dụng
cho các lệnh tức thì và lệnh dùng để chuyển dữ liệu. Khuôn dạng của lệnh I-format
như sau:
op

rs

rt


Constant/Address

6 bit

5 bit

5 bit

16 bit

Trường địa chỉ 16 bit s cho ph p một lệnh đọc từ nhớ bất k trong miền từ
215 hay 32.768 byte của địa chỉ trong thanh ghi cơ sở rs. Tương tự như thế lệnh
addi cũng bị giới hạn h ng số không lớn hơn 215. R ràng chúng ta thấy r ng nếu
một lệnh MIPS có độ dài hơn 32 bit s khó quản lý các trường khác hơn nữa. Xem
x t lại v dụ sau:
lw $t0, 32($s3)
Ở đây 19 được hiểu cho s3 được đặt vào trường rs; 8 được hiểu cho t0 và
đặt vào trường rt; giá trị 32 được đặt vào trường địa chỉ. Nhận thấy r ng trường rt

11


bây giờ đã thay đổi vai trò trở thanh toán hạng đ ch nhận lấy kết quả của lệnh đọc ô
nhớ. Mặc dù nhiều định dạng cho các lệnh s gây khó khăn cho thiết kế phần cứng.
Tuy nhiên ta chỉ quan tâm đến các phần giống nhau thì có thể giảm thiểu đi sự phức
tạp. Để ý r ng, ba trường đầu tiên của cả hai khuôn dạng lệnh R-format và I-format
đều có tên giống nhau và có cùng k ch cỡ. Trường cuối cùng của I-format có độ dài
b ng 3 trường cuối của R-format.
M i lệnh được phân biệt bởi giá trị của trường đầu tiên op để phần cứng
nhận ra đây là lệnh thuộc R-type hay I-type.

Bảng 1.5 Mã hóa lệnh MIPS
Instruction

Format

op

rs

rt

rd

shamt

funct

Address

Add

R

010

reg

reg

reg


0

3210

n.a.

sub(subtract)

R

010

reg

reg

reg

0

3410

n.a.

add immediate

I

810


reg

reg

n.a.

n.a.

n.a.

constant

lw(load word)

I

3510

reg

reg

n.a.

n.a.

n.a.

address


sw(store word)

I

4310

reg

reg

n.a.

n.a.

n.a.

address

Trong bảng trên reg được hiểu là thanh ghi 0 đến thanh ghi 31; address
là 16 bit địa chỉ; n.a = not acceptable có nghĩa là không chấp nhận ở dạng lệnh
tương ứng; để ý r ng lệnh add và lệnh sub có cùng giá trị ở trường op; thành
phần của phần cứng s căn cứ vào trường funct để quyết định xem đó là lệnh add
32 hoặc sub 34 .
V dụ: Nếu t1 chứa địa chỉ cơ sở của mảng A còn s2 chứa biến h. Câu lệnh sau:
A[300] = h + A[300];
Được chuyển sang lệnh MIPS tương ứng:
lw $t0, 1200($t1)
add $t0, $s2, $t0


# $t0 = h+A[300]

sw $t0, 1200($t1)

# A[300] = h+A[300]

Lệnh MIPS trên được chuyển sang mã máy như sau:

12


op

rs

rt

35

9

8

0

18

8

43


9

8

rd

Shamt/Address

funct

1200
8

0

32

1200

Đầu tiên, lệnh lw được gán bởi số 35 ở trường op; thanh ghi cơ sở 9 t1
được gán ở trường thứ hai rs ; thanh ghi đ ch 8 t0 được gán ở trường thứ ba rt ;
địa chỉ đoạn offset A 300 1200 = 300x4 được gán cho trường cuối.
Kế đến, lệnh add được gán giá trị là 0 ở trường op và giá trị ở trường funct là
32; ba thanh ghi toán hạng 18, 8 và 8 được gán cho các trường thứ hai, ba và bốn
tương ứng với ba thanh ghi

s2, t0 và t0 .

Cuối cùng, lệnh sw gán giá trị 43 ở trường op, phần còn lại tương tự như

lệnh load.
1.5 C

ph p to n liên qu n

n o

Bảng 1.6 Ph p toán có liên quan đến logic trên C và MIPS
Ph p to n o

nh C

nh MIP

Shift left

<<

sll

Shift right

>>

slr

Bit-by-Bit AND

&


and, andi

Bit-by-bit OR

|

or, ori

Bit-by-bit NOT

~

Nor

Nhóm lệnh đầu tiên có tên là shift; có tác dụng dịch chuyển các bit trong một
từ sang trái hoặc sang phải và điền các bit còn trống sau khi dịch chuyển bởi các bit
0. V dụ, nếu thanh ghi s0 chứa chu i bit:
(0000 0000 0000 0000 0000 0000 0000 1001)2 = 910
Với lệnh shift left 4 bit thì giá trị của s0 là:
(0000 0000 0000 0000 0000 0000 1001 0000)2 = 14410
Song song với lệnh shift left là lệnh shift right, tên đầy đủ của hai lệnh MIPS
trên là: shift left logical sll và shift right logical srl và hoạt động gần giống nhau.
13


Giả sử, ta có lệnh MIPS như sau:
sll $t2, $s0, 4

# thanh ghi $t2 = thanh ghi $s0 << 4 bit


Ngôn ngữ máy của lệnh MIPS trên được miêu tả như sau:
op

rs

rt

rd

shamt

funct

0

0

16

10

4

0

Lệnh sll được mã hóa giá trị 0 cho cả hai trường op và funct; rt chứa s0; rd
chứa t2; shamt chứa giá trị 4 dịch trái 4 bit ; rs không dùng trong trường hợp này
nên gán giá trị là 0.
Ph p toán dịch trái số học logic có một điểm thuận tiện là, nếu ta dịch trái i
bit s cho ta kết quả b ng ph p toán nhân cho 2i. Lấy v dụ kết quả ở trên s2 = 9 và

tiến hành dịch trái 4 bit s được: 9x24 = 9x16 = 144.
Một ph p toán khác cũng được liệt kê trong lệnh MIPS là ph p toán AN .
AN

là ph p toán bit-by-bit mà kết quả của nó s là 1 nếu bit ở hai toán hạng cùng

có giá trị là 1. V dụ: t2 có giá trị như sau:
(0000 0000 0000 0000 0000 1101 0000 0000)2
Thanh ghi t1 có giá trị là:
(0000 0000 0000 0000 0011 1100 0000 0000)2
Cho lệnh MIPS như sau:
and $t0, $t1, $t2

# thanh ghi $t0 = $t1 & $t2

Giá trị của thanh ghi t0 là:
(0000 0000 0000 0000 0000 1100 0000 0000)2
Song song với ph p toán AN là ph p toán OR. OR là một ph p toán bit-bybit, kết quả s là 1 nếu chỉ cần một trong hai bit có giá trị là 1. V dụ thanh ghi t1
và t2 vẫn có giá trị không đổi ở v dụ trên, thì với lệnh MIPS sau:
or $t0, $t1, $t2

# thanh ghi $t0 = $t1 | $t2

Giá trị ở thanh ghi t0 s là:
(0000 0000 0000 0000 0011 1101 0000 0000)2
Ph p toán cuối cùng là NOT, là một ph p toán bit-by-bit. Kết quả cuối cùng s là 1
nếu đầu vào là 0 và ngược lại. Với mong muốn giữ lại ph p toán có hai toán hạng nên các

14



nhà thiết kế phần cứng tập lệnh MIPS đã sử dụng lệnh NOR NOT OR thay vì sử dụng
NOT. Nếu một toán hạng là zero thì ph p toán tương đương NOT.
V dụ: A NOR 0 = NOT (A OR 0) = NOT (A).
Nếu thanh ghi t1 có giá trị không đổi và thanh ghi t3 có giá trị là 0 thì lệnh MIPS:
nor $t0, $t1, $t3

# thanh ghi $t0 = ~($t1 | $t3)

Kết quả của thanh ghi t0 là:
(1111 1111 1111 1111 1100 0010 1111 1111)2
1

nh h tr r qu t ịnh
Điều làm cho một máy t nh đơn giản trở nên nổi bật đó ch nh là khả năng ra

quyết định.

ựa trên dữ liệu đầu vào và giá trị được tạo ra trong quá trình t nh toán

dẫn đến những hành động thực thi câu lệnh khác nhau. Câu lệnh ra quyết định phổ
biến trong các ngôn ngữ lập trình là câu lệnh if, thỉnh thoảng kết hợp với lệnh goto
và nhảy đến nhãn. Câu lệnh MIPS assembly bao gồm hai kiểu câu lệnh ra quyết
định tương tự như lệnh if và goto. Câu lệnh đầu tiên là:
beq register1, register2, L1
Câu lệnh này có ý nghĩa: nhảy đến nhãn L1 nếu giá trị ở thanh ghi 1 register1 b ng
với giá trị ở thanh ghi 2 register2 . Lệnh beq được hiểu là: branch if equal.
Lệnh thứ hai là:
bne register1, register2, L1
Câu lệnh này có ý nghĩa: nhảy đến nhãn L1 nếu giá trị của register1 khác với

giá trị của register2. Câu lệnh bne được hiểu là: branch if not equal. Cả hai câu lệnh
trên được gọi là câu lệnh điều kiện r nhánh.
V dụ: cho đoạn code sau với f, g, h, i, j là các biến. Nếu năm biến từ f đến j
tương ứng với các thanh ghi s0 - s4. Câu lệnh MIPS tương ứng cho câu lệnh:
if (i=j) f=g+h; else f=g+h;
Nửa bên trái tương ứng lệnh phần then của lệnh if và nửa bên phải tương ứng
với phần else . Đầu tiên biểu thức so sánh b ng được thực hiện, tương ứng với lệnh
beq sau đó s thực hiện các trường hợp ph a sau. Tuy nhiên đoạn code s trở nên

15


×