32
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐÀO TẠO SAU ĐẠI HỌC BÀI TẬP LỚN KIỂM CHỨNG VI MẠCH Đề tài: KIỂM CHỨNG BẰNG PHƯƠNG PHÁP MÔ PHỎNG BỘ XỬ LÝ MIPS Nhóm thực hiện: LÊ DOÃN THIỆN CÙ XUÂN TOẢN LÊ THỊ ÁNH NGỌC Giảng viên hướng dẫn: TS. NGUYỄN ĐỨC MINH

Kiem chung vi_mach_report_update

  • Upload
    dua-moc

  • View
    12

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Kiem chung vi_mach_report_update

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐÀO TẠO SAU ĐẠI HỌC

BÀI TẬP LỚN

KIỂM CHỨNG VI MẠCH

Đề tài:

KIỂM CHỨNG BẰNG PHƯƠNG PHÁP MÔ

PHỎNG BỘ XỬ LÝ MIPS

Nhóm thực hiện: LÊ DOÃN THIỆNCÙ XUÂN TOẢNLÊ THỊ ÁNH NGỌC

Giảng viên hướng dẫn: TS. NGUYỄN ĐỨC MINH

Hà Nội, 1-2015

Page 2: Kiem chung vi_mach_report_update

MỤC LỤC

MỤC LỤC..........................................................................................................................................................1

Phần 1. Tổng quan dòng vi xử lý MIPS.....................................................................................................2

1.1 Lịch sử phát triển..................................................................................................................................2

1.2 Các sản phẩm đã có trên thị trường (Các công trình bài báo nghiên cứu đã có và có liên quan)......3

1.3 Nguyên tắc thiết kế bộ MIPS.................................................................................................................4

1.4 Một số lệnh sử dụng trong MIPS..........................................................................................................5

1.5 Phân loại MIPS.....................................................................................................................................6

1.5.1. Thiết kế đơn xung nhịp................................................................................................................6

1.5.2. Thiết kế đa xung nhịp..................................................................................................................6

1.5.3. Thiết kế pipeline..........................................................................................................................7

1.6 Các ứng dụng của bộ xử lý MIPS.......................................................................................................10

Phần 2. Phân tích và thực hiện kiểm chứng............................................................................................12

2.1 Lựa chọn phương pháp kiểm chứng....................................................................................................12

2.1.1. Tầm quan trọng của kiểm chứng thiết kế..................................................................................12

2.1.2. Các loại kiểm chứng trong quy trình thiết kế vi mạch..............................................................12

2.2 Mô hình kiểm chứng............................................................................................................................13

2.3 Thực hiện thiết kế MIPS Pipeline........................................................................................................13

2.3.1. Yêu cầu thiết kế.........................................................................................................................13

2.3.2. Sơ đồ thiết kế.............................................................................................................................14

2.3.3. Thiết kế chi tiết từng khối.........................................................................................................15

2.4 Thực hiện các phép toán trong MIPS dùng C++...............................................................................18

Phần 3. Kết quả tổng hợp và mô phỏng...................................................................................................19

3.1 Sơ đồ khối của sản phẩm....................................................................................................................19

3.2 Thuật toán, linh kiện, kiến trúc mạch..................................................................................................19

Phần 4. Đánh giá kết quả và hướng phát triển........................................................................................20

1

Page 3: Kiem chung vi_mach_report_update

Phần 1. Tổng quan dòng vi xử lý MIPS

1.1 Lịch sử phát triển

MIPS viết tắt của Microprocessor without Interlocked Pipeline Stages, là kiến trúc bộ tập

lệnh RISC phát triển bởi MIPS Technologies [1].

Bộ xử lý MIPS đầu tiên được nghiên cứu vào năm 1981 bởi một nhóm các nhà nghiên cứu

thuộc đại học Stanford do John L. Hennessy đứng đầu, với mục đich 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 (pipeline instructions),

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ệnh trướ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 rảnh rỗi của CPU khi thực

hiện liên tiếp các câu lệnh.

Khó khăn trong quá trình tìm hiểu thiết kế: theo phương pháp đường ống lệnh nó

yêu cầu một khóa đồng bộ (interlocks) được cài đặt để chắc chắn rằng các câu lệnh

chiếm nhiều chu kì đồng hồ để thực hiện sẽ dừng đường ống lại để nạp nhiều dữ

liệu hơn. Những khóa đồng bộ này cần một thời gian lớn để cài đặt và được cho là

rào cản chính trong việc tăng tốc độ xử lí trong tương lai.

Yêu cầu đặt ra trong quá trình thiết kế: yêu cầu tất cả các câu lệnh phải được hoàn

thành trong 1 chu kì xung nhịp nhờ thế lạo bỏ được sự cần thiết của khóa đồng bộ.

Thiết kế này đã loại bỏ được một số câu lệnh hữu dụng, đáng kể nhất là các lệnh

nhân, 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 lên rõ rệt vì các vi xử lý có thể chạy ở xung nhịp lớn hơn rất nhiều.

Đến 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

2

Page 4: Kiem chung vi_mach_report_update

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

1.2 Các sản phẩm đã có trên thị trường (Các công trình bài báo

nghiên cứu đã có và có liên quan)

Các thế hệ MIPS khởi đầu là kiến trúc 32 bit sau mở rộng ra 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.

Các dòng vi xử lý MIPS thương mại đã được 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 32 bit,

nhưng không có thanh ghi mã điều kiện. R2000 cũng hỗ trợ tới 4 bộ xử lý, một

trong số đó đảm nhiệm việc xử lý các ngoại lệ và bẫy trong khi ba chiếc còn lại sử

dụng cho các mục đích khác. Điều này được hỗ trợ trong R2010 FTU - bộ xử lý có

32 thanh ghi 32 bit có thể được sử dụng như là 16 thanh ghi 64 bit cho kết quả

chính xác gấp đôi.

R3000

Theo sau R2000 vào năm 1998, nó bổ sung thêm 32kB Cache (và sớm được tăng

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 - một tính năng phổ biến của

CPUs kỷ nguyên này. R3000 trở thành thiết kế MIPS đầu tiên thành công trong

lĩnh vực thương mại. R3000A được sử dụng cực kỳ thành công trong các máy

Sony PlayStation, chạy với tốc độ 40 MHz, truyền thông tin ở tốc độ 32 câu lệnh

trong 1 giây. R3000 cũng đi kèm với R3100 FTU trong cùng một chip đơn. Các

hãng khác cũng tham gia sản xuất như Pacemips với R3400, IDT với R3500.

R3900 của Toshiba là chíp đầu tiên dạng SoC (System on a Chip) được

sử dụng trong các máy tính cá nhân cầm tay sử dụng hệ điều hành Windows CE.

R4000

3

Page 5: Kiem chung vi_mach_report_update

Được đưa ra vào năm 1991, mở rộng tập lệnh MIPS để hỗ trợ đầy đủ kiến trúc

64 bit, chuyển FTU vào main để tạo ra một hệ thống chip đơn lẻ (Single-chip

system), xử lý với tốc độ lên tới 100Mhz, tuy nhiên để đạt được tốc độ này bộ

nhớ đệm phải bị giảm xuống còn 8kB và cần 3 chu kỳ để truy cập. Tần số xử lý

cao đạt được nhờ việclưu trữ thông qua công nghệ đường ống sâu (deep pipelining

– hay còn gọi là super-pipelining tại thời điểm đó). 1993 R4400 xuất hiện với 16kB

cache, bộ xử lý 64 bit lớn và 1 bộ điều khiển cache mở rộng lên tới 1MB (cahe

level 2). Ngoài ra còn các họ R4200, R4300, VR4300, R4300i, R4600 “Orion”,

R4700 “Orion”, R5650, R5000, R5000FTU, RM7000, RM9000...Các bộ xử lý

này được sử dụng rất rộng rãi : Các máy Nitendo 64, Cisco routers, WebTV set-top

Box (Hiện nay là Micrisoft TV)…

R8000 (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 mở rộng tới 6 chip, hỗ trợ 4MB cache mở

rộng.

R10000 (1995)

Là một thiết kế chip đơn lẻ, chạy ở tốc độ cao hơn R8000, có 32kB cache chính cho

các câu lệnh và dữ liệu. Các thiết kế tiếp theo của R1000 là R12000 và R14000 với

hỗ trợ DDR SRAM trong cache và tốc độ lên tới 200 MHz. Ngoài ra còn các thiết

kế R16000, R16000A, R6000.

1.3 Nguyên tắc thiết kế bộ MIPS

Tính đơn giản quan trọng hơn tính quy tắc (Simplicity favors regularity)

− Chỉ thị kích thước cố định(32 bit)

− Ít định dạng chỉ thị (3 loại định dạng)

− Mã lệnh ở vị trí cố định(6 bit đầu)

Nhỏ hơn thì nhanh hơn

− Số chỉ thị giới hạn

− Số thanh ghi giới hạn

− Số chế độ địa chỉ giới hạn

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

4

Page 6: Kiem chung vi_mach_report_update

Thiết kế tốt đòi hỏi sự thỏa hiệp

− 3 loại định dạng chỉ thị [1]:

+ R-chỉ thị thanh ghi: 2 toán hạng nguồn thanh ghi, 1 toán hạng

đích thanh ghi.

+ I-chỉ thị trực tiếp: 1 toán hạng nguồn thanh ghi, 1 toán hạng

nguồn trực tiếp, 1 toán hạng đích thanh ghi.

+ J-chỉ thị nhảy: 1 toán hạng nguồn trực tiếp.

Hình 3.1 Ba định dạng chỉ thị lệnh

1.4 Một số lệnh sử dụng trong MIPS

Sau đây là các lệnh được sử dụng trong MIPS 32 bits[2]:

Bảng 3.1 Lệnh của MIPS 32 bits

5

Page 7: Kiem chung vi_mach_report_update

1.5 Phân loại MIPS

1.5.1. Thiết kế đơn xung nhịp

Là thiết kế mà các pha thực hiện: nạp, giải mã and thực hiện, ghi của mỗi lệnh trong một

chu kỳ đồng hồ [3]:

Hình 3.2 Thiết kế đơn xung nhịp

Ưu điểm: Đơn giản và dễ hiểu. Nhược điểm:

− Sử dụng chu kỳ đồng hồ không hiệu quả – chu kỳ đồng hồ được đặt theo lệnh chậm nhất.

Các lệnh phức tạp như lệnh nhân dấu phẩy động: Tốn diện tích thiết kế vì cần nhân đôi

một số khối chức năng (VD: bộ cộng) vì chúng không thể được chia sẻ trong cùng 1 chu

kỳ đồng hồ.

1.5.2. Thiết kế đa xung nhịp

Là thiết kế mà chia lệnh thành các pha thực hiện: IF, ID, EX, MEM, WB. Mỗi pha thực

hiện trong 1 chu kỳ xung nhịp [4].

6

Page 8: Kiem chung vi_mach_report_update

Hình 3.3 Thiết kế đa xung nhịp

Ưu điểm:− 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. 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.

1.5.3. Thiết kế pipeline

Khác với thiết kế đơn xung nhịp khi các lệnh đều được thực hiện xong trong một

chu kì máy, thiết kế pipeline chia một câu lệnh ra thành 5 bước (steps) [5]:

7

Page 9: Kiem chung vi_mach_report_update

Hình 3.4 Các bước thực hiện lệnh

− Nạp lệnh và cập nhập giá trị PC (Instruction Fetch – IF)− Đọc thanh ghi và giải mã lệnh ( Intruction Decode – ID)− Thực hiện lệnhR, tính địa chỉ bộ nhớ(Execution – EX)− Đọc hoặc ghi dữ liệu trên bộ nhớ dữ liệu (Memory access –MEM) − Ghi kết quả vào tệp thanh ghi (Write back – WBCâu lệnh sau không cần đợi câu lệnh trước hoàn tất mới bắt đầu thực hiện mà mỗi step sẽ

được thực hiện liên tiếp, do đó cải thiện đáng kể về tốc độ thực hiện các chương trình:

Hình 3.5 Chu trình thực hiện lệnh

Dưới đây là sơ đồ kiến trúc MIPS khi thực hiện theo pipeline:

Hình 3.6 Sơ đồ kiến trúc MIPS pipeline

Các bước thực hiện một câu lệnh:

8

Page 10: Kiem chung vi_mach_report_update

Đọc lệnh từ bộ nhớ ( Instruction Fetch – IF):− Sử dụng địa chỉ lưu trong thanh ghi PC để giải mã ra mã máy của câu lệnh tiếp

theo và lưu vào thanh ghi trung gian IF/ID.− Giá trị PC được cộng thêm 4 và lưu vào thanh ghi trung gian IF/ID.

Giải mã lệnh và đọc các thanh ghi (Intruction Decode – ID):− Sử dụng mã máy của câu lệnh lưu trong thanh ghi IF/ID làm đầu vào cho khối

Regfile.− Khối Control sử dụng phần opcode của mã máy của câu lệnh để giải mã thành các

tín hiệu điều khiển, ngoài tín hiệu SignEx được sử dụng cho khối mở rộng, các tín hiệu khác được lưu vào thanh ghi trung gian ID/EX.

− Đọc các thanh ghi Rs, Rt từ bộ thanh ghi và lưu vào thanh ghi trung gianID/EX Khối mở rộng sử dụng tín hiệu SignEx từ khối Control để mở rộng dấu hay

mở rộng zero của 16 bit thấp của mã máy thành 32 bit và lưu vào thanh ghi ID/EX.

− Địa chỉ các thanh ghi Rs, Rt, Rd được lưu vào thanh ghi ID/EX. Tính toán kết quả của câu lệnh hoặc địa chỉ (Execution – EX):

− Khối ALU sử dụng các đầu vào đã được lưu trong thanh ghi ID/EX để tính toán và lưu kết quả vào thanh ghi trung gian EX/MEM.

− Một bộ mux được dùng để lựa chọn thanh ghi đích từ 2 thanh ghi Rt, Rd và lưu địa chỉ vào thanh ghi EX/MEM.

− Địa chỉ mới của PC sau câu lệnh BNE cũng được tính toán trong khối này. − Một số bộ mux được dùng để lựa chọn giá trị mới cho PC từ các câu lệnh rẽ

nhánh BNE, J, JR.− Các tín hiệu điều khiển MemWrite, MemtoReg và RegWrite được lưu tiếp vào

thanh ghi EX/MEM. Đọc hoặc ghi dữ liệu trên bộ nhớ dữ liệu ( Memory access – MEM):

− Sử dụng kết quả tính toán từ khối ALU và tín hiệu điều khiển MemWrite từ thanh ghi EX/MEM để thực hiện đọc hoặc ghi vào bộ nhớ dữ liệu. Kết quả đọc ghi vào thanh ghi trung gian MEM/WB.

− Các giá trị đầu ra của ALU, địa chỉ thanh ghi đích cùng với 2 tín hiệu điều khiển MemtoReg và RegWrite được ghi lại vào thanh ghi MEM/WB

Ghi kết quả vào thanh ghi ( Write back – WB):− Sử dụng tín hiệu MemtoReg từ thanh ghi MEM/WB để lựa chọn dữ liệu cần ghi

vào thanh ghi.− Sử dụng địa chỉ thanh ghi đích và tín hiệu cho phép ghi RegWrite để thực hiện

công việc ghi dữ liệu vào bộ thanh ghi.

9

Page 11: Kiem chung vi_mach_report_update

1.6 Các ứng dụng của bộ xử lý MIPS

Kiến trúc MIPS được sử dụng rộng rãi trong các ứng dụng công nghiệp như DVD player,

Netwoking, camera số,…

DVD player (Pioneer DVR-57H)

Networking

3COM – 3102 Business IP Phone

3COM – 3106 Cordless Phone

10

Page 12: Kiem chung vi_mach_report_update

Canon EOS 450D

Sony playstation PSX (CPU Type: LSI/MIPS R3000A, Architecture: 32 bit,

Clockspeed 33,8 MHz)

Sony Playstation Portable ( CPU 333MHz MIPS R4000) [2]

11

Page 13: Kiem chung vi_mach_report_update

Phần 2. Phân tích và thực hiện kiểm chứngPhần này phân tích và phân chia các chức năng của sản phẩm từ đó lập ra kế hoạch thiết

kế, phát triển sản phẩm.

2.1 Lựa chọn phương pháp kiểm chứng

2.1.1. Tầm quan trọng của kiểm chứng thiết kế

Kiểm chứng vi mạch là quá trình tìm kiếm phát hiện lỗi trong thiết kế vi mạch.

Lỗi trong thiết kế vi mạch là sự sai khác trong hoạt động của thiết kế với yêu cầu kỹ thuật

đặt ra. Những lỗi này có thể xảy ra trong quá trình thiết kế, quá trình sản xuất vi mạch hoặc

quá trình sử dụng vi mạch trong hệ thống. Dù là lỗi xảy ra trong quá trình nào thì chi phí

để khắc phục cũng thường khá lớn do đó cần phát hiện sớm lỗi để tránh tốn nhiều thời

gian, công sức và tiền bạn để sửa lỗi.

2.1.2. Các loại kiểm chứng trong quy trình thiết kế vi mạch

Một số loại kiểm chứng thường dùng trong quy trình thiết kế vi mạch là kiểm chứng bằng

hình vẽ, kiểm chứng dùng mô phỏng và kiểm chứng hình thức.

Kiểm chứng mô phỏng Kiểm chứng hình thức

Kiểm chứng dựa trên xung nhịp. Các giá trị

đầu vào được đưa vào bản thiết kế hệ thống

và cho phép máy tính thực hiện việc tính

toán đầu ra

Kiểm chứng dùng các công thức, mô hình

toán học để mô hình hệ thống và chứng

minh tính hoạt động đúng của mạch.

Ưu điểm:

Trực quan với người sử dụng

Không quá khó để thiết lập hệ thống

mô phỏng vi mạch

Ưu điểm:

Khả năng tìm được lỗi cao hơn

Thời gian kiểm chứng có thể nhỏ

hơn

Độ bao phủ lớn hơn

Nhược điểm:

Độ bao phủ không cao

Tốn tài nguyên tính toán, mất nhiều

thời gian để mô phỏng hết các

trường hợp kiểm chứng cho vi mạch.

Tối ưu mạch ảnh hưởng lớn đến tốc

độ mô phỏng

Nhược điểm:

Khó hình dung và thiết lập mô hình

toán học cho mạch

Quy trình thiết lập mô hình toán học

mất nhiều thời gian

12

Page 14: Kiem chung vi_mach_report_update

Thông qua việc phân tích các phương pháp kiểm chứng, đồng thời dựa vào giới hạn thời

gian hoàn thành đề tài cũng như mức độ phức tạp của kiến trúc MIPS, nhóm sẽ tiến hành

thực hiện kiểm chứng bộ MIPS pipeline dùng phương pháp mô phỏng.

2.2 Mô hình kiểm chứng

Nguyên tắc cơ bản của kiểm chứng là tạo sự dư thừa nên nhóm quyết định tạo một dạng

triển khai khác của thiết kế, sau đó tiến hành so sánh hai dạng triển khai.

Phương hướng triển khai:

Xây dựng mô hình thiết kế MIPS Pipeline ở mức RTL dùng ngôn ngữ Verilog và

công cụ Quatus của Altera.

Xây dựng mô hình tính giá trị đúng của các phép toán dùng ngôn ngữ C/C++ và sử

dụng visual express 2010.

Mô phỏng hai mô hình đồng thời và so sánh kết quả.

2.3 Thực hiện thiết kế MIPS Pipeline

2.3.1. Yêu cầu thiết kế

Yêu cầu chức năng

Bộ xử lý MIPS 32 bit có khả năng thực hiện các lệnh cơ bản như các phép

toán số học (cộng, trừ, nhân …), truy cập bộ nhớ với hai chỉ thị (lw, sw),

lưu trữ, đọc và ghi dữ liệu …

Thực hiện bằng ngôn ngữ mô tả phần cứng VerilogHDL.

Giải quyết được các xung đột cơ bản trong MIPS Pipeline.

Yêu cầu phi chức năng

13

Page 15: Kiem chung vi_mach_report_update

Bộ xử lý MIPS sau khi được thiết kế không chỉ đạt những chức năng kĩ thuật mà

cần đạt yêu cầu phi chức năng như sau:

Dễ sử dụng trong việc mô phỏng

Đáp ứng được các câu lệnh cơ bản

Dễ dàng nâng cấp và sửa lỗi khi cần thiết.

Giá thành hợp lý

MIPS hoạt động ổn định và có độ tin cậy cao

Năng lượng tiêu thụ thấp

Tuy nhiên trong khuôn khổ của bài tập lớn này, chúng em chỉ dừng lại ở việc

nghiên cứu và mô tả kiến trúc của bộ xử lý MIPS, không đặt vấn đề giá thành

làm một tiêu chí đánh giá.

2.3.2. Sơ đồ thiết kế

Các thông số đầu vào và đầu ra của thiết kế:

C ngổ S bitố H ngướ Mô tả

IReady 1 Input Tín hiệu báo bộ nhớ lệnh sẵn

sàng gửi dữ liệu

IData 32 Input Mã lệnh được lấy từ bộ nhớ lệnh

DataIn 32 Input Dữ liệu được đọc ra từ bộ nhớ dữ

liệu

DReady 1 Input Tín hiệu điều khiển việc đọc dữ

14

Page 16: Kiem chung vi_mach_report_update

liệu vào từ bộ nhớ dữ liệu

IAddr 30 Output Địa chỉ lệnh trong bộ nhớ lệnh

cần thực thi

IRead 1 Output Tín hiệu điều khiển việc đọc địa

chỉ chứa lệnh cần thực thi trong

bộ nhớ lệnh

DRead 1 Output Tín hiệu điều khiển việc đọc từ

bộ nhớ dữ liệu

DAddr 30 Output Địa chỉ trong bộ nhớ dữ liệu cần

đọc/ghi dữ liệu

DWrite 4 Output Tín hiệu điều khiển việc ghi vào

bộ nhớ dữ liệu

DataOut 32 Output Dữ liệu được ghi vào bộ nhớ dữ

liệu

2.3.3. Thiết kế chi tiết từng khối

Trong phần này nhóm sẽ tập trung trình bày một số khối quan trọng trong kiến trúc MIPS

Pipeline

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

+) Tín hiệu ALUControl

Khối Register File :15

Page 17: Kiem chung vi_mach_report_update

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

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.

Khối SignExt :

16

Page 18: Kiem chung vi_mach_report_update

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ẽ:

Ở đ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.

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

17

Page 19: Kiem chung vi_mach_report_update

2.4 Thực hiện các phép toán trong MIPS dùng C++

Trong phần này nhóm sử dụng các phép toán có trong thư viện C để tính toán. Các

phép toán (Instruction) được sử dụng là : cộng, trừ, nhân, chia được mã hóa tương ứng với

các số từ 0 đến 3 và được sinh ngẫu nhiên trong file Instruction.txt, các toán hạng(Data)

cũng được sinh ra ngẫu nhiên trong file data.txt. Các giá trị trong hai file này cũng là đầu

vào cho quá trình mô phỏng mạch bằng techbench. Sau khi tính toán bằng các phép toán có

trong thư viện C, kết quả đầu ra sẽ được ghi vào file output.txt.

Hình bên dưới sẽ minh họa cho quá trình tính toán sử dụng thư viện C:

Kết quả so sánh giá trị đầu ra của hai kiểu tính toán sẽ kiểm chứng độ chính xác của việc thiết kết mạnh (verilog). Từ đó ta có thể phát hiện các lỗi (nếu có) trong quá trình thiết kế.

18

Page 20: Kiem chung vi_mach_report_update

Code C++:

#include<iostream>#include<stdio.h>#include<conio.h>#include <cstdlib>#include<ctime>

using namespace std;long add (long a, long b);long sub (long a, long b);long mul (long a, long b);long divi (long a, long b);int main(){

int A[100],B[100],KQ[100];long i,j ,a,b ;int test_case;srand(time(0));

//Lấ*y giá trị toán hạng ngấ/u nhiên rồ2i đưa vào file Toanhang.txtfreopen("instruction.txt","w",stdout);for (int n=1;n<=50;n++){

int x=rand()%4;cout<<x<<" ";}fclose(stdout);

//Lấ*y hai toán tưA ngấ/u nhiên rồ2i đưa vào file đấ2u vào input.txtfreopen("data.txt","w",stdout);for (int m=1;m<=50;m++){

//srand(time(0));a = rand();b = rand();cout<<a<<" "<<b<<endl ;

}fclose(stdout);

//Cho toán hạng vào maAng Afreopen("data.txt","r",stdin);for ( i=1;i<=50;i++){

cin>>A[i*2-1]>>A[i*2];

}fclose(stdin);

