Bạn có thể giao diện một testbench Modelim với một kích thích bên ngoài


10

Tôi đang làm việc trong một nhóm đang thực hiện cả phần mềm trình điều khiển và phát triển FPGA. Mô phỏng đồ họa đang được thực hiện trong Mô hình và phần mềm trình điều khiển được viết bằng C. Để giảm thiểu rủi ro tích hợp, tôi rất thích có thể mô hình hóa sự tương tác giữa hai nửa sản phẩm của chúng tôi trước khi đưa nó vào phần cứng.

Tôi biết Modelim hỗ trợ testbench cho phép bạn cung cấp kích thích dưới dạng tệp văn bản với thời gian và giá trị cho đầu vào. Tôi tự hỏi liệu Modelim có chế độ cho phép bạn nối ống với ứng dụng bên ngoài (như trình điều khiển của chúng tôi) và chạy một loại mô phỏng phân tán trong đó phần mềm có thể đẩy các giá trị vào testbench, sau đó quan sát kết quả sau .

Thủ thuật mà tôi không thể làm với đầu vào tệp văn bản là có hai nửa sản phẩm tương tác. Tôi cần phải có các giá trị "ghi" phần mềm vào trình giả lập FPGA, đọc kết quả và sau đó ghi các giá trị mới vào FPGA phụ thuộc vào kết quả mà nó đọc được. Các tệp văn bản yêu cầu các đầu vào phải độc lập với đầu ra.

Tôi đã thực hiện tìm kiếm trên cả StackExchange và google, nhưng tôi không thể đưa ra một bộ từ khóa để thu hẹp tìm kiếm của mình đủ để xác định hành vi tôi đang tìm kiếm hoặc xác định rằng nó không tồn tại.

Câu trả lời:


9

Kiểm soát bên ngoài của Mô phỏng ModelSim qua các ống được đặt tên Unix

Tóm tắt: Trong luận án này, chúng tôi trình bày một phương pháp điều khiển mô phỏng ModelSim thông qua một chương trình bên ngoài. Giao tiếp giữa ModelSim và chương trình bên ngoài được thực hiện bằng cách sử dụng Named Faucet ("FIFOs"), xuất hiện dưới dạng các tệp bình thường cho mỗi ứng dụng. Sự khác biệt chính giữa việc sử dụng FIFO so với các tệp thông thường cho Giao tiếp giữa quá trình (IPC) là một ứng dụng cố gắng ghi vào một FIFO bị tạm dừng cho đến khi một ứng dụng khác cố đọc từ FIFO và ngược lại. Điều này cải thiện độ tin cậy của IPC. Ưu điểm chính của phương pháp này là 1) Vì chỉ các thao tác tệp chung được sử dụng, ứng dụng bên ngoài có thể được viết bằng gần như bất kỳ ngôn ngữ lập trình nào; 2) Nó cung cấp cho kỹ sư xác minh khả năng sử dụng lại các gói phần mềm xác thực tiêu chuẩn với việc viết lại tối thiểu; 3) Bằng cách có nhiều thiết bị được thử nghiệm (DUT) giao tiếp với nhau, một mô phỏng chính xác hơn về hệ thống cuối cùng có thể được tạo ra; và 4) Hiệu suất của mô phỏng tổng thể có thể tăng lên dễ dàng trên cụm máy tính đơn hệ thống (SSI) hoặc máy tính đa bộ xử lý mặc dù công cụ mô phỏng của ModelSim không đa luồng. Do việc triển khai đầu vào / đầu ra tệp (I / O) cho VHDL hành vi, ModelSim không thể đọc hoặc ghi trực tiếp các FIFO này. Một cách giải quyết cho giới hạn này được thể hiện bằng Giao diện ngoại ngữ (FLI) của ModelSim. Bài viết này cũng cho thấy một ví dụ hoạt động của phương pháp này đang được sử dụng để xác minh thế hệ tiếp theo của dấu phẩy động tiếp theo trong VHDL. Cụ thể, gói phần mềm Trình kiểm tra tuân thủ nguồn mở của IEEE, được viết bằng C ++,

Và vấn đề với các FIFO yêu cầu giao diện lập trình nước ngoài là I / O của tệp VHDL không thể xử lý một cách duyên dáng với việc chặn cho đến khi có dữ liệu.

Thật không may, luận án không có sẵn trên web.

Model Sim ® Giao diện ngoại ngữ Phiên bản 5.6d , PDF 3.4 MB.

Sử dụng Giao diện Ngoại ngữ ModelSim cho c - Mô phỏng VHDL và Điều khiển Trình mô phỏng trên Nền tảng Linux x86 Andre Pool - fli@andrepool.com - Phiên bản 1.5 - được tạo vào tháng 11 năm 2012, bản cập nhật cuối tháng 9 năm 2013 , PDF, 320KB (Và không bao giờ đề cập đến FIFO) .

Sử dụng Giao diện ngoại ngữ ModelSim cho c - Mô phỏng đồng VHDL và Điều khiển trình mô phỏng trên Nền tảng Linux x86 (Kho lưu trữ mã github phù hợp).

