Thiết kế đề xuấ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 - 40)

Chương này trình bày chỉ tiết các vấn dé triển khai cho bộ phát sinh chương trình kiểm tra ngẫu nhiên cho thiết kế RISC-V. Ngôn ngữ lập trình được sử dụng là C++, một ngôn ngữ lập trình hướng đối tượng (OOP — Object Oriented Programming). Sử dụng những tính chất của ngôn ngữ như tính kế thừa, tính đa hình

để hiện thực khóa luận. Nhóm sử dụng phần mềm Visual Studio để hiện thực khóa luận. Mục 3.1, Mục 3.2 lần lượt trình bày thiết kế hệ thống và thiết kế chỉ tiết của

RISC-V RTG.

3.1. Thiết kế hệ thống

Khóa luận này chỉ dừng lại ở việc tạo ra bộ phát sinh chương trình kiểm tra ngẫu nhiên cho thiết kế RISC-V. Hình 3.1 trình bày kiến trúc hệ thống của RISC-V RTG.

Tép báo cáo Random Test

(.txt files) Generator

Assembly test program

on disk (.S files)

Configuration

file

Assembler

test program on

disk (.elf files)

Hinh 3.1: Thiét ké hé thong Bước đầu tiên RISC-V RTG sé doc tép configuration để nắm được số lượng testcases muốn tạo ra. Sau đó sẽ phát sinh ra số lượng testcases mong muốn. Những testcases này là những chương trình hợp ngữ (.S files) dùng dé xác minh chức năng

bộ vi xử lý và dùng để kiểm tra tính đúng đắn của kiến trúc tập lệnh trong bộ vi xử lý

đó. Tệp testcases này sau khi được tạo ra sẽ đưa qua ISS đề tính độ bao phủ và thử

25

nghiệm chương trình. Hơn nữa, sau khi sau khi chạy bộ phát sinh chương trình kiểm tra ngẫu nhiên sẽ tạo ra những tệp báo cáo tương ứng với những testcases được tạo

ra. Các tệp báo cáo này là những thống kê về số lượng thanh ghi và tên lệnh đã sử dụng trong testcases đó. Bước tiếp theo thông qua Assembler để chuyển những

testcases là các chương trình hợp ngữ thành ngôn ngữ mã máy (.elf files). Những

testcases là những chương trình mã máy sẽ đưa cho các nhóm thiết kế phần cứng để

họ tự kiểm tra.

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. Nhóm quyết định thực hiện khóa luận dựa trên phương pháp “Table Based Generators” [4]: Bộ phát sinh chương trình kiểm tra ngẫu nhiên dựa vào bảng. Ngoài những ưu điểm của phương pháp này như dễ thực hiện, xác xuất thành công cao, hay chỉ phí bảo trì thấp thì những nhược điểm của phương pháp này nhóm sẽ khắc phục bằng phương pháp “Weighted Randomness” [5].

Weighted Randomness: Bộ phát sinh chương trình kiểm tra ngẫu nhiên dựa

vào trọng SỐ. Trong cơ chế này, mỗi lệnh được liên kết với một trọng số, cho biết xác

suất được chọn bởi bộ tạo. Trọng số cao có nghĩa là xác suất cao và do đó sẽ có nhiều

trường hợp của lệnh được tạo ra trong một chương trình. Trọng số thấp có nghĩa là xác suất thấp va do đó dẫn đến một vai trường hợp của lệnh có thé được tạo ra ít hoặc thậm chí là không được tạo. Tất cả các trọng số cùng nhau tạo thành một hàm phân phối xác suất cho tập lệnh. Nếu một chương trình thử nghiệm chỉ chứa một số loại lệnh đã chọn sẽ được tạo, trọng số tương ứng được đặt thành một số lớn hơn 0 và trọng số của tất cả các lệnh khác được đặt thành 0.

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 configuration. Hình 3.2 trình bày sơ đồ thuật toán của RISC-V RTG.

26

“mm

ị Begin `

j

name == "Numsequence"(1) or

inst_ name == “NumWeights”(2)

v Vv

TẾ (1) read the number If (2) read the number

testcases of sequences testcases of weights

Vv Ỷ Random functions to generate (F) Initialize Registers and Data

Memoi

set =0 z

f++

Ỷ Ỷ

Select a Random Instruction Class Random Instruction based on and Pick Random Instruction weights

Class from selected class

No |

Yes

Initialize Registers and Data

Memory

Report

—Y

( eaằ

> ni }

` 7

Hình 3.2: Sơ đồ thuật toán của bộ phát sinh chương trình kiểm tra ngẫu nhiên

27

Tương đương với hai thông số “NumSequences” và “NumWeights” của tệp configuration thì RISC-V RTG sẽ tạo ra hai kiểu đầu ra khác nhau:

- Với thông số “NumSequences” thi đầu ra sẽ là những mẫu thử nghiệm được

dựa trên phương pháp Table Based Generators. Ở những mẫu thử nghiệm này,

