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

Thiết kế bộ nhớ đệm lệnh cho vi xử lý RISC-V

65 557 8

Đ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

Định dạng
Số trang 65
Dung lượng 1,75 MB

Nội dung

đều có những bằng sáng chế trên kiến trúc tập lệnh mà họ đang sở hữu, do đó các công ty này đều tính phí bản quyền đối với việc sử dụng kiến trúc tập lệnh của các công ty này đồng thời n

Trang 1

ĐẠI HỌC QUỐC GIA TP HCM

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

NGUYỄN VĂN LINH

THIẾT KẾ BỘ NHỚ ĐỆM LỆNH CHO VI XỬ LÝ RISC-V

Ngành: KHOA HỌC MÁY TÍNH Mã số: 60480101

LUẬN VĂN THẠC SĨ

TP HỒ CHÍ MINH, tháng 7 năm 2019

Trang 2

CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG TP HCM

Cán bộ hướng dẫn khoa học: TS Phạm Quốc Cường

Cán bộ chấm nhận xét 1: PGS.TS Phan Công Vinh

2 TS Nguyễn Trần Hữu Nguyên

3 PGS.TS Phan Công Vinh

Trang 3

ĐẠI HỌC QUỐC GIA TP.HCM

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

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do - Hạnh phúc

NHIỆM VỤ LUẬN VĂN THẠC SĨ

• • • •

Ngày, tháng, năm sinh: 10/09/1987

TÊN ĐỀ TÀI: Thiết kế bộ nhớ đệm lệnh cho vi xử lý RISC-V

NHIỆM VỤ VÀ NỘI DUNG:

• Nghiên cứu tổng quát yêu cầu của một hệ thống vi điểu khiển IoT

• Nghiên cứu kiến trúc tập lệnh RISC-V, vi kiến trúc của một CPU sử dụng kiến trúc tập lệnh này Nghiên cứu chi tiết về vi điều khiển IoT Pulpino sử dụng CPU RISC-V

• Thiết kế, hiện thực và tích họp bộ nhớ đệm lệnh vào vi điều khiển IoT Pulpino Xây dựng nền tảng để mô phỏng, tổng hợp, đo lường năng lượng tiêu thụ nhằm đánh giá thiết kế của hệ thống

NGÀY GIAO NHIỆM VỤ : 11/02/2019

NGÀY HOÀN THÀNH NHIỆM VỤ : 02/06/2019

CÁN Bộ HƯỚNG DẪN : TS Phạm Quốc Cường

Trang 4

LỜI CẢM ƠN

Lời đầu tiên tôi xin chân thành cảm ơn tói Thầy hướng dẫn, TS Phạm Quốc Cường đã tin tưởng giao đề tài, hỗ trợ công cụ và hướng dẫn tôi tận tình trong suốt quá trình thực hiện luận văn này

Tôi cũng xin cảm ơn các anh em kĩ sư tại công ty Marvell, trưởng nhóm Nguyễn Văn Quang Ánh, các đồng nghiệp Phạm Quang Huy, Trần Tấn Đức đã giúp đỡ, hỗ trợ công việc trong lúc tôi thực hiện luận văn này, và có những góp

ý quý báu đối với kiến trúc của thiết kế mới

Cuối cùng xin cám ơn gia đình và vợ tôi đã luôn ủng hộ và động viên tôi trong suốt thời gian qua

Trang 5

TÓM TẮT LUẬN VĂN

Những dự án nghiên cứu IoT dự báo sẽ có hon 20 tỷ thiết bị sử dụng trong mạng này trong thập kỷ tới Những thiết bị này có những đặc điểm riêng như yêu cầu khắt khe về mức tiêu thụ năng lượng thấp, đa dạng về các mức độ ứng dụng nên cần hiệu năng xử lý cũng đa dạng từ đơn giản đến phức tạp Ngoài ra, với nhu cầu về số lượng lớn các thiết bị cho nên yêu cầu giá thành cần rẻ Tù những yêu cầu đó, luận văn đặt mục tiêu đi nghiên cứu và tìm giải pháp cải tiến cho những vi điều khiển sử dụng cho lĩnh vực IoT này

Vi kiến trúc thường gặp của các vi điều khiển nói chung, đặc biệt là các vi điều khiển sử dụng CPU ARM là sử dụng những bộ nhớ SRAM lớn mà CPU có thể truy cập trực tiếp gọi là những bộ nhớ “tightly-coupled” Mặc dù dữ liệu được truy cập nhanh, nhưng SRAM có giá thành cao và phải luôn duy trì nguồn cấp

để lưu trữ dữ liệu Việc sử dụng kiến trúc bộ nhớ như vậy thường không phù họp với những ứng dụng IoT, đặc biệt là khi cần tăng hoặc giảm kích thước bộ nhớ cho những ứng dụng phức tạp hơn hoặc đơn giản hơn Vi điểu khiển IoT Pulpino cũng là một vi điều khiển của kiến trúc bộ nhớ như vậy

Trong luận văn này, tác giả đề xuất một vi kiến trúc mới cho vi điều khiển IoT Pulpino và hiện thực một phần vi kiến trúc mới đó thông qua thiết kế và hiện thực phần cứng bộ nhớ đệm lệnh Sau đó, thiết kế này được tích họp vào vi điều khiển IoT Pulpino và được đánh giá toàn diện qua các môi trường mô phỏng, tổng hợp và đo lường năng lượng tiêu thụ Ket quả thực nghiệm cho thấy việc thay thế bộ nhớ “tightly-coupled” bằng bộ nhớ đệm lệnh với % kích thước SRAM nhỏ hơn có thể cho hiệu suất tương đương với điểm CoreMark không thay đổi so với thiết kế gốc Ket quả thời gian truy cập bộ nhớ trung bình AMAT chỉ khoảng từ 1.01 đên 1.13 chu kì clock, nhưng giúp cho tống khối lượng cống

và năng lượng tiêu thụ của vi điều khiển Pulpino giảm lên đến 27%

Trang 6

ABSTRACT

IoT research projects are expected to have more than 20 billion devices used in this network in the next decade These devices have their own characteristics such as stringent requirements for low energy consumption, variety of application levels, so the processing performance varies from simple

to complex In addition, with the demand for a large number of devices, the price needs to be low From those requirements, the thesis aims to research and find innovative solutions for microcontrollers used for this IoT field

Common micro architectures of microcontrollers in general, especially microcontrollers using ARM CPUs, use large SRAM memories that CPU can access directly called "tightly-coupled" memory Although the data is quickly accessed, SRAM has a high cost and must maintain the power source to retain data Using such memory architecture is not suitable for IoT applications, especially when it is necessary to increase or reduce the memory size for more complex or simpler applications Pulpino is also an IoT microcontroller of such memory architecture

In this thesis, the author proposes a new microarchitecture for IoT Pulpino microcontroller and implements a part of that new microarchitecture through the design and implementation of an instruction cache hardware Then, this design

is integrated into the Pulpino IoT microcontroller and is comprehensively evaluated through simulation, synthesis and power consumption estimation environments Experimental results show that, with % SRAM smaller, instruction cache design can give equivalent performance as "tightly-coupled" memory with same benchmark score from CoreMark The average memory access time AMAT only ranges from 1.01 to 1.13 clock cycles but help the Pulpino microcontroller's total gate size reduction of and power consumption reduction of up to 27%

