Xác minh CPU mềm


18

Tôi hiện đang trong quá trình thiết kế CPU đơn giản trong VHDL bằng Xilinx ISE và ISIM. Phần thiết kế đang rất tốt, nhưng dường như tôi không thể tìm ra cách xác minh một cách nhất quán.

Ngay bây giờ tôi có một băng ghế thử nghiệm VHDL mà tôi cập nhật để kiểm tra chức năng tôi đang làm việc tại bất kỳ thời điểm cụ thể nào. Điều này rất đặc biệt và nó không giúp tôi nắm bắt được hồi quy và không thể được sử dụng để xác minh sự tuân thủ với đặc tả / tập lệnh.

Tôi đã nghĩ về việc phát triển một bộ thử nghiệm rộng rãi, nhưng vấn đề là trạng thái tiềm năng của một phần mục đích chung là CPU là rất lớn so với các thành phần ít chung chung.

Tôi đang tìm kiếm một phương pháp cho phép tôi thực hiện thiết kế và thử nghiệm một cách có kiểm soát hơn. Một số loại "TDD phần cứng" nếu bạn muốn. Có một điều như vậy tồn tại? Nó có thể được áp dụng tương đối dễ dàng cho các bộ phận mục đích chung như CPU ​​không?

Câu trả lời:


16

Toàn bộ vấn đề xác minh CPU là siêu lớn và khó khăn. Có những người làm nên sự nghiệp từ việc này. Tôi sẽ chỉ cung cấp cho bạn tổng quan ...

  1. Viết chương trình hợp ngữ kiểm tra mọi hướng dẫn và từng chi tiết nhỏ của mọi hướng dẫn. Ví dụ: khi kiểm tra lệnh ADD, bạn có thể kiểm tra nó với các số dương, cả âm và một trong hai (hai lần). Sau đó, bạn sẽ kiểm tra cờ mang, cờ không, v.v. Các tính năng đặc biệt khác của CPU (như dự đoán nhánh, v.v.) sẽ có phần đặc biệt của riêng chúng trong bài kiểm tra này.

  2. Viết, sử dụng C / C ++ hoặc một cái gì đó, một mô hình CPU của bạn. Đây là CPU ảo của bạn. Đây cũng là "CPU vàng" của bạn, có nghĩa đây là CPU mà mọi thứ khác được so sánh với. Lý tưởng nhất là người đã viết VHDL KHÔNG phải là người viết mô hình C / C ++.

  3. Viết / Tạo một hệ thống trong đó bạn có thể chạy mô hình C / C ++ và mô hình VHDL cạnh nhau và so sánh kết quả theo từng chu kỳ. Chạy chương trình lắp ráp của bạn từ Bước 1 và đảm bảo hai mô hình khớp với nhau.

  4. Chạy hai mô hình của bạn theo "hướng dẫn" ngẫu nhiên. Về cơ bản, điền "ram" với dữ liệu ngẫu nhiên và thực hiện dữ liệu ngẫu nhiên đó như thể đó là hướng dẫn thực sự. Chạy cùng một dữ liệu ngẫu nhiên trên cả hai mô hình VHDL và C / C ++ và so sánh kết quả. Mô hình C / C ++ này sẽ chạy trên một số máy trạm và / hoặc máy chủ (không phải CPU mới).

  5. Thiết lập một máy, hoặc một số máy, để lặp lại bước 4 về cơ bản mãi mãi. Ngay cả khi CPU của bạn đã "hoàn thành" và đã được sản xuất trong một năm hoặc lâu hơn, bạn vẫn sẽ chạy thử nghiệm này.

  6. Lặp lại các bước này bất cứ khi nào có nhiều thứ để mô phỏng. Ví dụ: bạn sẽ chạy nó trên VHDL sau tuyến với thời gian khi khả dụng.

Không có gì đảm bảo rằng việc so sánh các phiên bản VHDL và C / C ++ sẽ bắt được từng lỗi - nhưng thực sự không có cách nào tốt hơn. Và việc kiểm tra CPU theo hướng dẫn ngẫu nhiên cần có thời gian, nhưng điều đó cũng rất hữu ích. Sự thay thế thực sự duy nhất cho việc này là thuê nhiều người chỉ viết mã cả ngày để kiểm tra các phần khác nhau của CPU - và các công ty lớn hơn làm điều này, nhưng họ cũng làm công cụ dữ liệu ngẫu nhiên.

Đối với một người viết mã VHDL, thông thường chỉ cần bước 1 là xong. Nhưng nếu bạn định bán CPU thì ít nhất nên thực hiện một số bước khác (và thực sự, bạn nên làm tất cả).


Câu trả lời tuyệt vời, cảm ơn bạn! Điều này làm cho rất nhiều ý nghĩa. "CPU vàng" thực sự là mảnh ghép còn thiếu của câu đố cho phép bạn thực hiện xác minh theo chu kỳ khi kiểm tra. Vì đây chủ yếu là một dự án đồ chơi, tôi nghĩ rằng tôi sẽ tuân thủ câu đầu tiên của đoạn cuối và chỉ làm bước 1. Nhưng biết những gì tôi nên làm là vô giá.
drxzcl

Bạn cũng có thể có một mô hình C ++ vàng, nhưng không chính xác, cho phép nó đơn giản hơn nhiều và do đó có thể đúng hơn - hữu ích để kiểm tra chức năng ALU chẳng hạn ("2 + 2 = 4 và một số cờ, I không quan tâm khi "thay vì" 2 + 2 = 4 sau một tích tắc và cờ sau 2 tích tắc ")
Martin Thompson

Ngoài ra, hãy chạy phạm vi bảo hiểm mã (để kiểm tra bạn đã thực hiện tất cả) và bảo hiểm thử nghiệm (để kiểm tra tất cả các thử nghiệm đã được thử nghiệm cho cả pas và fail)
Martin Thompson

Theo dõi: Sử dụng quy trình "bước một", tôi đã tìm thấy rất nhiều lỗi ... trong trình biên dịch chương trình của mình: P Bản thân lõi có vẻ tương đối ổn.
drxzcl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.