RISC-V RTG sẽ được tạo thành từ một chức năng chính và các chức năng

khác được tạo ngẫu nhiên. Các mẫu thử nghiệm được tạo ra có độ dài chuỗi lệnh tùy ý và được đặt ở các vị trí ngẫu nhiên. Dựa vào phương pháp này,

những mẫu thử nghiệm sẽ đảm bảo được việc triển khai ngăn chặn đệ quy và

tránh các vòng lặp vô hạn gây ra bởi các lệnh gọi hàm ngau nhiên. Hon nữa là đảm bảo rằng địa chỉ đích của một lệnh rẽ nhánh luôn là một vị trí chương

trình hợp lệ.

- Với thông số “NumWeights” thì đầu ra sẽ là những mẫu thử nghiệm được dựa

trên phương pháp Weighted Randomness. Ở đầu ra dựa vào phương pháp này thì các RISC-V RTG sẽ tạo ra những mẫu thử nghiệm 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 configuration. 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ố thấp 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

Ta.

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 ngôn ngữ lập C++. Bảng 3.1 trình bày chỉ 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.

28

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

trúc dữ liệu

và hàm

Thư viện

sử dụng

Mô tả

Con trỏ hàm <iterator> Con trỏ hàm hay còn được gọi là function pointers

thường được sử dụng khi các hàm có cùng kiều trả về

và danh sách tham số hoặc khi cần truyền một hàm

cho hàm khác.

map <map> Có kiểu cấu trúc liên kết. Mỗi phần tử của map là sự

kết hợp của khóa (key value) và ánh xạ của nó

(mapped value). Dữ liệu trong map không chứa các

khóa giống nhau

Vector <vector> Là một class trong thư viện STL của C++. Nó được

sử dụng để lưu trữ tập hợp phan tử cùng kiểu dữ liệu.

Nó tự quản lý việc cấp phát thêm không gian lưu trữ khi thêm một phan tử vào trong vector. Có thể hiểu đơn giản nó có thể sử dụng thay cho mảng nhưng thuận tiện hơn vì không cần quan tâm việc quản lý vùng nhớ thủ công nếu số lượng phan tử vượt quá

kích thước cho phép

Rand) va

Srand()

<cstdlib>

<ctime>

Để tạo ra một số ngau nhiên cstdlib hd trợ ham rand(). Hàm này trả về cho kết quả là một giá trị nguyên có giá trị từ0 đến RAND MAX, với RAND_MAX là một hằng số được định nghĩa

trong thư viện <cstdlib>.

29

Đề mỗi lần chạy cho ra 1 chuỗi kết quả khác nhau,

thay đổi random seed bằng cách sử dụng hàm

srandQ và truyền vào 1 con số có thể thay đổi được.

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

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

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

1fstreamQ Sử dụng dé đọc dữ liệu từ tệp. Cụ thé là đọc dữ liệu

từ tép configuration.

ofstream() Sử dụng dé ghi dữ liệu xuống tệp. Cụ thé là ghi dữ

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

shuffleQ <algorithm>

<random>

Sử dụng ham shuffle() dé xáo trộn những lệnh được tạo ra. Dé sử dụng được hàm shuffle() trước tiên phải

xây dụng một vector có nội dung là danh sách các lệnh sẽ được tạo ra. Sau khi có được danh sách này,

hàm shuffle() sẽ trộn danh sách này lại và sẽ tạo ra

các lệnh ngẫu nhiên không biết trước.

clock() <time.h> Str dung ham clock() trong thu vién time.h dé do thoi

gian thực thi của một chương trình tử lúc bắt đầu cho đến khi kết thúc. Kiểu trả về của chương trình sẽ là unsigned long dựa vào kiểu hàm trả về là clock_t.

Sau khi RISC-V RTG tạo ra được những mẫu thử nghiệm thì ở mỗi một

testcase sẽ có một tệp báo cáo riêng. Việc thiết kế thêm tệp báo cáo này sẽ giúp người dùng có thể dễ dàng trong việc kiểm tra cũng như đánh giá mức độ ngẫu nhiên của chương trình. Ngoài ra tệp báo cáo này sẽ liệt kê các thông số liên quan đến lệnh và thanh ghi. Nhờ vào những dữ liệu này người dùng có thé đánh giá được chương trình

có tạo ra chuỗi lệnh phụ thuộc theo trọng số đã được định nghĩa tại tệp configuration

30

đúng hay không. Ngoài ra, thông qua số liệu của tệp báo cáo người dùng có thé biết được số lần sử dụng của thanh ghi và lệnh trong mỗi một mẫu thử nghiệm. Nội dung

của một tệp báo cáo được minh họa ở Bảng 3.2.

Bảng 3.2: Biểu diễn minh họa cho một nội dung tệp báo cáo

REPORTS

INSTRUCTIONS REGISTERS

Instructions Num_inst was used Registers Num reg was used ADDI 1 X0 41

SLTI 2 XI 5

SLTUI 2 X2 6

XORI 1 X3 7

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 - 40)

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

(77 trang)