【问题标题】:Array implementation on FPGA using VHDL使用 VHDL 在 FPGA 上实现数组
【发布时间】:2017-02-16 07:23:45
【问题描述】:

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

谢谢, 维杰

【问题讨论】:

    标签: vhdl fpga


    【解决方案1】:

    谨慎并了解您的目标 FPGA,这将被实现为内存块而不是组合逻辑。

    一个典型的限制是赋值
    prbs_reg_feed &lt;= prbs_reg_ip(byte_indx);
    必须放置在时钟进程中,因为内存块通常是同步的。

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

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

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

    【讨论】:

      【解决方案2】:

      这将被综合成很多组合逻辑。这种组合逻辑将有近 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多