【发布时间】:2013-04-17 09:23:35
【问题描述】:
我想为组件C编写一个库,该组件在内部分为两个子组件c1和c2,它们可以通过泛型进行配置。子模块应通过记录连接,这取决于泛型。该记录也应在组件内使用。通常我会在package 中实例化记录,并在子组件的文件和组件的文件中使用包。由于它是通用的,我认为使用通用包 (VHDL-2008) 可能会提供解决方案。
问题是我还需要从子组件中访问记录。为此,我需要use thePackage,但是要使用通用包,我需要传递初始值(据我所知)。
所以我尝试了(注意:我不是在这里处理记录,我只是想从一个通用组件访问一个通用包,我用组件的参数参数化(?)包):
entity genericPackagePart is
generic(
outputValue : integer
);
port(
result: out integer
);
end entity;
architecture behav of genericPackagePart is
package test is new work.genericPackage
generic map(
genSize => outputValue
);
use work.test.all;
begin
result <= dummy; -- dummy is a constant from genericPackage set to the value genSize (generic parameter)
end architecture;
但是我从 modelsim 收到以下错误:
** Error: (vcom-11) Could not find work.test.
** Error: genericPackagePart.vhd(17): (vcom-1195) Cannot find expanded name "work.test".
** Error: genericPackagePart.vhd(17): Unknown expanded name.
** Error: genericPackagePart.vhd(19): (vcom-1136) Unknown identifier "dummy".
** Error: genericPackagePart.vhd(20): VHDL Compiler exiting
更新:
我尝试将genericPackagePart 包装在一个泛型包中,并使用泛型从该包中实例化genericPackage,这也不起作用。
流程应该是:
- Testbench => 使用通用参数实例化
genericPackagePart和genericPackage - 测试平台中的记录来自
genericPackage - 内部
genericPackagePartgenericPackage被实例化,参数传递给genericPackagePart - 记录在
genericPackagePart内可用
Modelsim 给出了错误(test 是我在genericPackagePart 中给genericPackage 的参数化实例起的名称,这是来自genericPackagePart 的编译):
** Error: (vcom-11) Could not find work.test.
** Error: genericPackagePart.vhd(11): (vcom-1195) Cannot find expanded name "work.test".
** Error: genericPackagePart.vhd(11): Unknown expanded name.
** Error: genericPackagePart.vhd(13): near "entity": expecting END
我查看了Passing Generics to Record Port Types,但这并没有解决基于泛型的包实例化问题
为了完整起见,这里是包和测试台:
包装:
package genericPackage is
generic(genSize : integer := 1);
constant dummy : integer := genSize;
end package;
测试台:
package myGenericPackage is new work.genericPackage
generic map(
genSize => 5
);
use work.myGenericPackage.all;
entity genericPackageTestbench is
end entity;
architecture testbench of genericPackageTestbench is
signal testsignal : integer;
signal testsignal2 : integer;
signal dummy : integer := 12;
component genericPackagePart is
generic(
outputValue : integer
);
port(
result: out integer
);
end component;
begin
test : process is
begin
wait for 20 ns;
testsignal <= dummy;
wait for 20 ns;
testsignal <= work.myGenericPackage.dummy;
wait;
end process;
testPart: genericPackagePart
port map(result => testsignal2)
generic map(outputValue => 128);
end architecture;
【问题讨论】:
-
愚蠢的问题...您是否在编译器设置中打开了 VHDL 2008?
-
是的(
vcom -2008 ...目前仅使用 modelsim),也可以使用一些较小的部件(没有testPart的测试台)。问题在于架构内部的包实例化(第一个代码 sn-p)。不幸的是,我没有要检查的 vhdl 2008 的 VHDL 书,欢迎任何建议。问题是我认为使用通用参数实例化包是可行的方法,而不是获取记录,这是通用的并且只定义一次。 -
@MartinThompson:我很高兴 SO VHDL 大师来看看:p
-
gulp - 没有压力 :)
标签: vhdl