我目前正在尝试将某些传统的VHDL代码用于我的Verilog设计。虽然可以在Verilog中实例化VHDL模块,但我找不到在Verilog中调用VHDL函数的方法。 (除了在VHDL模块中包装它并实例化模块)。有没有在Verilog中直接调用VHDL函数?
答案 0 :(得分:0)
这可能取决于模拟器。例如,在Modelsim PE v10.2c中,不支持从Verilog / SystemVerilog直接调用VHDL函数
来自Verilog / SystemVerilog范围的VHDL对象的分层引用
支持的对象
唯一可以引用的VHDL对象类型是:信号,共享变量,常量, 并且在进程内未声明泛型。 VHDL函数,过程和类型不是 支持,您无法读取VHDL过程变量
Modelsim PE用户手册v10.2c,第297页
您可以在SystemVerilog / VHDL模块与import关键字之间使用公共包,但不支持VHDL函数。
您最好参考您的模拟器手册,看看它是否受支持,因为显然没有普遍接受的方法。
答案 1 :(得分:-1)
正如@Ivoudour所说,对此功能的支持取决于模拟器。但是,对于那些使用的用户应该大致相同。这意味着您可以简单地将基于VHDL的组件视为另一个模块。这假设您将设计编译到同一个库。
以下示例使用具有以下结构的ModelSim Altera Edition v10.4b: and_tb(VHDL) - > and_bits(verilog) - > and2(VHDL)
library ieee ;
use ieee.std_logic_1164.all ;
entity and2 is
port (
a : in std_logic;
b : in std_logic;
c : out std_logic
);
end and2;
architecture behavior of and2 is
begin
c <= a and b;
end behavior ;
`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 ;
在ModelSim控制台中键入以下内容
vlib work
vcom and2.vhd
vlog and_bits.v
vcom and_tb.vhd
并正常模拟。