Thiết kế chỉ tiết

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Bộ phát sinh chương trình kiểm tra ngẫu nhiên cho thiết kế RISC-V (Trang 34 - 39)

FRRM, FRFLAGS, FSCSR, FSRM, FSFLAGS, FSRMI, FSFLSGSI

Hinh 3.1: Thiét ké hé théng

3.2. Thiết kế chỉ tiết

3.2.1. Random Test Generator

Nhóm dựa vào những cơ sở lý thuyết được tìm hiểu, và những ưu nhược điểm

từng phương pháp của RTG trong khóa luận trước áp dụng. Với phương pháp “Table

Based Generators” [5] và phương pháp “Weighted Randomness” [6] đã tạo ra được

những testcases hợp lệ, tránh các vòng lặp vô hạn và dùng trọng số để ưu tiên các nhóm lệnh xuất hiện trong testcase. Tuy nhiên với những mặt han chế về xác suất xuất hiện đầy đủ câu lệnh nhóm quyết định áp dụng phương pháp “Genetic Algorithms” [7] dé khắc phục.

Genetic Algorithms: Bộ phát sinh chương trình kiểm tra ngẫu nhiên dựa trên thuật toán di truyền. Thuật toán đi truyền gồm có bốn quy luật cơ bản là lai ghép, đột

biến, sinh sản và chọn lọc tự nhiên. Các câu lệnh mới được tạo bằng các phép toán di

truyền. Mỗi lệnh được coi như một cá thể trong quần thể tập lệnh và được mã hóa

thành hệ nhị phân hay gọi là nhiễm sắc thé (NST), từ đó trao déi các NST với nhau trong bước lai tạo và đột biến một hoặc nhiều NST trong một cá thé ngau nhién tao

ra quan thé moi. Tir quan thé mới chon loc các cá thé dat yéu cau dựa trên tệp tin cau hình do người dùng thiết lập. Việc áp dụng thuật toán di truyền vào khóa luận giúp hoàn thiện việc đảm bảo xuất hiện đầy đủ các lệnh khó xuất hiện hoặc không xuất

hiện.

25

Việc thực thi bộ phát sinh chương trình kiểm tra ngẫu nhiên bắt đầu bằng cách phân tích cú pháp các đầu vào do người dùng cung cấp và đọc tệp tin cấu hình. Hình 3.2 trình bày sơ đồ thuật toán của RISC-V RTG.

Đọc đầu vào từ tập

tin cầu hình

Khởi tạo quân thê ban

đầu

Chọn lọc

(Chọn cá thê ngầu

nhiên dé lai tạo)

Lai ghép

(Mã hóa lệnh, lọc cá thẻ

mới đê đưa vào quân thé)

Đột biến

(Mã hóa lệnh, lọc cá thể mới đê đưa vào quan thé)

Quan thê mới

Hình 3.2: Sơ đồ thuật toán

Ở phương pháp này thì các RISC-V RTG sẽ tạo ra những testcases là các chuỗi lệnh mà các lệnh được tạo ra sẽ phải phụ thuộc vào trọng số của nhóm lệnh. Những trọng sỐ này sẽ được người dùng định nghĩa tại tệp tin cấu hình. Với các nhóm lệnh

có trọng số cao, các lệnh trong nhóm đó sẽ được tạo ra nhiều, ngược lại nếu nhóm

lệnh nào có trọng số ít thì các lệnh trong nhóm đó sẽ được tạo ra ít. Mỗi lệnh có thể tạo ra nhiều lần hoặc thậm chí có lệnh sẽ không được tạo ra.

Trong khóa luận, dựa vào sơ đồ thuật toán của RTG được mô tả ở Hình 3.2, nhóm đã sử dụng một số cấu trúc dữ liệu và giải thuật, phương thức và hàm trong

26

ngôn ngữ lap C. Bang 3.1 trình bày chi tiết về cầu trúc dữ liệu, hàm và thư viện chính

được nhóm sử dụng trong khóa luận.

