Đè tài Sử dụng ngôn ngữ HDL mô phỏng MIPS PIPELINE

Mục lục

Phần 1: Giới thiệu ý tưởng và xác định chỉ tiêu kỹ thuật của kiến trúc MIPS Pepiline 2

1.1 Phân tích nhu cầu và đặc điểm nổi bật trong kiến trúc MIPS Pipeline 2

1.2.Sơ đồ cấu trúc bản thiết kế 5

Phần 2.Phân tích cấu trúc 8

2.1.Chức năng khối Instruction Memory 8

2.2.Chức năng khối Register File 9

2.3.Chức năng khối ALU và ALU control 10

2.4.Chức năng khối Control Unit 11

2.5.Chức năng khối Data Memory 12

2.6.Kỹ thuật pipeline và xử lý xung đột 12

2.7.Các khối chức năng khác 17

Phần 3. So sánh đánh giá thiết kế sử dụng kỹ thuật pipeline với các thiết kế khác 18

Phần 4.Thiết kế mạch 22

Kết quả tổng hợp và mô phỏng 35

Tài liệu tham khảo 36

 

docx36 trang | Chia sẻ: Thành Đồng | Ngày: 05/09/2024 | Lượt xem: 876 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đè tài Sử dụng ngôn ngữ HDL mô phỏng MIPS PIPELINE, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
/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. Phần 2.Phân tích cấu trúc Phân chia chức năng Trong quá trình thiết kế, MIPS được chia thành các khối, cụ thể chức năng và phân chia các khối như sau: 2.1.Chức năng khối Instruction Memory Dùng để lưu trữ lệnh dưới dạng mã máy (nhị phân). Kích thước mỗi lệnh khi dịch ra mã máy là 32 bits, tốn 32 bits để lưu trữ. Đầu vào bộ nhớ lệnh là địa chỉ lệnh cần lấy, đầu ra là mã máy của câu lệnh tương ứng lấy được. Hình 2.2: Khối Instruction Memory Khối bộ nhớ lệnh Instruction Mem chỉ có một cổng đọc , khối này nhận một đầu vào địa chỉ 32 bit A và đầu ra là dữ liệu RD 32 bit (dữ liệu ở đây là lệnh của chương trình). Khối MUX 2-1, thực hiện chức năng chon tín hiệu đầu vào cho bộ đếm chương trình PC Khối tăng PC, để đếm địa chỉ trong quá trình nạp lệnh Đầu vào của bộ nhớ lệnh chính là đầu ra của bộ đếm chương trình Program Counter PC. Bộ đếm chương trình là một thanh ghi 32 bit, đầu ra của khối này PCF trỏ tới lệnh hiện tại. Đầu vào PC’ là địa chỉ của lệnh tiếp theo cần thực thi. Khối Data Mem có một cổng đọc hoặc ghi. Nếu tín hiệu cho phép ghi WE=1 thì dữ liệu WD sẽ được viết vào bộ nhớ dữ liệu tại địa chỉ tương ứng A tại sườn lên của xung clock. Nếu WE =0 dữ liệu sẽ được đọc ra RD. 2.2.Chức năng khối Register File Hình 2.3: Register File Tệp thanh ghi fie gồm 32 thanh ghi, mỗi thanh ghi 32 bit. Khối này có 2 cổng đọc và 1 cổng ghi. Hai cổng đọc nhận các đầu vào địa chỉ 5 bit (ứng với 32 thanh ghi) A1, A2. Đầu ra là dữ liệu RD1, RD2 tương ứng với các đầu vào địa chỉ A1, A2. Cổng ghi nhận đầu vào địa chỉ A3 (5 bit ) và đầu vào của dữ liệu cần ghi 32 bit WD3. Ngoài ra còn có các tín hiệu clock và đầu vào cho phép ghi Write Enable WE. Nếu tín hiệu WE ở mức cao 1, dữ liệu WD3 sẽ được ghi vào trong thanh ghi file tương ứng tại sườn lên của xung clock. 2.3.Chức năng khối ALU và ALU control Hình 2.4: ALU Khối ALU có 2 đầu vào là các toán hạng SrcA và SrcB 32 bit, một đầu ra ALUResult 32 bit. Ngoài ra ALU còn có một đầu vào điều khiển ALUControl 4 bit để xác định các phép toán cần thực hiện. ALUControl ALU Operation 0000 AND 0001 OR 0010 ADD 0011 XOR 0100 NOR 0101 Not use 0110 SUB 0111 SLT 1000 SLL 1001 SRL 1010 SRA 10111111 Not use Hình 2.5: Datapath khi thực hiện lệnh loại R ALU nhận dữ liệu từ các đầu ra của thanh ghi file hoặc ngay trong mã lệnh. 2.4.Chức năng khối Control Unit Hình 2.6: Control Unit Khối điều khiển CU tính toán các tín hiệu điều khiển dựa trên các trường opcode Instr[31-26] và funct Instr[5-0] của lệnh. Hầu hết các tín hiệu điều khiển nằm ở trường opcode, tuy nhiên các lệnh loại R phải sử dụng thêm trường funct để xác định các phép toán ALU. Như trên hình vẽ, khối Control Unit tính toán hầu hết các tín hiệu điều khiển như:MemtoRegD,MemWriteD,BranchD,ALUSrcD,RegDstD,RegWriteD,MemReadD, ALUSelectShilfD, ALUControlD. Tất cả các tín hiệu điều khiển này được đưa vào thanh ghi trạng thái. Khối ALU Decoder sử dụng trường Funct[5-0] và 2 bit Op để tính toán ALUControl. Mã hóa ALUOp: ALUOp Ý nghĩa 000 Add 001 Subtract 010 Look at func field 011 And 100 Or 101 Xor 110 Not use 111 Set less than 2.5.Chức năng khối Data Memory Hình 2.7: Data Memory 2.6.Kỹ thuật pipeline và xử lý xung đột Hình 2.8.Hazard unit Xung đột cấu trúc Nguyên nhân xảy ra xung đột: Do các lệnh được thực hiện đồng thời, tại cùng 1 chu kì, hai lệnh khác nhau có thể cùng truy cập đến 1 tài nguyên dẫn đến xung đột. Trong kiến trúc von Neumann, lệnh và dữ liệu cùng nằm trên 1 bộ nhớ, khi có hai yêu cầu đọc dữ liệu và đọc lệnh sẽ dẫn đến xung đột. Xử lý xung đột: Thêm tài nguyên phần cứng. Với kiến trúc Havard lệnh và dữ liệu được chia thành hai bộ nhớ và bus khác nhau, do vậy sẽ không xảy ra xung đột cấu trúc. Xung đột dữ liệu (RAW: read after write) Nguyên nhân Khi toán hạng của lệnh sau phụ thuộc vào lệnh trước chưa được hoàn thành sẽ gây ra việc đọc sai dữ liệu, và gọi là xung đột dữ liệu. Hình 2.9: Xung đột điều khiển Lệnh add sẽ công nội dung của thanh ghi $s2 và $s3 vào thanh ghi $s0, kết quả được hoàn thành và lưu vào thanh ghi ở chu kì 5, nhưng tại chu kì 3, lệnh and đã dung nội dung $s0 làm toán hạng, do vậy kết quả sẽ không như mong muốn. Tương tự đối với lệnh or. Giải quyết xung đột: Có 2 cách để giải quyết loại xung đột này là chờ dữ liệu tính xong rồi thực hiện lệnh kế tiếp, hoặc chuyển dữ liệu sau khi được tính toán ở giai đoạn MEM hoặc WB về giai đoạn EX. Phương pháp chờ: phần cứng sẽ phát hiện sự phụ thuộc dữ liệu và dừng những lệnh nào có dữ liệu phụ thuộc vào lệnh trước đó cho tới khi dữ liệu được sẵn sàng. Hình 2.10.Phương pháp dừng & chờ Phương pháp chuyển tiếp dữ liệu: các lệnh thường được tính toán ở giai đoạn EX rồi chuyển đến các giai đoạn MEM và WB, do vậy ta có thể chuyển dữ liệu trờ về giai đoạn EX cho các lệnh phụ thuộc dữ liệu phía sau. Hình 2.11.Chuyển tiếp dữ liệu Giải quyết xung đột cho lệnh lw Lệnh lw chỉ tính toán địa chỉ ở giai đoạn đoạn EX, dữ liệu thực sự chỉ có được ở giai đoạn MEM, do vậy chúng ta không thể chuyển tiếp từ giai đoạn MEM. Yêu cầu dừng chương trình cần được thực hiện. Hình 2.12: Dừng chương trình Xung đột điều khiển Hình 2.13.Xung đột điều khiển a. Nguyên nhân Khi thực hiện các lệnh điều khiển chương trình như bne, beq,jr,j điều kiện nhảy được tính toán ở giai đoạn EX, nếu điều kiện đúng chương trình sẽ nhảy tới địa chỉ cho trước, không may thay, các lệnh kế tiếp đã được nạp vào các giai đoạn IF, ID và chương trình sẽ làm việc không như mong muốn. b. Giải quyết xung đột Giải quyết xung đột bằng phương pháp chờ. VD: xét đoạn chương trình beq $t1, $t2, 40 and $t0, $s0, $s1 or $t1, $s4, $s0 sub $t2, $s0, $s5 Lệnh beq được tính toán và quyết định nhảy ở giai đoạn EX,các lệnh and,or,sub sẽ phải chờ cho tới khi lệnh beq tính toán xong điều kiện, nếu điều kiện nhảy không đúng thì chúng mới được nạp vào đường ống. Việc chờ tính toán điều khiển làm mất 3chu kì, do vậy sẽ làm tăng CPI. Giải quyết xung đột bằng cách tính toán điều kiện nhảy sớm Chúng ta có thể tính toán điệu kiện nhảy sớm ở giai đoạn ID, việc quyết định nhảy sớm sẽ làm giảm thời gian chờ và tăng hiệu suất. 2.7.Các khối chức năng khác Khối này thực hiện mở rộng bit từ 16bit-> 32bit Khối dịch trái 2 bit Phần 3. So sánh đánh giá thiết kế sử dụng kỹ thuật pipeline với các thiết kế khác So sánh, đánh giá các thiết kế đơn xung nhịp, đa xung nhịp, kỹ thuật pipeline dựa trên các tiêu chí về tốc độ xung đồng hồ, hiệu quả sử dụng chu kỳ đồng hồ, hiệu năng,diện tích thiết kế và lưu lượng của bộ xử lý: Thiết kế đơn xung nhịp (Single Cycle MIPS): Ư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ả vì chu kì đồng hồ được đặt theo lệnh chậm nhất. Tốn diện tích thiết kế vì cần nhân đôi một số khối chức năng (Ví dụ: bộ cộng) vì chúng không thể được chia sẻ trong cùng một chu kì động hồ. Hình 3.14. Biểu đồ thời gian thiết kế đơn xung nhịp Hình 3.15.Datapath thiết kế đơn xung nhịp Thiết kế đa xung nhịp (Multi-Cycle MIPS): Chia lệnh thành các phần thực hiện IF, ID, EX, MEM, WB. Mỗi pha thực hiện trong 1 chu kì xung nhịp. Ưu điểm: Thời gian thực hiện 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. Hình 3.16. Datapath thiết kế đa xung nhịp Thiết kế MIPS dựa trên kỹ thuật pipeline Hình 3.17. Sơ đồ khối thiết kế MIPS pipeline Thiết kế MIPS dựa trên kỹ thuật pipeline (Kỹ thuật đường ống) là phương pháp kết hợp ưu điểm của hai phương pháp trên: Quy tắc: Chia việc thực hiện lệnh thành 5 giai đoạn, tại một thời điêm bất kỳ thực hiện tất cả các giai đoạn nhưng của các lệnh khác nhau. Thực hiện lệnh tiếp theo trước khi lệnh hiện tại kết thúc Chu kỳ đồng hồ quyết định bởi giai đoạn thực hiện lệnh chậm nhất Với một số lệnh có chu kỳ lãng phí nhưng vẫn phải thêm để đảm bảo pipeline Ưu điểm: Cải thiện thông lượng lượng – tổng số công việc hoàn thành trong 1 khoảng thời gian Dễ triển khai: Các lệnh có cùng độ dài Ít định dạng lệnh, các định dạng lệnh có tính đối xứng Chỉ truy cập bộ nhớ bằng lệnh lw và sw Mỗi lệnh chỉ ghi lớn nhất một kết quả ở hai giai đoạn cuối (MEM hoặc WB) Toán hạnh được sắp xếp trong bộ nhớ sao cho một lệnh dịch chuyển dữ liệu chỉ cần một lần truy cập bộ nhớ Hình 3.18 So sánh biểu đồ thời gian của thiết kế đơn xung và pipeline Phần 4.Thiết kế mạch Bộ đếm chương trình PC Hình 4.19. Thanh ghi bộ đếm chương trình Thanh ghi bộ đếm chương trình chứa địa chỉ của lệnh cần thực thi. PC được cập nhật ở mọi chu kỳ mà không cần tín hiệu điều khiển PC. Đầu vào PC’: 32 bit, đây chính là địa chỉ của lệnh tiếp theo cần thực hiện trong bộ nhớ lệnh. Đầu ra PC: 32 bit, trỏ tới lệnh hiện tại của chương trình trong bộ nhớ lệnh. Ngoài ra khối bộ đếm chương trình này còn có tín hiệu đầu vào clock. Hình 4.20. Quá trình xử lí lệnh Bộ nhớ lệnh Hình 4.21. Khối Intruction Memory Bộ nhớ lệnh lưu trữ chương trình thực thi dưới dạng mã máy. Khối bộ nhớ lệnh gồm có một cổng đọc. Đầu vào: địa chỉ 32 bit nơi chứa lệnh cần thực thi. Đầu ra: lệnh cần thực thi tương ứng với địa chỉ đầu vào. Register File Hình 4.22.Tệp thanh ghi Tệp thanh ghi file gồm 32 thanh ghi như sau: Số thanh ghi Tên quy ước Chức năng $0 $zero Luôn có giá trị bằng 0 $1 $at Thanh ghi giành riêng cho các lệnh giả $2-$3 $v0, $v1 Chứa giá trị trả về của hàm $4-$7 $a0, $a3 Chứa các tham số cho hàm $8-$15 $t0-$t7 Chứa dữ liệu tạm thời $16-$23 $s0-$s7 Thanh ghi lưu trữ, dành riêng cho các chương trình con $24-$25 $t8-$t9 Thanh ghi tạm thời $26-$27 $k0-$k1 Dành riêng cho kernel, không được sử dụng $28 $gp Con trỏ toàn cục $29 $sp Con trỏ stack $30 $fp Con trỏ khung $31 $ra Chứa địa chỉ trả về Khối thanh ghi file gồm 2 cổng đọc và một cổng ghi. Các cổng đọc: A1, A2 là các đầu vào địa chỉ 5 bit (32 thanh ghi) RD1, RD2 là các đầu ra dữ liệu tương ứng với các địa chỉ đầu vào tương ứng. Cổng ghi: A3: đầu vào địa chỉ của thanh ghi đích cần ghi WD3: đầu vào dữ liệu cần ghi WE3: tín hiệu cho phép ghi. Nếu WE3 =1 thì dữ liệu sẽ được ghi vào thanh ghi tại sườn lên của xung clock Bộ nhớ dữ liệu Hình 4.23.Bộ nhớ dữ liệu Khối bộ nhớ dữ liệu gồm có một cổng dành cho việc đọc hoặc ghi dữ liệu. Đọc và ghi dự liệu có chung đầu vào địa chỉ. Ghi dữ liệu: Nếu tín hiệu cho phép ghi WE=1 thì dữ liệu được ghi vào trong bộ nhớ dữ liệu tại sườn lên của xung clock Đọc dữ liệu: Nếu WE=0 thì dữ liệu được được đọc ra chân RD Xây dựng Datapath cho lệnh loại R Thanh ghi bộ đếm chương trình có chứa địa chỉ của lệnh sẽ được thực thi. Giai đoạn đầu tiên trong chu trình thực hiện là đọc lệnh từ bộ nhớ lệnh. Vì vậy PC phải được kết nối với đầu vào địa chỉ của bộ nhớ lệnh. Hình 4.24. Kết nối Datapath cho lệnh R Mã lệnh đầu tiên Instr 32 bit sẽ được lấy ra. Giai đoạn tiếp theo sẽ phụ thuộc vào lệnh cụ thể. Đầu tiên chúng ta sẽ xây dựng Datapath cho lệnh lw sau đó sẽ bổ sung và tổng quát hóa cho các lệnh còn lại. Đối với lệnh lw, bước đầu tiên là đọc thanh ghi nguồn là thanh ghi chứa địa chỉ cơ sở của dữ liệu cần đọc trong bộ nhớ. Từ trường rs Instr[25-21] này ta sẽ xác định được thanh ghi. Các bit địa chỉ thanh ghi nguồn này được đưa vào đầu vào địa chỉ A1 của tệp thanh ghi. Giá trị trong thanh ghi được đọc ra RD1. Lệnh lw có một địa chỉ offset, địa chỉ này được lưu ngay trong lệnh Instr[15-0]. Giá trị offset này là một hằng số 16 bit vì vậy ta phải mở rộng dấu lên 32 bit SignImm Hình 4.25. Xây dựng khối mở rộng bit Sau bước này bộ xử lý cần tính địa chỉ dữ liệu cần nạp trong bộ nhớ dữ liệu bằng cách cộng địa chỉ cơ sở và địa chỉ offset. Hình 4.26. Tính toán địa chỉ bộ nhớ Khối ALU nhận hai toán hạng đầu vào SrcA và SrcB. SrcA là giá trị đọc được từ thanh ghi, SrcB là giá trị sau khi qua khối mở rộng dấu từ 16 bits thành 32 bits. Giá trị địa chỉ offset đã được mở rộng dấu. ALU thực hiện nhiều phép toán số học và logic vì vậy cần có một tín hiệu điều khiển ALUControl 3 bit để xác định phép toán cần thực hiện. Khối ALU có 2 đầu ra là ALUResult và Zero. Đối với lệnh cộng đầu vào điều khiển ALUControl=010. Đầu ra ALUResult nối vào đầu vào địa chỉ của bộ nhớ dữ liệu. Dữ liệu từ bộ nhớ dữ liệu sẽ được đọc ra bus dữ liệu ReadData, sau đó được ghi trở lại thanh ghiđích vào cuối chu kỳ clock. Hình 4.27. Xác định đường dữ liệu quay lại về Register File Thanh ghi đích cho lệnh lw được xác định qua trường rt Instr[20-16] và được kết nối với địa chỉ đầu vào của cổng ghi A3 của tệp thanh ghi. Tín hiệu điều khiển RegWrite được nối với đầu vào WE3, tín hiệu này có mức cao trong quá trình ghi do đó dữ liệu được ghi vào thanh ghi. Việc ghi dữ liệu diễn ra vào cuối sườn lên của xung clock. Trong khi lệnh lw đang được thực thi bộ xử lý sẽ tính toán địa chỉ của lệnh tiếp theo PC’. Trongkiến trúc MIPS, mỗi lệnh 32 bit vì vậy địa chỉ lệnh tiếp theo sẽ là PC + 4. Địa chỉ của lện tiếp theo được ghi vào thanh ghi PC tại sườn lên của xung clock tiếp theo. Hình 4.28. Xác định địa chỉ của lệnh tiếp theo trong PC Tiếp theo, ta mở rộng thêm Datapath để thực hiện lệnh sw. Cả 2 lệnh lw và sw đều đọc địa chỉ cơ sở từ cổng 1 của tệp thanh ghi và có chứa trường offset nằm ngay trong lệnh. ALU cộng địa chỉ cơ sở và địa chỉ offset để tìm địa chỉ bộ nhớ. Tuy nhiên lệnh sw đọc địa chỉ từ tệp thanh ghi và ghi vào trong bộ nhớ dữ liệu. Hình 4.29. Đường dữ liệu cho lệnh sw Thanh ghi cần đọc được xác định trong trường rt Instr[20-16]. Instr[20-16] được kết nối với đầu vào địa chỉ A2, cổng 2 của tệp thanh ghi. RD2 là giá trị thanh ghi tương ứng với địa chỉ A2. RD2 được đưa vào đầu vào WD của bộ nhớ dữ liệu. Đầu vào cho phép ghi WE được điều khiển bởi MemWrite. Với lệnh sw, MemWrite=1 và dữ liệu được ghi vào bộ nhớ, ALUControl =010 để thực hiện phép cộng địa chỉ cơ sở và địa chỉ offset. Ngoài ra RegWrite =0 để ngăn việc ghi vào tệp thanh ghi vì dữ liệu vẫn được đọc ra từ bộ nhớ dữ liệu. Tiếp theo mở rộng Datapath cho các lệnh loại R như add, sub, and, or và slt. Tất cả các lệnh này đều đọc 2 toán hạng từ tệp thanh ghi, tính toán giá trị bằng ALU và ghi lại kết quả vào thanh ghi thứ 3 trong tệp thanh ghi. Chỉ có sự khác biệt duy nhất là các lệnh này thực hiện c

Các file đính kèm theo tài liệu này:

  • docxde_tai_su_dung_ngon_ngu_hdl_mo_phong_mips_pipeline.docx