Trang 7

LỜI CAM ĐOAN

Tôi cam đoan rằng, ngoại trù các kết quả tham khảo tù các công trình khác như đã ghi rõ trong luận văn, các công việc trình bày trong luận văn là do chính tôi thực hiện và chưa có phần nội dung nào của luận văn này được nộp để lấy một bằng cấp ở trường này hoặc trường khác

Ngày 02 tháng 6 năm 2019

Nguyễn Văn Linh

Trang 8

Danh sách các 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

Trang 9

Danh sách hình vẽ

Hình 2.1: Định dạng lệnh của RISC-V 18

Hình 2.2: Sơ đồ khơi của CPU RI5CY 22

Hình 2.3: kiến trúc pipe-line của CPU RI5CY 23

Hình 2.4: Minh họa giao thức truy cập bộ nhớ (cơ bản) 25

Hình 2.5: Minh họa giao thức truy cập bộ nhớ (Back-to-back) 25

Hình 2.6: Minh họa giao thức truy cập bộ nhớ (đáp ứngchậm) 25

Hình 2.7: Sơ đồ khối của vi điều khiển Pulpino 26

Hình 2.8: Bản đồ truy cập bộ nhớ của vi điều khiển Pulpino 27

Hình 2.9: Mô hình bộ vi xử lý với 3 cấp bộ nhớ đệm 28

Hình 2.10: Sơ đồ khối của vi điều khiển MSP430FR5739 35

Hình 2.11: Sơ đồ khối của FRAM controller của MCU MSP430 36

Hình 3.1: Vi kiến trúc mới được đề xuất cho Pulpino 38

Hình 3.2: Kiến trúc thiết kế của bộ nhớ đệm lệnh 39

Hình 3.3: Sơ đồ khối tổng quát của khối cache controller 40

Hình 3.4: Khối HiƯmiss judgement 41

Hình 3.5: Khối WRU hiện thực bằng LFSR 8 bit 42

Hình 3.6: Khối CTRL FSM 42

Hình 3.7: Khối Performance stat 44

Hình 3.8: Khối AXI Double Buffer 44

Hình 3.9: Bộ nhớ SRAM single port 45

Hình 3.10: cổng inpuưoutput của cache top module 46

Hình 3.11: cổng inpuưoutput của cache controller 47

Hình 3.12: Verdi schematic của top cache module 48

Hình 4.1: Kiến trúc môi trường mô phỏng của Pulpino 49

Hình 4.2: Các bước chạy của môi trường mô phỏng Pulpino 51

Hình 4.3: Debug trực quan bang Verdi 52

Hình 4.4: Biểu đồ kết quả AMAT 55

Hình 4.5: Biểu đồ phân tích năng lượng của Pulpino gốc 57

Hình 4.6: Biểu đồ so sánh năng lượng giữa các cấu hình cache 58

Trang 10

Danh sách bảng

Bảng 1.1: Những CPU RISC-V tiêu biểu 14

Bảng 2.1: Bảng các tập lệnh cơ sở và mở rộng của RISC-V 16

Bảng 2.2: Phân loại các nhóm lệnh của tập lệnh RV32I 17

Bảng 2.3: Những thanh ghi điều khiển HW Loop 20

Bảng 2.4: Bảng các inpuưoutput của bộ phát lệnh 24

Bảng 2.5: Bảng so sánh FRAM vói các bộ nhớ khác 34

Bảng 4.1: Bảng kết quả đo tỉ lệ cache miss của bộ nhớ đệm lệnh 53

Bảng 4.2: Bảng so sánh tài nguyên cổng tiêu tốn 54

Bảng 4.3: Bảng so sánh kết quả Benchmark tù CoreMark 56

Bảng 4.4: Bảng so sánh kết quả đo năng lượng bang SpyGlass Power 58

Trang 11

Mục lục

Danh sách các tù viết tắt 7

Danh sách hình vẽ 8

Danh sách bảng 9

CHƯƠNG 1 GIỚI THIỆU LUẬN VĂN 12

1.1 Tổng quan về đề tài 12

1.2 Mục tiêu của đề tài 14

1.3 Giới hạn của đề tài 15

1.4 Bố cục của luận văn 15

Chương 2 Cơ sở lý thuyết 16

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

2.1.1 Tổng quát 16

2.1.2 Kiến trúc tập lệnh cơ sở 17

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

2.2 Vi xử lý RI5CY 19

2.2.1 Giới thiệu vi xử lý RI5CY 19

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

2.2.3 Vi kiến trúc 22

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

2.3.1 Giới thiệu 26

2.3.2 Kiến trúc hệ thống 26

2.3.3 Bản đồ truy cập bộ nhớ 27

2.4 Bộ nhớ đệm lệnh 27

2.4.1 Giới thiệu 27

2.4.2 Kiến trúc của bộ nhớ lệnh 28

2.2.3 Hiệu suất của bộ nhớ lệnh 30

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

2.5.1 Kiểu dữ liệu logic 30

2.5.2 always_comb, always_latch, always_ff 31

2.5.3 Kiểu dữ liệu người dùng tự định nghĩa 31

2.5.4 Interface 31

Trang 12

2.5.5 Package 32

2.6 Đánh giá hiệu suất vi xử lý bằng Core Mark 32

2.6.1 Giới thiệu về Core Mark 32

2.6.2 Chạy và đọc kết quả từ Core Mark 33

2.7 Bộ nhớ FRAM 33

2.7.1 Giới thiệu về FRAM 33

2.7.2 So sánh FRAM với các loại bộ nhớ khác 34

2.8 Các nghiên cứu liên quan 35

Chương 3 Thiết kế và hiện thực 37

3.1 Vi kiến trúc của MCU Pulpino 37

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

3.3 Hiện thực bộ nhớ đệm lệnh 40

3.3.1 Chi tiết hiện thực khối cache controller 40

3.1.2 Chi tiết hiện thực khối AXI double buffer 44

3.1.3 Chi tiết hiện thực khối memory array 45

3.1.4 Kết quả hiện thực bằng SystemVerilog 45

Chương 4 Mô phỏng, tổng họp và thực nghiệm 49

4.1 Môi trường mô phỏng 49

4.1.1 Giới thiệu môi trường mô phỏng 49

4.1.2 Cách chạy mô phỏng 51

4.1.3 Debug bằng giao diện Verdi 52

4.2 Kết quả mô phỏng 53

4.3 Kết quả tổng hợp 54

4.4 Kết quả tính AMAT 55

4.5 Kết quả chạy Benchmark bằng CoreMark 56

4.6 Kết quả so sánh năng lượng tiêu thụ 57

Chương 5 Kết luận 59

5.1 Kết luận 59

5.2 Hướng phát triển 60

Tài liệu tham khảo 62

Trang 13

CHƯƠNG 1 GIỚI THIỆU LUẬN VĂN

1.1 Tổng quan về đề tài

