Thiết kế bộ nhớ đệm cho bộ xử lí RISCV

43 174 4
Thiết kế bộ nhớ đệm cho bộ xử lí RISCV

Đ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

Mục lục LỜI NÓI ĐẦU 2 Danh sách các từ viết tắt 3 Danh sách hình vẽ 4 Danh sách bảng 6 Chương 1. Cơ sở lý thuyết 8 1.1 Sơ lược về kiến trúc tập lệnh RISCV 8 1.1.1 Tổng quát 8 1.1.2 Kiến trúc tập lệnh cơ sở 10 1.1.3 Kiến trúc tập lệnh mở rộng 11 1.2 Vi xử lý RI5CY 12 1.2.1 Giới thiệu vi xử lý RI5CY 12 2.2.2 Kiến trúc tập lệnh mở rộng 13 1.2.3 Vi kiến trúc 15 1.3 Sơ lược về vi điều khiển Pulpino 20 1.3.1 Giới thiệu 20 1.3.3 Bản đồ truy cập bộ nhớ 21 1.4 Bộ nhớ đệm lệnh 21 1.4.1 Giới thiệu 21 1.4.2 Kiến trúc của bộ nhớ lệnh 22 1.5 Sử dụng systemverilog để thiết kế phần cứng 24 1.5.2 always_comb, always_latch, always_ff 25 1.5.4 Interface 25 1.5.5 Package 27 1.6 Bộ nhớ FRAM 27 1.6.1 Giới thiệu về FRAM 27 Chương 2. Thiết kế và hiện thực 30 2.1 Vi kiến trúc của MCU Pulpino 30 2.2 Kiến trúc tổng quát của bộ nhớ đệm lệnh 31 2.3 Hiện thực bộ nhớ đệm lệnh 33 2.3.1 Chi tiết hiện thực khối cache controller 33 2.1.2 Chi tiết hiện thực khối AXI double buffer 37 2.1.3 Chi tiết hiện thực khối memory array 38 2.1.4 Kết quả hiện thực bằng SystemVerilog 38 Chương 3. Mô phỏng, tổng hợp và thực nghiệm 42 3.1 Môi trường mô phỏng 42 3.1.1 Giới thiệu môi trường mô phỏng 42 3.1.2 Cách chạy mô phỏng 45 3.1.3 Debug bằng giao diện Verdi 46 3.2 Kết quả mô phỏng 47 Chương 4. Kết luận 48 Chương 1. Cơ sở lý thuyết 1.1 Sơ lược về kiến trúc tập lệnh RISCV 1.1.1 Tổng quát Kiến trúc tập lệnh RISCV được thiết kế theo kiểu module nhằm cho phép các nhà phát triển vi xử lý RISCV có thể linh hoạt lựa chọn được kiến trúc phù hợp nhất cho ứng dụng của họ. RISCV định nghĩa kiến trúc tập lệnh số nguyên 32bit RV32I là kiến trúc tập lệnh cơ bản nhất. Với kiến trúc tập lệnh cơ sở này, vi xử lý RISCV đã có tất cả những lệnh cơ bản, những lệnh điều khiển luồng, bộ thanh ghi, bộ nhớ, cách đánh địa chỉ bộ nhớ …vv…đủ để hiện thực một vi xử lý đơn giản dạng tổng quát hỗ trợ đầy đủ cho phần mềm và trình biên dịch. Từ kiến trúc tập lệnh cơ sở này, nhà phát triển vi xử lý RISCV có thể linh hoạt chọn kết hợp với một hay nhiều tập lệnh mở rộng tùy chọn khác cho các ứng dụng mục tiêu. Tập lệnh mở rộng có thể là tập lệnh mở rộng chuẩn của nhà sáng lập RISCV hoặc tập lệnh mở rộng phi tiêu chuẩn của nhà phát triển vi xử lý RISCV cho một sản phẩm mục tiêu nhất định.

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG BÁO CÁO MÔN HỌC KĨ THUẬT MÁY TÍNH Đề tài: THIẾT KẾ BỘ NHỚ ĐỆM CHO BỘ XỬ LÍ RISC-V Giảng viên hướng dẫn: TẠ THỊ KIM HUỆ Hà nội,20/6/2021 LỜI NÓI ĐẦU Cùng với phát triền xã hội ,lĩnh vực Công nghệ máy tính vươn lên chiếm vị ngày cao tất lĩnh vực kinh tế,xa hội,cũng đời sống Cơng nghệ máy tính khơng hiểu máy tính mà cịn sâu vào mặt đời sống xa hội,thông qua cá hệ nhúng …Một thành phần quan trọng máy tính xử lí trung tâm (CPU).Có nhiều công sức đầu tư vào việc chế tạo CPU nhằm tạo máy tính đáp ứng yêu cầu ngày cao người Với phát triền nhanh chóng cơng nghệ slicon chi phí giảm mạch tích hợp,bộ xử lí RÍC gia tăng sử dụng rộng rãi lĩnh vực RISC phần mở rộng nguyên tắc kiến trúc máy tính với tập lệnh đơn giản hóa.Thiết kế đơn giản cung cấp hiệu vượt trội lý tưởng để sử dụng.Một số ứng dung điển hình bao gồm: xứ lí liệu thương mại,các ứng dụng tính tốn chun sâu khoa học kỹ thuật,kiểm soát thời gian thực Để thiết kế CPU với đầy đủ chức cần công cụ đủ mạnh Từ dẫn đến đời ngơn ngữ mô tả phần cứng VHDL,Verilog systemverilog… Ngôn ngữ mô tả phần cứng systemverirlog sử dụng báo cáo này.Từ ngôn ngữu systemverilog nhà thiết kế phần cứng có tể thiết kế thiết bị phần cứng PU ,bộ vi điều khiển…một cách nhanh chóng thực mơ kiểm tra khả hoạt động thiết bị trước đưa vào sản xuất,nhờ giảm bớt thời gian ,chi phí sản xuất Danh sách từ viết tắt CPU…………… Central Processing Unit RISC-V………… Reduced Instruction Set Computer - Five SRAM.………… Static Random Access Memory FRAM.………… Ferroelectric Random Access Memory AMAT.………… Average Memory Access Time RTL….………… Register Transfer Level WRU….…………Way Replacement Unit FSM….………….Finite State Machine MCU….…………Microcontroller Unit IoT ….…………Internet of Things FPU ….…………Internet of Things PULP ….……….Parallel Ultra Low Power LSU ….……….Load Store Unit ALU ….……… Arithmetic Logic Unit MAC ….……… Multiply–ACcumulate operation SIMD ….……… Single Instruction Multiple Data DMA ….….…… Direct Memory Access Danh sách hình vẽ Hình 1: Định dạng lệnh RISC-V Hình 2: Sơ đồ khối CPU RI5CY 12 Hình 3: kiến trúc pipe-line CPU RI5CY 14 Hình 4: Minh họa giao thức truy cập nhớ (cơ bản) 16 Hình 5: Minh họa giao thức truy cập nhớ (Back-to-back) 16 Hình 6: Minh họa giao thức truy cập nhớ (đáp ứng chậm) .16 Hình 7: Sơ đồ khối vi điều khiển Pulpino 17 Hình 8: Bản đồ truy cập nhớ vi điều khiển Pulpino 18 Hình 9: Mơ hình vi xử lý với cấp nhớ đệm 19 Hình 10: Vi kiến trúc đề xuất cho Pulpino 27 Hình 11: Kiến trúc thiết kế nhớ đệm lệnh 28 Hình 12: Sơ đồ khối tổng quát khối cache controller 29 Hình 13: Khối Hit/miss judgement 30 Hình 14: Khối WRU thực LFSR bit 31 Hình 15: Khối CTRL FSM 31 Hình 16: Khối Performance stat 33 Hình 17: Khối AXI Double Buffer 33 Hình 18: Bộ nhớ SRAM single port 34 Hình 19: Cổng input/output cache top module 35 Hình 20: Cổng input/output cache controller 36 Hình 21: Verdi schematic top cache module 37 Hình 22: Kiến trúc môi trường mô Pulpino 38 Hình 23: Các bước chạy mơi trường mơ Pulpino 40 Hình 24: Debug trực quan Verdi 41 Danh sách bảng Table 1: Bảng tập lệnh sở mở rộng RISC-V Table 2: Phân loại nhóm lệnh tập lệnh RV32I Table 3: Những ghi điều khiển HW Loop 11 Table 4: Bảng input/output phát lệnh 15 Table 5: Bảng so sánh FRAM với nhớ khác 24 Table 6: Bảng kết đo tỉ lệ cache miss nhớ đệm lệnh 42 Mục lục LỜI NÓI ĐẦU Danh sách từ viết tắt Danh sách hình vẽ Danh sách bảng Chương Cơ sở lý thuyết 1.1 Sơ lược kiến trúc tập lệnh RISC-V 1.1.1 Tổng quát 1.1.2 Kiến trúc tập lệnh sở 1.1.3 Kiến trúc tập lệnh mở rộng 1.2 Vi xử lý RI5CY 10 1.2.1 Giới thiệu vi xử lý RI5CY 10 2.2.2 Kiến trúc tập lệnh mở rộng 11 1.2.3 Vi kiến trúc 12 1.3 Sơ lược vi điều khiển Pulpino 17 1.3.1 Giới thiệu 17 1.3.3 Bản đồ truy cập nhớ 18 1.4 Bộ nhớ đệm lệnh 18 1.4.1 Giới thiệu 18 1.4.2 Kiến trúc nhớ lệnh 19 1.5 Sử dụng systemverilog để thiết kế phần cứng 21 1.5.2 always_comb, always_latch, always_ff 22 1.5.4 Interface 22 1.5.5 Package 23 1.6 Bộ nhớ FRAM 23 1.6.1 Giới thiệu FRAM 23 Chương Thiết kế thực 26 2.1 Vi kiến trúc MCU Pulpino 26 2.2 Kiến trúc tổng quát nhớ đệm lệnh 27 2.3 Hiện thực nhớ đệm lệnh 29 2.3.1 Chi tiết thực khối cache controller 29 2.1.2 Chi tiết thực khối AXI double buffer 33 2.1.3 Chi tiết thực khối memory array 34 2.1.4 Kết thực SystemVerilog 34 Chương Mô phỏng, tổng hợp thực nghiệm 38 3.1 Môi trường mô 38 3.1.1 Giới thiệu môi trường mô 38 3.1.2 Cách chạy mô 40 3.1.3 Debug giao diện Verdi 41 3.2 Kết mô 42 Chương Kết luận 43 Chương Cơ sở lý thuyết 1.1 Sơ lược kiến trúc tập lệnh RISC-V 1.1.1 Tổng quát Kiến trúc tập lệnh RISC-V thiết kế theo kiểu module nhằm cho phép nhà phát triển vi xử lý RISC-V linh hoạt lựa chọn kiến trúc phù hợp cho ứng dụng họ RISC-V định nghĩa kiến trúc tập lệnh số nguyên 32-bit RV32I kiến trúc tập lệnh Với kiến trúc tập lệnh sở này, vi xử lý RISC-V có tất lệnh bản, lệnh điều khiển luồng, ghi, nhớ, cách đánh địa nhớ …vv…đủ để thực vi xử lý đơn giản dạng tổng quát hỗ trợ đầy đủ cho phần mềm trình biên dịch Từ kiến trúc tập lệnh sở này, nhà phát triển vi xử lý RISC-V linh hoạt chọn kết hợp với hay nhiều tập lệnh mở rộng tùy chọn khác cho ứng dụng mục tiêu Tập lệnh mở rộng tập lệnh mở rộng chuẩn nhà sáng lập RISC-V tập lệnh mở rộng phi tiêu chuẩn nhà phát triển vi xử lý RISC-V cho sản phẩm mục tiêu định Tên viết tắt tập lệnh RV32I RV32E RV64I RV128I M A F D Q C … Tên đầy đủ Chú thích Base Integer Instruction Set, 32-bit tập lệnh sở Base Integer Instruction Set (embedded) Base Integer Instruction Set, 64-bit Base Integer Instruction Set, 128-bit Integer Multiplication and Division Atomic Instructions Những tập mở Single-Precision Floating-Point rộng tiêu chuẩn Double-Precision Floating-Point Quad-Precision Floating-Point Decimal Floating-Point … Table 1: Bảng tập lệnh sở mở rộng RISC-V Để hỗ trợ tốt cho việc phát triển hệ sinh thái phần mềm vi xử lý RISC-V, nhà sáng lập RISC-V cung cấp sẵn tập tập lệnh mở rộng tiêu chuẩn, bao gồm phép nhân chia số nguyên (tập M), toán tử nguyên tử (tập A), phép tốn với số thực dấu phẩy động độ xác đơn (tập F), phép toán với số thực dấu phẩy động độ xác kép (tập D) Một kiến trúc tập lệnh hỗ trợ tập lệnh I với tất tập lệnh vừa nêu (M, A, F, D) gọi kiến trúc tập lệnh đa mục đích, viết tắt tập G, ví dụ RV32G Ngồi ra, nhà sáng lập RISC-V cịn cung cấp tập lệnh mở rộng tiêu chuẩn hữu ích tập lệnh nén để giảm kích thước mã máy (tập C) 1.1.2 Kiến trúc tập lệnh sở Kiến trúc tập lệnh sở RISC-V định nghĩa kiến trúc tập lệnh RV32I, bao gồm 47 lệnh phân chia dựa chức opcode thành nhóm sau: Table 2: Phân loại nhóm lệnh tập lệnh RV32I Nếu xét định dạng lệnh RV32I chia thành sáu nhóm: Rtype, I-type, S-type, B-type, U-type, J-type Trong R, I, S, U bốn nhóm chính, hai nhóm B J giống hồn tồn nhóm S U ngoại trừ khác phần tốn tử “immediate” Hình 1: Định dạng lệnh RISC-V Về ghi, RV32I có ghi PC 32 ghi có ghi x0 mang giá trị 0, cộng với 31 ghi đa mục đích x1-x31 Tất có độ rộng 32-bit (với RV64I độ rộng ghi trở thành 64bit) Tương tự kiến trúc tập lệnh RISC, RV32I có kiến trúc LOADSTORE Điều có nghĩa có lệnh Load Store truy cập vào nhớ, lại phép toán số học …vv… sử dụng ghi Ngồi RV32I có nghĩa khơng gian địa 32-bit sử dụng little endian Tương ứng, RV64I có nghĩa khơng gian địa 64-bit RV128I có khơng gian địa 128-bit RV64I RV128I xem kiến trúc tập lệnh sở Bên cạnh đó, cịn kiến trúc tập lệnh sở RV32E định nghĩa cho hệ thống nhúng RV32E có 16 ghi 32-bit registers đếm RV32I tùy chọn có hay khơng 1.1.3 Kiến trúc tập lệnh mở rộng Như danh sách kiến trúc tập lệnh mở rộng RISC-V đề cập trên, RISC-V định nghĩa nhiều tùy chọn tập lệnh mở rộng Trong số đó, số hồn thiện đặc tả kĩ thuật, lại phát triển Dưới mở rộng đóng băng đặc tả: • • • • • • M: tập lệnh nhân chia số nguyên A: tập lệnh nguyên tử Atomic F: Single-precision floating point (tuân thủ IEEE 754-2008) D: Double-precision floating point (tuân thủ IEEE 754-2008) Q: Quad-precision floating point (tuân thủ IEEE 754-2008) C: tập lệnh nén (16-bit) để giảm kích thước mã lệnh Những tập lệnh mở rộng phát triển đóng băng đặc tả tương lai gần tập L (decimal float), B (bit manipulation), J (dynamically translated languages), T (transactional memory), P (packed SIMD), V (vector operations), N (user-level interrupts) 1.2 Vi xử lý RI5CY 1.2.1 Giới thiệu vi xử lý RI5CY RI5CY vi xử lý có thiết kế tương đối hồn thiện dựa kiến trúc tập lệnh RISC-V nằm dự án PULP, dự án từ ban đầu hướng đến phát triển thiết kế tối ưu lượng tiêu thụ phục vụ cho sản phẩm IoT PULP dự án hợp tác phịng thí nghiệm hệ thống tích hợp (IIS) viện cơng nghệ liên bang Thụy Sĩ (ETH Zurich) phịng thí nghiệm hệ thống nhúng hiệu lượng Đại học Bologna (Ý) nhằm phát triển tảng nghiên cứu phần cứng phần mềm với tiêu chí tối ưu lượng Hiện PULP phát triển dòng vi xử lý dùng cho phân khúc khác bao gồm: • Lõi giá thành thấp: gồm hai vi xử lý tầng pipeline Zero-riscy (hỗ trợ kiến trúc tập lệnh RV32IMC) Micro-riscy (hỗ trợ kiến trúc tập lệnh RV32EC) vi xử lý tối ưu mức cao hướng đến ứng dụng vi điều khiển đơn có kết hợp với tính tốn số học đơn giản Hai vi xử lý có kiến trúc tương đồng với hai lõi CPU ARM Cortex M0/M0+ • Vi xử lý RI5CY tầng pipeline hỗ trợ kiến trúc tập lệnh RV32IMC[F]X với số mở rộng thêm riêng vi xử lý vòng lặp phần cứng (HW loops), số phép tính kiểu bit (bits manipulation), lệnh LOAD-STORE có địa tự động tăng…hướng đến ứng dụng cần tính tốn liệu Bộ vi xử lý có kiến trúc tương đồng với hai lõi CPU ARM Cortex M4/M4F • Vi xử lý 64-bit Ariane tầng pipeline hỗ trợ kiến trúc tập lệnh RV64IMC, hỗ trợ hệ điều hành Linux Bộ vi xử lý phát triển để so sánh cạnh tranh với CPU ARM Cortex M7 Cụ thể, vi xử lý RI5CY có kiến trúc tập lệnh mơ tả chi tiết đây: • Hỗ trợ đầy đủ cho tập lệnh RV32I • Hỗ trợ đầy đủ cho phần mở rộng tiêu chuẩn RV32C cho lệnh nén (những lệnh có định dạng16-bit) • Hỗ trợ đầy đủ cho phần mở rộng phép nhân chia RV32M • Tùy chọn hỗ trợ đầy đủ cho dấu chấm phẩy động độ xác đơn RV32F (khối FPU tùy chọn hỗ trợ hay khơng) • Ngồi ra, RI5CY cịn có phần mở rộng riêng dự án PULP không thuộc kiến trúc tập lệnh tiêu chuẩn (hay gọi RV32X) Phần kiến trúc tập lệnh mở rộng đề cập mục 10 2.3 Hiện thực nhớ đệm lệnh 2.3.1 Chi tiết thực khối cache controller Như trình bày phần 3.2, chức khối cache controller quan trọng phức tạp ba khối Nó điều khiển hầu hết hoạt động nhớ đệm lệnh bao gồm kiểm tra cache hit/miss, đọc lưu liệu lệnh từ nhớ vào memory array đồng thời cập nhật bit valid+tag, trả liệu yêu cầu cho CPU Ngoài ra, khối chứa đếm để lưu lại số liệu thống kế hiệu suất cache số lần truy cập cache, số lần cache miss … Hình 3.3 mơ tả cấu trúc phần cứng khối : Hình 12: Sơ đồ khối tổng quát khối cache controller Khối cache controller bao gồm khối như: khối “Hit/miss judgement”, khối WRU (Way Replacement Unit), máy trạng thái CTRL FSM, khối PFM Stat khối giao tiếp bus AXI IF Khi CPU gửi yêu cầu đọc lệnh tới khối này, địa fetch_addr chia thành trường tag field tag index Sau đó, khối dùng tag index để truy cập memory array để lấy thông tin bit valid, tag liệu lệnh từ tất way Thông tin bit valid, tag từ tất way với tag filed từ địa fetch_addr gửi cho khối “Hit/miss judgement” để kiểm tra cache hit/miss Tín hiệu way_match[i] hình 3.4 tương đương với tín 29 hiệu cache hit way[i] Chi tiết thực khối “Hit/miss judgement” thể hình đây: Hình 13: Khối Hit/miss judgement Trong trường hợp có cache hit way (cịn gọi way hit) liệu lệnh đọc từ trước trả cho CPU Trong trường hợp, tốc độ đọc lệnh từ cache với tốc độ lệnh từ nhớ lệnh SRAM Trong trường hợp khơng có cache hit way có khả xảy ra: - Nếu tìm way (ở vị trí có địa tag index trên) chưa valid, cache controller chọn way để chuẩn bị lưu liệu lệnh lấy - Nếu vị trí có địa tag index mà tất way valid, trường hợp way miss Trong trường hợp này, cache controller nhờ khối WRU vô hiệu way để chuẩn bị lưu liệu lệnh lấy Khối WRU khối chọn way bị thay thực giải thuật pseudo random đơn giản LFSR (Linear Feedback Shift Register) 30 Hiện thực phần cứng giải thuật mô tả hình vẽ sau đây: Hình 14: Khối WRU thực LFSR bit Sau chọn way bị thay thế, cache controller gửi yêu cầu đọc lệnh bus liệu thông qua khối AXI IF Mặc dù AXI4 có nhiều tín hiệu nhiên đa số chúng có giá trị cố định (trừ tín hiệu địa axi_araddr) Chi tiết tín hiệu AXI khối AXI IF tính tốn điều khiển Ngồi ra, lệnh đọc nhiều burst nhiệm vụ khối latch merge liệu lại để đảm bảo liệu ghi vào cache lệnh trả CPU xác Đó flow khối cache controller flow hoạt động cache Tất điều khiển nhịp nhàng máy trạng thái CTRL FSM với sơ đồ chuyển trạng thái mô tả đây: Hình 15: Khối CTRL FSM 31 Sau hệ thống bật nguồn, máy trạng thái (FSM) reset trạng thái “DIS_ICACHE” Ở trạng thái này, cache lệnh bypass Sau CPU boot up Boot code cài đặt ghi để enable cache lệnh lên Khi FSM chuyển sang trạng thái chờ WAI_PD_TRANS Ở trạng thái này, cache chờ cho yêu cầu đọc lệnh trước hồn thành nhằm tránh cho hệ thống bị lỗi gây transaction chưa hồn thành bus liệu gửi kết lúc Sau xác định khơng cịn transaction trạng thái chờ, FSM chuyển sang trạng thái FLUSH_ICACHE Ở trạng thái này, tồn cache line cache vơ hiệu cách ghi vào tất bit valid liệu tag Sau hoàn thành, FSM chuyển qua trạng thái OPERATIVE trạng thái hoạt động cache Ở trạng thái này, cache lệnh sẵn sàng phục vụ nhu cầu đọc lệnh CPU Nếu cache miss xảy ra, FSM chuyển qua trạng thái REQ_REFILL WAIT_REFILL_DONE để đọc lệnh từ nhớ cập nhật vào cache Khi FSM trạng thái OPERATIVE, người dùng thơng qua thiết lập ghi để tiến hành flush toàn cache (tương lai nên hỗ trợ thêm lệnh flush cache địa định) tiến hành disable cache (chuyển trạng thái bypass) Khối lại khối cache controller khối PMF Stat, khối có chức lưu lại thơng tin để debug hiệu suất cache Hiện khối hỗ trợ thông tin số lần CPU đọc lệnh số lần cache miss xảy Với thơng tin này, tính tỉ lệ miss rate cho cache Trong tương lai nên bổ sung thêm số thơng tin khác, ví dụ miss penalty cycles Hình thực phần cứng khối này, bao gồm counter để đếm số lần đọc lệnh số lần cache miss: 32 Hình 16: Khối Performance stat 2.1.2 Chi tiết thực khối AXI double buffer Khối AXI buffer thực chất FIFO dùng để cân timing bus liệu AXI4 không thực sẵn “register slice” Do đó, để tránh đường critical timing từ cache xuống bus, kĩ thuật thường dùng AXI double buffer Khối AXI buffer cấu hình single buffer bypass tùy vào kết tổng hợp Kiến trúc phần cứng tổng quát khối thể hình đây: valid_o valid_i data_i[N-1:0] ready_0 AXI DB (FIFO w depth=2) data_o[N-1:0] ready_i Hình 17: Khối AXI Double Buffer 33 2.1.3 Chi tiết thực khối memory array Khối memory array khối dùng để lưu toàn liệu cache bao gồm valid bit, tag lệnh Để tối ưu tài nguyên, khối dùng nhớ SRAM đơn cổng cho way Toàn liệu valid bit, tag lệnh gộp đọc ghi vào SRAM lúc Sơ đồ khối chi tiết kết nối khối SRAM mơ tả hình sau: Tag_addr_i addr Tag_read_enb[i] Tag_write_enb[i] CEB WEB {TAG_wdat, DATA_wdat} D clk_i SP SRAM Q {TAG_rdat, DATA_rdat} CLK Hình 18: Bộ nhớ SRAM single port 2.1.4 Kết thực SystemVerilog Sau thực nhớ đệm ngôn ngữ SystemVerilog, số hình ảnh thực mức RTL Hình 3.10 thực input/output port cho “top cache module” Trong hai nhóm cổng giao tiếp với CPU với bus liệu Hình 3.11 thực input/output port cho “cache controller module” Ngoài hai nhóm cổng giao tiếp với CPU với bus liệu, cache controller có thêm giao tiếp với memory array Hình 3.12 schematic mức top cache Ở mức này, sơ đồ khối cache thể hiện, bao gồm cache controller, khối SRAM way (valid bit, tag liệu lệnh lưu chung SRAM) khối double buffer cho kênh AXI AR/R Hình 19: Cổng input/output cache top module Hình 20: Cổng input/output cache controller Hình 21: Verdi schematic top cache module Chương Mô phỏng, tổng hợp thực nghiệm 3.1 Môi trường mô 3.1.1 Giới thiệu môi trường mô Không chia sẻ toàn thiết kế phần cứng MCU Pulpino, dự án PULP chia sẻ đầy đủ tồn mơi trường để chạy mơ kiểm thử MCU Mơi trường có đặc điểm yêu cầu sau đây: - Sử dụng công cụ mô ModelSim hãng Mentor Graphics - Testbench VIP viết ngôn ngữ SystemVerilog - Với trọng tâm kiểm thử CPU RISC-V, ngôn ngữ xây dựng testcase cho môi trường ngôn ngữ C - Sử dụng trình biên dịch GCC ETH phát triển nhóm PULP dựa toolchain RISC-V phát triển Đại học Berkeley - Hỗ trợ đầy đủ sẵn VIP, models kết nối với cổng ngoại vi Kiến trúc môi trường mô tổ chức sau: TB top Clk Reset gen mem_preload() Instr RAM (2) Boot RAM GPIO GPIO IF CPU CORE (4) (5) Data RAM (3) (1) UART UART VIP I2C I2C VIP SPI M SPI S VIP SPI Slave SPI M VIP Adv Debug Unit JTAG Model Hình 22: Kiến trúc mơi trường mô Pulpino Trong môi trường này, cổng giao tiếp UART, I 2C, SPI Master/Slave hay Adv Debug Unit kết nối với VIP hay model tương ứng viết SystemVerilog nhằm giả lập hoạt động thiết bị ngoại vi Để chạy mô phỏng, ứng dụng (test case) viết C biên dịch thành mã máy Sau đó, mã máy với liệu preload vào nhớ lệnh nhớ liệu ba cách: - Sử dụng trực tiếp SV task mem_preload() test bench Task đọc mã máy liệu từ file l2_stim.slm, tcdm_bank0.slm back-door ghi trực tiếp vào hai nhớ SRAM - Sử dụng SPI Master VIP đọc mã máy liệu từ file spi_stim.txt thông qua cổng giao tiếp SPI slave front-door ghi vào hai nhớ SRAM - Sử dụng JTAG Model truy cập thiết lập hoạt động cho CPU CPU sau đọc Boot code từ Boot RAM thực thi Phần Boot Loader Boot code thực đọc toàn lệnh liệu thiết bị flash bên ngồi thơng qua cổng SPI Master ghi vào hai nhớ SRAM Để kiểm tra kết mô phỏng, test bench sử dụng thiết bị ngoại vi này, ví dụ như: - Chương trình truyền chuỗi kí tự có ý nghĩa bên ngồi thơng qua cổng UART - Hoặc chương trình tự so sánh kết ghi giá trị định trước vào nhớ liệu Ở cuối chương trình, test bench sử dụng cổng SPI để đọc giá trị so sánh với giá trị định trước để biết kết mô có hay khơng - Hoặc chương trình điều khiển chân GPIO test bench cần monitor chân để kiểm tra kết mô Môi trường có sẵn hai test case, để kiểm tra toàn chức để đánh giá hiệu suất CPU RI5CY Bộ test case dùng để đánh giá hiệu suất CPU bao gồm ứng dụng như: - Giải thuật AES-CBC - Giải thuật Conv2D - Biến đổi Fourier nhanh (FFT) - Bộ lọc Finite Impulse Response (FIR) - Giải thuật SHA-3 (Keccak) - Giải thuật SHA - Giải thuật Inflexion Point Method (IPM) - Giải thuật Fast Discrete Curvelet Transform (FDCT) Trong trình luận văn này, tồn mơi trường mơ kế thừa hồn tồn thêm vào hai tính mới: - Sửa đổi test bench để dump waveform định dạng *.fsdb dùng cho công cụ Debug Verdi - Tích hợp chương trình Core Mark dùng để đo benchmark cho CPU Hình minh họa quy trình chạy mơi trường mơ Hình 23: Các bước chạy mơi trường mơ Pulpino 3.1.2 Cách chạy mô ❖ Thiết lập Tồn mơi trường mơ xây dựng quản lý CMake Do đó, cần cài đặt CMake trước với phiên yêu cầu CMake 2.8.0 Một số phần mềm khác cần cài đặt Python (phiên >=2.6) công cụ chạy mơ ModelSim hay QuestaSim Ngồi ra, trình biên dịch GCC ETH cho CPU RI5CY cần cài đặt sẵn (ri5cy_gnu_toolchain) ❖ Chạy mô Sau chuẩn bị tất phần mềm trình biên dịch, chương trình mơ thực qua bước sau: Bước 1: tạo môi trường làm việc (đặt tên build) mkdir build cd build cp /sw/cmake_configure.riscv.gcc.sh / /cmake_configure.riscv.gcc.sh Sau chạy script trên, tồn mơi trường mơ chuẩn bị kể test case Bước 2: biên dịch phần cứng dùng QuestaSim make vcompile Bước 3: chạy mô test case Chạy mô với giao diện GUI: make .vsim Chạy mô với giao diện Console: make .vsimc Sau chạy xong, kết đặt apps// ❖ Chạy regression Phần mềm CMake hỗ trợ sẵn lệnh ctest để chạy lúc nhiều test case - Lệnh chạy tất test case kiểm tra chức CPU: ctest -L riscv_test -j8 timeout 3000 output-on-failure - Lệnh chạy tất test case đo hiệu suất CPU: ctest -L bench -j8 timeout 3000 output-on-failure 3.1.3 Debug giao diện Verdi Việc sử dụng giao diện Debug công cụ Verdi cho hiệu suất tốt nhiều so với sử dụng giao diện Visualizer Questa Sau chạy mô trên, file waveform tên trace.fsdb đặt apps// Sử dụng lệnh để tiến hành biên dịch phần cứng mở giao diện GUI công cụ Verdi: Lệnh vericom dùng để biên dịch mã nguồn phần cứng testbench thành thư viện Verdi: vericom +systemverilogext+.sv+.SV -sverilog +verilog2001ext+.v -f rtl.lst -f tb.lst Sau dùng lệnh Verdi để mở waveform, option -ssf dùng để dump file *.fsdb cần mở để debug: verdi -sv -ntb_opts -ssv -ssy -ssf /apps//trace.fsdb -top tb Trong đó, rtl.lst list file gồm tất file RTL MCU Pulpino tb.lst list file gồm tất thành phần sử dụng test bench Hình 24: Debug trực quan Verdi 3.2 Kết mơ Để chọn lựa cấu hình phù hợp cho cache, thực nghiệm tiến hành đo hiệu suất số cấu hình cache sau: Direct map: way–1KB, way-2KB, 1way-4KB, 1way-8KB Set Associate : 2way-2KB, 2way-4KB, 2way-8KB, way-4KB, 4way-8KB, 8way-8KB Tất cấu hình sử dụng cache block có độ lớn 128 bit Quá trình đo hiệu suất sử dụng môi trường mô chạy QuestaSim hãng Mentor Graphics Tất ứng dụng dùng để đo hiệu suất CPU RI5CY dự án Pulp đề cập phần 3.1.1 dùng cho thực nghiệm Và đề cập phần thực cache controller (2.3.1), phần cứng cache thực sẵn hai counter để đếm số lần CPU truy cập vào cache đếm số lần cache miss Kết hai counter báo cáo file vsim.log sau lần chạy ứng dụng Sau cấu hình chạy mơ phỏng, kết tỉ lệ “cache miss” cấu hình tổng hợp trình bày bảng kết sau: ứng dụng 1W 1KB 1W 2KB 1W 4KB 1W 8KB 2W 2KB aes_cbc 12.8% 1.58% 0.95% 0.47% 1.84% conv2d 2.36% 0.86% 0.83% 0.43% 0.69% fft 0.72% 0.18% 0.17% 0.14% 0.17% fir 1.33% 0.29% 0.27% 0.08% 0.29% 2W 4KB 2W 8KB 4W 4KB 4W 8KB 8W 8KB 1.01% 0.46% 1.22% 0.40% 0.41% 0.46% 0.45% 0.48% 0.46% 0.47% 0.15% 0.15% 0.15% 0.15% 0.15% 0.23% 0.22% 0.24% 0.23% 0.24% keckak 9.61% 0.59% 0.24% 0.19% 0.77% 0.24% sha 5.38% 0.59% 0.32% 0.32% 0.82% 0.30% ipm 8.47% 3.95% 2.11% 1.38% 4.53% 2.14% fdctfst 2.94% 0.73% 0.68% 0.55% 0.72% 0.58% 0.08% 0.09% 0.08% 0.08% 0.19% 0.23% 0.19% 0.21% 1.25% 1.19% 1.15% 1.19% 0.56% 0.59% 0.58% 0.59% Table 6: Bảng kết đo tỉ lệ cache miss nhớ đệm lệnh Dựa vào bảng kết tỉ lệ “cache miss”, ta rút nhận xét sau: - Tỉ lệ “cache miss” cache sử dụng nhớ với kích thước 1KB 2KB cao Do đó, cần loại bỏ cấu hình way–1KB, way-2KB 2way-2KB khỏi danh sách cấu hình nên sử dụng - Những cấu hình cache có kích thước 8KB có kết tương đồng kết tốt số miss rate - Những cấu hình cache có kích thước 4KB cho kết tương đối tốt khơng cấu hình cache có kích thước 8K, cấu hình Way-4KB cho kết tốt so với cấu hình 1Way-4KB 2Way4KB, đặc biệt ứng dụng ipm Chương Kết luận Trong báo cáo mô kiến trúc nhớ đệm cho xử lí RISC V sử dụng ngôn ngữ mô tả phần cứng.Kết thực mong muốn ,tuy nhiều thiếu sót mong giáo bạn góp ý để báo cáo hoàn thiện Tài liệu tham khảo [1] A Waterman, "Design of the RISC-V Instruction Set Architecture," University of California at Berkeley, 2016 [2] https://www.slideshare.net/thuylanhlung94/kin-trc-my-tnh-v-hp-ng-bi-05 [3] https://123docz.net/document/8128778-thiet-ke-loi-mem-cho-bo-xu-lytheo-kien-truc-risc.htm [4] https://www.fpga4student.com/2017/04/verilog-code-for-16-bit-riscprocessor.html [5] https://trongtranrvc.blogspot.com/2019/09/designthiet-ke-cpu-32-bit-bai1-cac.html ... Pulpino cần thiết kế hoàn toàn nhớ đệm cho lệnh (I$), nhớ đệm cho liệu (D$) điều khiển nhớ FRAM Tuy nhiên, giới hạn thời gian luận văn này, có nhớ đệm lệnh thiết kế đánh giá trước Thiết kế thực module... thước hạn chế Bộ nhớ đệm L1 thường sử dụng để lưu trữ liệu mà CPU truy cập gần hay liệu mà CPU cần xử lý Bộ nhớ đệm thường chia thành hai nhớ đệm riêng có chức khác nhau, dành cho mã lệnh (instruction... hệ thống Pulpino hướng mở cho đề tài Ngoài nhớ đệm lệnh thiết kế mới, bus liệu AXI4 cần sửa đổi thiết kế để tăng thêm cổng slave dành cho I$ thêm cổng master dành cho kết nối với FRAM 26 Hình

