1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế datapath cho bộ xử lý RISCV (code ở link trong báo cáo)

58 131 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mô Phỏng Đường Dữ Liệu Bộ Xử Lý RISC-V Cho Các Chương Trình Viết Bằng Ngôn Ngữ C
Tác giả Nguyễn Văn Toán
Người hướng dẫn TS. Tạ Thị Kim Huệ
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kiến Trúc Máy Tính
Thể loại Đồ Án Môn Học
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 58
Dung lượng 2 MB

Cấu trúc

  • I. DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT (8)
  • II. DANH MỤC HÌNH VẼ (0)
  • III. DANH MỤC BẢNG BIỂU (11)
  • IV. TÓM TẮT ĐỒ ÁN (12)
  • CHƯƠNG 1. CƠ SỞ LÝ THUYẾT (14)
    • 1.1 Giới thiệu RISC-V (14)
    • 1.2 Các bước thực hiện (15)
    • 1.3 Datapath (16)
      • 1.3.1 Xây dựng đường dữ liệu (17)
      • 1.3.2 Lệnh loại R (19)
      • 1.3.3 Lệnh loại I (23)
      • 1.3.4 Lệnh loại B (25)
      • 1.3.5 Kết hợp các loại lệnh trong datapath (26)
      • 1.3.6 Thực hiện một chương trình trên bộ xử lý RISC-V (28)
      • 1.3.7 RV32 Datapath (32)
    • 1.4 Datapath cho các định dạng lệnh (37)
      • 1.4.1 Datapath cho lệnh loại R (37)
      • 1.4.2 Datapath cho lệnh loại I (39)
      • 1.4.3 Datapath cho lệnh loại S (41)
      • 1.4.4 Datapath cho lệnh loại B (43)
      • 1.4.5 Datapath cho lệnh loại J (45)
      • 1.4.6 Datapath cho lệnh loại U (46)
  • CHƯƠNG 2. THỰC HÀNH (48)
    • 2.1 Tổng quan phần mềm RIPES (48)
    • 2.2 Mô phỏng (51)
  • KẾT LUẬN (56)

Nội dung

Kiến trúc RISCV, được công bố năm 2014, được các nhân viên tại Đại học Berkeley là Yunsup Lee, Krste Asanovic, David A. Patterson và Andrew Waterman phát triển và nghiên cứu. Mục tiêu ban đầu của dự án RISCV:  Thiết kế kiến trúc tập lệnh RISC (ISA) phù hợp để sử dụng trong nhiều ứ dụng, trải rộng từ thiết bị nhúng đến các bộ đa xử lý máy chủ đám mây hi suất cao.  ISA dễ sử dụng cho bất kỳ ứng dụng nào, điều này khác với hầu hết các bộ xử lý có sẵn trên thị trường khác.  Khả năng tương thích với các hệ trước, tối ưu các chức năng đã có.  Cung cấp ISA cơ sở nhỏ, phù hợp để sử dụng trong các thiết bị nhúng. ISA sở là tập các khả năng tối thiểu mà bất kỳ bộ xử lý RISCV nào phải thực hiệ Nó là một kiến trúc của bộ xử lý 32 bits với 31 thanh ghi có mục đích chun ISA cơ sở hỗ trợ phép cộng và phép trừ số nguyên, nhưng không bao gồm ph nhân và phép chia số nguyên. Điều này giảm chi phí phần cứng cho những t vụ không cần thiết.  Cung cấp các phần mở rộng ISA tùy chọn để hỗ trợ phép toán học dấu ph động, các phép toán trong bộ nhớ cũng như phép nhân và chia.  Cung cấp các phần mở rộng ISA bổ sung để hỗ trợ các chế độ thực thi đ quyền, giống với kiến trúc x86, x64, ARM.

CƠ SỞ LÝ THUYẾT

Giới thiệu RISC-V

Kiến trúc RISC-V, được giới thiệu vào năm 2014, là sản phẩm nghiên cứu và phát triển của nhóm nhân viên tại Đại học Berkeley, bao gồm các chuyên gia Yunsup Lee, Krste Asanovic, David A Patterson và Andrew Waterman.

Mục tiêu ban đầu của dự án RISC-V:

