我想写的组件库C
,该组件在内部分成两个supcomponents 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
从包仿制药中,这也不能工作。
流动本来:
- 测试平台=>实例化
genericPackagePart
和genericPackage
与通用参数 - 该记录可从测试平台
genericPackage
- 内部
genericPackagePart
genericPackage
进行实例化传递给参数genericPackagePart
- 该记录可里面
genericPackagePart
的ModelSim了错误( test
是我给的参数化实例的名称genericPackage
在genericPackagePart
,这是从编译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
我看着传递泛型记录端口类型 ,但不解决包实例的基础上仿制药的问题
对于completness这里是封装和测试平台:
包:
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;