Thiết kế MIPS 32 bit
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
Trang 2Mục Lục
A.Lời mở đầu 3
B Nội dung thực hiện 4
I Tổng quan về MIPS 4
1.Đặc điểm kĩ thuật 4
2 Lịch sử dòng xử lý MIPS 5
3 Các dòng vi xử lý thương mại MIPS đã sản xuất 5
4 Kiến trúc bộ lệnh 6
5 Phân loại MIPS 7
6 Ưu nhược, điểm của MIPS 8
7 Ứng dụng 9
II.Nội dung thực hiện 9
1.Yêu cầu thực hiện 9
2.Sơ đồ khối 9
3.Giải quyết xung đột 16
III.Kết quả 25
1 Sơ đồ testbench 25
2 Test code, kiểm thử xung đột 25
3 Các phương án giải quyết mở rộng: 27
4 Hướng phát triển: 28
C.Kết luận 29
Trang 3A.Lời mở đầu
Trong quá trình phát triển của công nghệ máy tính, con người đã chế tạo ra hàng ngàn loại máy tính khác nhau Rất nhiều trong số những máy tính này đã bị quên lãng đi, chỉ một số ít còn được nhắc lại cho đến ngày nay Đó là các máy tính với những ý tưởng thiết kế và nguyên lý hoạt động độc đáo tạo nên một tầm ảnh hưởng lớn đến các máy tính thế hệ sau nó Việc tìm hiểu về kiến trúc máy tính giúp chúng ta có những kiến thức cơ bản để hiểu nguyên lí và cấu tạo của máy, tạo tiền đề để phát triển tạo ra những thế hệ máy tính tối ưu hơn trong tương lai Kiến trúc MIPS được sử dụng rỗng rãi trong các dòng máy tính đồ họa silicon, các hệ thống nhúng, các thiết bị điện tử… Chính bởi vậy, nhóm chúng em đã quyết định làm đề tài thực hiện thiết kế MIPS 32bit với chức năng
cơ bản
Do trình độ cũng như kiến thức còn hạn chế nên bài tập lớn chắc chắn còn nhiều sai sót, mong cô góp ý để kiến thức và kỹ năng môn học ngày càng hoàn thiện hơn
Trang 4B Nội dung thực hiện
I Tổng quan về MIPS
MIPS (Microprocessor without Interlocked Pipeline Stages)
Là kiến trúc bộ tập lệnh RISC phát triển bởi MIPS Technologies Ban đầu kiến trúc MIPS
là 32bit, và sau đó là phiên bản 64 bit Nhiều sửa đổi của MIPS, bao gồm MIPS I, MIPS
II, MIPS III, MIPS IV, MIPS V, MIPS32 và MIPS64
Phiên bản hiện tại là MIPS32 và MIPS64
Cũng có một vài tuỳ chọn mở rộng, baogồm MIPS-3D (1 tập lệnh đơn giản các câu lệnh SIMD về dấu chấm động để thực hiện các tác vụ về đồ họa 3D), MIPS16e (khả năng nén
vi lệnh để tiết kiệm không gian bộ nhớ) và MIPS MT (MultirTheading) kiến trúc đa luồng mới được bổ xung cho hệ thống
1.Đặc điểm kĩ thuật
Năm 1981, một nhóm các nhà nghiên cứu thuộc đại học Stanford do John L Hennessy đứng đầu đã bắt đầu một công trình nghiên cứuvề bộ xử lý MIP đầu tiên Khái niệm cơ bản là nhằm tăng đột xuất hiệu năng thông qua sử dụng một đường ống lệnh (pipelineinstructions), một công nghệ đã được biết đến từ lâu nhưng lại khó phát triển Thông thường một đường ống sẽ mở rộng việc chạy một câu lệnh thành vài bước, bắt đầu thực hiện “bước một” của câu lệnhtrước khi câu lệnh trước hoàn thành Trong khi đó, thiết
kế truyền thống yêu cầu phải đợi cho đến khi một câu lệnh hoàn thành mới được chạy câu lệnh tiếp theo.Thiết kế theo pipeline làm giảm đáng kể thời gian dành của CPU khi thực hiện liên tiếp các câu lệnh
Mặc dù thiết kế này đã loại trừ một số câu lệnh hữu dụng, đáng kể nhất như là các lệnh nhân và chia yêu cầu nhiều bước, nhưng nó cho thấy hiệu suất tổng thể của hệ thống tăng
Trang 5lên rõ rệt bởi vì các vi xử lý có thể chạy ở xung nhịp lớn hơn rất nhiều Tuy nhiên việc loại
bỏ các câu lệnh trên lại không được các nhà thiết kế thời bấy giờ ủng hộ Rất nhiều ý kiến cho rằng thiết kế kiểu đường ống lệnh sẽ không tồn tại được ,nếu chỉ thay một lệnh nhân phức tạp bằng nhiều lệnh cộng đơn giản thì làm sao hệ thống có thể nhanh hơn được Tuy nhiên đã cho thấy tốc độ thuộc về thiết kế đường ống,chứ không phải theo câu lệnh
2 Lịch sử dòng xử lý MIPS
Năm 1984, Hennessy rời trường đại học Stanford để thành lập công ty MIPS Computer System.Họ cho ra đời thiết kế đầu tiên là R2000 vào năm 1985, sau đó phát triển R3000 vào năm 1998 Những CPU 32 bit này tồn tại trong suốt những năm 1980, và được sử dụng chủ yếu trong các dòng máy chủ SGI
Năm 1991 MIPS cho ra đời bộ vi xử lý 64 bit đầu tiên R4000.Tuy nhiên MIPS gặp khó khăn trong tài chính trong khi tung sản phẩm này ra thị trường Thiết kế này rất quan trọng đối với SGI-một trong những khách hàng của MIPS lúc bấy giờ, vì thế SGI đã mua lại công ty vào năm 1992 để bảo vệ thiết kế không bị mất đi Từ đó MIPS trở thành một công ty con của SGI và được biết đến bởi tên MIPS Technologies
3 Các dòng vi xử lý thương mại MIPS đã sản xuất
- R2000 : Xuất hiện trên thị trường vào năm 1985, được bổ sung thêm nhiều câu lệnh
mới, có thể được khởi tạo ở chế độ big-endian hay little-endian, có 32 thanh ghi 32bit , một trong số đó đảm nhiệm việc xử ý các ngoại lệ và bẫy , trong nhưng không có thanh ghi mã điều kiện R2000 cũng hỗ trợ tới 4 bộ xử lý khi 3 bộ còn lại sử dụng cho mục đích khác
- R3000 :bổ xung thêm 32kB cho bộ nhơ Cache (và sớm được đưa lên 64kB) cho các
lệnh và dữ liệu, kèm theo đó là cơ chế Cache coherency hỗ trợ cho nhiều bộ xử lý.R3000 cũng bao gồm MMU tính năng phổ biến của họ CPUs kỷ nguyên này
Trang 6- R4000 :Được đưa ra năm 1991,mở rộng tập lệnh MIPS để hỗ trợ đầy đủ kiến trúc 64bit,
chuyển FTU vào main để tạo ra một hệ thống chip đơn lẻ, xử lý với tốc độ lên đến 100Mhz
- R8000 :Ra đời năm 1994,là thiết kế MIPS siêu vô hướng (superscala) đầu tiên,cho phép
xử lý 2 ALU và 2 phép tính nhớ mỗi chu kỳ.Thiết kế này hỗ trợ tới 6 chip và 4MB cache
mở rộng
- R10000 :Ra đời năm 1995,là thiết kế chip đơn lẻ,chạy với tốc độ cao hơn R8000,có
32kb cache chính cho câu lệnh và dữ liệu
- Ngoài ra còn có R6000,R1 6000,R1 6000A…
4 Kiến trúc bộ lệnh
4.1 Nguyên tắc thiết kế bộ lệnh MIPS
Tính đơn giản quan trọng hơn tính quy tắc (Simplicity favors regularity)
Tăng tốc các trường hợp thông dụng
Các toán hạng số học lấy từ thanh ghi (máy tính dựa trên cơ chế load-store)
Các chỉ thị có thể chứa toán hạng trực tiếp
Thiết kế tốt đòi hỏi sự thỏa hiệp
3 loại định dạng chỉ thị
4.2 Một số lệnh trong MIPS
MIPS chỉ cần hỗ trợ 32 thanh ghi là đủ, đánh số từ $0-$31
Trang 7Mỗi thanh ghi có kích thước 32bit(4 byte) Để đơn giản và dễ dàng trong việc truy xuất
bộ nhớ, tất cả các lệnh đều có chiều dài 32 bit
4.3 Nguyên tắc lưu dữ liệu trong bộ nhớ
MIPS lưu dữ liệu trong bộ nhớ theo nguyên tắc Alignment Restriction, nghĩa là các đối tượng lưu trong bộ nhớ phải bắt đầu tại địa chỉ là bội số của kích thước đối tượng
Như vậy, từ nhớ phải bắt đầu tại địa chỉ là bội số của 4
MIPS lưu trữ dữ liệu trong bộ nhớ theo nguyên tắc Big Endian, nghĩa là đối với giá trị có kích thước lớn hơn 1 byte thì byte sẽ lưu tại địa chỉ thấp
5 Phân loại MIPS
Đơn xung nhịp: Thiết kế, xử lí 1 lệnh trong vòng 1 chu kì
Trang 8 Thời gian thực hiện (= số pha) của mỗi lệnh được điều chỉnh tùy thuộc độ phức tạp của lệnh
Các khối chức năng được chia sẻ giữa các pha khác nhau của lệnh do một khối chức năng cụ thể không cần trong toàn bộ các pha thực hiện của lệnh
o Nhược điểm:
Các lệnh thực hiện liên tiếp nhau
Lệnh trước được thực hiện xong mới đến lệnh sau vì vậy xuất hiện khoảng thời gian rỗi giữa các khâu
Pipeline
o Ưu điểm:
Kĩ thuật pipeline được đưa ra để tận dụng những thời gian rỗi giữa các khâu
Kĩ thuật pipeline sẽ làm tăng tốc độ vi xử lí
6 Ưu nhược, điểm của MIPS
Ưu điểm:
Bộ xử lý truy xuất thanh ghi nhanh nhất (hơn 1 tỉ lần trong 1 giây) vì thanh ghi
là một thành phần phần cứng thường nằm chung mạch với bộ xử lý
CPU không phải đợi để thực hiện các tiến trình đơn mà thực hiện cùng lúc nhiều tiến trình, do đó chu kì của tiến trình được thông suốt
Không gian bộ nhớ của máy được giải phóng nhiều hơn do khả năng nén vi lệnh để làm chương trình nhỏ hơn
Khuyết điểm:
Do thanh ghi là một thành phần phần cứng nên số lượng cố định và hạn chế
Do đó, sử dụng phải khéo léo và phức tạp
Trang 97 Ứng dụng
Thiết kế MIPS được sử dụng rộng rãi trong các dòng máy tính đồ họa silicon,các hệ thống nhúng như TiVo thế hệ 2,các thiết bị sử dụng hệ điều hành Windows CE,Cisco routes và các máy chơi game console như Nitendo 64,Sonyplaystation
II.Nội dung thực hiện
1.Yêu cầu thực hiện
MIPS 32 bit thực hiện các lệnh cơ bản +, -, and, or, not, lw, sw, beq
Thực hiện bằng ngôn ngữ mô tả phần cứng Verilog HDL
Giải quyết được các xung đột cơ bản trong MIPS pipeline
2.Sơ đồ khối
2.1 Sơ đồ khối tổng quát:
Đây là khối xử lý chính của Mips 32 bit
o Đầu vào :
Instr[31:0] : Mã lệnh được lấy từ bộ nhớ lệnh
ReadData[31:0] : Dữ liệu được đọc ra từ bộ nhớ dữ liệu
Trang 10o Đầu ra :
MemWrite : Tín hiệu điều khiển phát ra để yêu cầu ghi vào bộ nhớ dữ liệu
ALUOut[31:0] : Dữ liệu sau khi tính toán từ bộ ALU
WriteData[31:0] : Dữ liệu được ghi vào bộ nhớ dữ liệu
PC[31:0] : Tín hiệu PC đi vào bộ nhớ lệnh
2.2 Thiết kế chi tiết:
Sau đây em xin liệt kê vai trò của một số khối quan trọng của bộ vxl MIPS
a) Khối Control Unit :
Là khối sinh ra các tín hiệu điều khiển cho con Mips khi có lệnh của bên ngoài đưa vào dưới dạng mã lệnh
Đầu vào : Op[5:0] , Funct[ 5:0] lấy từ mã lệnh
Zero lấy từ đầu ra của khối ALU
Đầu ra : Các tín hiệu để điều khiển các khối khác là :
+) Tín hiệu đưa dữ liệu từ bộ nhớ ra thanh ghi Memtoreg
+) Tín hiệu Regwrite, Memwrite
+) Tín hiệu chọn ALUSrc, PCSrc, RegDst,
Trang 11+) Tín hiệu ALUControl
b) Khối Register File :
Là khối thanh ghi của con Mips Đầu vào sẽ là địa chỉ của các thanh ghi đưa vào từ
mã lệnh và dữ liệu quay về thanh ghi từ giai đoạn WB Đầu ra sẽ là dữ liệu nằm trong thanh ghi mà địa chỉ lệnh trỏ tới
Đầu vào : +) RegwriteW : tín hiệu cho phép đọc mã lệnh tương ứng vào thanh ghi qua WB
+) Mã lệnh tương ứng của Rs, Rt : InstrD[25:21], InstrD[20:16]
+) Dữ liệu trả về WriteRegW[4:0] và tín hiệu kết quả ResultW
Đầu ra : Dữ liệu được đọc trong 2 thanh ghi mà mã lệnh truy cập tới địa chỉ của nó Readdata1, Readdata2
c) Khối ALU : Là khối phục vụ nhiệm vụ tính toán
Đầu vào : +) Tín hiệu chọn loại tính toán : cộng, trừ, nhân, chia : ALUControl được sinh ra từ ControlUnit
+) Dữ liệu được đọc từ 2 thanh ghi trong tập thanh ghi Register file Readdata1, Readdata2 32 bit
Đầu ra: +) Dữ liệu ra sau khi được tính toán ALUOut 32 bit
+) Tín hiệu Zero sử dụng trong lệnh rẽ nhánh beq, bne
Trang 12d) Khối SignExt :
Khối được sử dụng với nhiệm vụ chuyển đổi dữ liệu dịch từ 16 bit trong mã lệnh
thành 32 bit để thực hiện cho nhiệm vụ tính toán
Đầu vào : Dữ liệu dịch được lấy trong 16 bit cuối của mã lệnh Instr[15:0]
Đầu ra : Dữ liệu dich được chuyển thành 32 bit bằng cách lấy 16 bit đầu bằng bit thứ 16
và 16 bit cuối là Instr[15:0] y[31:0] = [16(Instr[15]), Instr[15:0]]
Từ các khối trên và một số khối logic cơ bản khác ta xây dựng được bộ MIPS đa
xung nhịp như hình vẽ
Trang 13Ở đa xung nhịp ta chia lệnh thành 5 giai đoạn IF, ID, EX, MEM, WB Mỗi giai đoạn được thực hiện trong một chu kỳ Trong sơ đồ gồm có các khối chính như là khối Control Unit, khối Register File, khối ALU, khối SignExt
2.3 Sơ đồ khối Pipelined
Từ MIPS đa xung nhịp chúng ta tiến hành pipeline bộ vi xử lý bằng cách thêm vào các thanh ghi trạng thái IFID, IDEX, EXMEM, MEMWB, PC Các thanh ghi sẽ thực hiện nhiệm vụ chuyển tiếp dữ liệu giữa các khâu
a) Stage IFID : Thanh ghi giữa 2 giai đoạn IF và ID Thanh ghi gồm 64 bit dữ liệu bao gồm
32 bit tín hiệu điều khiển control signals, 32 bit tín hiệu dữ liệu của PC
Đầu vào : +) Tín hiệu clock và reset
Trang 14+) Tín hiệu để điều chỉnh thanh ghi ghi hoặc dừng ghi bao gồm IF_Flush, ID_stall
+) Dữ liệu sau khi qua giai đoạn IF : [32:0]IF_Instruction , [32:0]IF_PCAdd4 Đầu ra : +) Dữ liệu chuẩn bị vào giai đoạn ID : [32:0]ID_Instruction, [32:0]ID_PCAdd4 b) Stage IDEX stage : Thanh ghi giữa 2 giai đoạn ID và EX Thanh ghi chuyển tiếp 118 bit
dữ liệu bao gồm 64 bit dữ liệu của 2 thanh ghi, 32 bit dữ liệu dịch, 15 bit mã lệnh của Rs,
Rt, Rd và 7 bit lưu tín hiệu điều khiển
Đầu vào : +) Tín hiệu clock,reset
+) Tín hiệu điều khiển được lưu lại ID_RegWrite, ID_MemtoReg,
ID_MemWrite, ID_ALUControl[2:0], ID_ALUSrc,ID_ RegDst
+) Dữ liệu 32 bit đọc từ 2 thanh ghi SrcA, SrcB, dữ liệu dịch 32 bit
SignExtlmm
+) Bit trong mã lệnh thể hiện Rs, Rt, Rd 5 bit
+) Tín hiệu để xử lý xung đột FlushE
Đầu ra : +) Tín hiệu điều khiển được lấy ra cho giai đoạn tính toán EX_RegWrite,
EX_MemtoReg, EX_MemWrite, EX_ALUControl[2:0], EX_ALUSrc, EX_RegDst +) Dữ liệu 32 bit đọc từ 2 thanh ghi SrcA, SrcB, dữ liệu dịch 32 bit SignExtlmm cho giai đoạn EX
+) Bit trong mã lệnh thể hiện Rs, Rt, Rd 5 bit
c) Stage EXMEM stage : Thanh ghi giữa 2 giai đoạn EX và MEM Thanh ghi chuyển tiếp 72 bit dữ liệu bao gồm 32 bit dữ liệu ra từ khối ALU, 32 bit dữ liệu để ghi vào bộ nhớ, 5 bit
mã lệnh quay trở lại thanh ghi và 3 bit lưu tín hiệu điều khiển
Đầu vào : +) Tín hiệu clock, reset
+) Tín hiệu điều khiển được lưu lại EX_RegWrite, EX_MemtoReg,
EX_MemWrite
+) Dữ liệu 32 bit lấy ra từ bộ tính toán ALU và dữ liệu 32 bit dùng để lưu trữ vào bộ nhớ EX_WriteDataa
Trang 15+) Bit mã lệnh quay trở lại tệp thanh ghi 5 bit
Đầu ra : +) Tín hiệu điều khiển công việc ghi và đọc trong bộ nhớ
+) Dữ liệu 32 bit lưu trữ vào bộ nhớ M_WriteData, dữ liệu 32 bit từ bộ ALU M_ALUOut
+) Bit mã lênh quay trở lại tệp thanh ghi 5 bit
d) Stage MEMWB : Thanh ghi giữa 2 giai đoạn MEM và WB Thanh ghi chuyển tiếp 71 bit
dữ liệu bao gồm 32 bit dữ liệu được đọc ra từ bộ nhớ, 32 bit dữ liệu tính toán từ bộ ALU quay trở lại tệp thanh ghi, 5 bit mã lệnh quay về thanh ghi và 2 bit lưu tín hiệu điều khiển Đầu vào : +) Tín hiệu clock, reset
+) Tín hiệu điều khiển M_RegWrite, M_MemtoReg
+) Tín hiệu dữ liệu 32 bit đọc ra từ bộ nhớ M_ReadData và dữ liệu kết quả từ bộ ALU 32 bit M_ALU_Result
+) Bit mã lệnh quay về thanh ghi 5 bit
Đầu ra : +) Tín hiệu điều khiển M_RegWrite, M_MemtoReg
+) Tín hiệu dữ liệu 32 bit đọc ra từ bộ nhớ M_ReadData và dữ liệu kết quả từ bộ ALU 32 bit WB_ALU_Result
+) Bit mã lệnh quay về thanh ghi
e) Stage PC : Thanh ghi lưu trữ giá trị của PC cho lệnh tiếp theo Thanh ghi PC là thanh ghi
32 bit lưu giá trị của tín hiệu PC
Đầu vào : +) Tín hiệu clock,reset
+) Tín hiệu PC 32bit
+) Tín hiệu để xử lý xung đột StallF
Đầu ra : +) Tín hiệu ra PCF 32 bit để đưa vào IMEM( Instruction Memory)
f) Khối Hazard : Dùng để xử lý xung đột gặp phải trong con Mips pipelined Khi xảy ra các hiện tượng xung đột thì sẽ có tín hiệu báo xung đột về khối Hazard và từ đấy sẽ phát các tín hiệu để điều khiển các thanh ghi sao cho xử lý được các xung đột xảy ra
Đầu vào : +) Các bit mã lệnh của các thanh ghi [4:0] rsD, rtD, rsE, rtE
Trang 16+) Bit mã lệnh trả về thanh ghi [4:0] WriteRegE, WriteRegM, WriteRegW
+) Các tín hiệu điều khiển BranchD, MemtoRegE, MemtoRegM, RegWriteM, RegWriteW, RegWriteM
Đầu ra : +) Các tín hiệu điều khiển các thanh ghi để xử lí xung đột StallF, StallD,
ForwardAD, ForwardBD, FlushE, [1:0] ForwardAE, [1:0] ForwardBE
3.Giải quyết xung đột
3.1 Các loại xung đột và phương pháp khắc phục:
3.1.1 Xung đột cấu trúc
a) Đặt vấn đề
Xung đột cấu trúc xảy ra khi 2 lệnh cùng cố gắng sử dụng 1 nguồn tại cùng 1 thời điểm
Ví dụ như tại 1 thời điểm có 2 lệnh cố gắng ghi và đọc dữ liệu từ tập thanh ghi thì tại thời điểm đó xung đột xảy ra
b) Hướng giải quyết
Có 2 phương pháp để có thể khắc phục được dạng xung đột này
- Thực hiện chờ
- Ghi ở chu kì lên và tiến hành đọc ở chu kì xuống
Trong bài này ta lựa chọn phương pháp thứ 2 vì mang lại hiệu năng cao hơn