Thiết kế kiến trúc tập lệnh RISC (ISA) rất linh hoạt và phù hợp cho nhiều ứng dụng khác nhau, từ thiết bị nhúng cho đến các hệ thống đa xử lý máy chủ đám mây có hiệu suất cao.

 ISA dễ sử dụng cho bất kỳ ứng dụng nào, điều này khác với hầu hết các bộ vi xử lý có sẵn trên thị trường khác

 Khả năng tương thích với các hệ trước, tối ưu các chức năng đã có

ISA cơ sở nhỏ được cung cấp để sử dụng trong các thiết bị nhúng, bao gồm các khả năng tối thiểu mà bất kỳ bộ xử lý RISC-V nào cũng cần phải thực hiện.

Kiến trúc bộ xử lý 32 bit này có 31 thanh ghi chung, với ISA cơ bản hỗ trợ phép cộng và trừ số nguyên, nhưng không bao gồm phép nhân và chia Điều này giúp giảm chi phí phần cứng cho các tác vụ không cần thiết.

Cung cấp các phần mở rộng ISA tùy chọn nhằm hỗ trợ các phép toán học dấu phẩy động, các phép toán trong bộ nhớ, cũng như thực hiện phép nhân và chia một cách hiệu quả.

 Cung cấp các phần mở rộng ISA bổ sung để hỗ trợ các chế độ thực thi đặc quyền, giống với kiến trúc x86, x64, ARM

 Hỗ trợ tập lệnh nén, triển khai phiên bản 16 bits của nhiều lệnh 32 bits, các lệnh

16 bits có thể được xen kẽ với các lệnh 32 bits

 Phần mở rộng ISA tùy chọn có thể hỗ trợ kích thước bộ 64 bits và có thể lên đến 128 bits bằng cách xử dụng bộ nhớ ảo.

Các bước thực hiện

Hình 1.1 Từ ngôn ngữ bậc cao đến cấu trúc cổng logic

Quá trình biên dịch một câu lệnh từ ngôn ngữ bậc cao đến cấu trúc của các cổng logic được mô tả qua các bước cụ thể: đầu tiên, ngôn ngữ bậc cao sẽ được chuyển đổi sang Assembly, tiếp theo là dịch sang mã máy Sau khi có mã máy, quá trình tiếp tục chuyển hóa thành mô tả cấu trúc phần cứng, và cuối cùng là mô tả mạch logic.

Datapath

Hình 1.2 Các giai đoạn để thực hiện 1 chu kỳ lệnh

Hình 1.2 mô tả 1 chu kỳ lệnh mà bộ RISC-V thực hiện, nó gồm 5 giai đoạn

Giai đoạn IF: Giai đoạn nạp lệnh

Giai đoạn ID: Giai đoạn giải mã lệnh

Giai đoạn EX: Giai đoạn thực thi lệnh

Giai đoạn MEM: Giai đoạn truy cập bộ nhớ

Giai đoạn WR: Giai đoạn ghi dữ liệu vào tệp thanh ghi

1.3.1 Xây dựng đường dữ liệu

Hình 1.3 Các thành phần của CPU

Hình 1.3 mô tả cấu trúc của CPU gồm có các phần chính sau: bộ nhớ dữ liệu (data memory), thanh ghi (registers), instruction memory, bộ đếm (PC)

 Khối tính toán logic ALU

Khối IF là thành phần đầu tiên trong chu kỳ lệnh, chịu trách nhiệm lưu trữ các lệnh của chương trình dưới dạng mã máy Mỗi lệnh được chuyển đổi sang mã máy có kích thước 32 bits, với đầu vào là địa chỉ của lệnh cần lấy và đầu ra là mã máy tương ứng của lệnh đó.

Hình 1.4 Cấu tạo của khối IF

Khối IF bao gồm bộ nhớ lệnh Instruction Memory, với một cổng đọc nhận địa chỉ lệnh 32 bits đầu vào và xuất ra 32 bits mã máy Đầu vào của khối này được cung cấp từ đầu ra của bộ đếm chương trình PC.

Bộ đếm chương trình (PC) là một thanh ghi 32 bits, hoạt động đồng bộ với xung Clock, có nhiệm vụ đếm địa chỉ khi nạp lệnh Đầu ra của PC chỉ đến lệnh hiện tại, trong khi đầu vào nhận địa chỉ của câu lệnh tiếp theo Khi có tín hiệu thực hiện lệnh mới, PC sẽ tự động cộng thêm 4.

