gpt4 book ai didi

vhdl - 使用 VHDL 2008 通用类型功能创建伪动态类型

转载 作者:行者123 更新时间:2023-12-02 21:29:29 24 4
gpt4 key购买 nike

我正在尝试创建一个可以保存不同类型数据的记录,这是否可以使用 VDHL 2008 的通用类型功能以某种方式实现?我并不是想合成该代码。

我的测试设置如下所示:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;

entity dynrec is

end entity dynrec;

architecture dyn of dynrec is

type dynrec is record -- this is a test record
datatype : type; -- type of the data field
data : datatype;
someval : natural;
end record dynrec;

signal testsig1, testsig2 : dynrec;

begin -- architecture dyn

testsig1 <= (datatype => real, data => 5.0, someval => 12);
testsig2 <= (datatype => std_logic, data => '1', someval => 12);

end architecture dyn;

你看,我想做的是拥有一条记录,可以根据其中一个字段保存不同类型的数据。但是,它在编译时失败并出现以下错误:

# ** Error: dynrec.vhd(13): near "type": expecting STRING or IDENTIFIER or << or '('
# C:/Programme/Mentor/Modelsim10.0b/win32/vcom failed.

有没有办法让这样的事情发挥作用?

我使用的是 Mentorgraphics modelsim 10.0b,并使用 vcom dynrec.vhd -2008 进行编译。

最佳答案

据我所知,你必须这样做:

package dynrec_pkg is
generic (
datatype : type
);

type dynrec_type is record
data : datatype;
someval : natural;
end record dynrec_type;
end package dynrec_pkg;

---------------------

library ieee;
use ieee.math_real.all;

package dynrec_pkg_real is new work.dynrec_pkg generic map (datatype => real);

---------------------

library ieee;
use ieee.std_logic_1164.all;

package dynrec_pkg_sl is new work.dynrec_pkg generic map (datatype => std_logic);

---------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.math_real.all;

use work.dynrec_pkg_real.all;
use work.dynrec_pkg_sl.all;

entity dynrec is
end entity dynrec;

architecture dyn of dynrec is

signal testsig1 : dynrec_pkg_real.dynrec_type;
signal testsig2 : dynrec_pkg_sl.dynrec_type;

begin -- architecture dyn

testsig1 <= (data => 5.0, someval => 12);
testsig2 <= (data => '1', someval => 12);

end architecture dyn;

由于您想要创建两种不同类型的记录实例,这似乎是最好的方法。否则,您可以将 datatype 设为实体本身的泛型并避免额外的包,但这样您就只有一种对实体可见的动态类型(当然,您可以有多个泛型,例如 数据类型1数据类型2等)。

最重要的是,您不能像使用内联泛型类型那样定义记录 - 包和实体等设计元素可以具有泛型,但记录不能。

请注意,无论如何,ModelSim 似乎还不支持此功能(我使用的是 10.2c),并且我没有方便的模拟器,因此欢迎进行语法更正。不过,我认为总体想法是合理的。

关于vhdl - 使用 VHDL 2008 通用类型功能创建伪动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22685014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com