报错解决:Unable to find a `./myhdl.vpi‘ module on the search path.以及 %1 is not a valid Win32 application
問題產生
在學習Verilog進行FFT的時候,從GitHub上找到了一個相關代碼fft-dit-fpga。代碼中不僅給出了Verilog代碼,還附加了一個仿真測試的python程序,就想著運行運行,沒想到在
self.dut = Cosimulation("vvp -m ./myhdl.vpi fftexec",clk=self.clk, rst_n=self.rst_n,din=self.in_data, din_nd=self.in_nd,dout=self.out_data, dout_nd=self.out_nd,overflow=self.overflow,)這里報錯了,上網上找了一大圈子也沒有直接解決問題。因此記錄一下解決過程(在最后)。
相關介紹
MyHDL
??MyHDL是使用python語言進行HDL仿真驗證的一個工具包,而且是開源的(GitHub: MyHDL)。真的對我這種Verilog白紙很友善,起碼python語法是知道的。 當然,也可以使用Verilog語言寫一個test bench。
??想要安裝也很簡單,有兩種方式:
第二種方式也可以進行驗證安裝是否成功,在{repo_dir}/myhdl/test/core目錄下執行python -m pytest
iverilog
??iverilog的全稱是Icarus Verilog,是一個輕量的Verilog編譯器(感覺和mingw作用挺像的),常常和gtkwave一起使用。安裝參考這個。當然,作為樂色的我肯定不會使用Vim等文本編輯器寫代碼,于是找了在VSC上配置Verilog開發環境的,參考這個。
問題解決
./myhdl: Unable to find a `./myhdl.vpi’ module on the search path.
這個從網上找了半天,說是“myhdl.vpi要copy到iverilog能找到的地方”(甜蜜的我怎么知道是哪里?),然后在這里看到說要copy到/usr/lib/x86_64-linux-gnu/ivl/system.vpi一個路徑下,于是將這個東西移動到和system.vpi同一級目錄下。這樣就不報這個錯了
(有可能還會說什么“myhdl.vpi.vpi not found”之類的錯,把vvp -m ./myhdl.vpi ...改成vvp -m ./myhdl就行了)
%1 is not a valid Win32 application.
完整的是
./myhdl:`E:\iverilog\lib\ivl./myhdl.vpi’ failed to open using dlopen() because:
%1 is not a valid Win32 application.
一看這個感覺就不對,竟然是操作系統不一致。感覺真不會搞了。。不過我在MyHDL官網文檔上看到了這樣一句話:
In Icarus Verilog, the tasks are defined in a myhdl.vpi module that is compiled from C source code.
myhdl.vpi可以編譯得到,所以我在網上搜myhdl的C語言源代碼。結果在GitHub: MyHDL里的cosimulation/modelsim-win目錄下找到了myhdl_vpi.c的源文件,覺得大概率就是它了。問題是怎么編譯?
看見同級目錄下有個Makefile,先用make試了試,可惜不成功。然后在GitHub: MyHDL的issue上看到了使用iverilog-vpi進行編譯,于是輸入命令:iverilog-vpi myhdl_vpi.c,果然得到了想要的myhdl_vpi.vpi文件,重命名為myhdl.vpi之后,移動到了和system.vpi同級目錄下,再進行測試,結果成功。
總結
以上是生活随笔為你收集整理的报错解决:Unable to find a `./myhdl.vpi‘ module on the search path.以及 %1 is not a valid Win32 application的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 静态成员、this指针
- 下一篇: 10.Windchill -- 客制化生