vào thanh ghi.
SRAI SRAI x5, xó, 20
Shift giá trị của thanh ghi sang phải n
bit, với n là một giá trị tức thời, kết
quả lưu trong thanh ghi và sẽ mở rộng
bit dựa vào MSB của số đã shift.
ADD ADD x5, x6, x7
Cộng giá trị thanh ghi thứ nhất và giá trị thanh ghi thứ, kết quả lưu vào
thanh ghi.
SUB SUB x5, x6, x7
Trừ giá trị thanh ghi thứ nhất và giá trị thanh ghi thứ, kết quả lưu vào
thanh ghi.
SLT SLT x5, x6, x7
Nếu giá trị thanh ghi thứ nhất lớn hơn giá trị thanh ghi thứ hai thì kết quả lưu vào thanh ghi là 1. Nếu giá trị thanh ghi thứ nhất nhỏ hơn giá trị thanh ghi thứ hai thì kết quả lưu vào thanh ghi
là 0.
18
Bảng 2.10: Chức năng của nhóm lệnh số học và luận lý 3
Phân loại
Lệnh Ví dụ Ý nghĩa
Nhóm
lệnh số
học và
luận lý
SLTU SLTU x5, x6, x7
Nếu giá trị thanh ghi thứ nhất lớn hơn giá trị thanh ghi thứ hai thì kết quả lưu vào thanh ghi là 1. Nếu giá trị thanh ghi thứ nhất nhỏ hơn giá trị thanh ghi thứ hai thì kết quả lưu vào thanh ghi
là0.
XOR XOR x5, x6, x7
XOR giá trị thanh ghi thứ nhất và giá trị thanh ghi thứ hai, kết quả lưu vào
thanh ghi.
SRL SRL x5, x6, x7
Shift giá tri của thanh ghi thứ nhất
sang phải n bít, với n là một giá trị
thanh ghi thứ hai, kết quả lưu trong
thanh ghi.
SRA SRA x5, x6, x7
Shift giá trị của thanh ghi thứ nhất
sang phải n bít, với n là một giá trị
thanh ghi thứ hai, kết quả lưu trong
thanh ghi va sẽ mở rộng bit dựa vào
MSB của số đã shift.
OR OR x5, x6, x7
OR giá trị thanh ghi thứ nhất và giá trị thanh ghi thứ hai, kết quả lưu vào
thanh ghi.
AND AND x5, x6, x7
AND gia trị thanh ghi thứ nhất va giá trị thanh ghi thứ hai, kết quả lưu vào
thanh ghi.
19
Bảng 2.11: Chức năng của nhóm lệnh nhảy
Phân loại | Lệnh Ví dụ Ý nghĩa
Nhảy đến PC = PC + Immediate, đã JAL | JAL x1, 100 lưu giá trị của lệnh kế tiếp trước đó
vào thanh ghi.
Nhóm : :
Nhảy đến địa chỉ băng với giá trị được lệnh nhảy
lưu trong thanh ghi + Immediate, đã JALR | JALR x1, 1005)
lưu giá trị của lệnh kế tiếp trước đó
vào thanh ghi.
2.2. Hệ thống xác minh chức năng bộ xử lý
Hình 2.1 trình bày vị trí của RISC-V RTG trong hệ thống xác minh chức năng
bộ xử lý.
— c |
¿ oOSS —
t M
P
Testbench
RISC-V RTG | ain R
Controller U
N
N
RTL Simulation E Coverage Monitor
yr
Hình 2.1: Hệ thống xác minh chức năng bộ xử lý
Trong Hình 2.1, ISS (Instruction Set Simulation) được sử dụng như làm mô
hình tham chiếu vàng (golden model) và được giả định là sẽ tạo ra các kết quả mong
20
đợi. ISS — Chương trình mô phỏng tập lệnh độc lập phần cứng là một mô hình mô phỏng, thường được viết bằng ngôn ngữ lập trình cấp cao. ISS dùng để mô phỏng hành vi của máy tính hoặc bộ vi xử lý bằng cách đọc các lệnh và duy trì các biến bên
trong đại diện cho các thanh ghi bộ xử lý và bộ nhớ.
RTL Simulation là bước thiết kế được kiểm chứng về mặt chức năng. Có nhiều phương pháp khác nhau để tién hành như OVM, UVM hoặc traditional verification, ... Đầu ra của RTL Simulation thông thường là waveform, data, hoặc các ràng buộc theo yêu cầu của người dùng. Quá trình của simulation kết thúc khi tất cả các mẫu thử nghiệm đều được thực thi và cho kết quả giống như kết quả mong đợi.
Bộ chương trình phát sinh kiểm tra ngẫu nhiên được thực hiện để tạo các bộ
chương trình thử nghiệm (testcases). Mỗi chương trình thử nghiệm được thực thi
đồng thời bởi cả hai mô hình bộ xử lý và trạng thái của chúng được so sánh sau khi
thực hiện từng lệnh. Khối Comp-runner cũng được triên khai như một phần của bộ
điều khiển mô phỏng để ghi lại sự khác biệt trong trạng thái của hai mô hình. Việc triển khai bộ điều khiển mô phỏng cũng bao gồm một module giám sát phạm vi bao phủ để đo lường phạm vi xác minh và tạo thống kê về phạm vi bao phủ (coverage).
2.2.1. Random Test Generator
Random Test Generator — Bộ phát sinh chương trình kiểm tra ngẫu nhiên (thường được viết tắt là RTG hoặc ISG cho Instruction Stream Generator) là một loại phần mềm máy tính được sử dụng để xác minh chức năng của bộ vi xử lý. Chức năng
chính của RTG là tạo ra các testcases. Các testcases được tạo ra là những chương
trình hợp ngữ và sẽ được chuyển đổi sang mã nhị phân thông qua trình biên dich hợp ngữ (hay còn gọi là Assembler) dùng đề kiểm tra kiến trúc tập lệnh của bộ vi xử lý bằng cách sử dụng ngẫu nhiên hóa dé chọn ra các lệnh, thanh ghi, địa chỉ và dữ liệu.
Bộ phát sinh chương trình kiểm tra ngẫu nhiên có phạm vi từ các tập lệnh đơn giản và macro được tham số hóa có thể được tạo ra trong vài tuần đến các hệ thống
có đầy đủ tính năng và thường được tạo ra bởi các tổ chức thiết kế. Dé tạo ra bộ phát
21
sinh chương trình kiểm tra ngẫu nhiên thì có thể sử dụng một hay nhiều các phương
pháp sau:
- Table Based Generators: Bộ phat sinh chương trình kiểm tra ngẫu nhiên dựa
vào bảng. Những mẫu thử này là những RTG đơn giản nhất hiện có. Ưu điểm của Table Based Generators là có thể tạo ra các testcases tương đối nhanh chóng. Ngoài ra các yêu cầu về bảo trì thường thấp nên chỉ phí thực hiện cũng thấp. Phương pháp này hoạt động bằng cách phụ thuộc vào kiến trúc tập lệnh của thiết kế và lưu trữ nó trong cơ sở đữ liệu quan hệ đề có thể tái sử dụng sau này. Tuy nhiên, có một nhược điểm đối với phương pháp này là việc tạo ra các testcases thường bị hạn chế trong các kiến trúc đơn giản bởi việc sử dụng trên các ISA phức tạp hơn có thé dẫn đến việc không thé kiểm tra hết được các tình huống phức tạp. Đôi khi trình tạo thử nghiệm ngẫu nhiên dựa vào bảng cũng
có thể tạo ra các testcases không hợp lệ.
- Static Generators: Bộ phát sinh chương trình kiểm tra ngẫu nhiên tĩnh là
những mẫu thir nghiệm được tạo ra sẽ phần lớn kiểm tra lệnh, toán hạng và lựa chọn dữ liệu. Ưu điểm về bộ phát sinh chương trình kiểm tra ngẫu nhiên tĩnh thì có khả năng tạo ra được nhiều testcases hơn so với Bộ phát sinh chương trình kiểm tra ngẫu nhiên dựa vào bảng. Tuy nhiên để khắc phục nhược điểm không thé kiểm tra hết được các tình huống phức tạp thì phương pháp này vẫn chưa thể đáp ứng được.
- Dynamic Generators: Bộ phát sinh chương trình kiểm tra ngẫu nhiên động.
Phương pháp này phải được kết hợp chặt chẽ với những kiến thức quan trọng
về kiến trúc đang được thử nghiệm. Ưu điểm của bộ phát sinh chương trình kiểm tra ngẫu nhiên động là nâng cao khả năng tạo ra các testcases phức tạp,
có thể tạo ra được các mẫu thử nghiệm trong các trường hợp khó tiếp cận. Bộ phát sinh chương trình kiểm tra ngẫu nhiên động này có tính linh hoạt và dễ dàng trong việc sử dụng. Do đó nhược điểm của phương pháp này là chỉ phí tạo và bảo trì thường lớn hơn nhiều so với phương pháp Table Based
Generators hoặc so với phương pháp Static Generators.
22
2.2.2. Testbench Controller
Testbench Controller bat đầu bằng cách nạp các testcases được tao ra bởi RTG vào Instruction Set Simualator (hay còn được viết tắt là ISS). Trình mô phỏng tập lệnh là một phương pháp được sử dụng nhiều vì một trong những lý do sau:
- Mô phỏng mã máy của một thiết bị phần cứng khác hoặc toàn bộ máy tinh dé
có khả năng tương thích cao. Một trình mô phỏng hệ thống đầy đủ thường bao gồm một trình mô phỏng tập lệnh.
- Theo dõi và thực thi các lệnh mã máy (nhưng được coi như là một luồng đầu
vào) trên cùng một phần cứng nhằm kiểm tra và gỡ lỗi.
- Cải thiện hiệu suất tốc độ.
ISS sẽ thực thi từng lệnh trong mỗi một testcase. Trong các tình huống bình thường, mô phỏng được hoàn thành sau khi thực hiện lệnh cuối cùng trong bộ phát sinh chương trình kiểm tra ngẫu nhiên. Nếu các bộ phát sinh chương trình ngẫu nhiên được chạy hàng loạt, quá trình mô phỏng được lặp lại bằng cách tải chương trình tiếp theo. Testbench Controller kết thúc sau khi thực hiện chương trình thử nghiệm cuối cùng. Trong trường hợp đặc biệt, Testbench Controller sẽ kết thúc khi có báo hiệu từ khối Comp-runner rằng số lượng chênh lệch vượt quá một số giới hạn tối đa đã định trong tệp configuration. Thiết kế cũng bao gồm một Coverage Monitor được chạy ngoại tuyến để đo độ bao phủ của chương trình.
2.2.3. Comp-runner
Comp-runner chịu trách nhiệm so sánh các trạng thái của ISS với mô hình RTL
để xác định xem hai mô hình của bộ vi xử lý có cùng hoạt động hay không. Vì hai
mô hình bộ xử lý chạy ở các mức độ trừu tượng khác nhau nên chúng có thé tạo ra các kết quả khác nhau do hiệu ứng pipeline. Thông thường, chỉ có mô hình RTL thực
hiện xử lý pipeline trong khi ISS thì không. Ngoài ra, do hai mô hình chạy với cách
thức hoạt động khác nhau về thời gian nên chúng không được đồng bộ hóa hoàn hảo với nhau. Những khác biệt này gây ra các vấn đề, cụ thé là lệch và va chạm, phải được xử lý bởi khối Comp-runner.
Mặc dù ISS và RTL chạy song song cùng một chương trình, kết quả của cùng một lệnh có thé được tao ra tại các thời điểm khác nhau. Cũng trong những khoảng thời gian nhất định của mô phỏng, một mô hình có thể đi trước một chút so với mô hình kia, và do đó tạo ra ít kết quả hơn so với mô hình kia. Điều này thường xảy ra sau lệnh rẽ nhánh, vì độ trễ nạp đầy pipeline xảy ra trong mô hình RTL nhưng không xảy ra trong ISS. Vì vậy, kết quả từ hai mô hình bị sai lệch trong thời gian mô phỏng.
2.2.4. Coverage Monitor
Coverage Monitor theo dõi độ bao phủ về phạm vi và chịu trách nhiệm đo lường, xác minh, xây dựng số liệu thống kê về phạm vi đó. Về cơ bản, Coverage Monitor chứa một số bộ đếm phát hiện và đếm sự xuất hiện của các sự kiện nhất định. Một 86 vi du về phạm vi xác minh có thể là:
Tính toán số lượng lần xuất hiện của mỗi lệnh, định dạng lệnh.
Tính toán số lượng lần xuất hiện của mỗi thanh ghi.
Độ bao phủ của nhánh để đo các nhánh có điều kiện được thực hiện.
Độ bao phủ trong việc truy xuất bộ nhớ.
Số lần một lệnh xuất hiện trong mã chương trình có thể khác với số lần lệnh đã được thực thi. Luồng chương trình là không xác định vì có thé lặp lai, phân nhánh có điều kiện, interrupt và các yếu tố phụ thuộc dữ liệu khác. Do đó, Coverage Monitor không thê sử dụng mã tĩnh đề tạo thống kê vùng phủ.
24