Ngày nay, thuật ngữ Internet of Things (IoT) không còn xa lạ mà đã trở thành xu hướng phát triển nóng ở quy mô công nghiệp Xu hướng này sẽ ảnh hưởng đến mọi mặt của đời sống con người, tù các vấn đề cá nhân (thông qua Smart Wearable-các thiết bị thông minh cá nhân, Smart Home - ngôi nhà thông minh, eHealth-các thiết bị chăm sóc sức khỏe ) cho đến các vấn đề xã hội và doanh nghiệp (thông qua Smart City - thành phố thông minh, Smart environment

- môi trường thông minh, Smart Enterprise - doanh nghiệp thông minh, Industrial control - điều khiển công nghiệp ) Đe phục vụ cho sự phát triển của IoT, một

số lượng lớn các thiết bị đang và sẽ được tạo ra, kết nối với nhau Theo những nghiên cứu mới nhất, số lượng thiết bị IoT toàn cầu đã lên tới hơn 7 tỷ thiết bị, con số này đã vượt qua số thiết bị di động sử dụng trên toàn cầu Cụ thể, theo IoT Analytics, số lượng thiết bị IoT trên toàn cầu là hơn 7 tỷ thiết bị vào năm

2018 và ước tính sẽ có 22 tỷ thiết bị vào năm 2025 Trong khi đó, theo Gartner,

số lượng thiết bị IoT trên toàn cầu là 14.2 tỷ thiết bị vào năm 2019 và ước tính

sẽ có 25 tỷ thiết bị vào năm 2021

Các thiết bị dùng trong mạng IoT hầu hết đều tích họp ít nhất một bộ vi

xử lý để phục vụ cho việc kết nối, thu thập, xử lý, điều khiển, lưu trữ và truyền tải dữ liệu, cũng như đưa các quyết định tương tác ngược lại vói bên ngoài Do

đó nhu cầu số lượng vi xử lý còn cao hơn số lượng thiết bị IoT Cộng thêm là các thiết bị dùng trong mạng IoT yêu cầu vi xử lý cần có hiệu năng đa dạng tù thấp đến cao nhưng với chi phí thấp và đặc biệt là phải tiết kiệm năng lượng Điều đó đặt ra những thách thức mới cho các nhà sản xuất thiết bị khi lựa chọn các bộ vi xử lý cho thiết kế của mình

Thứ nhất, hiện tại những công ty thành công với kiến trúc tập lệnh của mình đang thống trị thị trường vi xử lý như Intel, ARM, IBM, đều có những bằng sáng chế trên kiến trúc tập lệnh mà họ đang sở hữu, do đó các công ty này đều tính phí bản quyền đối với việc sử dụng kiến trúc tập lệnh của các công ty này đồng thời ngăn cấm việc thiết kế các bộ vi xử lý sử dụng kiến trúc tập lệnh của họ nếu không được họ cấp phép Bất kì một thỏa thuận nào liên quan đến bản quyền sử dụng kiến trúc tập lệnh đều phải tốn từ 6-24 tháng trao đối và chi phí phải tốn chừng từ một đến mười triệu đô la Mỹ, và tất nhiên thỏa thuận với trường đại học hay những công ty có quy mô nhỏ lẻ thường bị loại trừ Việc độc quyền đã cản trở sự cạnh tranh và đối mới bằng việc ngăn không cho nhiều người thiết kế và chia sẻ những vi xử lý có những kiến trúc tập lệnh tương thích với nhau [1]

Trang 14

Thứ hai, các sản phẩm vi xử lý được thiết kế mang tính chất tổng quát cho mỗi phân khúc sản phẩm nhất định, không tùy chỉnh được thiết kế để tối ưu về hiệu năng xử lý, mức tiêu thụ năng lượng và giá cả cho tùng dòng sản phẩm IoT

Thứ ba, mỗi kiến trúc tập lệnh của mỗi hãng sử dụng một hệ sinh thái phần mềm riêng, làm tăng chi phí phát triển Thậm chí trên cùng một thiết bị lại

sử dụng nhiều phần mềm khác nhau của những kiến trúc tập lệnh khác nhau

Những thách thức đó là tiền đề, là động lực để cho ra đời những vi xử lý

mã nguồn mở đi cùng là những kiến trúc tập lệnh miễn phí nhưng thống nhất Một trong số đó là RISC-V (phát âm là "risk-five", RISC viết tắt tù Reduced Instruction Set Computer), là một kiến trúc tập lệnh mở, được xây dựng dựa trên những nguyên tắc của kiến trúc tập lệnh RISC, đã và đang thu hút được sự phát triển và ứng dụng tù các nhà khoa học cũng như các công ty sử dụng vi xử lý trên thế giới Trái ngược với hầu hết các kiến trúc tập lệnh khác, RISC-V hoàn toàn miễn phí cho bất kỳ mục đích sử dụng nào Nó cho phép bất kỳ ai có thể thiết kế, sản xuất và bán các sản phẩm phần cứng và phần mềm sử dụng RISC-

V Điều đó sẽ đem đến rất nhiều lợi ích quan trọng cho nền công nghiệp máy tính nói chung và sự phát triển của IoT nói riêng, như lôi kéo được nhiều ý tưởng sáng tạo thiết kế hơn, các thiết kế bộ vi xử lý có thể được trao đổi, tái sử dụng,

dễ tối ưu hơn làm cho chi phí của bộ vi xử lý trở nên rẻ và phù họp với các ứng dụng kiểu như IoT [1]

Ngoài ra RISC-V còn có những mong muốn khác là tạo ra một kiến trúc tập lệnh tiêu chuẩn chung để có thể thống nhất và tái sử dụng phần mềm trên nhiều hệ thống khác nhau và ổn định trong vài chục năm thay vì sử dụng nhiều kiến trúc tập lệnh khác nhau trên cùng một hệ thống System on Chip (SOC) như trước đây Đe hiện thực điều đó, RISC-V cho phép mở rộng tập lệnh theo hướng phù hợp cho từng ứng dụng cụ thể, thông qua phần tập lệnh mở rộng (tiêu chuẩn hoặc do người thiết kế CPU tự định nghĩa)

RISC-V được phát triển lần đầu tiên bởi Đại học California, Berkeley vào năm 2010 Cho đến nay đã có hàng chục bộ vi xử lý được phát triển dựa trên kiến trúc tập lệnh này nhắm vào nhiều mục đích ứng dụng và phân khúc khác nhau Dưới đây là một số sản phẩm CPU RISC-V tiêu biểu:

Trang 15

RISC-V CPU Nhà phát triển KT tập lệnh Sản phẩm mục tiêu

nhân

Bologna

Bảng 1.1: Những CPURISC-Vtiêu biểu Việc đề xuất và hiện

thực một kiến trúc tập lệnh mới để có thể sử dụng được là rất tốn kém Bởi vì những người thiết kế máy tính thường không đủ khả năng tài chính để làm việc miễn phí và việc phát triển vi xử lý dựa trên kiến trúc tập lệnh mới còn đòi hỏi chuyên môn, kinh nghiệm thiết kế rất cao của nhiều chuyên ngành như điện tử

kỹ thuật số, trình biên dịch, hệ điều hành, kỹ thuật phần mềm Ngoài ra, cần

có các công cụ để mô phỏng, kiểm tra chất lượng, kiểm thử chức năng, tổng họp

