【问题标题】:Can't resolve multiple constant drivers VHDL Error无法解决多个常量驱动程序 VHDL 错误
【发布时间】:2013-04-07 18:58:52
【问题描述】:

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

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

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

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

请告诉我解决办法是什么??????

【问题讨论】:

  • 您的Cmp 怎么样? tempx 进入该组件,它是否会导致分配给 tempx?它的实体声明是什么样的?
  • 它的实体有2个std_logic_vector作为输入,1个std_logic作为输出,还有一个std_logic_vector作为第二个输出............

标签: vhdl


【解决方案1】:

错误告诉您 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;

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

【讨论】:

  • 但是我需要一个 for generate 语句,因为我需要 tempx 值来依赖于 a 的当前值,所以我需要它......
  • 这不是生成语句的工作;流程会是更好的选择。
【解决方案2】:

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

【讨论】:

  • 因为我希望 tempx 值依赖于 a 的当前值,并且我想使用端口映射,它在进程中使用........所以我 hv 用于生成语句......现在我需要循环做什么......
  • 如上面链接所指的答案中所述,将 for/loop 语句写入进程。但是,正如您正确看到的,端口映射不能在进程中使用。因此,我建议您定义一个包含组件逻辑的 VHDL“程序”。可以从进程内部调用“过程”。
【解决方案3】:

对 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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多