【问题标题】:How do I initiate a Xilinx ISE Block Memory from a raw memory dump?如何从原始内存转储启动 Xilinx ISE 块内存?
【发布时间】:2016-10-03 17:44:47
【问题描述】:

我从想要在 FPGA 上部分模拟的工作设备中转储了 RAM。在 Xilinx ISE 中,我使用 Core Generator 生成 RAM 模块。

现在有一个选项可以使用 COE 文件初始化 RAM。 不幸的是,我找不到任何可以将原始内存转储转换为 COE 文件的工具。或者任何到 COE。

最好的方法是什么?

【问题讨论】:

标签: vhdl ram xilinx xilinx-ise


【解决方案1】:

可以使用 CORE 生成器在 FPGA 中初始化 BRAM,但我更喜欢编写 VHDL,以便综合工具推断 BRAM 或查找表 (LUT)。请注意,我从不使用 Core Gen 来创建/初始化 RAM。

我不确定数据是如何格式化的,但这里有一个 VHDL 代码 sn-p 关于如何读取每行包含二进制字符串并使用文件内容创建信号的文本文件。您必须事先知道文件的格式和长度。

-- define a type for the lookup table (LUT)
type lut_type is array(0 to 2**12-1) of std_logic_vector(15 downto 0);

impure function init_lut_from_file(lut_file_name : in string)
    return lut_type is
    FILE lut_file       : TEXT open READ_MODE is lut_file_name;
    variable lut_line   : line;
    variable bv_temp    : bit_vector(15 downto 0);
    variable lut        : lut_type;
begin
    for i in lut_type'range loop
        readline(lut_file, lut_line);
        read(lut_line, bv_temp);
        lut(i) := to_stdlogicvector(bv_temp);
    end loop;
    return lut;
end function;

signal lut         : lut_type := init_lut_from_file("c:\data.txt");

上述不纯函数会将文件每行包含 16 位二进制字符串的 c:\data.txt 读入具有 2^12 = 4096 个条目的 LUT。

然后您可以像往常一样编写额外的代码来读写lut

【讨论】:

  • 可以合成吗?它至少对 ROM 和只读模拟非常有用,并且在超级超级最终设计中,RAM 不需要初始化。
  • 是的,我已经使用此代码在 Xilinx FPGA 中使用 ISE 设计套件实现了一个查找表,并在 Virtex6 FPGA 中进行了测试。
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2015-10-26
  • 2014-07-02
相关资源
最近更新 更多