CHƯƠNG I: GIỚI THIỆU VỀ KIỂM CHỨNG THIẾT KẾ VI MẠCH 1. Khái niệm về kiểm chứng thiết kế Thiết kế mạch là sự chuyển đổi một nhóm các đặc tính kỹ thuật thành một phép thực thi các đặc tính đó. Các đặc tính kỹ thuật mô tả chức năng của thiết kế, nhưng không thể hiện phương pháp thực hiện. Phép thực thi sẽ chi tiết hóa cách mà tính năng của mạch được thực hiện.
Cả đặc tính kỹ thuật và phép thực thi tạo thành dạng mô tả của chức năng, nhưng chúng có các mức cụ thể hay trừu tượng khác nhau. Mô tả của mức trừu tượng cao hơn sẽ chứa ít chi tiết hơn, vì vậy đặc tính kỹ thuật có mức trừu tượng cao hơn so với phép triển khai, xem hình 1. Việc xử lý chuyển đổi một mô tả trừu tượng thành một mô tả cụ thể hơn được gọi là làm mịn. Vì thế, xử lý thiết kế là làm mịn một nhóm các thuộc tính kỹ thuật và thủ tục ở các mức độ khác nhau của các phép triển khai cụ thể.
Lưu đồ thiết kế Thông số chức năng Mô tả thuật toán Độ trừu tượng Độ chi tiết RTL giảm dần tăng dần Gate netlist Ph i l tli t Hình 1.1: Thang trừu tượng thiết kế 10 ĐẶNG QUỐC ĐƯỜNG KIỂM CHỨNG VI MẠCH BẰNG PHƯƠNG PHÁP MÔ PHỎNG Kiểm chứng thiết kế là việc xử lý ngược của quá trình thiết kế. Kiểm chứng thiết kế bắt đầu với một phép thực thi và xác định phép thực thi đó có đáp ứng các thuộc tính kỹ thuật đề ra hay không. Vì vậy, tại mỗi bước thiết kế, có một bước kiểm chứng tương ứng. Thông thường, kiểm chứng thiết kế bao gồm nhiều loại, ví như kiểm chứng chức năng, kiểm chứng thời gian, kiểm chứng layout và kiểm chứng miền điện.2 thể hiện mối quan hệ giữa xử lý thiết kế và xử lý kiểm chứng.
Đặc điểm kỹ thuật Kiểm tra Vi kiến trúc thuộc tính Thiết kế RTL Kiểm chứng Gate Netlist Kiểm tra tương đương Layout Hình 1.2: Mối quan hệ giữa thiết kế và kiểm chứng Kiểm chứng thiết kế có thể được chia thành 2 loại. Loại 1 kiểm chứng hai phiên bản của thiết kế xem có tương đương về chức năng hay không, được gọi là kiểm chứng tương đương. Kịch bản phổ biến của kiểm chứng tương đương là so sánh hai phiên bản mạch ở cùng cấp độ trừu tượng. Tuy nhiên, hai phiên bản thiết kế có thể khác nhau tùy theo cấp độ trừu tượng, chẳng hạn như một phiên bản mạch ở cấp độ thuộc tính kỹ thuật và một phiến bản ở cấp độ gate netlist.
Khi đó, chúng có thể là không tương đương chức năng, do phép thực thi cấp thấp có thể chứa nhiều chi tiết không được xác định thuộc tính ở cấp cao hơn. Trong trường hợp này, thay vì kiểm chứng tương đương chức năng của hai phiên 11 ĐẶNG QUỐC ĐƯỜNG KIỂM CHỨNG VI MẠCH BẰNG PHƯƠNG PHÁP MÔ PHỎNG bản thiết kế, ta sẽ kiểm chứng xem phép thực thi có thỏa mãn thuộc tính kỹ thuật hay không. Đây là phương pháp kiểm chứng một chiều, và được gọi là kiểm chứng thực thi (implementation verification), kiểm chứng thuộc tính (property checking ) hay kiểm chứng mô hình (model checking). Nguyên lý kiểm chứng cơ bản Nguyên lý cơ bản của kiểm chứng gồm 2 bước.
Bước 1, các thuộc tính kỹ thuật được chuyển đổi thành phép thực thi, ta gọi bước này là phép biến đổi kiểm chứng. Bước 2, kết quả từ phép biến đổi kiểm chứng được so sánh với kết quả từ thiết kế để phát hiện lỗi. Minh họa như trong hình 1. Rõ ràng nếu cả máy kiểm chứng và máy thiết kế đều thực hiện các thủ tục giống nhau thì chúng sẽ cùng tránh hoặc cùng phạm phải một số lỗi nhất định.
Vì thế, nếu máy kiểm chứng và máy thiết kế thực hiện các thủ tục càng khác nhau thì kết quả kiểm chứng càng đáng tin cậy. Một phương pháp được áp dụng đó là chuyển đổi các thuộc tính kỹ thuật thành một mô hình thực thi sử dụng một ngôn ngữ khác so với ngôn ngữ thiết kế, được gọi là ngôn ngữ kiểm chứng. Ngôn ngữ kiểm chứng có thể là Vera, C/C++. Ví dụ ta có thể sử dụng C/C++ cho mô hình kiểm chứng và Verilog/VHDL cho mô hình thiết kế.
Bước thứ 2 của quá trình kiểm chứng là so sánh 2 phép thực thi bằng cách biểu diễn chúng theo cùng một dạng trung gian để có thể kiểm tra tính tương đương. Chẳng hạn như để xác định tính tương đương giữa một mạch cấp transistor và một phép triển khai RTL, dạng trung gian chung trong trường hợp này là đồ hình quyết định nhị phân BDD. 12 ĐẶNG QUỐC ĐƯỜNG KIỂM CHỨNG VI MẠCH BẰNG PHƯƠNG PHÁP MÔ PHỎNG Tuyến thiết kế Thiết kế (A) Thuộc tính Tương đương ? Thiết kế thay thế Tuyến kiểm chứng Thiết kế (B) Thuộc tính Thỏa mãn ? Phép biểu diễn thuộc tính “Thiết kế thay thế” Thiết kế Output Thuộc tính (C) Tương đương ? “Thiết kế thay thế” Input Output tham chiếu Hình 1.3: Nguyên lý cơ bản của kiểm chứng thiết kế. (A) Kiểm chứng tương đương.
(B) Kiểm chứng thuộc tính. Phương pháp kiểm chứng 1. Kiểm chứng mô phỏng Phương pháp kiểm chứng được sử dụng phổ biến nhất là kiểm chứng dựa trên mô phỏng. Trong quá trình mô phỏng kiểm chứng, thiết kế được đặt vào một bàn thử, các tác nhân đầu vào được cấp cho bàn thử, và đầu ra từ thiết kế được so sánh với đầu ra tham chiếu.
Một bàn thử bao gồm bộ mã hỗ trợ các hoạt động của thiết kế, đôi khi nó cũng tạo ra các tác nhân đầu vào và so sánh đầu ra với đầu ra tham chiếu. Các tác nhân đầu vào có thể được tạo ra trước khi mô phỏng, được đọc vào trong thiết kế từ một cơ sở dữ liệu trong quá trình mô phỏng, hoặc cũng có thể được tạo ra ngay trong quá trình 13 ĐẶNG QUỐC ĐƯỜNG KIỂM CHỨNG VI MẠCH BẰNG PHƯƠNG PHÁP MÔ PHỎNG mô phỏng. Tương tự, đầu ra tham chiếu có thể được tạo ra trước hoặc trong quá trình mô phỏng. Trong trường hợp tạo đầu vào, đầu ra ngay trong quá trình mô phỏng thì một mô hình tham chiếu được mô phỏng đồng thời với thiết kế, các kết quả từ 2 mô hình sau đó được so sánh với nhau.
Trước khi một thiết kế được mô phỏng, nó chạy qua một chương trình lọc, để kiểm tra các lỗi cố định, lỗi tiềm năng và các lỗi vi phạm nguyên tắc mã hóa. Một chương trình lọc không yêu cầu các vector đầu vào, vì thế nó chỉ kiểm tra những lỗi mà có thể phát hiện độc lập với các tác nhân đầu vào. Bộ lọc chỉ có thể cảnh báo các lỗi tiềm tàng, ví dụ như tín hiệu đầu vào dao động (không ổn định) của một cổng mà nhà thiết kế không mong muốn. Một dự án có nguyên tắc mã hóa riêng của nó nhằm giảm thiểu lỗi thiết kế, cải thiện hiệu suất mô phỏng hoặc cho các mục đích khác, và bộ lọc sẽ kiểm tra các sai phạm của những nguyên tắc này.
Tiếp đến, các vector đầu vào của các mục trong kịch bản kiểm tra được tạo ra. Các vector đầu vào nhắm đến các đặc tính và chức năng cụ thể được gọi là kiểm tra trực tiếp. Do kiểm tra trực tiếp có thiên hướng nhắm đến những vùng trong không gian đầu vào mà nhà thiết kế nắm rõ, còn các sai sót thường xảy ra trong những vùng mà nhà thiết kế không nắm rõ, vì vậy để khảo sát các vùng khác thì các phép kiểm tra giả ngẫu nhiên được sử dụng chung với phép kiểm tra trực tiếp. Để tạo phép kiểm tra giả ngẫu nhiên, một chương trình phần mềm sẽ chọn và tạo ra các phép kiểm tra cũng như các đầu ra mong muốn.
Các phép kiểm tra ngẫu nhiên này có thể là các vector lân cận của phép kiểm tra trực tiếp. Vì thế, nếu phép kiểm tra trực tiếp là các điểm trong không gian đầu vào thì phép kiểm tra ngẫu nhiên sẽ mở rộng xung quanh các điểm này. Sau khi các phép kiểm tra đã được tạo, trình mô phỏng được chọn để thực hiện mô phỏng. Trình mô phỏng có thể là phần cứng hoặc phần mềm, theo sự kiện hoặc theo chu kỳ.
Một trình mô phỏng theo sự kiện sẽ đánh giá một cổng hoặc một khối các 14 ĐẶNG QUỐC ĐƯỜNG KIỂM CHỨNG VI MẠCH BẰNG PHƯƠNG PHÁP MÔ PHỎNG trạng thái mỗi khi một đầu vào của cổng hoặc các biến của khối được phát hiện là có sự thay đổi giá trị. Sự thay đổi giá trị được gọi là sự kiện. Một trình mô phỏng theo chu kỳ chia nhỏ mạch dựa theo miền đồng hồ và đánh giá phân mạch trong mỗi miền đồng hồ một lần tại mỗi sườn lên của xung đồng hồ. Vậy số lượng sự kiện sẽ ảnh hưởng đến tốc độ chạy mô phỏng, mạch có ít sự kiện sẽ chạy nhanh hơn khi mô phỏng theo sự kiện, trong khi đó mạch với nhiều sự kiện sẽ chạy nhanh hơn khi mô phỏng theo chu kỳ.
Trên thực tế, phần lớn mạch có số lượng sự kiện đủ lớn để trình mô phỏng theo chu kỳ đạt hiệu quả cao hơn so với trình mô phỏng theo sự kiện. Tuy nhiên, mô phỏng theo chu kỳ cũng có những nhược điểm riêng. Với trình mô phỏng theo chu kỳ, các miền đồng hồ trong mạch phải được định nghĩa chính xác. Ví dụ như một mạch không đồng bộ sẽ không có định nghĩa rõ ràng về miền đồng hồ nên không thể mô phỏng được bằng trình mô phỏng theo chu kỳ.
Một trình mô phỏng phần cứng sẽ mô hình hóa mạch với các thành phần phần cứng giống như mảng các vi xử lý hay mảng các cổng có thể lập trình được (FPGA). Trước tiên, các thành phần trong trình mô phỏng phần cứng được cấu hình để mô hình hóa thiết kế. Với trình mô phỏng phần cứng dạng mảng các vi xử lý, thiết kế được biên dịch thành dạng các chỉ dẫn cho các vi xử lý, sao cho việc chạy các vi xử lý là đồng thời với việc mô phỏng thiết kế. Trong một trình mô phỏng phần cứng dựa trên FPGA, các FPGA được lập trình để giả lập các cổng trong thiết kế.
Với cách này, kết quả thu được từ việc chạy phần cứng chính là kết quả mô phỏng thiết kế. Một trình mô phỏng phần cứng vừa có thể điều khiển theo sự kiện, vừa có thể theo chu kỳ, giống như trình mô phỏng phần mềm. Vì thế, mỗi kiểu trình mô phỏng phần cứng có nguyên tắc mã hóa riêng, và những nguyên tắc này chặt chẽ hơn so với các trình mô phỏng phần mềm. Một thiết kế chỉ có thể chạy trên một trình mô phỏng phần cứng khi nó đáp ứng được tất cả các yêu cầu mã hóa của trình mô phỏng.