ra mạch điện tử và đo lường các thông số về tiêu tốn năng lượng của thiết kế Các công cụ này cần phải mua bản quyền và cũng rất tốn kém Vì vậy, khó kiếm được một đội thiết kế độc lập nào bên ngoài các công ty thiết kế vi xử lý chuyên nghiệp (như ARM, Intel, IBM, MIPS ) để đứng ra xây dựng kiến trúc tập lệnh mới như RISC-V Do đó, việc đóng góp tù rất nhiều thành viên đến tù cộng đồng

sử dụng RISC-V mang ý nghĩa quyết định đến sự thành công của kiến trúc tập lệnh mới này Đó cũng là một trong những ý nghĩa mà luận văn này muốn hướng đến, đó là tham gia vào tìm hiểu, sử dụng, thiết kế, kiểm định và đánh giá sản phẩm liên quan đến kiến trúc tập lệnh RISC-V

Ngoài ra, như đề cập ở phía trên, nhu cầu của các sản phẩm IoT rất đa dạng về hiệu năng xử lý cũng như hiệu quả trong sử dụng năng lượng, và giá cả phải rẻ [5], cho nên cần có nhiều giải pháp thiết kế linh hoạt đáp ứng từng dòng sản phẩm IoT cụ thể Do đó, luận văn này cũng hướng đến việc đề xuất một thay đối thiết kế đóng góp thêm giải pháp cho các sản phẩm IoT

1.2 Muc tiêu của đề tài

Mục tiêu của đề tài cụ thể như sau:

• Tìm hiểu về kiến trúc tập lệnh mới RISC-V và về một vi xử lý điển hình hiện thực kiến trúc tập lệnh này

Trang 16

• Tìm hiểu về vi điều khiển Pulpino là một vi điều khiển sử dụng vi xử lý RISC-V được phát triển hướng đến các sản phẩm IoT

• Đề xuất và hiện thực một bộ nhớ đệm lệnh, tích họp vào vi điều khiển Pulpino nhằm giúp cho vi điều khiển này có thiết kế linh hoạt hơn, tốn ít tài nguyên và năng lượng hơn

• Thiết lập một nền tảng hỗ trợ cho việc học tập, nghiên cứu kiến trúc máy tính cũng như thiết kế phần cứng tại trường Đại học Bách Khoa TPHCM

1.3 Giói hạn của đề tài

Đề tài sẽ tập trung nghiên cứu kiến trúc vi xử lý RI5CY và thiết kế của vi điều khiển Pulpino nằm trong dự án PULP, cùng với môi trường mô phỏng sử dụng ModelSim của vi điều khiển này Ngoài ra, đề tài sẽ tìm hiểu và xây dựng những môi trường khác để có thể đánh giá thiết kế trước và sau khi sửa đổi như môi trường tổng họp bằng công cụ Genus, môi trường đo hiệu suất CPU bằng ứng dụng CoreMark hay môi trường đo năng lượng tiêu thụ bằng công cụ SpyGlass Power

1.4 Bố cuc của luân văn

• •

Luận văn được chia thành 5 chương sắp xếp theo bố cục sau:

Chương 2: Trình bày những cơ sở lý thuyết được sử dụng có liên quan đến đến những nội dung nghiên cứu của đề tài như giới thiệu tổng quan kiến trúc tập lệnh mở RISC-V, về thiết kế hệ thống của vi điều khiển Pulpino và vi xử lý được sử dụng trong vi điều khiển này là vi xử lý RI5CY, kiến thức tóm tắt bộ nhớ đệm lệnh cũng như các nghiên cứu liên quan đến đề tài của luận văn

Chương 3: Đây là chương trọng tâm của luận văn Chương này phân tích

và đề xuất thay đối vi kiến trúc của vi điều khiển Pulpino cùng với kiến trúc thiết

kế tống quát cho bộ nhớ đệm lệnh Đồng thời, phần sau của chương này sẽ trình bày chi tiết về cách hiện thực thiết kế của bộ nhớ đệm lệnh

Chương 4: Chương này trình bày về môi trường mô phỏng, cách thức tiến hành thực nghiệm, báo cáo và phân tích kết quả thực nghiệm

Chương 5: Đây là chương để đúc kết lại luận văn và đưa ra đề xuất cho hướng phát triển tiếp theo của đề tài

Trang 17

Chương 2 Cơ sở lý thuyết 2.1 Sơ lược về kiến trúc tập lệnh RISC-V

2.1.1 Tổng quát

Kiến trúc tập lệnh RISC-V được thiết kế theo kiểu module nhằm cho phép các nhà phát triển vi xử lý RISC-V 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ọ RISC-V định nghĩa kiến trúc tập lệnh số nguyên 32-bit 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ý RISC-V đã 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ớ .w đủ để 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ý RISC-V 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 RISC-V hoặc tập lệnh mở rộng phi tiêu chuẩn của nhà phát triển vi

xử lý RISC-V cho một sản phẩm mục tiêu nhất định

Tên viết tắt

của tập lệnh

Bảng 2.1: Bảng các tập lệnh cơ sở và mở rộng của RISC-V

Đe hỗ trợ tốt hơn cho việc phát triển hệ sinh thái phần mềm của vi xử lý RISC-V, nhà sáng lập RISC-V đã cung cấp sẵn một tập các 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), các toán tử nguyên tử (tập A), phép toán với số thực dấu phay động độ chính xác đơn (tập F), phép toán với số thực dấu phay động độ chính xác kép (tập D) Một kiến trúc tập lệnh

hỗ trợ tập lệnh cơ bản I cùng với tất cả các tập lệnh vừa nêu (M, A, F, D) gọi là kiến trúc tập lệnh đa mục đích, viết tắt là tập G, ví dụ như RV32G Ngoài ra, nhà sáng lập RISC-V còn cung cấp một tập lệnh mở rộng tiêu chuẩn hữu ích nữa là tập lệnh nén để giảm kích thước của mã máy (tập C)

Trang 18

2.1.2 Kỉến trúc tập lệnh cơ sở

Kiến trúc tập lệnh cơ sở đầu tiên và cơ bản nhất được RISC-V định nghĩa

là kiến trúc tập lệnh RV32I, bao gồm 47 lệnh có thể được phân chia dựa trên chức nầng và opcode thành 8 nhóm như sau:

Branch Inst 11_00G_11 BEQ, BNE, BLT = BGE : BLTLỊ, BGEU

ADD, SUB SLL, SLT SLTU XOR, SRL SRA s

OR AND MUL, MULH* MULHSỤ MULHỤ DIV, DF.U REM

SCALL, SBREAK, RDCYCLE, RDCYCLEH

RDTIME RDT1MEEL RDINSFKET, RDINSTRETH, FRCSR, FRRM, FRFLA' GS, FSCSR, FSRMFS FLAGS, FSRME, FSFLSGSI

00 oil 11

LUL AUIPC

JAL JALR FENCE, FENCE.!

Bảng 2.2: Phân loại cảc nhỏm lệnh của tập lệnh RV32I