Khối cộng Add gồm 2 đầu vào, một là địa chỉ ở thời điểm hiện tại, đầu còn lại là hằng số 4 Khối này có nhiệm vụ tăng PC lên 4

Quá trình thực hiện lệnh loại R bao gồm việc đọc dữ liệu của hai toán hạng từ thanh ghi, sau đó thực hiện phép toán với hai giá trị đã đọc và ghi kết quả vào thanh ghi đích trong khối Register File.

Tệp thanh ghi là thành phần chính trong đường dữ liệu, bao gồm 32 thanh ghi trong kiến trúc RISC-V, mỗi thanh ghi có kích thước 32 bits Mỗi thanh ghi trong tệp này có khả năng đọc và ghi dữ liệu, đóng vai trò quan trọng trong quá trình xử lý thông tin.

Hình 1 5 Khối tệp thanh ghi

Tệp thanh ghi (Register File) được cấu tạo với hai đầu vào: một để chỉ định số thanh ghi cần ghi và một để cung cấp dữ liệu vào thanh ghi Nó luôn xuất ra nội dung của bất kỳ thanh ghi nào thông qua đầu vào của thanh ghi đọc Quá trình ghi được điều khiển bởi tín hiệu điều khiển ghi, cần phải đồng bộ với hệ thống Đối với bộ xử lý RISC-V, tệp thanh ghi yêu cầu 4 đầu vào (3 đầu chỉ định thanh ghi 5 bits và 1 đầu 32 bits đưa dữ liệu vào) và 2 đầu ra mang dữ liệu 32 bits.

Tệp thanh ghi chia làm 2 loại ứng với 2 chức năng đọc và ghi

Hình 1.6 Tệp thanh ghi đọc Đầu vào:

Gồm 2 tín hiệu đọc 1 và 2 được đưa vào khối MUX bằng 2 thanh ghi read number

1 và read number 2 có chiều dài 5 bits để lựa chọn thanh ghi cần đọc Đầu ra:

Gồm 2 thanh ghi read data 1 và read data 2 có chiều dài 32 bits mang dữ liệu đọc

Hình 1.7 Tệp thanh ghi ghi

Hình 1.7 minh họa cấu trúc của tệp thanh ghi, bao gồm tín hiệu ghi write dài 1 bit để điều khiển quá trình đọc dữ liệu, số thanh ghi dài 5 bits dùng để chọn thanh ghi, và dữ liệu ghi dài 32 bits để lưu trữ thông tin vào tệp thanh ghi Các thanh ghi trong tệp được trình bày chi tiết trong bảng 1.7 dưới đây.

Bảng 1 Bảng mô tả chức năng các thanh ghi

Khối tính toán logic ALU

Hình 1.8 Mô tả khối ALU

Khối ALU, như mô tả trong Hình 1.8, bao gồm hai đầu vào A và B với chiều dài 32 bits, một đầu ra result cũng 32 bits, và một tín hiệu điều khiển OpSelect dài 4 bits để lựa chọn các toán tử cần thực thi.

Lệnh loại I gồm 2 loại nhỏ là load và store, việc thực hiện lệnh này trải qua 3 giai đoạn sau:

* Lấy dữ liệu đọc từ tệp thanh ghi

* Tính toán giá trị địa chỉ để lưu giá trị đang có

Đọc dữ liệu từ bộ nhớ và ghi giá trị vào địa chỉ thanh ghi thông qua lệnh load, hoặc ngược lại, đọc dữ liệu từ thanh ghi hiện tại và ghi giá trị vào địa chỉ bộ nhớ bằng lệnh store.

1.3.3.1 Khối bộ nhớ dữ liệu

Hình 1.9 minh họa khối bộ nhớ dữ liệu, nơi đầu vào bao gồm địa chỉ và dữ liệu cần ghi, trong khi đầu ra là dữ liệu được đọc từ bộ nhớ Khối này có tín hiệu đọc và ghi được điều khiển riêng biệt, khác với tệp thanh ghi đã đề cập trước đó, và yêu cầu một tín hiệu cho phép đọc.

Hình 1.10 mô tả khối immediate, khối này có đầu vào 16 bits, đầu ra là 32 bits

Hình 1.11 Sơ đồ đường dữ liệu của lệnh loại B

