我在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)中
为此我曾经使用过 - else语句,但我有错误......
错误:错误(10028):无法解析ArrayDivider.vhd(44)中net“tempx [0]”的多个常量驱动程序(在图像中选定的行上)
错误:无法详细说明顶级用户层次结构
请告诉我解决方案是什么??????
答案 0 :(得分:2)
错误告诉您在tempx [0]上有多个驱动程序。
在你发布的代码中,对tempx只有一个条件赋值。
但它嵌入在for ... generate
声明中。
这意味着您可能会生成多个副本,具体取决于nx,ny的值。因此错误。
修改
发布一个不可读的小图片而不是实际的VHDL代码没有任何帮助。请使用您的代码编辑问题。
同时我想我可以看到你正在生成一组不同的模块(Cmp?)并为每个模块提供不同的输入信号。
然而,您无法同时在同一信号上驱动所有这些信号!这就是工具告诉你的。 你需要的是一个数组信号,由generate变量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;
现在,显然,阵列的每个成员只有一个驱动程序,消除了多个驱动程序错误。
答案 1 :(得分:1)
请注意,你的for / generate结构不是循环!这个陈述导致你在for / generate结构中描述的逻辑的多个实现((Nx-Ny)+1)。因此你有多个tempx驱动程序。 这已在评论中提到: enter link description here
答案 2 :(得分: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;
结果类似于使用数组的方法。