0

我在 VHDL 中遇到与多个常量驱动程序相关的错误,在这里我正在上传代码的图像............在我的代码中 cmp 是一个组件,我想在对于 a = Nx-Ny 到 a = 0 的生成语句.......但是在

a = Nx-Ny => tempx = ipx(Nx-1 downto Nx-Ny)
否则 tempx = tempz(Ny-2 downto 0) & ipx(a)

为此,我使用了 when - else 语句,但我有错误......

在此处输入图像描述

错误:错误 (10028):无法解析 ArrayDivider.vhd(44) 处网络“tempx [0]”的多个常量驱动程序(在图像中的选定行上)
错误:无法详细说明顶级用户层次结构

请问有什么解决办法??????

4

3 回答 3

2

该错误告诉您 tempx[0] 上有多个驱动程序。

在您发布的代码中,只有一个对 tempx 的条件赋值。

但是,它嵌入在for ... generate声明中。

这意味着您可能会生成它的多个副本,具体取决于 nx,ny 的值。因此错误。

编辑

您发布的是难以阅读的小图片而不是实际的 VHDL 代码,这无济于事。请使用您的代码编辑问题。

同时,我我可以看到您正在生成一组不同的模块(Cmp?)并为每个模块提供不同的输入信号。

但是,您不能同时在同一个信号上驱动所有这些信号!这就是工具告诉你的。您需要的是一个信号数组,由生成变量 a 索引。

subtype temp is std_logic_vector(N downto 0);
signal Tempx : array(Nx-Ny downto 0) of temp;
...

for a in ... generate
   tempx(a) <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx(a), ...);
end generate;

现在,显然,数组的每个成员只有一个驱动程序,消除了多个驱动程序错误。

于 2013-03-27T14:21:14.750 回答
1

请注意,您的 for/generate 结构不是循环!此语句导致您在 for/generate 结构中描述的逻辑的多种实现 ((Nx-Ny)+1)。因此,您确实有多个 tempx 驱动程序。这已在此处的评论中提到:在此处 输入链接描述

于 2013-03-27T14:38:25.567 回答
0

对 tempx 的赋值,对每个循环使用相同的 tempx。这导致对同一信号进行多次分配。如果将信号声明移动到生成块中(在生成和开始之间),那么每个循环都有一个专用的 tempx 信号。

for a in ... generate
   signal tempx : std_logic_vector(Ny-1 downto 0);
begin
   tempx <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx, ...);
end generate;

结果类似于使用数组的方法。

于 2013-04-07T10:58:52.270 回答