Nếu xét về định dạng của lệnh thì RV32I được chia thành sáu nhóm: R~ type, I-type, S-type, B-type, Ư-type, J-type Trong đó R, I, s, u là bốn nhóm chính, hai nhóm B và J giống hoàn toàn nhóm s u ngoại trừ khác nhau về phần toán tử “immediate”

Trang 19

31 30 25 24 21 20 19 15 14 12 11

funct7 rs2 rsl funct3 rd opcode R-type

I-type S-type B-type

U-type J-type

Ngoài ra RV32I có nghĩa là không gian địa chỉ là 32-bit và sử dụng little endian

Tuơng ứng, RV64I có nghĩa là không gian địa chỉ là 64-bit và RV128I có không gian địa chỉ là 128-bit RV64I và RV128I cũng đuợc xem là những kiến trúc tập lệnh cơ sở Bên cạnh đó, còn một kiến trúc tập lệnh cơ sở nữa là RV32E định nghĩa cho những hệ thống nhúng RV32E chỉ có 16 thanh ghi 32-bit registers và những bộ đếm của RV32I đuợc tùy chọn có hay không

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

Nhu danh sách các kiến trúc tập lệnh cơ bản và mở rộng của RISC-V đề cập

ở trên, RISC-V định nghĩa rất nhiều tùy chọn tập lệnh mở rộng Trong số đó, một

số đã hoàn thiện về đặc tả kĩ thuật, còn lại vẫn còn đang phát triển Duới đây là những mở rộng đã đóng băng về đặc tả:

• M: tập những lệnh nhân chia số nguyên

• A: tập những 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 những lệnh nén (16-bit) để giảm kích thuớc của mã lệnh

Những tập lệnh mở rộng đang đuợc phát triển và sẽ đóng băng đặc tả trong tuơng lai gần là 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)

Trang 20

2.2 Vi xử lý RI5CY

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

RI5CY là vi xử lý có thiết kế tương đối hoàn thiện dựa trên kiến trúc tập lệnh RISC-V nằm trong dự án PULP, là một dự án ngay từ ban đầu hướng đến phát triển các thiết kế tối ưu về năng lượng tiêu thụ phục vụ cho các sản phẩm IoT

PULP là dự án hợp tác giữa phòng thí nghiệm các hệ thống tích hợp (IIS) của viện công nghệ liên bang Thụy Sĩ (ETH Zurich) và phòng thí nghiệm các hệ thống nhúng hiệu quả năng lượng của Đại học Bologna (Ý) nhằm phát triển một nền tảng nghiên cứu phần cứng và phần mềm với tiêu chí tối ưu năng lượng nhất Hiện tại PULP đang phát triển 3 dòng vi xử lý dùng cho 3 phân khúc khác nhau bao gồm:

• Lõi giá thành thấp: gồm hai vi xử lý 2 tang pipeline Zero-riscy (hỗ trợ kiến trúc tập lệnh RV32IMC) và Micro-riscy (hỗ trợ kiến trúc tập lệnh RV32EC) là những vi xử lý được tối ưu ở mức cao nhất hướng đến những ứng dụng vi điều khiển đơn thuần hoặc có kết hợp với tính toán số học đơn giản Hai vi xử lý này có kiến trúc khá tương đồng với hai lõi CPU ARM Cortex M0/M0+

• Vi xử lý RI5CY 4 tầng pipeline hỗ trợ kiến trúc tập lệnh RV32IMC[F]X cùng với một số mở rộng thêm của riêng vi xử lý này như vòng lặp phần cứng (HW loops), một số phép tính trên kiểu bit (bits manipulation), những lệnh LOAD-STORE có địa chỉ tự động tăng hướng đến những ứng dụng cần tính toán trên dữ liệu Bộ vi xử lý này có kiến trúc khá tương đồng với hai lõi CPU ARM Cortex M4/M4F

• Vi xử lý 64-bit Ariane 6 tang pipeline hỗ trợ kiến trúc tập lệnh RV64IMC,

có thể hỗ trợ hệ điều hành Linux Bộ vi xử lý này được phát triển để so sánh và cạnh tranh với CPU ARM Cortex M7

Cụ thể, vi xử lý RI5CY có kiến trúc tập lệnh được mô tả chi tiết như dưới đây:

• Hỗ trợ đầy đủ cho tập lệnh cơ bản 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ạngló-bit)

• Hỗ trợ đầy đủ cho phần mở rộng phép nhân và chia RV32M

• Tùy chọn hỗ trợ đầy đủ cho dấu chấm phay động độ chính xác đơn RV32F (khối FPU được tùy chọn hỗ trợ hay không)

• Ngoài ra, RI5CY còn có các phần mở rộng riêng của dự án PULP không thuộc kiến trúc tập lệnh tiêu chuẩn (hay còn gọi là RV32X) Phần kiến trúc tập lệnh mở rộng này sẽ được đề cập ở mục tiếp theo

Trang 21

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

Bên cạnh tập trung xây dựng vi kiến trúc của RI5CY dựa trên kiến trúc tập lệnh chuẩn RV32IMFC của RISC-V nhằm đạt đuợc hiệu suất và code density tuơng đuong với những vi xử lý cùng phân khúc sử dụng kiến trúc tập lệnh bản quyền nhu dòng ARM Cortex-M, nhóm PULP đã cố gắng nghiên cứu mở rộng tập lệnh và tối ưu vi kiến trúc của RI5CY để tăng cường hiệu xuất xử lý đồng thời tối ưu về năng lượng tiêu thụ khi vi xử lý này hướng đến sản phẩm IoT

• Lệnh Load và Store có địa chỉ bộ nhớ tự động tăng:

Trong lúc RI5CY đang thực hiện lệnh truy cập bộ nhớ với địa chỉ hiện tại thì nó cũng tự động tính địa chỉ cho lệnh Load và Store tiếp theo dựa vào địa chỉ hiện tại và tham so offset có sẵn Mục đích của lệnh mở rộng này

là giảm thiểu số lượng lệnh cần cho việc thực thi đọc ghi vào một vùng nhớ có địa chỉ tăng dần thường được tìm thấy trong các vòng lặp Lệnh

mở rộng này có thể tăng tốc vi xử lý lên tói 20% nếu việc truy cập vùng nhớ có địa chỉ tăng dần là thường xuyên, ví dụ như trong phép nhân ma trận

• Vòng lặp phần cứng:

Tương tự như mở rộng phía trên là lệnh Load và Store có địa chỉ bộ nhớ

tự động tăng, vòng lặp phần cứng được thêm vào nhằm giảm chi phí phát lệnh của vi xử lý Ngoài ra, nó còn giúp cho không tốn bất kỳ chu kì nào (zero stall cycles) cho việc thực hiện lệnh jump về đầu vòng lặp mỗi khi kết thúc vòng lặp

Một vòng lặp phần cứng được xác định bằng địa chỉ bắt đầu (trỏ vào lệnh đầu tiên trong vòng lặp), địa chỉ kết thúc (trỏ vào lệnh cuối cùng trong vòng lặp) và một bộ đếm giảm dần khi mỗi lần vòng lặp thực thi xong Vi

xử lý có sẵn hai tập thanh ghi dành cho vòng lặp phần cứng nên nó hỗ trợ được hai vòng lặp lồng nhau Đe sử dụng vòng lặp phần cứng thì phần mềm cần thiết lập nội dung những thanh ghi trong bảng sau:

Bảng 2.3: Những thanh ghi điều khiến HW Loop

Trang 22

• Phép nhân tích lũy:

Để hỗ trợ tốt hơn cho các tính toán xử lý tín hiệu số, RI5CY hiện thực bốn

mô đun: một bộ nhân 32bitx32bit, một bộ nhân phân số, và hai bộ nhân tích vô hướng Ket họp những mô đun này giúp cho RI5CY có khả năng

hỗ trợ được phép nhân 2 véc tơ, phép nhân tích lũy (MAC) và phép nhân dấu chấm tĩnh

- Hỗ trợ lệnh clip giúp cho các phép số học dấu chấm tĩnh hiệu quả hơn

- Các phép tính toán trên dữ liệu kiểu bit

Trang 23

Là một kiến trúc pipeline in-order nên có nhược điểm là nếu một lệnh chỉ cần tới tầng EX là hoàn thành vẫn phải đợi lệnh trước hoàn thành ở tầng WB Như thể hiện ở hình 2.3, tín hiệu điều khiển ex_ready bị chi phối bởi tín hiệu rvalid từ bộ nhớ dữ liệu từ bên ngoài

Hình 2.3 (phía dưới) thể hiện những tín hiệu điều khiển liên quan đến hoạt động của pipeline Tín hiệu điều khiển chính là *_ready thể hiện sự sẵn sàng của từng tang pipeline được truyền từ phải sang trái Và mỗi tang pipeline có hai tín hiệu điều khiển đi vào: E(enable) và c (Clear) Tín hiệu E tích cực cho tang pipeline chuyển tới lệnh tiếp theo còn tín hiệu c xóa bỏ lệnh hiện tại ra khỏi tang pipeline vì nó đã hoàn thành

Mỗi tầng pipeline phụ thuộc vào tầng kế tiếp nhưng độc lập với tầng phía trước, có nghĩa là nó có thể hoàn thành công việc của nó không phụ thuộc vào việc tầng phía trước có đang bị stall hay không Ở mặt khác, một lệnh chỉ có thể được chuyển qua tầng kế tiếp khi tầng kế tiếp sẵn sàng nhận lệnh tiếp theo (bằng cách đặt *_ready lên 1)

Trang 24

Hình 2.3: kiến trúc pipe-line của CPU RI5CY

❖ Khối phát lệnh Khối phát lệnh IF sử dụng một Prefetch buffer Bộ đệm này được sử dụng

để tối ưu hiệu suất, đặc biệt là đối với phần mở rộng “vòng lặp phần cứng” sẽ cần 4-8 lệnh có sẵn để thực thi vòng lặp, ngoài ra nó còn mang ý nghĩa cân bang timing (timing closure) Prefetch buffer này có hai cấu hình để lựa chọn:

• Một FIFO gồm 3 entry, mỗi entry là 32 bit

• Một cache line 128-bit Cache line này có thể chứa tối thiểu 4 lệnh 32- bit hoặc 8 lệnh 16-bit

Bộ đệm tìm nạp trước này phát lệnh tù bộ nhớ bên ngoài hay bộ nhớ đệm lệnh thông qua interface và giao thức tương tự như khối Load-Store Unit (LSU) của tang WB, chỉ khác là phần phát lệnh là chỉ đọc nên ít tín hiệu giao tiếp hơn Bảng sau sẽ mô tả những tín hiệu mà bộ Prefetch buffer sử dụng:

Trang 25

Tín hiêu

giữ giá trị một cho đến khi instr_gnt_i lên 1 được ít nhất một chu kỳ

Dữ liệu lệnh instr_rdata_i sẵn sàng tín hiệu instr_rvalid_i này là 1 Tín hiệu này chỉ lên 1 chỉ trong đúng 1 chu kỳ đối với mỗi lần đọc

Bảng 2.4: Bảng các input/output của bộ phát lệnh

về giao thức mà bộ prefetch buffer sử dụng để giao tiếp với bộ nhớ chứa lệnh bên ngoài (cũng cùng là giao thức mà khối LSU dùng để đọc ghi dữ liệu xuống bộ nhớ dữ liệu) được đặc tả như dưới đây:

Khi LSU bắt đầu một lần truy cập bộ nhớ, nó sẽ cung cấp địa chỉ họp lệ thông qua tín hiệu bus data_addr_o và đặt data_req_o lên 1 Bộ nhớ sau đó sẽ chấp nhận yêu cầu bằng cách đặt data_gnt_i lên 1 ngay khi nó sẵn sàng Việc chấp nhận yêu cầu này có thể xảy ra ngay trong chu kỳ mà LSU đưa ra yêu cầu hoặc có thể là một vài chu kỳ sau đó Sau khi LSU nhận được trả lời chấp nhận yêu cầu tù bộ nhớ, nó có thể tiếp tục bắt đầu một yêu cầu truy cập bộ nhớ mới, tiếp theo Khi đó, những tín hiệu như data addr o, data wdata o, data we o, data_be_o có thể chuyển sang giá trị mới Đồng thời, bộ nhớ có thể trả kết quả truy cập về bằng cách đặt data_rvalid_i lên 1 và giá trị của tín hiệu bus data_rdata_i khi đó có giá trị hợp lệ nếu là yêu cầu là đọc bộ nhớ (nếu yêu cầu là ghi vào bộ nhớ thì data_rvalid_i vẫn lên 1 nhưng giá trị của bus data_rdata_i không cần được quan tâm) Việc trả lời này xảy ra sau một hoặc nhiều chu kỳ từ lúc LSU nhận được tín hiệu chấp nhận

Trang 26

^ ^

Ví dụ minh họa vê biêu đô thòi gian của giao thức:

clk data addr_o

Trang 27

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

2.3.2 Kiến trúc hệ thống

Hình 2.7 dưới đây thể hiện sơ đồ khối của Pulpino

Hình 2.7: Sơ đồ khối của vi điều khiển Pulpino

Vi xử lý RI5CY sử dụng 2 port riêng biệt cho đọc lệnh và đọc ghi dữ liệu

Mã lệnh được tải vào Instr RAM có kích thước 32KB, trong khi đó dữ liệu được đọc ghi vào Data RAM cũng có kích thước 32KB

Bus giao tiếp chính trong vi điều khiển này là AXI4 có độ rộng dữ liệu là 32 bit Các thành phần ngoại vi kết nối vào bus AXI4 này thông qua bus APB và một cầu AXI4-APB, tất cả đều có độ rộng dữ liệu là 32 bit

Pulpino sử dụng khối Adv Debug Unit cho mục đích Debug Khối này có thể truy cập được vào tất cả thanh ghi của vi xử lý và 2 bộ nhớ SRAM thông qua cổng JTAG

Trang 28

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

Bản đồ để truy cập bộ nhớ của Pulpino được phân bố như hình 2.8 dưới đây về cơ bản được chia thành 4 vùng: vùng bộ nhớ lệnh, vùng bộ nhớ Boot ROM, vùng bộ nhớ dữ liệu và vùng bộ nhớ truy cập các module ngoại vi và Debug

OxOOOO 0000

0x0000 8000

0x0008 0000 0x0008 0200