//Cho toán tưA vào maAg Bfreopen("instruction.txt","r",stdin);for ( j=1;j<=50;j++)

cin>>B[j];fclose(stdin);

for (test_case=1;test_case<=50;test_case++){

switch (B[test_case]){

19

Page 21: Kiem chung vi_mach_report_update

case 0: {

KQ[test_case]=add(A[test_case*2-1],A[test_case*2]);

break;}

case 1: {

KQ[test_case]=sub(A[test_case*2-1],A[test_case*2]);break;

}case 2:{

KQ[test_case]=mul(A[test_case*2-1],A[test_case*2]);break; }

case 3:{

KQ[test_case]=divi(A[test_case*2-1],A[test_case*2]);break; }

default: cout<< "ma lenh sai";}

}

// ghi kê*t quaA vào file đấ2u ra output.txtfreopen("output.txt","w",stdout);for (int k=1;k<=50;k++)

cout<<KQ[k]<<" ";fclose(stdout);

}long add(long a,long b){

return a+b;}

long sub (long a,long b){

return a-b;}long mul(long a,long b){

return a*b;}long divi ( long a, long b){

return a/b;}

20

Page 22: Kiem chung vi_mach_report_update

Phần 3. Kết quả tổng hợp và mô phỏngPhần này trình bày về các phương án kỹ thuật được sử dụng để thiết kế sản phẩm.