Bảng 3.1: Cấu trúc dữ liệu, hàm và thư viện được sử dụng

Tên cầu

Thư viện trúc dữ liệu Mô tả

sử dụng

và hàm

Rand() và | <stdlib.h> Đề tao ra một số ngẫu nhiên, thư viện <stdlib.h> hỗ SrandQ <time.h> trợ hàm rand(). Hàm này trả về cho kết quả là một giá

trị nguyên có giá trị từO0 đến RAND_MAX, với RAND_MAX là một hằng số được định nghĩa

trong thư viện <stdlib.h>.

Đề mỗi lần chạy cho ra 1 chuỗi kết quả khác nhau, thay đổi random seed bang cách sử dụng hàm srand() va truyén vào 1 con số có thé thay đôi được.

ĐỀ tạo ra một giá trị ngau nhiên trong khoảng xác

định, sử dụng công thức min +rand(Q % (max + 1 -

min) dé nhận kết quả trong khoảng từ min đến max.

fprintf() <stdio.h> | Sử dung dé ghi dữ liệu xuống file. Cu thé là ghi di

liệu như tên lệnh, thanh ghi, số tức thời, ...

Con trỏ <stdio.h> | Con trỏ hay còn gọi là pointer, còn được gọi là locator

hoặc indicator chỉ ra một dia chỉ của một giá tri.

27

3.2.2. Tép tin cấu hình

NumCommands : 54

NumFile : 100

Branch i 1

Load

Store

ALU

Hình 3.3: Nội dung tệp tin cau hình Hình 3.3 là một ví dụ trình bày nội dung bên trong tệp tin cấu hình. Trong đó các thông số được định nghĩa như sau:

- NumCommands: Số lượng lệnh mong muốn được random tạo ra trong một

testcases.

- NumEile: Số lượng testcases muốn tạo ra trong đó các lệnh này sẽ phụ thuộc vào

các trọng số của 5 nhóm lệnh:

=" Branch: Nhóm lệnh rẽ nhánh

= Load: Nhóm lệnh nap

= Store: Nhóm lệnh lưu

ô ALU: Nhúm lệnh số học và luận lý

= Jump: Nhóm lệnh nhảy

Trong các testcases tao ra các chuỗi lệnh mục đích dùng đề kiểm tra các trường hợp mà người ding mong muốn. Ví dụ như người ding muốn kiểm tra trọng tâm vào hoạt động của các lệnh bộ nhớ thì sẽ tăng trọng số của nhóm lệnh này lên.

Với nội dung trong tệp tin câu hình trong Hình 3.3 thì RISC-V RTG sẽ tạo ra tong cộng 100 testcases. Trong đó với mỗi testcases sẽ có ít nhất: 1 lệnh thuộc nhóm

28

lệnh rẽ nhánh, 2 lệnh thuộc nhóm lệnh lưu, 2 lệnh thuộc nhóm lệnh nạp, 3 lệnh thuộc nhóm lệnh toán học và luận lý, 1 lệnh thuộc nhóm lệnh nhảy được minh họa trong

Hình 3.4.

initialization:

addi, x1, x0, 37

addi, x2, x0, 21

addi, x3, x0, 116

addi, x29, x0, 57

addi, x30, x0, 21 addi, x31, x0, 36 Main:

bgeu x14, x25, Loop1

sw x5, 3496(x2)

lw x22, 1098(x25)

srai x15, x3, 3

srai x31, x12, 0

Loop0:

sw x20, 125(ôx31)

sw x8, 559(x25)

sll x24, x8, x31

29

or x2, x8, x29

lui x25, 3695

auIpc x9, 2051

sltu x3, x3, x19

Loop2:

lh x20, 686(x19)

bge x21, x12, Pass

jal x11, Pass

Pass:

addi x1, x0, 96

jal x0, End

Fail:

addi x1, x0, 76

End:

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Bộ phát sinh chương trình kiểm tra ngẫu nhiên cho thiết kế RISC-V (Trang 34 - 39)

Tải bản đầy đủ (PDF)

(66 trang)