我展示了一个非常简单的示例的 VHDL 和 SystemVerilog 代码。
我想知道是否可以做我正在尝试的事情。如果是的话,为什么我会收到错误考虑到我正在使用 Questasim,这是代码:
my_package.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package my_package is
-- Type declarations
type my_array is array (0 to 3) of std_logic_vector(7 downto 0);
-- Constant declarations
constant MY_CONSTANT : std_logic_vector(7 downto 0) := "10101010";
-- Function declarations
function add(a, b: std_logic_vector(7 downto 0)) return std_logic_vector;
end package my_package;
package body my_package is
function add(a, b: std_logic_vector(7 downto 0)) return std_logic_vector is
variable result : std_logic_vector(7 downto 0);
begin
result := std_logic_vector(unsigned(a) + unsigned(b));
return result;
end function;
end package body my_package;
sv_module.sv
// Import VHDL package and its contents
import my_package::*;
module sv_module;
logic [7:0] a, b, result;
initial begin
a = 8'h05;
b = 8'h03;
result = add(a, b);
$display("Result of VHDL add: %h", result);
end
endmodule
我尝试通过以下方式编译它们: `vcom -mixedsvvh -work ../my_lib ../vhd_source/my_package.vhd
vlog -mixedsvvh -work ../my_lib ../sv_source/sv_module.sv`
我想做的事情可能吗?我想知道为什么只有当我使用与 my_package.vhd、../my_lib 相同的文件夹作为目标库时才可能编译 sv_module.sv。否则我会收到错误:vlog-13006 找不到包 而且我也想知道为什么,之后尝试模拟时,出现错误: Error (suppressible): ../sv_source/sv_module.sv(13): (vopt-7063) Failed to find 'add' in hierarchical命名为“添加”。
问候。
目前无法直接从另一种 HDL 语言按程序调用用一种 HDL 语言定义的过程。 Questa 的
-mixedsvvh
开关用于在混合 HDL 端口边界连接端口时共享类型信息。