Lệnh loại B trong kiến trúc máy tính được mô tả qua hình 1.11, bao gồm 3 toán hạng và 2 thanh ghi để so sánh dữ liệu Đường dữ liệu sử dụng 12 bits offset để xác định địa chỉ nhảy của bộ đếm chương trình (PC), tính toán theo công thức (PC + immediate) Nếu điều kiện so sánh được thỏa mãn, chương trình sẽ nhảy đến địa chỉ mới; ngược lại, nó sẽ tiếp tục thực hiện lệnh kế tiếp tại (PC + 4).

1.3.5 Kết hợp các loại lệnh trong datapath

Quy định thực hiện lệnh trong một chu kỳ

 Mỗi phần tử của đường dữ liệu chỉ có thể thực hiện một chức năng tại một thời điểm

 Cần phân tách bộ nhớ riêng biệt

Sử dụng bộ ghép kênh trong đó các nguồn dữ liệu thay thế sử dụng cho các hướng dẫn khác nhau

Hình 1.12 Đường dữ liệu loại R với lệnh ld và sd

Hình 1.12 mô tả đường dữ liệu loại R với câu lệnh ld và sd

Hình 1.13 Sơ đồ lệnh loại R kết hợp với lệnh loại B

Hình 1.13 mô tả sự kết hợp giữa lệnh loại R và lệnh loại B

1.3.6 Thực hiện một chương trình trên bộ xử lý RISC-V

Khối ALU control điều khiển khối ALU dựa trên các trường funct7, funct3 và điều khiển 2 bits ALUOp

ALUOp = 00 với lệnh ld, sd

ALUOp = 10 với lệnh R-type Đầu ra của khối ALU control là 1 tín hiệu 4 bits lực chọn hoạt động của khối ALU

Hoạt động của các lệnh trong bộ xử lý RISC-V dựa trên bốn phép toán cơ bản là AND, OR, ADD và SUBTRACT Các phép toán này là nền tảng cho việc thực hiện các thao tác trong kiến trúc RISC-V.

Bảng 2 Bảng truth table cho khối ALU 4 bits

Bảng 3 Bảng cấu trúc mã lệnh của 4 loại lệnh

Trường opcode gồm 7 bits (từ 0 đến 6)

Thanh ghi nguồn rs1 ở bị trí 15 đến 19 đối với lệnh loại R

Thanh ghi nguồn rs2 ở vị trí 20 đến 24 đối với lệnh loại R

Mã lệnh có thể có 12 bits offset

Thanh ghi đích rd ở vị trí 7 đến 11 đối với lệnh loại R

Hình 1.14 Datapath của lệnh từ bộ nhớ đến tập thanh ghiui

Khối điều khiển Control Unit tính toán tín hiệu điều khiển trên đường Opcode[6:0] tương ứng vói Branch, Memread, MemtoReg, ALOUp, MemWrite, ALUSrc, RegWrite

Tín hiệu ALUOp có 2 bits còn lại đều có 1 bit

Bảng 4 Bảng mô tả chức năng các đường dữ liệu trong ALU Control Unit

RegWrite None Dữ liệu được phép ghi ở đầu vào Writedata của tệp thanh ghi

ALUSrc Toán hạng thứ 2 của khối

ALU là đầu ra của tệp thanh ghi (Read data 2)

Toán hạng thứ 2 của khối ALU là dấu mở rộng, 12 bit của mã lệnh

PCSrc Giá trị của bộ đếm PC được cập nhật bởi đầu ra kết của của bộ cộng PC + 4

Giá trị của bộ đếm PC được điều chỉnh dựa trên đầu ra của bộ cộng tính, phản ánh địa chỉ mà PC đạt được khi các điều kiện rẽ nhánh được thỏa mãn.

MemRead None Tín hiệu cho phép đầu ra của bộ nhớ được đọc dữ liệu

MemWrite None Tín hiệu cho phép đầu vào của bộ nhớ được ghi dữ liệu

RegWrite Giá trị đầu ra của ALU được ghi trở lại vào tệp thanh ghi

Giá trị đầu ra của Bộ nhớ được ghi trở lại vào tệp thanh ghi

Hình 1.15 Sơ đồ toàn bộ đường dữ liệu Control Unit

Hình 1.15 mô tả toàn bộ đường đi của control unit

Hình 1.16 Cấu tạo lệnh I chi tiết

12 bits của mã lệnh (inst[30:10]) sao chép đến 12 bits thấp nhất của immediate (imm[31:12])

