如何从原始内存转储启动Xilinx ISE块内存?

时间:2016-10-03 17:44:48

标签: vhdl ram xilinx xilinx-ise

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

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

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

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

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

-- 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读入一个LUT,其中包含2 ^ 12 = 4096个条目。

然后您可以编写其他代码来阅读&像往常一样写信给lut