我可以在Verilog中调用VHDL函数吗

我可以在Verilog中调用VHDL函数吗,vhdl,verilog,system-verilog,Vhdl,Verilog,System Verilog,我目前正试图在我的Verilog设计中使用某些传统的VHDL代码。虽然可以在Verilog中实例化VHDL模块,但我找不到在Verilog中调用VHDL函数的方法。(除了将其包装在VHDL模块中并实例化模块之外)。在Verilog中是否有直接调用VHDL函数的方法?这可能取决于模拟器。例如,在Modelsim PE v10.2c中,不支持从Verilog/SystemVerilog直接调用VHDL函数 Verilog/SystemVerilog作用域中对VHDL对象的分层引用 支持的对象 可以引

我目前正试图在我的Verilog设计中使用某些传统的VHDL代码。虽然可以在Verilog中实例化VHDL模块,但我找不到在Verilog中调用VHDL函数的方法。(除了将其包装在VHDL模块中并实例化模块之外)。在Verilog中是否有直接调用VHDL函数的方法?

这可能取决于模拟器。例如,在Modelsim PE v10.2c中,不支持从Verilog/SystemVerilog直接调用VHDL函数

Verilog/SystemVerilog作用域中对VHDL对象的分层引用 支持的对象 可以引用的VHDL对象类型只有:信号、共享变量、常量、, 和未在流程中声明的泛型。不支持VHDL函数、过程和类型 支持,并且您无法读取VHDL进程变量

Modelsim PE用户手册v10.2c,第297页

您可以在SystemVerilog/VHDL模块之间使用带有导入关键字的通用包,但同样不支持VHDL函数


您最好参考您的模拟器手册,看看它是否受支持,因为显然没有普遍接受的方法。正如@Ivoudour所指出的,此功能的支持取决于模拟器。然而,对于那些这样做的人,用法应该大体相同。这意味着您可以简单地将基于VHDL的组件视为另一个模块。这假定您将设计编译到同一个库中

以下示例使用具有以下结构的ModelSim Altera Edition v10.4b: 和\u tb(VHDL)->和\u位(verilog)->和2(VHDL)

and2.vhd 模拟 在ModelSim控制台中键入以下内容

vlib work
vcom and2.vhd
vlog and_bits.v
vcom and_tb.vhd

正常模拟。

你在用什么工具?Cadence Incisive Enterprise Simulator?为什么要投否决票?哦,对不起@Paebbels。我不是指你。我只是想问问做过这件事的人。如有评论,将不胜感激。:)功能在哪里?打包?或者它们是某个特定实体/体系结构对的一部分?我能想到的唯一机制是编写一个PLI/VPI/DPI函数来遍历层次结构,找到函数并获得它的句柄。但我甚至不确定是否可以从VHPI/VPI调用VHDL函数/过程。请阅读(1.5年前)问题。他已经知道如何在Verilog中实例化VHDL模块。他想知道如何在Verilog模块中直接实例化用VHDL编写的函数。谢谢现在,我如何删除我的答案?
`default_nettype none
`timescale       1ns/1ns

module and_bits #(
    parameter W                     = 5           
) (   
    input wire  [W-1:0]  a,
    input wire  [W-1:0]  b,
    output wire [W-1:0]  c
);
    genvar i;
    for (i=0; i<=W-1; i=i+1) begin: AND_GENERATE
        and2 u_and2 (            
            .a (a[i]),
            .b (b[i]),
            .c (c[i])
        );
    end

endmodule

`resetall
library ieee ;
use ieee.std_logic_1164.all ;

entity and_tb is
end and_tb;

architecture tb of and_tb is
    signal a : std_logic_vector(3 downto 0) := "0110";
    signal b : std_logic_vector(3 downto 0) := "1111";
    signal c : std_logic_vector(3 downto 0);


    component and_bits
        generic ( W : integer );
        port (
            a : in  std_logic_vector(W-1 downto 0);
            b : in  std_logic_vector(W-1 downto 0);
            c : out std_logic_vector(W-1 downto 0)
        );
    end component;

begin
    dut: and_bits
    generic map (W => 4)
    PORT MAP(a=>a, b=>b, c=>c);
end tb ;
vlib work
vcom and2.vhd
vlog and_bits.v
vcom and_tb.vhd