Có thêm một chút nguồn mở, sử dụng hàm gọi VHPI Foreign trong ghdl: vhdl / src / sim / ghdlex_mein tại master · texane / vhdl · GitHub .

Và những gì trông giống như một bản cập nhật từ Martin Strubel trong danh sách GHDL_discuss: http://www.section5.ch/doads/ghdlex-0.051.tgz hiển thị một ngày cho fifo.c ngày 14 tháng 4 năm 2014.

FLI theo định nghĩa sẽ khóa bạn vào Modelim, không chắc về trạng thái hỗ trợ VHPI của họ (là một phần của IEEE Std 1076-2008, VHDL LRM).

Sử dụng ổ cắm hoặc tệp FIFO cho phép quá trình phần mềm và phần cứng chạy ở các tốc độ khác nhau, bằng cách cung cấp bộ đệm tốc độ. Không phải lúc nào cũng cần thiết nếu hệ thống phần mềm của bạn nhanh hơn so với mô phỏng phần cứng (và nói chung là như vậy).

Có một nỗ lực để cung cấp chức năng UNIX (POSIX) cho VHDL, Xem các gói VHDL trong miền công cộng , có chứa một con trỏ tới một giấy trước đó SNUG San Jose 2002 1 C / UNIX Hàm cho VHDL Testbenches C / UNIX Chức năng cho VHDL Testbenches cùng với một slide thiết lập với các ghi chú bổ sung trên các ống Unix & rsh . Điều này cho thấy làm thế nào để giữ cho đường ống được đặt tên mở. Tất cả các mã VHDL cũng có thể được tải xuống. Tôi cho rằng điều này sẽ dẫn đến cách dễ dàng nhất để đạt được mục tiêu của bạn.

Vì vậy, có một cái gì đó có nguồn gốc từ Modelim cho phép bạn nối với một đường ống? Có thể không, càng nhiều hơn trong Windows. Nó có thể được thực hiện? Có, nhưng cách không dành cho người yếu tim. Bạn có thể bế tắc một đầu này hoặc đầu kia hoặc có thể cả hai đang chờ sẵn sàng dữ liệu.

Về mặt lý thuyết, giao diện lập trình nước ngoài cho phép bạn sinh ra một tiến trình con cho một hoặc đầu kia của 'ống', điều đó cũng có nghĩa là bạn có thể sử dụng mô hình bộ nhớ dùng chung để giao tiếp giữa hai đầu.


Cảm ơn bạn đã trả lời nghiên cứu tuyệt vời! "Giao diện ngoại ngữ" chính xác là cụm từ tôi cần để lấy tài liệu tham khảo tôi cần, tôi sẽ không bao giờ đoán được! Hội nhập sớm tôi đến đây!
Cort Ammon

5

Bạn có thể muốn nhìn vào Cocotb . Đó là thư viện đồng mô phỏng dựa trên Python, một trong những mục tiêu thiết kế là cho phép phương pháp bạn mô tả, dễ dàng mô phỏng phần mềm sản xuất chưa sửa đổi và RTL.

Có một ví dụ trong kho lưu trữ đang chạy pinglệnh chưa sửa đổi đối với mô phỏng và hướng dẫn đi qua mã.

Đối với trình điều khiển không gian người dùng, tiện ích cấu hình, v.v. bạn có một vài tùy chọn để chạy phần mềm chưa được sửa đổi :

  1. Nếu quyền truy cập của bạn vào thiết bị có thể thực hiện một số chức năng (ví dụ: cuộc gọi đọc và viết), bạn có thể liên kết với thư viện mô phỏng chặn trong khi thực hiện truy cập đối với mô phỏng. Điều này hoạt động rất tốt cho cấu hình.

  2. Nếu phần mềm của bạn sử dụng IO được ánh xạ bộ nhớ và con trỏ hội nghị để truy cập vào thiết bị thì mọi thứ sẽ phức tạp hơn một chút - bạn phải tạo một vùng bộ nhớ dùng chung với các bit bảo vệ được đặt và truy cập bẫy .

Nếu bạn sử dụng mạng thì các giao diện ảo như TUN / TAP có thể được sử dụng (xem hướng dẫn được đề cập ở trên), tôi nghi ngờ có thể có các tùy chọn tương tự để chuyển USB hoặc giao diện máy chủ phổ biến khác.

Cocotb hoạt động với nhiều thiết bị mô phỏng và VHDL (thông qua VHPI) hoặc thiết kế Verilog / SystemVerilog (thông qua VPI). Thật không may, Modelim không triển khai VHPI vì vậy người dùng VHDL bị mắc kẹt với FLI, gần như không hữu ích như giao diện. Bạn có thể rên rỉ tại Mentor để thử và thuyết phục họ thực hiện giao diện tiêu chuẩn công nghiệp hoặc bạn có thể đánh giá một trình giả lập khác hỗ trợ VHPI.

Đáng buồn thay, có vẻ như các nhà cung cấp công cụ nói chung không quan tâm đặc biệt đến thị trường VHDL, đánh giá theo thời gian họ phải thực hiện bất kỳ chức năng nào liên quan đến VHDL ...

Tuyên bố miễn trừ trách nhiệm: Tôi là nhà phát triển Cocotb.

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.