【问题标题】:Can I access 2 indices of an array at the same time VHDL我可以同时访问数组的 2 个索引吗 VHDL
【发布时间】:2017-03-02 00:21:04
【问题描述】:

因此,如果我有一个 16 位的输出,并且我想连接一个 8 位数组的每 2 个索引以形成一个 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,并且不允许您这样做。
  • 某些(大多数?)FPGA 中的 Block Rams 具有双端口访问选项:不同的综合工具可能知道也可能不知道如何综合以使用双端口内存。
  • 如果合成器工具尝试将数组实现为 ram,考虑到大小,我会感到非常惊讶
  • @gsm 那么它将尝试将数组实现为 ram 的大小是多少?在以下用户指南中:xilinx.com/support/documentation/sw_manuals/xilinx14_4/… 他们给出以下内容将在 vhdl 中对 RAM 建模: (0 到 255)of std_logic_vector (15 down to 0);那么它必须是那个大小吗?
  • @AlperKucukkomurler 然后综合工具将回退到简单的寄存器。但他们不会出错。

标签: arrays concatenation vhdl fpga


【解决方案1】:

是的,这很好。

在您的示例中,它“只是电线”,因此它与任何其他(正确)语法一样有效。

如果您要在时钟进程中注册阵列,则串联仅意味着您需要在一个时钟周期内读取阵列两次 - 在这种情况下,FPGA 工具很可能会在默认情况下使用触发器来制作阵列并且使用您指定的尺寸以及现代 FPGA 也非常好。

对于较大的数组,我不相信这些工具,但要明确内存访问;要么是两个单独的内存块,要么是一个输出宽度是输入宽度两倍的内存块。

【讨论】:

  • 好吧,我确实在时钟进程中用值填充了数组,但是在我填满它之后,我希望能够像我展示的那样发送输出。
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 2016-11-07
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多