Có thể là lựa chọn các linh kiện phần cứng cho mạch.

Có thể là lựa chọn thuật toán thực hiện một chức năng mạch.

Có thể là lựa chọn kiến trúc mạch

3.1 Sơ đồ khối của sản phẩm

Phần này làm rõ các khối thực hiện chức năng trong mạch, kết nối và giao tiếp giữa các

khối. Phần này phải làm rõ được tín hiệu vào và ra khỏi từng khối.

3.2 Thuật toán, linh kiện, kiến trúc mạch

Phần này làm rõ việc lựa chọn thuật toán hay linh kiện phần cứng hay kiến trúc mạch để

thực hiện các khối chức năng

Mỗi khối chức năng nên nêu ra ít nhất 2 phương án thực hiện và lựa chọn dựa trên các tiêu

chí kỹ thuật định lượng.

21

Page 23: Kiem chung vi_mach_report_update

Phần 4. Đánh giá kết quả và hướng phát triểnPhần này mô tả việc thiết kế cụ thể từng khối chức năng.

Nếu là mạch phần cứng thì trình bày sơ đồ nguyên lý, mô phỏng sơ đồ nguyên lý của

mạch.

Nếu là phần mềm thì trình bày lưu đồ thuật toán, cấu trúc dữ liệu, khai báo các hàm.

22

Page 24: Kiem chung vi_mach_report_update

[1] http://en.wikipedia.org/wiki/MIPS_instruction_set, truy cập ngày 25/01/2015.

[2] http://en.wikipedia.org/wiki/PlayStation_Portable, truy cập ngày 25/01/2015.

23