Lấp đầy 20 bits còn lại (imm[31:12]) của mã immediate bằng giá trị của bit thứ 32 (inst[31]) của mã lệnh

Hình 1.17 Cấu tạo khối Immediate generation unit

Hình 1.18 Cấu tạo khối Branch Comparator

 BrUn = 1, nếu kết quả âm, = 0 nếu dương

Quá trình thực thi lệnh trong 1chu kỳ của bộ xử lý RISC-V được chia thành 5 giai đoạn được mô tả lại như sau

Giai đoạn IF (Instruction Fetch Stage) bắt đầu quá trình thực hiện lệnh thông qua bộ đếm chương trình (PC), cung cấp địa chỉ lệnh cần thực thi Bộ Mux2-1 trong khối PC thực hiện việc lựa chọn hoạt động của bộ đếm chương trình dựa vào tín hiệu PCSel Khi PCSel được bật, đầu vào của PC là địa chỉ được tính toán từ khối ALU sau khi thực hiện lệnh Nếu PCSel = 0, đầu vào PC sẽ là địa chỉ lệnh kế tiếp (PC + 4) do bộ cộng Adder cung cấp Khối bộ nhớ lệnh IMEM nhận đầu vào là địa chỉ lệnh 32 bit từ PC và xuất ra mã máy 32 bit của lệnh.

In the Instruction Decode Stage (ID), the Register File receives the instruction code Inst[31:0] from the instruction memory (IMEM) through the 5-bit address signals AddrA, AddrB, and AddrD, which are used to select the registers for reading and writing.

 AddrA thường là tín hiệu của thanh ghi nguồn 1 nhận mã lệnh Inst[19:15]

 AddrB là tín hiệu của thanh ghi nguồn 2 nhận mã lệnh Inst[24:20]

 AddrD là tín hiệu của thanh ghi đích nhận mã lệnh Inst[11:7]

Datapath cho các định dạng lệnh

Bảng 5 Bảng cấu trúc lệnh loại R

Triển khai (ví dụ add)

Hình 1.20 Ánh xạ cú pháp với ví dụ lệnh R

Lệnh add thực hiện theo 2 bước:

 Reg[rd] = Reg[rs1] + Reg[rs2]

Hình 1.21 Datapath cho lệnh Add

Hỉnh 1.21 mô tả đường dữ liệu khi câu lệnh add được gọi đến

Lệnh bắt đầu bằng việc sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh Sau khi lệnh được thực hiện, PC sẽ tăng thêm 4 để xác định địa chỉ lệnh tiếp theo.

Sau khi lệnh được tìm nạp, các toán hạng thanh ghi rs1 và rs2 cùng với thanh ghi đích rd sẽ được giải mã thông qua các trường của lệnh với địa chỉ tương ứng là Addr A và Addr B.

Addr D ứng với các thanh ghi data A, data B, data D trong tệp thanh ghi

 Sau khi 2 toán hạng thanh ghi được tìm nạp sẽ đi vào khối ALU để thực hiện phép cộng logic số học

Kết quả đầu ra của ALU là giá trị thanh ghi rd, được ghi vào thanh ghi Data D tại địa chỉ Addr D Tín hiệu điều khiển RegWrite = 1 cho phép thực hiện quá trình ghi dữ liệu này.

 Sau khi thực thi xong PC sẽ cập nhật lên 4 để nhảy đến câu lệnh tiếp theo

 Ví dụ: Lệnh tính toán số học/logic với giá trị trực tiếp

Hình 1.22 Ánh xạ cú pháp với ví dụ lệnh I

Hình 1.23 Datapath cho lệnh Addi

Hình 1.23 mô tả đường dữ liệu của câu lệnh addi khi được gọi

Lệnh bắt đầu bằng cách sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh, sau đó PC sẽ tăng lên 4 để xác định địa chỉ của lệnh tiếp theo.

Sau khi lệnh được tìm nạp, hai thanh ghi x1 và thanh ghi đích x15 sẽ được giải mã thông qua các trường của lệnh, với địa chỉ lần lượt là Addr A và Addr D, tương ứng với các thanh ghi data A và data D trong tệp thanh ghi.

 Giá trị imm -50 đưa vào khối Imm Gen (ImmSel =1)

 ALU thực hiện phép cộng với đầu vào là giá trị thanh ghi Data A (x1) và giá trị imm -50 trong khối Imm Gen

 Các tín hiệu điều khiển: Bsel=1( rs2=0/Imm=1) vì đây là cộng giá trị trực tiếp, giá trị này nằm trong khối Imm Gen, rs2 trống

