繁体   English   中英

使用VHDL在FPGA上实现阵列

[英]Array implementation on FPGA using VHDL

我的VHDL代码中包含以下行:

prbs_reg_feed <= prbs_reg_ip(byte_indx);

哪里

type reg_type is array (0 to 63) of std_logic_vector(8 downto 0);

signal prbs_reg_feed           : std_logic_vector(8 downto 0);

signal prbs_reg_ip             : reg_type;

我想知道这一点的FPGA实现。

谢谢,维杰

仔细了解目标FPGA的知识后,它将被实现为存储块,而不是组合逻辑。

一个典型的限制是分配
prbs_reg_feed <= prbs_reg_ip(byte_indx);
由于存储器模块通常是同步的,因此必须将其置于时钟控制的过程中。

确保的唯一方法是花几分钟时间,尝试自行合成该块,然后阅读综合报告。 如果不起作用,请先尝试阅读文档,然后再进行实验。

这里有一些 RAM 示例 ROM可以是相同的,但是没有任何写法,例如,可能将prbs_reg_ip声明为常量而不是信号。

constant prbs_reg_ip : reg_type := ( 0 => X"C3", 1 => "80", 2 => "FF", ...);

对于某些FPGA或FPGA工具,您可能需要向表示存储器的信号(或类型)添加属性,例如

signal prbs_reg_ip             : reg_type;
attribute ram_style : string;
attribute ram_style of prbs_reg_ip : signal is "block"; -- or "distributed"

有关示例,请参见Xilinx答案

这将被合成为许多组合逻辑。 这种组合逻辑将具有近600个输入和9个输出。

使用FPGA合成器,如果您要编写以下代码:

prbs_reg_feed <= prbs_reg_ip(byte_indx);

使您的代码表现得更像RAM,那么您可能会得到一个RAM。 (您应该阅读合成器输出的报告文件以确保。)

  process(clock) is
  begin
    if rising_edge(clock) then
      if we = '1' then
        prbs_reg_ip(byte_indx) <= datain;
      end if;
     prbs_reg_feed <= prbs_reg_ip(byte_indx);
    end if;
  end process;

注意:这假定byte_indx是一个integer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM