VHDL生成的ngc文件被verilog的工程调用的问题

1. 问题的提出

工程a是一个soft core,用VHDL写的,综合的时候去掉了"Add I/O buffers" ,并将-iob(Pack I/O Registers into IOBs)置为否。综合最后生成了a.ngc文件供其他工程使用。在生成完ngc后,还可以在 "Design Utilities" -> "View HDL Instantiation Template" 中生成相应的调用文件。

工程b调用的a.ngc,但是工程b使用verilog写的,在调用的时候出现了找不到a模块的错误。

 

2. 问题的解决方法a

使用netgen命令将该ngc转换成vhdl或者verilog文件,然后在调用转换后的文件

linux下 

netgen -ofmt verilog filename.ngc
netgen -ofmt vhdlfilename.ngc

windows 下

netgen.exe -ofmt verilog filename.ngc
netgen.exe -ofmt vhdlfilename.ngc

 

3. 问题的解决办法b

上述的办法只是一种取巧的办法,更好地办法是通过使用wrapper文件来实现。

假定原来的ngc文件为abc.ngc, 则其wrapper文件名为abc.v 或者 abc.vhd. 这个wrapper文件只申明abc模块的输入输出端口,不包含其他信息。

一种简单的生成wrapper文件的办法就是利用解决办法a中提到的netgen工具,利用netgen生成的verilog文件或者vhdl文件,将其他语句删除,仅保留其申明部分。

然后在工程中同时添加该wrapper文件和ngc文件即可。

 

4. 问题的进一步讨论

在用VHDL写的soft core里面,接口不能包含inout形式的,否则调用不会有问题,但最终的工程的功能会出错。

这个时候,ngc中的接口使用两个信号分别代表i和o,然后在verilog的工程中调用的时候,使用一个VHDL的wrapper文件来完成两信号转成单线三态的信号,或者直接用verilog来实现三态。

posted on 2016-04-13 22:48  明明柏柏  阅读(1703)  评论(0编辑  收藏  举报