ALUSel=1 (cộng với giá trị âm)

 Kết quả đầu ra ghi vào thanh ghi data D Tín hiệu điều khiển RegWrite =1 cho phép thực hiện việc ghi dữ liệu này

 Sau khi thực thi xong PC sẽ cập nhật lên 4 để nhảy đến câu lệnh tiếp theo

Hình 1.24 Ánh xạ cú pháp với ví dụ lệnh loại S

Hình 1.25 Datapath cho lệnh sw

Lệnh bắt đầu bằng cách sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh Sau khi thực hiện lệnh, PC sẽ tự động tăng lên 4 để xác định địa chỉ lệnh tiếp theo.

Sau khi lệnh được truy xuất, các thanh ghi cơ sở x2 và thanh ghi toán hạng x14 sẽ được giải mã thông qua các trường của lệnh, với địa chỉ lần lượt là Addr A và Addr B, tương ứng với dữ liệu trong các thanh ghi data A và data B.

 Gía trị imm +8 đưa vào khối Imm Gen (ImmSel =S)

 ALU thực hiện tính địa chỉ của Data Memmory với đầu vào là giá trị thanh ghi cơ sở Data A (x2) và giá trị imm+8 trong khối Imm Gen

 Các tín hiệu điều khiển: Bsel=1( rs2=0/Imm=1)

ALUSel= Add thực hiện cộng địa chỉ x2+8

Kết quả đầu ra của ALU được ghi vào bộ nhớ Dmem tại địa chỉ addr tương ứng với thanh ghi DataR Khi tín hiệu MemRw được thiết lập ở chế độ Write, dữ liệu từ thanh ghi x14 (Data B) sẽ được ghi vào bộ nhớ.

 Sau khi thực thi xong PC sẽ cập nhật lên 4 để nhảy đến câu lệnh tiếp theo

Có 6 lệnh rẽ nhánh là beq, bne, blt, bge, bltu, bgeu

Hình 1.26 Cấu trúc 1 câu lệnh loại B tổng quát

Hình 1.27 Datapath của lệnh BEQ

Lệnh bắt đầu bằng cách sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh Nếu không có rẽ nhánh, PC sẽ tăng thêm 4 để xác định địa chỉ lệnh tiếp theo Trong trường hợp có rẽ nhánh, PC sẽ cộng thêm phần bù imm của nhãn so với lệnh hiện tại.

Sau khi lệnh được tìm nạp, hai thanh ghi toán hạng rs1 và rs2 sẽ được giải mã thông qua các trường của lệnh, với địa chỉ lần lượt là Addr A và Addr B, tương ứng với thanh ghi dữ liệu.

A, data B trong tệp thanh ghi

 Gía trị imm đưa vào khối Imm Gen (ImmSel =B)

 Bộ so sánh Branch Comp thực hiện so sánh giá trị lưu trữ trong 2 thanh ghi A,

B (MemRW=read cho phép đọc dữ liệu từ bộ nhớ phục vụ cho việc so sánh)

ALU thực hiện phép cộng địa chỉ bằng cách sử dụng giá trị PC hiện tại và giá trị imm từ khối Imm Gen, nhằm xác định địa chỉ lệnh tiếp theo Điều này quyết định xem lệnh có phải là lệnh rẽ nhánh hay không.

Hình 1.28 Cấu trúc 1 câu lệnh loại J tông quát

Lệnh loại J thực hiện theo 2 bước:

 Lưu PC + 4 vào thanh ghi rd

 Đặt PC = PC + offset (PC – Relative jump)

Hình 1.29 Datapath cho lệnh jal

Lệnh bắt đầu bằng việc sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh Địa chỉ trả về được lưu trữ là PC+4, và sau đó, phần bù imm của nhãn sẽ được cộng vào địa chỉ này để thực hiện nhảy đến nhãn mong muốn Để cho phép ghi, tín hiệu RegWEn được thiết lập thành 1.

PC+4 vào thanh ghi rd)

 Sau khi lệnh được tìm nạp, giá trị imm đưa vào khối Imm Gen (ImmSel =J)

