Chương 1: Tổng quan: Tìm hiểu chung về xu hướng công nghệ, hướng nghiên cứu của đề tài, mục tiêu, giới hạn và bố cục Đồ án. Chương 2: Cơ sở lý thuyết: Giới thiệu, tìm hiểu các lý thuyết về Phương pháp Xác minh UVM và ALU 32-bit. Chương 3: Xây dựng môi trường UVM kiểm tra thiết kế ALU 32-bit: Trình bày yêu cầu thiết kế, thiết kế ALU 32-bit, thiết kế môi trường UVM và xác minh chức năng ALU 32-bit dùng UVM. Chương 4: Kết quả thực hiện: Trình bày kết quả xác minh và nhận xét.
Chương 5: Kết luận và hướng phát triển: Từ kết quả thực hiện ở Chương 4, so sánh với yêu cầu thiết kế ban đầu, sinh viên kết luận về những yêu cầu đạt được, chưa đạt được và đưa ra hướng phát triển của đề tài. 2 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2. Arithmetric – Logic Unit (ALU) ALU (Arithmetic Logic Unit) là một mạch số được dùng để thực hiện các toán tử đại số và toán tử logic. ALU là một khối cơ bản để xây dựng nên CPU (Central Processing Unit – Đơn vị xử lý trung tâm) trong một máy tính, các CPU hiện đại bao gồm các ALU mạnh mẽ và phức tạp.
Hầu hết các toán tử của một CPU được thực hiện bởi một hoặc nhiều ALU, dữ liệu được đưa vào ALU thì được lấy từ ngõ vào của các thanh ghi (là một lượng nhỏ bộ nhớ có sẵn được xem như một phần của CPU). Đơn vị điều khiển (Control Unit) cho biết ALU nên thực hiện toán tử nào dựa trên dữ liệu nhận được và ALU sẽ lưu kết quả tính toán vào ngõ ra của thanh ghi.1 – Kiến trúc CPU. Quá trình hoạt động cụ thể của ALU trong CPU được mô tả ở Hình 2.1 như sau: – Khi CPU nhận một dữ liệu từ bộ nhớ, đơn vị điều khiển giải mã lệnh và xác định loại phép toán cần thực hiện. – Đơn vị điều khiển sau đó gửi tín hiệu đến ALU, chỉ định phép toán cần thực hiện và cung cấp các toán hạng từ các thanh ghi.
– ALU thực hiện phép toán và gửi kết quả trở lại các thanh ghi hoặc bộ nhớ đệm, để sẵn sàng cho các lệnh tiếp theo hoặc để lưu trữ lâu dài. 3 Mặc dù ALU là thành phần quan trọng của CPU nhưng thiết kế và chức năng của ALU có thể khác nhau giữa các bộ xử lý. Ví dụ, một số ALU được thiết kế chỉ để thực hiện các phép tính số nguyên, trong khi một số khác được xây dựng để thực hiện các phép tính có dấu chấm động. Các chức năng cơ bản của ALU như sau: – Toán tử số học: cộng, trừ, nhân và chia.
– Toán tử dịch chuyển bit: dịch chuyển một bit sang phải hoặc sang trái. – Toán tử logic: AND, OR, XOR, NAND, NOT, NOR… – Phép so sánh: lớn hơn, nhỏ hơn, bằng và không bằng.2 – Sơ đồ khối của ALU.2 mô tả các thành phần tín hiệu của một ALU cơ bản: – A và B là 2 ngõ vào mang dữ liệu cần được tính toán, Y là ngõ ra mang dữ liệu là kết quả sau khi tính toán. A, B và Y là các bus dữ liệu có cùng độ rộng bit. – Opcode là ngõ vào dùng để lựa chọn chức năng tính toán của ALU, độ rộng bit của Opcode phụ thuộc vào số chức năng và yêu cầu của thiết kế.
– Status ở ngõ ra là các tín hiệu riêng lẻ khác nhau truyền đạt thông tin thêm về trạng thái kết quả tính toán của ALU hiện tại. ALU thường có các tín hiệu trạng thái như carry-out (bit nhớ của hoạt động cộng hoặc trừ), zero (cho biết các bit của Y là 0), negative (cho biết kết quả của một phép toán số học là âm), overflow (cho biết kết quả của phép toán số học vượt quá phạm vi số của Y) và parity (cho biết số là chẵn hay lẻ của Y). 4 – Status ở ngõ vào thường là bit tín hiệu carry-in, tín hiệu này cho biết tín hiệu carry-out từ ALU trước đó. ALU là một mạch logic tổ hợp nên ngõ ra sẽ thay đổi không đồng bộ để đáp ứng với những thay đổi của đầu vào (không có xung clock để đồng bộ giữa ngõ vào và ngõ ra).
Khi tín hiệu ổn định được đưa vào cho tất cả các ngõ vào của ALU và có đủ thời gian (độ trễ lan truyền) để tín hiệu truyền qua mạch ALU, kết quả tính toán của ALU sẽ xuất ra ngõ ra. Các mạch bên ngoài được kết nối với ALU chịu trách nhiệm đảm bảo tính ổn định của tín hiệu ngõ vào của ALU trong suốt quá trình hoạt động và điều chỉnh tần số hoạt động để có đủ thời gian truyền tín hiệu qua ALU trước khi lấy mẫu kết quả của ALU. Giới thiệu phương thức Xác minh UVM UVM (Universal Verification Methodology) là một phương pháp chuẩn hóa cho việc xác minh các thiết kế số (digital designs) và Systems-on-chip (SoCs) trong lĩnh vực vi mạch. UVM sử dụng ngôn ngữ SystemVerilog và các khái niệm Object-Oriented Programming (OOP) để xây dựng nên các mô hình xác minh có thể tái sử dụng và linh hoạt.
Khả năng tái sử dụng là một trong những ưu điểm lớn nhất của UVM. Bằng cách sử dụng các thành phần đã được phát triển trước như Agents, Monitors, Drivers và Scoreboards, quá trình kiểm tra thiết kế có thể tái sử dụng tài nguyên đã xây dựng để xác minh các dự án khác nhau. UVM cung cấp một tập hợp các lớp cơ sở mà từ đó các lớp phức tạp hơn có thể được xây dựng bằng cách kế thừa và thêm vào một số chức năng nhất định cần thiết cho môi trường xác minh. Điều này được thể hiện thông qua hệ thống phân cấp sau: 5 Hình 2.3 – Hệ thống phân cấp trong môi trường UVM.
Như được thể hiện ở Hình 2.3, umv_object được bắt nguồn từ lớp uvm_void. uvm_void là lớp cơ sở cho tất cả các lớp UVM, tính trừu tượng không có bất kỳ một dữ liệu hoặc phương thức nào được triển khai. Đây là nơi chứa chung cho các đối tượng được khởi tạo. uvm_object là một cấu trúc dữ liệu được sử dụng để cấu hình, cung cấp các phương thức như tạo, sao chép, in , ….
Lớp uvm_report_object cung cấp chức năng báo cáo cho UVM. Có 4 chức năng báo cáo cơ bản: info, warning, error, fatal. Các nhánh thành phần (Component branch) và nhánh trình tự (Sequence branch) tiếp theo được kế thừa từ lớp uvm_object và uvm_report_object. Trong uvm_component: các lớp xác định các thành phần xác minh như driver, monitor, scoreboard, agents.
Trong uvm_sequence: các lớp xác định đối tượng dữ liệu được các thành phần trong môi trường xác minh sử dụng và vận hành. Cấu trúc môi trường UVM 2. UVM Testbench Top Testbench Top (TB_top) là một mô đun, liên kết DUT và các thành phần môi trường xác minh. Liên kết được thực hiện thông qua một Interface như được mô tả Hình 2.4 – Cấu trúc UVM Testbench.
Cấu trúc TB_top điển hình bao gồm: – DUT instance: phần thiết kế cần kiểm tra. – Interface instance: phần giao tiếp giữa môi trường xác minh và DUT. – Phương thức run_test (): phương thức được gọi để chạy các testcase trong testbench. – Virtual interface set config_db: cấu hình thiết lập để môi trường xác minh giao tiếp với DUT thông qua interface ảo.
– Clock và Reset: điều khiển hoạt động của DUT trong quá trình kiểm tra. – Wave dump: tạo ra các tập tin có dạng sóng, để theo dõi sự thay đổi của các tín hiệu trong quá trình kiểm tra, giúp phân tích và gỡ lỗi. UVM Test UVM Test có sơ đồ phân cấp được thể hiện ở Hình 2. Lớp uvm_test đại diện cho các trường hợp kiểm tra chức năng và tính chính xác của DUT.
Kế hoạch xác minh liệt kê tất cả các tính năng và các hạng mục chức năng khác cần được xác minh cũng như các thử nghiệm cần thiết để bao gồm từng tính năng đó. Thay vì viết cùng một đoạn mã cho các trường hợp kiểm tra khác nhau, thì có thể sử dụng chung một môi trường với cấu hình khác nhau cho mỗi trường hợp kiểm tra.5 – Sơ đồ phân cấp của lớp uvm_test.6 – Cấu trúc UVM Test. Các bước để xây dựng UVM Test: – Tạo class test do người dùng định nghĩa được mở rộng từ uvm_test và đăng ký lên factory. – Khai báo và khởi tạo môi trường, sequence và các đối tượng cấu hình dựa trên yêu cầu.
– Kích hoạt tạo sequence để bắt đầu quá trình kiểm tra. UVM Test thường được chạy trong Testbench Top bằng cách gọi phương thức run_test(). UVM Environment UVM Environment là lớp uvm_env như được thể hiện ở Hình 2.7, là một môi trường cung cấp hệ thống phân cấp và là nơi chứa agent, scoreboard, coverage và các thành phần xác minh khác như được thể hiện ở Hình 2. uvm_env cung cấp cơ chế để cấu hình, khởi tạo và điều khiển các thành phần này để thực hiện các tác vụ kiểm tra theo yêu cầu.7 – Sơ đồ phân cấp của lớp uvm_env.8 – Cấu trúc UVM Environment.
Các bước để xây dựng UVM Environment: – Tạo class environment do người dùng định nghĩa được mở rộng từ uvm_env và đăng ký lên factory. – Trong build_phase, khởi tạo agent, scoreboard và các thành phần xác minh khác. – Kết nối agent và scoreboard thông qua TLM port. UVM Driver UVM Driver có cấu trúc phân cấp thể hiện ở Hình 2.9, có chức năng điều khiển gửi dữ liệu từ môi trường xác minh đến DUT thông qua các giao thức phần cứng như giao thức bus, giao thức truyền thông hay bất kỳ giao thức nào mà DUT hỗ trợ.
uvm_driver đảm bảo rằng dữ liệu và tín hiệu điều khiển được gửi đi một cách chính xác và đúng thời điểm.9 – Sơ đồ phân cấp của lớp uvm_driver. Các bước để tạo UVM Driver: – Tạo class driver do người dùng định nghĩa được mở rộng từ uvm_driver và đăng ký lên factory. – Khai báo interface ảo để truy xuất đến interface thực bằng cách sử dụng cơ sở dữ liệu cấu hình trong buid_phase. – Thực thi buid_phase và nhận interface từ cơ sở dữ liệu cấu hình.
– Thực thi run_phase để lấy các sequence và đưa sequence đến DUT dùng interface ảo. UVM Sequencer UVM Sequencer là lớp trung gian thiết lập kết nối giữa uvm_sequence và uvm_driver như được thể hiện ở Hình 2.10, mục đích là để chuyển các sequence đến driver, sau đó những sequence này sẽ được chuyển đến DUT.10 – Cấu trúc UVM Sequencer. Lớp uvm_sequencer đóng vai trò quan trọng trong việc tạo ra các chuỗi kích thích và kiểm soát luồng sequence giữa các thành phần trong môi trường kiểm tra. Sự phân cấp của lớp uvm_sequencer được cấu trúc như sau: Hình 2.11 – Sơ đồ phân cấp của lớp uvm_sequencer.
UVM Sequence UVM Sequence chứa các đơn vị dữ liệu (uvm_sequence_item) như được thể hiện ở Hình 2.