使用VHDL在FPGA上实现阵列

时间:2017-02-16 07:23:46

标签: vhdl fpga

我的 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 的实现。

谢谢, 维杰

2 个答案:

答案 0 :(得分:2)

小心掌握目标FPGA的一些知识,这将被实现为内存块而不是组合逻辑。

典型的限制是指派 prbs_reg_feed <= prbs_reg_ip(byte_indx);
必须放置在时钟进程中,因为内存块通常是同步的。

唯一可以确定的方法是花几分钟时间尝试自己合成这个块,并阅读综合报告。如果它首先没有工作,请阅读文档并进一步试验。

RAM的

Some examples here。 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"

有关此示例,请参阅this Xilinx answer

答案 1 :(得分:1)

这将被合成到许多组合逻辑中。该组合逻辑将具有近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_indxinteger