ALU thực hiện phép cộng địa chỉ bằng cách sử dụng giá trị hiện tại của PC và giá trị imm từ khối Imm Gen, nhằm xác định địa chỉ lệnh nhãn mà cần nhảy đến Khi Bsel=1, đầu vào là imm, và ALUSel thực hiện phép cộng để tính toán địa chỉ này.

Hình 1.30 Cấu trúc 1 câu lệnh loại U tổng quát

Lệnh bắt đầu bằng cách sử dụng bộ đếm chương trình (PC) để cung cấp địa chỉ lệnh cho bộ nhớ lệnh Sau khi thực hiện lệnh, PC sẽ tăng lên 4 để xác định địa chỉ lệnh tiếp theo.

Sau khi lệnh được truy xuất, thanh ghi đích rd sẽ được giải mã thông qua các trường của lệnh, với địa chỉ Addr D tương ứng với thanh ghi data D trong tệp thanh ghi.

 Giá trị imm đưa vào khối Imm Gen (ImmSel =U)

 Khối ALU để thực hiện phép cộng logic số học

THỰC HÀNH

Tổng quan phần mềm RIPES

Ripes là phần mềm mô phỏng bộ xử lý cho kiến trúc tập lệnh RISC-V Phần mềm bao gồm các chức năng chính liên quan đến datapath như:

Tab biên tập bao gồm hai phần: bên trái cho phép người dùng viết và biên dịch các chương trình hợp ngữ C, trong khi bên phải hiển thị các câu lệnh assembly của cấu trúc lệnh RISC-V.

Tab bộ xử lý là nơi cung cấp cái nhìn tổng quan về chế độ hoạt động của bộ xử lý được chọn, bao gồm đơn xung nhịp, đường ống và các thông tin quan trọng liên quan đến quá trình thực thi.

1 Registers : chứa tất cả các thanh ghi, giá trị của từng thanh ghi đó trong bộ xử lý 2- Intruction memory : Chế độ xem chương trình hiện tại được tải trong mô phỏng 3- Statistics : Các thống kê về số chu kì, số intruction,…

4- Output : Hiển thị đầu ra của các lệnh như ecall trong assembly hoặc printf trong C

 The processor view: Các mô hình bộ xử lý trong Ripes mô phỏng các trạng thái của datapath thông qua hình ảnh trực quan

 Selecting Processor Model: Cung cấp khả năng ảnh hưởng khác nhau đến việc thực thi trương trình Ripes cung cấp 5 chương trình như sau:

Mô phỏng

Trong phần này em xin trình bày thực hiện 1 chương trình C mô phỏng datapath của bộ xử lý đơn xung nhịp

Trong đoạn mã C dưới đây, chúng ta thực hiện một chương trình đơn giản để cộng hai mảng, mỗi mảng gồm hai phần tử Kết quả của phép cộng sẽ được lưu trữ trong một mảng khác.

Sau khi khi chạy chuyển sang code Assembly

Sau khi biên dịch, chúng ta tập tập trung vào các label_start, main, exit

Khi bắt đầu chạy thì lệnh sẽ được thực hiện ở label_start

Hình 2.7 Label_start in Assembly Code

Hình 2.7 minh họa lable_start trong mã assembly, tại thời điểm này, chương trình sẽ khởi tạo các lệnh khởi động cho bộ xử lý, sau đó các lệnh này sẽ được thực thi trong hàm main.

Sau bước khởi tạo, chương trình sẽ nhảy đến hàm main thông qua lệnh jal x1 112

Hình 2.8 Label in Assembly Code Ở bước này, chương trình tiến hành cộng 2 mảng với nhau thông qua các dữ liệu đã khởi tạo trước đó

Hình 2.9 Datapath lệnh add khi mô phỏng

Hình trên minh họa quá trình cộng hai phần tử đầu tiên của hai mảng Giá trị đầu tiên của mảng a được lưu trữ trong thanh ghi x14 với giá trị 15, trong khi giá trị đầu tiên của mảng b được lưu trong thanh ghi x15 với giá trị 2 Chương trình sẽ thực hiện phép cộng add x14 x14 x15 để tính tổng hai phần tử, và kết quả sẽ được lưu lại trong thanh ghi x14.

Kết quả cuối cùng thu được:

Hình 2.10 Thống kê chương trình

Hình 2.10 mô tả thống kê của chương trình sau khi thực hiện chạy, chương trình C như trên đã thực hiện 305 cycles, 305 instruction

Ngày đăng: 18/01/2022, 02:23

w