THIẾT KẾ CPU RISC 32 BITS ĐƠN
CHU KỲ THỰC HIỆN LỆNH SLT
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ
HÌNH 2-1: CPU RISC ARM710.
HÌNH 2-2: SƠ ĐỒ TỔNG THỂ CÁC KHỐI TRONG MỘT CPU RISC 32 BITS.
HÌNH 2-3: CẤU TRÚC KHỐI IM.
HÌNH 2-4: KHỐI RF.
HÌNH 2-5: KHỐI ALU.
HÌNH 2-6: KHỐI DATA MEMORY.
HÌNH 2-7: KHỐI SIGN EXTEND.
HÌNH 3-1: ĐƯỜNG DỮ LIỆU VÀ ĐIỀU KHIỂN THỰC HIỆN LỆNH SLT.
HÌNH 4-1: CODE CỦA BỘ CỘNG
HÌNH 4-2: CODE KHỐI ĐẦU VÀO PC.
HÌNH 4-3: CODE KHỐI IM.
HÌNH 4-4: CODE KHỐI RF.
HÌNH 4-5: CODE KHỐI ALU.
HÌNH 4-6: CODE KHỐI CONTROL.
HÌNH 4-7: CODE KHỐI DATACONTROL.
HÌNH 4-8: CODE KHỐI ALUDECODER.
HÌNH 4-9: CODE CPU.
HÌNH 4-10: CODE CHO ĐƯỜNG DỮ LIỆU
HÌNH 4-11: KẾT QUẢ MÔ PHỎNG (1).
HÌNH 4-12: KẾT QUẢ MÔ PHỎNG (2).
HÌNH 4-13: KẾT QUẢ MÔ PHỎNG TRÊN KIT DE2.
DANH MỤC CÁC BẢNG BIỂU
BẢNG 1-1: Ý NGHĨA CỦA CÁC TOÁN TỬ SỐ HỌC.
BẢNG 1-2: Ý NGHĨA CỦA CÁC TOÁN TỬ SO SÁNH VÀ QUAN HỆ.
BẢNG 1-3: Ý NGHĨA CỦA CÁC TOÁN TỬ LOGIC.
BẢNG 1-4: Ý NGHĨA CỦA CÁC TOÁN TỬ DỊCH.
BẢNG 1-5: Ý NGHĨA CÁC SỐ HỌC.
BẢNG 2-1: CÁC LỆNH ĐƯỢC SỬ DỤNG TRONG 3 KHUÔN DẠNG LỆNH (1).
BẢNG 2-2: CÁC LỆNH ĐƯỢC SỬ DỤNG TRONG 3 KHUÔN DẠNG LỆNH
(2).
DANH MỤC CÁC TỪ VIẾT TẮT
CPU
Central Proccessing Unit.
RISC
Reduced Instructions Set Computer.
SLT
Set on less time.
HDLs
Hardware Description Languages.
IM
Instruction Memory.
RF
Registor File.
ALU
Arithmetic Logic Unit.
ARM
Advanced RISC Machine.
VHDL
Very High Speed Intergrated Circuit Hardware Description
Language.
CISC: Complex Instruction Set Computer.
ĐỒ ÁN 3
Trang 6/42
CHƯƠNG 1. TÌM HIỂU NGÔN NGỮ THIẾT KẾ VERILOG
1.1 Tìm hiểu về ngôn ngữ đặc tả phần cứng (HDLs)
Ngày nay, trong thời đại khoa học kỹ thuật, nền công nghiệp vi mạch
không ngừng phát triển, khi kích thước của những vi mạch và con chip ngày
càng nhỏ và độ phức tạp của hệ thống thiết kế ngày càng tăng thì mà các
phương pháp thiết kế mạch truyền thống như dùng tối thiểu hóa hàm Boolean
hay dùng sơ đồ các phần tử không còn đáp ứng được các yêu cầu đặt ra khi
thiết kế. Hơn nữa các mạch thiết kế ra yêu cầu phải được thử nghiệm kỹ lưỡng
trước khi đưa vào chế tạo hàng loạt. Trước những đòi hỏi đó, ngôn ngữ đặc tả
phần cứng HDLs (Hardware Description Languages) ra đời.
Với những ưu điểm như dễ quản lý những mạch lớn và phức tạp, uyển
chuyển và độc lập với công nghệ, cho phép tái sử dụng những thiết kế sẵn có,
mạch có thể được tổng hợp tự động từ đặc tả nên nó dần trở thành ngôn ngữ
được sử dụng rộng rãi trong ngành công nghiệp thiết kế số.
HDLs đã trở thành một kiến thức được đòi hỏi cần phải biết đối với
những kĩ sư cũng như sinh viên đang làm việc và học tập trong lĩnh vực phần
cứng. Hiện tại, những ngôn ngữ mô tả phần cứng được sử dụng rộng rãi nhất
đó là ngôn ngữ Verilog HDL, VHDL, System Verilog, …..
1.2 Ngôn ngữ thiết kế Verilog HDL
1.2.1 Lịch sử phát triển
Verilog là một trong hai ngôn ngữ mô tả phần cứng chính (gồm VHDL và
Verilog HDL) được người thiết kế phần cứng sử dụng phổ biến để mô tả, thiết kế các
ĐỒ ÁN 3
Trang 7/42
hệ thống số ở nhiều mức khác nhau ở mức cao như các mô hình đặc trưng đến các
mức thấp như mô hình bố trí dây, điện trở, transistor trên một mạch tích hợp, các
cổng logic, flip flop trong hệ thống số, thanh ghi và sự di chuyển dữ liệu giữa các
thanh ghi. Ban đầu, Verilog HDL được phát minh bởi Getway Design Automation và
được giới thiệu lần đầu vào năm 1984. Năm 1989 được mua lại bởi Cadence, sau đó
Verilog được phát hành miễn phí. Tổ chức Open Verilog International (OVI) đã
được thành lập nhằm kiểm soát các đặc tả ngôn ngữ. Năm 1995, OVI Verilog đã
được thông qua bởi IEEE như một chuẩn mới của hiệp hội. Năm 2001, IEEE đã giới
thiệu phiên bản mới của Verilog và hiện tại đang là phiên bản được sử dụng rộng rãi
nhất – Verilog HDL 2001. Năm 2005, System Verilog được giới thiệu như là một sự
mở rộng của Verilog với các kỹ thuật kiểm tra hướng đối tượng. Năm 2009, IEEE kết
hợp chuẩn Verilog với System Verilog thành một chuẩn duy nhất IEEE 1800-2009.
So với ngôn ngữ VHDL thì Verilog khá giống với ngôn ngữ C nên người có
kiến thức căn bản về C tốt thì khá dễ học và sử dụng Verilog.
1.2.2 Quy ước về từ khóa
Là những ký tự đặc biệt gồm có ký tự dấu cách (Space), ký tự Tab và ký tự
xuống dòng (Enter).
1.2.2.1 Chú thích
Có hai cách để tạo chú thích:
•
Chú thích trên cùng một dòng, sử dụng ký tự //
•
Vd : //Thiet ke CPU
Chú thích trên nhiều dòng, bắt đầu từ ký tự /* và kết thúc bằng ký tự */
Vd :
/* Thiet ke CPU RISC 32 bits
ĐỒ ÁN 3
Trang 8/42
don chu ky thuc hien lenh SLT */
1.2.2.2 Toán tử
Gồm toán tử đơn, toán tử kép và toán tử điều kiện :
•
Vd :
Toán tử đơn : x == y
// x bằng y
Toán tử kép : z = x + y
// z bằng x cộng cho y
Toán tử điều kiện : x = 1 ? y : z // Nếu biến điều kiện bằng 1 thì
kết quả x bằng y, ngược lại thì kết quả x bằng z
1.2.2.2.1 Toán tử số học
Bảng 1-1: Ý nghĩa của các toán tử số học
a+b
a -b
a*b
a/b
a%b
1.2.2.2.2 Toán tử so sánh và quan hệ
<
>
<=
a cộng b
a trừ b
a nhân b
a chia b
a chia b lấy dư
>=
==
!=
ĐỒ ÁN 3
Trang 9/42
Bảng 1-2: Ý nghĩa của toán tử so sánh và quan hệ
a
a >b
a <= b
a >= b
a == b
a != b
1.2.2.2.3 Toán tử logic
a nhỏ hơn b
a lớn hơn b
a nhỏ hơn hoặc bằng b
a lớn hơn hoặc bằng b
a bằng b
a khác b
&
|
^
~
Bảng 1-3: Ý nghĩa của toán tử logic
a&b
a |b
a^b
~a
a AND b
a OR b
a XOR b
đảo của a
1.2.2.2.4 Toán tử dịch
<<
>>
Bảng 1-4: Ý nghĩa của các toán tử dịch
x << y
x dịch sang trái y lần
x >> y
x dịch sang phải y lần
Trong toán tử dịch, những vị trí bit trống sẽ được chèn vào bit 0
1.2.2.2.5 Toán tử điều kiện
Trong các trường hợp xét điều kiện đơn giản, ta không cần phải sử dụng đến
cấu trúc điều kiện If … else hay Case.
ĐỒ ÁN 3
Trang 10/42
Cú pháp : Condition ? result 1 : result 2.
Ý nghĩa : Nếu biến điều kiện Condition bằng 1 thì cho ra kết quả result 1,
ngược lại thì cho ra kết quả result 2.
1.2.2.3 Số học
Bảng 1-5: Ý nghĩa các số học
123
4’b1010
-5’d15
8’hAB
16’o34
4’bxxxx
2.5E9
4’bzzzz
số thập phân 123
số nhị phân 1010 có độ rộng bit hay số bit là 4
số thập phân -18 có độ rộng bit là 5
số thập lục phân AB có số bit là 8
số bát phân 34 có 16 bit
số nhị phân tùy định lưu trong 4 bit
số thực 2.5x109
số nhị phân 4 bit có giá trị tổng trở cao
1.2.2.3.1 Hằng số nguyên
Có thể được mô tả theo định dạng số nhị phân, bát phân, thập phân và thập lục
phân. Gồm 2 dạng:
•
Số thập phân đơn giản, có thể là một chuỗi ký tự từ 0 đến 9 và có thể
bắt đầu với toán tử cộng (+) hoặc trừ (-)
Vd:
123 // số thập phân không dấu 123
+123 // số thập phân có dấu +123
-123 // số thập phân có dấu -123
•
Được mô tả dưới dạng hằng cơ số, gồm 3 thành phần:
Độ rộng hằng số hay độ rộng bit.
ĐỒ ÁN 3
Trang 11/42
Vd: 10’d123 //độ rộng bit là 10
Định dạng của cơ số. ‘b là định dạng của số nhị phân, ‘o là định
dạng của số bát phân, ‘d số thập phân, ‘h số thập lục phân.
Vd: 10’d123 //số này là số thập phân.
Chuỗi số hoặc ký tự đi sau phần định dạng là giá trị của số đó.
Vd: 10’d123 //giá trị của số thập phân này là 123.
1.2.2.3.2 Hằng số thực
Có thể mô tả bằng hai cách:
•
Theo dạng thập phân. Vd: 123.456
•
Theo cách viết hàn lâm. Vd: 23E4
// 23x104
1.2.2.4 Ký tự gạch dưới
Ký tự “_” có thể được dùng để chèn vào các chuỗi bit trong trường hợp chuỗi
đó quá nhiều bit mà không làm thay đổi giá trị của chuỗi bit.
Vd: 16’b_1000_1001_1010_1011
1.2.2.5 Từ định danh
Dùng để gán cho một đối tượng một tên duy nhất để nó có thể được gọi tới
khi. Nguyên tắc đặt là bắt đầu bằng chữ cái hoặc dấu gạch dưới “_” , không bắt đầu
bằng một chữ số hay ký tự “$”. Trong Verilog có phân biệt chữ in hoa với chữ
thường.
Vd: module LeThaiHa
Input _41202019
1.2.3 Mô tả module
ĐỒ ÁN 3
Trang 12/42
Khi lập trình Verilog, việc đầu tiên cần làm là khai báo module. Module được
khai báo có thể là module chính của mạch hoặc có thể là module phụ được module
chính gọi vào để sử dụng.
Một module bao gồm 4 thành phần:
•
Tên
•
Input, Output
•
Chức năng
•
Kết thúc.
Vd:
module phepcong (x,y,z); //đặt tên cho module
input x,y;
// khai báo input
output z;
// khai báo output
assign z = x + y;
// chức năng của module
endmodule
// kết thúc module
1.2.4 Khối always
Khối always là khối chức năng được dùng trong thực hiện các câu lệnh điều
kiện if . . . else hay case. Gồm khối always hoạt động dựa trên tín hiệu xung clock và
khối always hoạt động dựa vào các biến ở trong khối always đó.
ĐỒ ÁN 3
Trang 13/42
•
Khối always hoạt động dựa trên tín hiệu xung clock: có 2 trạng thái
tích cực ở xung clock mức 1 là posedge và tích cực ở xung clock mức
0 là negedge.
Vd:
module PC(Clock,PCin,PCout);
input [31:0]PCin;
input Clock;
output [31:0]PCout;
always @ (posedge Clock)
begin
PCout <= PCin;
end
endmodule
•
Khối always hoạt động dựa vào các biến ở trong nó, Các biến được gán
phải được khai báo kiểu Reg.
Vd:
module example (x,y,z)
input [31:0] x,y;
output [31:0] z;
reg [31:0] w;
always @(x,y,z,w)
begin
w = x & y;
z = w ^ x;
ĐỒ ÁN 3
Trang 14/42
end
endmodule
1.2.5 Khai báo kiểu dữ liệu
Gồm 3 kiểu dữ liệu: Net, Register và Parameter.
1.2.5.1 Kiểu dữ liệu Net
Net là dữ liệu dùng để mô tả sợi dây kết nối vật lý các tín hiệu. Net sẽ kết nối
những linh kiện ở mức cổng được gọi ra, những module được gọi ra và những phép
gán nối tiếp. Kiểu Net được dùng trong phép gán trực tiếp, trong các module còn
được lấy ra dùng từ module chính.
Được dùng phổ biến trong kiểu Net là wire. Wire là loại dữ liệu đơn giản để
kết nối giữa hai linh kiện, được điều khiển bởi một cổng linh kiện đơn hay trong
phéo gán nối tiếp.
Cú pháp: Wire [msb:lsb] variable;
Vd:
module example1 (x,y,z);
input [31:0] x,y;
output [31:0] z;
wire [31:0] w;
//tạo 1 sợi dây có biến là w có độ rộng 32 bit
assign w = x&y;
//gán w bằng x AND y
assign z = w^y;
//gán z bằng w XOR y
endmodule;
1.2.5.2 Kiểu dữ liệu Register
Nếu kiểu Net được dùng để gán trực tiếp trong các khối module chính thì kiểu
Register được dùng để gán trong các khối always hay initial.
ĐỒ ÁN 3
Trang 15/42
Kiểu dữ liệu Register lưu giữ giá trị từ một phát biểu gán thủ tục đến phát biểu
gán thủ tục kế tiếp và có ý nghĩa là đối tượng này lưu giữ giá trị trên các chu kỳ mô
phỏng. Phép gán thủ tục là một phép gán cho một kiểu dữ liệu của register và không
hàm ý rằng một thanh ghi vật lý sẽ được tổng hợp , mạc dù phép gán được sử dụng
cho mục đích này. Phép gán được sử dụng để gán giá trị dưới những điều kiện kích
khởi, như các phát biểu if và case. Phép gán thủ tục lưu giữ giá trị trong một kiểu dữ
liệu của register và được duy trì cho đến phép gán thủ tục kế tiếp cho kiểu dữ liệu
của register đó.
Cú pháp: reg [msb:lsb] variable;
Vd:
module example2 (x,clk,y);
input [31:0] x;
input clk;
output [31:0] y;
reg [31:0] y;
always @ (clk)
begin
if (clk == 1) y = x;
else y = 0;
end
endmodule;
1.2.5.3 Kiểu dữ liệu Parameter
Trong Verilog HDL, loại dữ liệu tham số (parameter) không thuộc loại dữ
liệu biến Reg cũng như loại dữ liệu net (wire,...). Dữ liệu tham số Parame ter
không phải là biến mà chúng là hằng số. Có hai loại tham số trong Verilog đó là:
Tham số module (module parameter): parameter và localparam.
ĐỒ ÁN 3
Trang 16/42
Tham số đặc tả (specify parameter): specparam.
Cả hai loại tham số trên đều được phép khai báo độ rộng. Mặc định, parameter
và specparam sẽ có độ rộng đủ để chứa giá trị của hằng số, ngoại trừ khi tham số đó
có khai báo độ rộng. Việc khai báo trùng tên giữa net, biến hay tham số là không
được phép.
Cú pháp: Parameter [msb:lsb] variable;
Vd:
module example3 (x,y);
input [31:0] x;
output [31:0] y;
reg y;
parameter z = 4; //gán cho hằng số z bằng 4
always @(x)
begin
if (x > z) y = 32b’1;
else y = 32b’0
end
endmodule
1.2.6 Phép gán
Phép gán assignment dùng để gán kết quả trả về của 1 biểu thức.
•
Phép gán đồng thời (phép gán liên tục): dùng để gán giá trị ở bên ngoài
các block.
Cú pháp: assign signal1 = signal2;
Vd:
module example (a,b,c);
ĐỒ ÁN 3
Trang 17/42
input a,b;
output c;
assign c = a ^ b; // gán c bằng a XOR B
endmodule
•
Phép gán tuần tự (phép gán thủ tục): chỉ dùng để gán giá trị ở bên
ngoài các block. Gồm 2 loại gán blocking và non-blocking:
Gán blocking: biến sẽ được gán giá trị ban đầu, sau khi tính toán
thu được giá trị mới và sử dụng giá trị mới làm giá trị cho biến
đó khi thực hiện lệnh tiếp theo.
Gán non-blocking: phép gán phía sau sẽ không phụ thuộc vào
giá trị của phép gán trước nó mà sẽ lấy giá trị được gán ban đầu
để tiếp tục tính toán.
1.2.7 Toán tử điều kiện
Các điều kiện này nằm trong khối always.
1.2.7.1 Điều kiện If . . . else
Cú pháp: If (variable == condition) statement 1;
else statement 2;
Nếu biến giống với điều kiện đang xét, câu lệnh 1 sẽ được thực hiện, nếu sai
câu lệnh 2 sẽ được thực hiện.
Trong trường hợp có nhiều hơn 2 điều kiện thì ta dùng “else if”.
1.2.7.2 Điều kiện với case
Trong trường hơp có nhiều hơn 2 điều kiện thay vì dùng “else if” sẽ dài dòng
và phức tạp hơn thì xét điều kiện vs case sẽ là tối ưu hơn cả.
Cú pháp: Case (variable)
ĐỒ ÁN 3
Trang 18/42
Condition 1: result = statement 1;
Condition 2: result = statement 2;
Condition … : result = statement …;
ĐỒ ÁN 3
Trang 19/42
CHƯƠNG 2. CPU RISC 32 BITS
2.1 Giới thiệu
RISC - viết tắt của Reduced Instructions Set Computer - Máy tính với tập lệnh
đơn giản hóa là một phương pháp thiết kế các bộ vi xử lý (VXL) theo hướng đơn
giản hóa tập lệnh, trong đó thời gian thực thi tất cả các lênh đều như nhau . Tất cả các
lệnh có cùng chiều dài, điều này làm cho chúng dễ dàng xắp xếp gọn gàng trong
RAM. Với bộ vi xử lý bên trong nó đã được giảm nhỏ tập lệnh, nói cách khác RISC
là một dạng cắt giảm, thu nhỏ của một con vi xử lý.
Hình 2-1: CPU RISC ARM710
Triết lý cho phát triển RISC đó là cắt giảm bộ vi xử lý để chỉ còn lại những bộ
phận thiết yếu của nó. Những gì không thực sự cần thiết sẽ bị vứt bỏ. Với các nhà lập
trình thì đó có nghĩa là các chip RISC thường không thể thực hiện một phép nhân
ĐỒ ÁN 3
Trang 20/42
đơn giản. Lý thuyết của phép nhân là thực hiện liên tiếp nhiều phép cộng, do đó lệnh
ADD là đủ.
Một ý khác của RISC đó là các chức năng phức tạp thích hợp thực hiện bằng
phần mềm hơn là bằng phần cứng. Phần mềm thì dễ thay đổi, dễ cập nhật, và tạo ra
nhanh hơn. Viết mã mới nhanh hơn là thiết kế và xây dựng một chip mới. Do đó các
máy tính dựa trên RISC có thể được nâng cấp nhanh hơn. Các chương trình và các
thuật toán có thể điều chỉnh và cải tiến, quan trọng là phần cứng RISC được đơn giản
hóa, tối ưu hóa sao cho nó chạy nhanh hơn.
2.2 Lịch sử ra đời và phát triển của CPU RISC
Trong những năm đầu, các dự án chủ yếu chỉ được biết đến trong các trường
đại học. Đến năm 1986, tất cả các dự án về RISC mới bắt đầu cho ra đời sản phẩm.
Ngày nay hầu hết các chip RISC, đều được thiết kế dựa trên kiến trúc RISC-II của
Berkeley. Sun Microsystems với SPARC, hoặc Pyramid Technology. Chính Sun là
công ty đầu tiên chứng minh sức mạnh của RISC là có thật trong những hệ thống
mới của mình, và cũng nhờ đó họ nhanh chóng chiếm lĩnh thị trường workstation lúc
bấy giờ.
Ngày nay CPU RISC (và microcontrollers) chiếm 1 lượng lớn CPU được sử
dụng. Kỹ thuật thiết kế RISC đem đến sức mạnh ngay cả ở những kích thước nhỏ, do
đó nó nhanh chóng chiếm lĩnh hoàn toàn thị trường CPU nhúng công suất thấp. Đây
là một thị trường cực kỳ lớn của CPU, có thể tìm thấy chúng trong xe hơi, điện thoại
di động, thậm chí một số thiết bị khác có thể chứa hàng tá CPU loại này.
ĐỒ ÁN 3
Trang 21/42
2.3 Cấu trúc các khối trong CPU RISC 32 bits
Hình 2.2: Sơ đồ tổng thể các khối trong một CPU RISC 32 bits
CPU RISC 32 bits gồm có 3 khối chính:
•
Instruction Memory
•
Registor File
•
ALU
Ngoài ra còn có các khối phụ như Data Memory, bộ bộng, bộ mux, khối PC
(Program Counter) đầu vào, . . .
ĐỒ ÁN 3
Trang 22/42
2.3.1 Khối IM
(Instruction
Instruction Memory
Read Address
Read Data
Memory)
Write Data
Hình 2-3: Cấu trúc khối IM
Khối IM (Instruction Memory) là khối chứa các thanh ghi có cấu trúc theo các
khuôn dạng lệnh R, I, J. Ứng với 32 bit địa chỉ Program Counter đầu vào, khối IM có
thể chứa tới 232 thanh ghi lệnh.
• Input:
Read Address (32 bit): Nhận tín hiệu từ Program Counter để xác
định địa chỉ và đi đến thanh ghi tương ứng chứa trong khối IM.
Write Data (32 bit): Dùng để lưu dữ liệu từ khối khác.
• Output:
Read Data (32 bit): Xuất ra khuôn dạng lệnh tương ứng với địa
chỉ thanh ghi lệnh.
Có 3 khuôn dạng lệnh R, I và J. Từ khuôn dạng lệnh đó ta có thể xác định
được:
• Lệnh sẽ thực hiện trong khối ALU
• Địa chỉ của 2 thanh ghi trong khối RF.
ĐỒ ÁN 3
Trang 23/42
• Địa chỉ của thanh ghi trong khối RF sẽ lưu kết quả khối ALU thực hiện
tính toán.
2.3.1.1 Khuôn dạng lệnh R
op
rs
rt
rd
shamt
funct
Khuôn dạng lệnh R có 6 trường:
• Trường op (bit 26 31): Dạng lệnh
• Trường rs (bit 21 25) : Địa chỉ của thanh ghi thứ nhất trong khối RF
sẽ xuất ra giá trị qua khối ALU.
• Trường rt (bit 16 20) : Địa chỉ của thanh ghi thứ hai trong khối RF sẽ
xuất ra giá trị qua khối ALU.
• Trường rd (bit 11 15) : Địa chỉ của thanh ghi lưu kết quả khối ALU.
• Trường shamt (bit 6 10) : Lệnh dịch bits.
• Trường funt (bit 0 5) : Dạng lệnh cụ thể sẽ thực thi ở khối ALU.
Vd: Khuôn dạng lệnh cho lệnh AND
000000
00000
00001
00010
00000
011000
Ý nghĩa:
• Trường op = 000000 và funt = 011000 là dạng lệnh AND.
• Trường rs = 00000 và rd = 00001 là địa chỉ chỉ đến thanh ghi thứ nhất
và thứ 2 trong khối RF xuất giá trị ra khối ALU để tính toán.
• Trường rd = 00010 là địa chỉ chỉ đến thanh ghi thứ 3 trong khối RF để
lưu kết quả sau khi thực thi lệnh.
• Trường shamt = 00000: Không dịch bit.
2.3.1.2 Khuôn dạng lệnh I
ĐỒ ÁN 3
Trang 24/42
op
rs
rt
immediate
Khuôn dạng lệnh I có 4 trường:
• Trường op (bit 26 31) : Dạng lệnh cụ thể sẽ thực thi ở khối ALU.
• Trường rs (bit 21 25) : Địa chỉ của thanh ghi trong khối RF sẽ xuất ra
giá trị qua khối ALU.
• Trường rt (bit 16 20) : Địa chỉ của thanh ghi lưu kết quả khối ALU.
• Trường immediate (bit 0 15) : Giá trị sẽ dùng trong lệnh.
Vd: Khuôn dạng lệnh cho lệnh BEQ
000100
00000
00001
1000100110101011
Ý nghĩa:
• Trường op = 000100 là dạng lệnh BEQ (so sánh bằng)
• Trường rs = 00000 là địa chỉ chỉ đến thanh ghi thứ nhất trong khối RF
xuất giá trị ra khối ALU để tính toán.
• Trường rt = 00001 là địa chỉ chỉ đến thanh ghi thứ 2 trong khối RF để
lưu kết quả sau khi thực thi lệnh.
• Trường immediate = 1000100110101011 là giá trị sẽ dùng để so sánh
với giá trị của thanh ghi được chọn.
2.3.1.3 Khuôn lệnh dạng J
op
Target address
Khuôn lệnh dạng J chỉ có 2 trường:
ĐỒ ÁN 3
Trang 25/42
• Trường op (bit 26 31) : Chỉ ra dạng lệnh.
• Trường Target address (bit 0 25): Địa chỉ sẽ nhảy đến.
Vd:
000010
11111111111111111111111111
2.3.2 Khối RF (Register File)
Register File
Read Address 1
Read Address 2
Read Data 1
Write Address
Read Data 2
Write Data
Hình 2-4: Khối RF
Khối RF (Register File) nhận địa chỉ chứa trong thanh ghi lệnh của khối IM
để di chuyển đến và xuất ra giá trị của thanh ghi trong khối RF qua khối ALU để
thực hiện tính toán.
Ứng với 5 bit địa chỉ vào nên khối RF chỉ chứa tối đa 32 thanh ghi.
• Input:
Read Address 1 và Read Address 2 (5 bit): địa chỉ của 2 thanh ghi
được chọn trong khối RF.
Write Address (5 bit): địa chỉ của thanh ghi sẽ lưu kết quả sau khi
thực hiện tính toán ở khối ALU.