我可以同时访问VHDL数组的2个索引吗?

3
如果我有一个输出是16位的,并且我想将8位数组的每两个索引拼接起来形成一个16位的输出。是否可以同时访问数组?以下是一个例子:
       Output : out std_logic_Vector(15 downto 0);
       .
       .
       .
       type array1 is array(0 to 5) of std_logic_Vector(7 downto 0);
       signal myarray : array1;
       .
       .
       .

假设“myarray”已经填充了值,我可以这样做吗?在综合时会正常工作吗?
 Output <= myarray(i) & myarray(k);

其中i=0且k=1,获取数组的前两个索引。


大多数合成器将把数组实现为RAM,并且不允许您这样做。 - Alper Kucukkomurler
一些(大多数?)FPGA中的块RAM具有双端口访问选项:不同的综合工具可能或可能不知道如何综合使用双端口存储器。 - user1818839
如果合成工具试图将数组实现为 RAM,考虑到其大小,我会感到非常惊讶。 - gsm
@gsm 那么在什么大小下,它会尝试将数组实现为 RAM?在以下用户指南中:https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_4/xst_v6s6.pdf,他们给出了以下VHDL代码来模拟RAM:(0到255)of std_logic_vector (15 downto 0);那么它必须是那个大小吗? - Rex D.
@AlperKucukkomurler,然后综合工具将退回到简单寄存器。但它们不会出错。 - Paebbels
1个回答

2

没问题。

在你的例子中,“只是电线”,所以它和任何其他(正确的)语法一样有效。

如果您将该数组注册到时钟过程中,则连接操作只意味着您需要在一个时钟周期内两次读取该数组 - FPGA工具很可能默认使用触发器构建数组,并且根据您指定的大小和现代FPGA,这也是完全可以的。

对于更大的数组,我不会信任工具,而是使内存访问显式; 要么使用两个单独的内存块,要么使用输出比输入宽两倍的内存块。


我在一个时钟过程中填充数组的值,但是在填充完毕后,我希望能够像我展示的那样发送输出。 - Rex D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接