在 Modelsim 的 SystemVerilog Testbench 中使用 VHDL 记录
Using VHDL Record in SystemVerilog Testbench in Modelsim
我已经对此进行了研究,但我在其他网页上找到的示例链接已损坏。我正在寻找一个示例,说明如何将包中包含的自定义 VHDL 记录导入 SystemVerilog 测试平台。
我正在使用 modelsim,所以我读到我需要使用 -mixedsvvh
开关。 vcom
和 vlog
调用都需要使用此开关吗?此外,还有另一个开关 [b | s | v]
,当我使用 s
时,它会给我一个错误:
** Error: (vcom-1276) Option '-mixedsvvh' was given with a bad argument.
当我不使用任何参数时,我尝试 运行 vsim
并收到以下消息:
-- Importing package c:/Projects/source/work.test_pkg__mti__sv__equiv__implct__pack
** Error: Test_Top_TB.sv(4): 't_Test' is an unknown type.
VHDL 包:
library ieee;
use ieee.std_logic_1164.all;
package test_pkg is
type t_Test is record
DATA1 : std_logic_vector(15 downto 0);
DV1 : std_logic;
DATA2 : std_logic_vector(5 downto 0);
DV2 : std_logic;
end record t_Test;
end package test_pkg;
VHDL Entity/Architecture:
library ieee;
use ieee.std_logic_1164.all;
library work;
use work.test_pkg.all;
entity Test_Top is
port (
i_Clk : in std_logic;
i_Data : in t_Test;
o_Data : out t_Test
);
end entity Test_Top;
architecture RTL of Test_Top is
begin
process (i_Clk) is
begin
if rising_edge(i_Clk) then
o_Data.DATA1 <= i_Data.DATA1;
o_Data.DV1 <= i_Data.DV1;
o_Data.DATA2 <= i_Data.DATA2;
o_Data.DV2 <= i_Data.DV2;
end if;
end process;
end architecture RTL;
SystemVerilog 测试平台:
interface Test_IF();
import test_pkg::*;
t_Test Data;
endinterface // Test_IF
module Test_Top_TB ();
import test_pkg::*;
logic r_Clock;
Test_IF hook();
Test_IF hook2();
Test_Top UUT
(.i_Clk(r_Clock),
.i_Data(hook.Data),
.o_Data(hook2.Data)
);
endmodule
尝试将 systemverilog
测试台中的 t_Test
更改为小写,即。 t_test
.
我已经对此进行了研究,但我在其他网页上找到的示例链接已损坏。我正在寻找一个示例,说明如何将包中包含的自定义 VHDL 记录导入 SystemVerilog 测试平台。
我正在使用 modelsim,所以我读到我需要使用 -mixedsvvh
开关。 vcom
和 vlog
调用都需要使用此开关吗?此外,还有另一个开关 [b | s | v]
,当我使用 s
时,它会给我一个错误:
** Error: (vcom-1276) Option '-mixedsvvh' was given with a bad argument.
当我不使用任何参数时,我尝试 运行 vsim
并收到以下消息:
-- Importing package c:/Projects/source/work.test_pkg__mti__sv__equiv__implct__pack ** Error: Test_Top_TB.sv(4): 't_Test' is an unknown type.
VHDL 包:
library ieee;
use ieee.std_logic_1164.all;
package test_pkg is
type t_Test is record
DATA1 : std_logic_vector(15 downto 0);
DV1 : std_logic;
DATA2 : std_logic_vector(5 downto 0);
DV2 : std_logic;
end record t_Test;
end package test_pkg;
VHDL Entity/Architecture:
library ieee;
use ieee.std_logic_1164.all;
library work;
use work.test_pkg.all;
entity Test_Top is
port (
i_Clk : in std_logic;
i_Data : in t_Test;
o_Data : out t_Test
);
end entity Test_Top;
architecture RTL of Test_Top is
begin
process (i_Clk) is
begin
if rising_edge(i_Clk) then
o_Data.DATA1 <= i_Data.DATA1;
o_Data.DV1 <= i_Data.DV1;
o_Data.DATA2 <= i_Data.DATA2;
o_Data.DV2 <= i_Data.DV2;
end if;
end process;
end architecture RTL;
SystemVerilog 测试平台:
interface Test_IF();
import test_pkg::*;
t_Test Data;
endinterface // Test_IF
module Test_Top_TB ();
import test_pkg::*;
logic r_Clock;
Test_IF hook();
Test_IF hook2();
Test_Top UUT
(.i_Clk(r_Clock),
.i_Data(hook.Data),
.o_Data(hook2.Data)
);
endmodule
尝试将 systemverilog
测试台中的 t_Test
更改为小写,即。 t_test
.