SPI Master

Timer Event/Interrupt Unit

I2C

FLL SoC Control Debug Port

Trang 29

nhanh nhất, cố chỉ phí đắt nhất nên thường có kích thước hạn chế Bộ nhớ đệm

LI này thường được sử dụng để lưu trữ những dữ liệu mà CPU truy cập gần nhất hay dữ liệu tiếp theo mà CPU cần xử lý ngay lập tức Bộ nhớ đệm này thường được chia thành hai bộ nhớ đệm liêng có chức năng khác nhau, một dành cho mã lệnh (instruction cache) và một là dảnh cho dữ liệu mà chương trình cần xử lý (data cache) Hai bộ nhớ đệm này có thể truy cập vào cùng bộ nhớ đệm cấp lớn hơn là L2 cache Kiến trúc điển hình này được mô tả như mô hình dưới đây:

MEMORY BUS

Hình 2.9: Mô hình bộ vi xử ỉý vởi 3 cắp bộ nhớ đệm

Do tính chất đặc trưng của dữ liệu là mã lệnh đã được trình biên dịch xử

lý nên so với bộ nhớ đệm dữ liệu, bộ nhớ đệm lệnh ít phức tạp hơn Luồng của

mã nguồn cỏ thể dễ dự đoán hơn để prefetch và mã nguồn có thể lặp đỉ lặp lại (ví

dụ như vòng lặp) hay đơn gỉản là địa chỉ chứa những lệnh tiếp theo tăng tuyến tính Tóm lại, bộ nhớ đệm lệnh rất tốt về tính cục bộ không gian lẫn thời gian (temporal locality & spatial locality)

28

Trang 30

Mỗi bộ nhớ nhỏ lại được chia nhiều khối dữ liệu có kích cỡ nhỏ hơn, gọi

là cache block Lệnh được chuyển tù bộ nhớ chính lên bộ nhớ đệm cache này theo từng khối có kích thước bang cache block Khi CPU cần đọc lệnh ở một vị trí trong bộ nhớ chính, nó sẽ tìm trong cache đầu tiên, cache sẽ kiểm tra vị trí dữ liệu yêu cầu đã được lưu sẵn trong bất cứ cache block nào hay không Neu có, là cache hit Còn ngược lại, nếu không tìm thấy được vị trí dữ liệu trong cache, thì

là cache miss Trong trường hợp cache hit, CPU đọc lệnh tù cache block lên ngay lập tức Còn nếu là cache miss, cache sẽ tạo một entry mới và sao chép dữ liệu

tù bộ nhớ chính lên cache block tương ứng, sau đó đáp ứng yêu cầu đọc lệnh của CPU

❖ Tag array

Để kiểm tra có cache block nào chứa sẵn lệnh cần đọc hay không (cache hit hay cache miss), một phần của địa chỉ truy cập bộ nhớ gửi tù CPU (gọi là tag field) sẽ được so sánh với những dữ liệu tag đã lưu trước trong Tag array khi nạp

dữ liệu lên cache ở những lần truy cập trước

Ví dụ:

CPU truy cập bộ nhớ để đọc lệnh bằng địa chỉ có độ rộng 24 bit

Cache có kích thước 8KB tổ chức thanh 8-ways Mỗi way có kích thước lkB chia thành 256 cache block, mỗi cache block có kích thước 4 byte

Khi đó, cache dùng 2 bit thấp nhất làm địa chỉ offset cho 4 byte trong mỗi cache block, 8 bit thấp tiếp theo làm tag index để truy cập vào memory array và dùng 24-10=14 bit cao còn lại cho tag field

❖ Bit valid array

Mỗi cache block sử dụng 1-bit đại diện cho trạng thái của nó Khi valid bit này bằng 1 có nghĩa là cache block này đã được sử dụng và đang lưu trữ dữ liệu Neu valid bit này bằng 0, có nghĩa là cache block chưa có dữ liệu Khi cache block chưa có dữ liệu, khi cache miss, cache đọc dữ liệu từ bộ nhớ chính lên lưu vào cache block và đặt valid bit của cache block này lên 1

❖ Cache controller

Khi CPU khởi tạo yêu cầu đọc lệnh, cache controller sẽ so sánh tag field

từ địa chỉ đọc lệnh của CPU với tất cả dữ liệu tag tương ứng từ các cache way để xác định cache hit hay cache miss Đối với cache hit, cache controller đọc lệnh

từ memory array và trả về cho CPU ngay để thực thi Đối với Cache miss, cache controller sẽ đi đọc lệnh từ bộ nhớ cấp trên và tìm cache block để lưu dữ liệu mới vào đồng thời trả lệnh được yêu cầu về cho CPU thực thi

Trang 31

Neu cache có nhiều way, nhưng khi so sánh tag field tù địa chỉ đọc lệnh của CPU với tất cả dữ liệu tag tương ứng tù các cache way đều không trùng khớp,

có nghĩa là dữ liệu lệnh cần đọc không có trong bất kì cache block nào của bất kì way nào, gọi là way miss, một dạng khác của cache miss Trong trường hợp này, WRU sẽ tìm ra một way sẽ bị flush và thay thế bằng dữ liệu mới WRU thường được hiện thực bằng một thuật toán như LRU (Least Recently Used) hoặc LFSR (Linear Feedback Shift Register)

2.2.3 Hiệu suất của bộ nhớ lệnh

❖ Average Memory Access Time (AMAT)

Thời gian truy cập bộ nhớ trung bình là chỉ số phổ biến để phân tích hiệu suất hệ thống bộ nhớ Chỉ số này càng thấp thì hệ thống bộ nhớ càng tốt AMAT được cấu thành tù ba yếu tố là hit time, miss rate và miss penalty Cụ the nó được định nghĩa như sau:

AMAT = Hit time + (Miss Rate X Miss Penalty)

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

Với sự phát triển gần đây của các công cụ tổng hợp, SystemVerilog (gọi tắt là SV) tù chỗ là một ngôn ngữ lập trình được sử dụng chủ yếu để tạo ra môi trường mô phỏng để kiểm định thiết kế phần cứng đã dần trở thành ngôn ngữ thiết kế phần cứng Việc sử dụng sv trong thiết kế phần cứng đã mang đến nhiều mặt tích cực cho thiết kế Ví dụ như mã RTL được trình bày ngắn gọn, dễ đọc hơn (sử dụng interface thay vì dùng module ports) hay giải quyết được những lỗi của Verilog mà chỉ được tìm thấy ở giai đoạn sau tống hợp (sử dụng alwayscomb, always ff, always latch thay vì dung always như Verilog trước đây)

Sau đây, một số thành phần hay phương pháp thiết kế mới mà sv mà mang lại

sẽ được trình bày:

2.5.1 Kiểu dữ liệu logic

Verilog sử dụng 2 kiểu dữ liệu là wire và reg để khai báo các tín hiệu Và việc dùng 2 kiểu dữ liệu này cần phù họp với ngữ cảnh nơi mà tín hiệu được khai báo sử dụng Ví dụ như biến được khai báo với kiểu reg không thể sử dụng bên ngoài khối always hay biến được khai báo với kiểu wire không thể sử dụng bên trong khối always vv sv giải quyết rắc rối thông qua việc thống nhất

