2013-12-09 18 views
9

Một vấn đề tôi đã thấy một lần nữa và một lần nữa trên các dự án VHDL khác nhau là các testbenches cấp cao luôn lớn và khó tổ chức. Về cơ bản, đó là một quá trình thử nghiệm chính, nơi mà tín hiệu kiểm tra MỌI được kiểm soát hoặc xác thực từ đó, trở thành HUGE theo thời gian. Tôi biết rằng bạn có thể tạo các testbench cho các thành phần mức thấp hơn, nhưng câu hỏi này chủ yếu áp dụng cho các kiểm tra đầu vào/đầu ra mức cao nhất.Làm thế nào để quản lý các testbenches lớn VHDL

Tôi muốn có một số loại cấu trúc phân cấp để giữ mọi thứ được sắp xếp. Tôi đã thử thực hiện các thủ tục VHDL, nhưng trình biên dịch đã rất không hài lòng vì nó nghĩ rằng tôi đã cố gắng để gán tín hiệu từ các phần khác nhau của mã ...

Có bất kỳ điều gì có sẵn trong VHDL để đạt được hành vi của nội dung của lập trình c hay không hàm hoặC#define macro thay thế tiền xử lý trước? Nếu không, bạn có thể đề xuất điều gì? Nó sẽ làm cho tôi hạnh phúc để có thể có băng ghế dự bị cấp cao nhất của tôi trông như thế này:

testClockSignals(); 
testDigitialIO(); 
testDACSignals(); 
... 

Việc thực hiện các chức năng này trong một tệp riêng biệt sẽ được đóng băng trên bánh. Haha ... Tôi chỉ muốn viết và mô phỏng các băng ghế thử nghiệm trong C.

Trả lời

2

Tách mã băng ghế thử nghiệm trong quy trình có thể quản lý được, nhưng có thể trình biên dịch bị khiếu nại vì thủ tục cố gắng truy cập tín hiệu không phải là trong phạm vi ? Nếu quy trình là điều khiển tín hiệu không nằm trong phạm vi, thì tín hiệu có thể được đưa ra làm đối số cho quy trình, như được hiển thị cho ví dụ procReset bên dưới.

Một cấu trúc băng ghế dự bị kiểm tra, với nhiều cấp độ để bảo trì dễ dàng hơn, được hiển thị dưới đây:

--========================================================== 
-- Reusable procedures 

-- Reset generation 
procedure procReset(signal rst : out std_logic; ...) is 
... 

--========================================================== 
-- Main test control procedure in test bench 
process is 

    ------------------------------------------------------------ 
    -- General control and status 

    -- Reset device under test and related test bench modules 
    procedure genReset is 
    begin 
    procReset(rst, 100 ns); -- procReset declared elsewhere 
    -- Other code as required for complete reset 
    end procedure; 

    ------------------------------------------------------------ 
    -- Test cases 

    procedure testClockSignals is 
    begin 
    genReset; -- Apply reset to avoid test case interdependency 
    -- Test code here, and call genErr if mismatch detected 
    end procedure; 

    procedure testDigitialIO is 
    begin 
    genReset; -- Apply reset to avoid test case interdependency 
    -- Test code here, and call genErr if mismatch detected 
    end procedure; 

    procedure testDACSignals is 
    begin 
    genReset; -- Apply reset to avoid test case interdependency 
    -- Test code here, and call genErr if mismatch detected 
    end procedure; 

begin 

    ------------------------------------------------------------ 
    -- Run test cases 
    testClockSignals; 
    testDigitialIO; 
    testDACSignals; 
    -- End of simulation 
    std.env.stop(0); 
    wait; 

end process; 

