Struct 使用Synopsys VCSMX与SystemVerilog/SystemC接口的VHDL记录端口
你好,谢谢你看这个问题 我正在使用VCSMX(2011年6月的版本)模拟具有记录类型接口的内核。核心是用VHDL编写的。我正在使用Systemverilog(SV)测试台来激发这个核心 该记录看起来像:Struct 使用Synopsys VCSMX与SystemVerilog/SystemC接口的VHDL记录端口,struct,vhdl,record,system-verilog,Struct,Vhdl,Record,System Verilog,你好,谢谢你看这个问题 我正在使用VCSMX(2011年6月的版本)模拟具有记录类型接口的内核。核心是用VHDL编写的。我正在使用Systemverilog(SV)测试台来激发这个核心 该记录看起来像: type ll_port is record frame_name : std_logic_vector(WIDTH-1 downto 0); frame_valid : std_logic; . . . end record; 我读到VHDL记录类型与
type ll_port is record
frame_name : std_logic_vector(WIDTH-1 downto 0);
frame_valid : std_logic;
.
.
.
end record;
我读到VHDL记录类型与SV中的struct相同。然而,当我尝试在SV中实现ll_port结构时,这似乎仍然是VCSMX中不受支持的特性。可靠的解决方案是将记录端口分解为std_逻辑和std_逻辑向量
然而,VHDL中的这种记录类型将被多次使用,并且在最终系统中会有多个内核交互,这使得每个记录端口的分解非常麻烦
我想看看如何处理这个问题,以及在这件事上我能得到什么建议。我在SystemVerilog中已经有一个自定义的模拟基础设施,我想知道是否有解决这个问题的方法
RRS不是您要寻找的答案,但我认为您必须分解端口 老实说,VHDL中作为端口类型的记录让我感到紧张,因为这些年来它们一直是破坏各种工具的好方法。我知道,如果在端口上使用记录,那么合成工具用于反向连接(MSB LSB),而且许多公司都有内部规则禁止以这种方式使用记录
您可以在任意一侧编写一些函数,将记录展平为单个宽
std\u logic\u vector
,然后重新构建它,但我认为这比每个字段都有端口更费事,可读性也更低。这不是您要寻找的答案,但我认为您一直在分解端口
老实说,VHDL中作为端口类型的记录让我感到紧张,因为这些年来它们一直是破坏各种工具的好方法。我知道,如果在端口上使用记录,那么合成工具用于反向连接(MSB LSB),而且许多公司都有内部规则禁止以这种方式使用记录
您可以在任意一侧编写一些函数,将记录展平为单个宽
std\u logic\u vector
,然后重新构建它,但我认为这比每个字段都有端口要费事,可读性也要差。谢谢您的回答。我对这里的“功能”很好奇。测试台是SystemVerilog块。您是否指向某个VHDL函数到SystemVerilog函数的映射?你知道这是否可能吗?不,没有映射。只需要一个VHDL函数,它获取一个记录并返回一个std_逻辑_向量。然后有一个SV函数,它接受一个逻辑向量并返回一个结构。我并不特别喜欢这种方法,因为您有两组需要保持同步的代码,并且您已经丢失了所有类型检查,因此错误往往很微妙。这只是我过去见过的事情。一个替代方案,但不是我推荐的。谢谢你的回答。我对这里的“功能”很好奇。测试台是SystemVerilog块。您是否指向某个VHDL函数到SystemVerilog函数的映射?你知道这是否可能吗?不,没有映射。只需要一个VHDL函数,它获取一个记录并返回一个std_逻辑_向量。然后有一个SV函数,它接受一个逻辑向量并返回一个结构。我并不特别喜欢这种方法,因为您有两组需要保持同步的代码,并且您已经丢失了所有类型检查,因此错误往往很微妙。这只是我过去见过的事情。另一种选择,但我不推荐。