30

Trang 32

2 kiểu dữ liệu đó thành kiểu logic Với sv, nguời viết RTL không còn lúng túng với việc chọn lựa khai báo cho từng port của module là reg hay wire Ví dụ:

module sv_example ( input logic[ 1:0] a, b, output logic c

);

always @(a,b) begin if (a[0]==b[0] && a[l]==b[l])c = 1; else c = 0; end

endmodule

2.5.2 always_comb, always_latch, always_ff

Verilog cung cap một định nghĩa always duy nhất để nguời lập trình tạo

ra các thành phần combination logic, flipflop hay latch Dựa vào cách viết RTL, công cụ tổng hợp tự suy luận ra logic mà nguời viết RTL mong muốn Do đó, không có cách nào để kiểm tra khối always đó viết đúng hay sai cho đến khi qua giai đoạn tổng họp

sv đã giải quyêt vấn đề thông qua việc đua ra những định nghĩa mới always_comb, always_latch hay always_ff để viết ra các thành phần combination logic, flipflop hay latch một cách tuờng minh Và các thành phần đuợc kiểm tra đúng sai ngay lúc chạy mô phỏng

Khối always ở ví dụ trên có thể viết lại nhu sau:

always_comb begin if (a[0]==b[0] && a[l]==b[l])c =

1; else c = 0; end

2.5.3 Kiểu dữ liệu ngưòi dùng tự định nghĩa

Kiểu dữ liệu tụ định nghĩa thông qua typedef hay enum giúp cho mã viết

ra đuợc gọn gàng và trực quan nhung verilog không hỗ trợ điều này Tuy vậy, điều may mắn là sv đã hỗ trợ chúng trong thiết kế RTL

Ví dụ:

typedef logic [31:0] arm_bus; arm_bus axi4_bus, apb_bus, ahb_bus;

enum logic [1:0] [IDLE, ACTIVE, CHECK, ANSWER} en_state;

2.5.4 Interface

Một trong những nhuợc điểm lớn của Verilog truớc đây chính là việc khai báo cống (input, output, inout) của module và kết nối những module thông qua việc kết nối từng tín hiệu ra vào này Việc khai báo và kết nối này tạo ra những đoạn mã RTL trùng lắp ở nhiều noi và tạo ra nguy co sai sót sv đã khắc

Ngày đăng: 21/11/2019, 18:33

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] K. Asanovic, “Instruction Sets Should Be Free: The Case For RISC-V,” University of California at Berkeley, 2014 Sách, tạp chí
Tiêu đề: Instruction Sets Should Be Free: The Case For RISC-V
[2] A. Waterman, "Design of the RISC-V Instruction Set Architecture," University of California at Berkeley, 2016 Sách, tạp chí
Tiêu đề: Design of the RISC-V Instruction Set Architecture
[3] V. B. p. D. S. V. D. Aneesh Raveendran, "A RISC-V Instruction Set Processor-Microarchitecture Design and Analysis," in International Conference on VLSI Systems, Architectures, Technology and Applications (VLSI-SATA), Bangalore, 2016 Sách, tạp chí
Tiêu đề: A RISC-V Instruction Set Processor-Microarchitecture Design and Analysis
[4] M. G. p. S. Andreas Traber, "RI5CY: User Manual," Integrated Systems Lab, ETHZ, Zurich, 2017 Sách, tạp chí
Tiêu đề: RI5CY: User Manual
[5] p. S. A. T. I. L. A. p. D. R. E. F. K. G. L. B. M. Gautschi, " Near- Threshold RISC-VCore With DSP Extensions for Scalable IoT Endpoint Devices,"IEEE TRANSACTIONS ON VLSI SYSTEMS, vol. 25, no. 10, 2017 Sách, tạp chí
Tiêu đề: Near- Threshold RISC-VCore With DSP Extensions for Scalable IoT Endpoint Devices
[6] M. G. Andreas Traber, "Pulpino: Datasheet," Integrated Systems Lab, ETHZ, Zurich, 2017 Sách, tạp chí
Tiêu đề: Pulpino: Datasheet
[7] D. M. S. Sutherland, "Synthesizing SystemVerilogBusting the Myth that SystemVerilog is only for Verification," in Synopsys Users Group (SNUG) Silicon Valley, SantaClara, California, 2013 Sách, tạp chí
Tiêu đề: Synthesizing SystemVerilogBusting the Myth that SystemVerilog is only for Verification
[8] Bailey, "FRAM memory technology - advantages for low power, fast write, high endurance applications," in IEEE International Conference on Computer Design, San Jose, 2005 Sách, tạp chí
Tiêu đề: FRAM memory technology - advantages for low power, fast write, high endurance applications
[10] Cypress Semiconductor, "F-RAM™Technology Brief White Paper," 2016 Sách, tạp chí
Tiêu đề: F-RAM™Technology Brief White Paper
[11] VolkerRzehak, "Low-Power FRAM Microcontrollers and Their Applications," Texas Instruments Deutschland, 2011 Sách, tạp chí
Tiêu đề: Low-Power FRAM Microcontrollers and Their Applications
[12] ARM Holdings, "CoreMark Benchmarking for ARM® Cortex® Processors," 2013 Sách, tạp chí
Tiêu đề: CoreMark Benchmarking for ARM® Cortex® Processors
[13] A. Traber, "Pulpino: A small single-core risc-v soc," in RISC-V Workshop, 2016 Sách, tạp chí
Tiêu đề: Pulpino: A small single-core risc-v soc
[14] A. R. V. R. Hrishikesh Jayakumar, "Energy-Aware Memory Mapping for Hybrid FRAM-SRAM MCUs in IoT Edge Devices," in 29th International Conference on VLSI Design and 2016 15th International Conference on Embedded Systems (VLSID), Kolkata, 2016 Sách, tạp chí
Tiêu đề: Energy-Aware Memory Mapping for Hybrid FRAM-SRAM MCUs in IoT Edge Devices
[15] A. F. Joseph Yiu, "Cortex-M Processors and the Internet of Things IoT white Paper," ARM, 2013 Sách, tạp chí
Tiêu đề: Cortex-M Processors and the Internet of Things IoT white Paper
[16] w. PriyaThanigai, "MSP430™ FRAMQualityand Reliability," Texas Instrument, 2014 Sách, tạp chí
Tiêu đề: MSP430™ FRAMQualityand Reliability
[17] Texas Instrument, "Ultra-low-power consumption with the MSP430FR57XX family featuring FRAM," Texas Instrument, 2011 Sách, tạp chí
Tiêu đề: Ultra-low-power consumption with the MSP430FR57XX family featuring FRAM
[18] w. G. William Cooper, "Revolutionizing context save and restore with MSP FRAM microcontrollers," Texas Instruments, 2015 Sách, tạp chí
Tiêu đề: Revolutionizing context save and restore with MSP FRAM microcontrollers
[20] NXP, "DSP56300 Family Manual, chapter 8," Freescale Semiconductor, 2005 Sách, tạp chí
Tiêu đề: DSP56300 Family Manual, chapter 8
[9] Micron Techonology, "Techninal note: Designing for High-Density DDR2 Memory&#34 Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w