Có nhiều cấp độ trong cấu trúc: trường hợp thử nghiệm

  1. Run: Trường hợp thủ tục cho mỗi trường hợp thử nghiệm là được gọi. Do đó, có thể nhận xét ra một hoặc nhiều trường hợp kiểm tra hơn trong quá trình phát triển và gỡ lỗi.

  2. Trường hợp kiểm tra: Mã trường hợp kiểm tra thử nghiệm, được viết là các thủ tục độc lập và độc lập. Phụ thuộc lẫn nhau giữa chạy các trường hợp thử nghiệm khác nhau tránh được bằng cách đặt lại (sử dụng genReset thủ tục) của thiết bị đang được kiểm tra và thử nghiệm liên quan mô-đun hỗ trợ băng ghế dự bị.

  3. Điều khiển chung và trạng thái: Băng ghế thử nghiệm có thể sử dụng lại Quy trình cụ thể, ví dụ thiết lập lại thiết bị đang thử nghiệm và thử nghiệm mô-đun hỗ trợ băng ghế dự bị.

  4. Quy trình sử dụng lại: Không kiểm soát hoặc sử dụng băng ghế thử nghiệm tín hiệu trực tiếp, nhưng chỉ thông qua đối số quy trình. Các thủ tục này có thể được đặt trong các gói (các tệp khác) để sử dụng lại trong các băng ghế thử nghiệm khác.

kiểm tra File băng ghế dự bị vẫn có thể khá một số dòng, vì tất cả các trường hợp mã kiểm tra vẫn phải trong cùng một tập tin với cách tiếp cận trên, nếu mã băng ghế dự bị thử nghiệm này cần truy cập trực tiếp đến tín hiệu kiểm tra băng ghế dự bị để kiểm soát hoặc kiểm tra các giá trị tín hiệu. Nếu các giá trị tín hiệu có thể được chuyển đến trường hợp kiểm tra các thủ tục thông qua các đối số, như được thực hiện cho cuộc gọi procReset thì có thể là để chuyển mã trường hợp thử nghiệm sang một gói khác.

5

Yêu cầu VHDL là bạn viết quy trình trong quá trình (như @MortenZdk đề xuất) hoặc bạn chuyển tất cả IO cho nó.

Sở thích của tôi là đặt các quy trình của tôi chỉ trong các gói, vì vậy tôi sử dụng phương thức chuyển tất cả IO. Để đơn giản hóa những gì được thông qua, tôi sử dụng hồ sơ. Nếu bạn giảm nó xuống một bản ghi, nó sẽ được inout và yêu cầu chức năng giải quyết trên các yếu tố của hồ sơ.

Để biết thêm ý tưởng về phương pháp này, goto: http://www.synthworks.com/papers/ và xem các giấy tờ mang tên: "Đẩy mạnh Xác Qua Pre-Sử dụng ..." (gần phía dưới) và "Kỹ thuật VHDL Testbench rằng Leapfrog SystemVerilog" (ở trên cùng)

Một khía cạnh quan trọng khác là sử dụng một quy trình riêng biệt cho mỗi giao diện độc lập. Cách kích thích này có thể được tạo đồng thời cho các giao diện khác nhau. Điều này cũng được minh họa trong các bài báo.

0

Nếu bạn có bàn kiểm tra cấp thấp hơn cho mỗi khối, thì bạn có thể sử dụng chúng ở cấp cao nhất.

Bằng cách tạo các thành phần thử nghiệm cấp thấp hơn ở bên phải, bạn có thể tạo chúng thành các mục kiểm tra cấp độ cao hơn thường chỉ là một shim nhỏ để chuyển đổi dữ liệu cấp độ pin thành dữ liệu cấp thử nghiệm ban đầu sử dụng.

Ví dụ, trong một xử lý hình ảnh FPGA, bạn sẽ có một số mã nguồn tìm kiếm hình ảnh và mã kiểm tra dữ liệu để kiểm tra các phần thuật toán. Đây có thể được sử dụng như là, hoặc với một số gói để cung cấp dữ liệu cho các chân FPGA cấp cao nhất, và sau đó giải mã đầu ra pin trở lại định dạng mà mã kiểm tra ban đầu yêu cầu.

Mã thiết lập đăng ký không nghi ngờ gì được kiểm tra ở cấp thấp hơn, có thể được bọc trong một số mã khác bằng cách lắc các chốt FPGA một cách thích hợp và diễn giải các kết quả vặn vẹo.

Sự kết hợp của hai bộ mã cho phép bạn kiểm tra chức năng đầu cuối của đường ống xử lý hình ảnh và cấu hình đăng ký của đường ống đó.

Các vấn đề liên quan