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: