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.