Modelsim 테스트 벤치를 외부 자극과 인터페이스 할 수 있습니까


10

드라이버 소프트웨어와 FPGA 개발을 모두 수행하는 팀에서 일하고 있습니다. FPGA 시뮬레이션은 Modelsim에서 수행되고 드라이버 소프트웨어는 C로 작성됩니다. 통합 위험을 최소화하기 위해 하드웨어에 배치하기 전에 제품의 두 부분 사이의 상호 작용을 모델링 할 수 있기를 바랍니다.

Modelsim은 테스트 벤치를 지원하므로 텍스트 파일 형식으로 시간과 값을 입력하여 자극을 제공 할 수 있습니다. Modelsim에 파이프를 외부 응용 프로그램 (예 : 드라이버)에 연결하고 소프트웨어가 값을 테스트 벤치에 넣을 수있는 일종의 분산 시뮬레이션을 실행하고 나중에 결과를 관찰 할 수있는 모드가 있는지 궁금합니다. .

텍스트 파일 입력으로 할 수없는 트릭은 제품의 두 부분이 상호 작용하는 것입니다. 소프트웨어를 FPGA 시뮬레이터에 "쓰기"하고 결과를 읽은 다음 읽은 결과에 따라 FPGA에 새로운 값을 작성해야합니다. 텍스트 파일은 입력이 출력과 독립적이어야합니다.

StackExchange와 Google 모두에서 검색을 수행했지만 찾고있는 동작을 식별하거나 존재하지 않는 것으로 판단 할 수 있도록 검색 범위를 좁힐 수있는 키워드 세트를 만들 수 없었습니다.

답변:


9

유닉스 명명 된 파이프를 통한 ModelSim 시뮬레이션의 외부 제어

개요 :이 논문에서는 외부 프로그램을 통해 ModelSim 시뮬레이션을 제어하는 ​​방법을 제시합니다. ModelSim과 외부 프로그램 간의 통신은 각 애플리케이션에 일반 파일로 나타나는 Named Pipes ( "FIFO")를 사용하여 수행됩니다. 프로세스 간 통신 (IPC)에 FIFO를 사용하는 것과 FIFO를 사용하는 일반 파일의 주요 차이점은 다른 응용 프로그램이 FIFO에서 읽기를 시도 할 때까지 FIFO에 쓰려고하는 응용 프로그램이 일시 중지된다는 것입니다. 이것은 IPC의 신뢰성을 향상시킵니다. 이 방법의 주요 장점은 1) 일반적인 파일 작업 만 사용되므로 거의 모든 프로그래밍 언어로 외부 응용 프로그램을 작성할 수 있습니다. 2) 검증 엔지니어는 최소한의 재 작성으로 표준 검증 소프트웨어 패키지를 재사용 할 수 있습니다. 3) 여러 개의 DUT (Device Under Test)가 서로 통신하도록하여 최종 시스템을보다 정확하게 시뮬레이션 할 수 있습니다. 4) ModelSim의 시뮬레이션 엔진이 다중 스레드되지 않더라도 단일 시스템 이미지 (SSI) 클러스터 또는 다중 프로세서 컴퓨터에서 전체 시뮬레이션 성능을 쉽게 향상시킬 수 있습니다. 행동 VHDL에 대한 파일 입 / 출력 (I / O) 구현으로 인해 ModelSim은 이러한 FIFO를 직접 읽거나 쓸 수 없습니다. 이 제한에 대한 해결 방법은 ModelSim의 외국어 인터페이스 (FLI)를 사용하여 설명합니다. 이 백서는 또한 VHDL에서 차세대 부동 소수점 루틴을 검증하는 데 사용되는이 방법의 실제 예를 보여줍니다. 특히 C ++로 작성된 오픈 소스 IEEE 준수 검사기 소프트웨어 패키지는

그리고 외부 프로그래밍 인터페이스가 필요한 FIFO의 문제는 VHDL 파일 I / O가 데이터를 사용할 수있을 때까지 차단을 정상적으로 처리 할 수 ​​없다는 것입니다.

불행히도 논문은 웹에서 사용할 수 없습니다.

Model Sim ® 외국어 인터페이스 버전 5.6d , PDF 3.4MB .

c – VHDL 공동 시뮬레이션 및 Linux x86 플랫폼의 시뮬레이터 제어에 ModelSim 외국어 인터페이스 사용 Andre Pool-fli@andrepool.com-버전 1.5-2012 년 11 월, 마지막 업데이트 2013 년 9 월 , PDF, 320KB (FIFO는 언급하지 않음) .

Linux – x86 플랫폼에서 c – VHDL 공동 시뮬레이션 및 시뮬레이터 제어를위한 ModelSim 외국어 인터페이스 사용 (일치하는 github 코드 저장소).

ghdl에서 VHPI Foreign 함수 호출을 사용하는 좀 더 오픈 소스가 있습니다 : master · texane / vhdl · GitHub의 vhdl / src / sim / ghdlex_mein .

그리고 GHDL_discuss 목록의 Martin Strubel에서 업데이트 된 것 같습니다 : http://www.section5.ch/downloads/ghdlex-0.051.tgz 는 2014 년 4 월 14 일 fifo.c의 날짜를 보여줍니다.

FLI는 VHPI 지원 상태 (IEEE Std 1076-2008, VHDL LRM의 일부)를 잘 모르면서 Modelsim에 정의되어 있습니다.

소켓 또는 파일 FIFO를 사용하면 소프트웨어 및 하드웨어 프로세스가 속도 버퍼링을 제공하여 다른 속도로 실행될 수 있습니다. 소프트웨어 시스템이 하드웨어 시뮬레이션보다 수십 배 빠르면 항상 필요한 것은 아닙니다 (일반적으로).

VHDL, 볼 수있는 기능을 UNIX (POSIX)를 제공하기위한 노력의 일환있다 공공 도메인 VHDL 패키지 이전 논문에 대한 포인터를 포함, 너그 산호세 2002 VHDL 테스트 벤치를위한 VHDL 테스트 벤치 C / UNIX 기능 1 C / UNIX 기능 슬라이드와 함께 설정 유닉스 파이프 및 RSH에 대한 자세한 메모와 함께 . 명명 된 파이프를 열어 두는 방법을 보여줍니다. 모든 VHDL 코드도 다운로드 할 수 있습니다. 이것이 귀하의 목표를 달성하는 가장 쉬운 방법으로 이어질 것이라고 생각합니다.

파이프에 연결할 수있는 Modelsim 고유의 것이 있습니까? 아마도 Windows에서는 더 많을 것입니다. 할 수 있습니까? 예, 그러나 그 길은 희미한 마음을위한 것이 아닙니다. 한쪽 끝 또는 다른 쪽 끝을 교착 상태로 만들거나 데이터 가용성을 기다리고있을 수 있습니다.

외국 프로그래밍 인터페이스는 이론적으로 '파이프'의 한쪽 또는 다른 쪽 끝에 자식 프로세스를 만들 수 있습니다. 이는 또한 공유 메모리 모델을 사용하여 두 끝 사이에서 통신 할 수 있음을 의미합니다.


훌륭하게 연구 된 답변에 감사드립니다! "외국어 인터페이스"는 필자가 필요한 참조 문서를 가져 오는 데 필요한 문구였습니다. 초기 통합은 여기에 있습니다!
Cort Ammon

5

Cocotb 를보고 싶을 수도있다 . Python 기반의 공동 시뮬레이션 라이브러리입니다. 디자인 목표 중 하나는 수정하지 않은 프로덕션 소프트웨어와 RTL을 쉽게 시뮬레이션하는 방법론을 가능하게하는 것이 었습니다.

ping시뮬레이션에 대해 수정되지 않은 명령 을 실행하는 저장소 와 코드를 안내 하는 자습서예제 가 있습니다.

사용자 공간 드라이버, 구성 유틸리티 등의 경우 소프트웨어를 수정하지 않고 실행할 수있는 몇 가지 옵션이 있습니다 .

  1. 장치에 대한 액세스가 몇 가지 기능 (예 : 읽기 및 쓰기 호출)으로 귀결되는 경우 시뮬레이션에 대한 액세스를 수행하는 동안 차단하는 시뮬레이션 라이브러리에 연결할 수 있습니다. 이것은 구성에 매우 효과적입니다.

  2. 소프트웨어가 메모리 매핑 된 IO를 사용하고 포인터를 역 참조하여 장치에 액세스하는 경우 상황이 약간 더 복잡해집니다. 보호 비트가 설정되고 트랩 액세스가 있는 공유 메모리 영역을 만들어야 합니다 .

네트워킹을 사용하는 경우 TUN / TAP와 같은 가상 인터페이스를 사용할 수 있습니다 ( 위 의 자습서 참조 ). USB 전송 또는 기타 공통 호스트 인터페이스에 대해 유사한 옵션이있을 수 있습니다.

Cocotb는 다양한 시뮬레이터 및 VHDL (VHPI를 통해) 또는 Verilog / SystemVerilog 디자인 (VPI를 통해)과 함께 작동합니다. 불행히도 Modelsim은 VHPI를 구현하지 않으므로 VHDL 사용자는 FLI를 사용하고 있으므로 인터페이스만큼 유용하지는 않습니다. 당신은 수있는 멘토에서 신음 업계 표준 인터페이스를 구현하려고 그들을 설득하거나 VHPI을 지원하는 다른 시뮬레이터를 평가할 수 있습니다.

안타깝게도 일반적으로 도구 공급 업체는 VHDL 관련 기능을 구현하는 데 걸리는 시간으로 판단 할 때 VHDL 시장에 특히 관심이없는 것으로 보입니다 ...

면책 조항 : 저는 Cocotb 개발자입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.