Ngày đăng: 11/08/2021, 15:58

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • Danh sách các từ viết tắt

  • Danh sách hình vẽ

  • Danh sách bảng

  • Chương 1. Cơ sở lý thuyết

    • 1.1 Sơ lược về kiến trúc tập lệnh RISC-V

      • 1.1.1 Tổng quát

      • 1.1.2 Kiến trúc tập lệnh cơ sở

      • 1.1.3 Kiến trúc tập lệnh mở rộng

      • 1.2 Vi xử lý RI5CY

        • 1.2.1 Giới thiệu vi xử lý RI5CY

        • 2.2.2 Kiến trúc tập lệnh mở rộng

        • 1.2.3 Vi kiến trúc

        • 1.3 Sơ lược về vi điều khiển Pulpino

          • 1.3.1 Giới thiệu

          • 1.3.3 Bản đồ truy cập bộ nhớ

          • 1.4 Bộ nhớ đệm lệnh

            • 1.4.1 Giới thiệu

            • 1.4.2 Kiến trúc của bộ nhớ lệnh

            • 1.5 Sử dụng systemverilog để thiết kế phần cứng

              • 1.5.2 always_comb, always_latch, always_ff

              • 1.5.4 Interface

              • 1.5.5 Package

              • 1.6 Bộ nhớ FRAM

                • 1.6.1 Giới thiệu về FRAM

                • Chương 2. Thiết kế và hiện thực

                  • 2.1 Vi kiến trúc của MCU Pulpino

                  • 2.2 Kiến trúc tổng quát của bộ nhớ đệm lệnh

Tài liệu cùng người dùng

Tài liệu liên quan