【发布时间】:2014-11-20 15:27:47
【问题描述】:
我在 Vhdl 中有以下代码,现在我想将此信号 S1 有条件地重定向到输出端口,如果有人能指导我完成此操作,我将不胜感激。
Gen: for index in 0 to 4 generate
signal s1 : ARRAY_TYPE; --- array of (0 to 7) std_logic_vector (7 downto 0);
begin
process(CLK)
begin
if (rising_edge (CLK)) then
S1(counter_index) <= S_in((index*8+7) downto (index*8));
end if;
end if;
end process;
end generate Gen;
我知道我们可以在生成循环中使用进程,但也可以使用其他方法!如果我将 S1 声明为全局信号,它会抱怨连接到多驱动网络?这有什么不同?
如果有人能指导我完成这个,我将非常感激
【问题讨论】:
-
尚不清楚您要做什么。部分问题可能是您使用
counter_index索引S1,这不是您的生成循环变量。 -
非常感谢您的回复。我尝试将 32 位输入数据存储到我提到的 1Dx1D 数组类型的 Fifo。这个 Counter_index 是一个索引,它就像一个状态机控制的 write_pointer。请让我知道如果我仍然不清楚,我很乐意再次描述它。
-
如果您在
for ... generate循环中分配任何目标不是循环的本地对象、由循环变量索引或有条件地设置为仅循环变量的一个值 (if index=0 then ...),您将遇到多个驱动程序问题。 -
如果
S1(counter_index)是std_logic_vectors 数组中的 8 位条目,并且您尝试存储 32 位输入,则需要在数组中使用 4 个连续点喜欢S1(counter_index*4 + index) <= S_in((index*8+7) downto (index*8));。请注意,您将在 8 位数组中消耗 4 个点。根据您要执行的操作,最好使用 32 位向量数组。 -
亲爱的 Quantumripple,非常感谢您的回答,如果我的理解正确,您的意思是因为我使用状态机(对于 .. gen 而言在此之外)来控制 counter_index,任何开箱即用(这个循环)会有类似的抱怨!!!
标签: vhdl hardware-design