我有一个用于 Altera FPGA 目标的内存模块,我已将其推断为 Altera 的 ALTSYNCRAM 块之一。内存是 1024x16,我有一个用属性指定的内存初始化文件。综合时,综合报告表明它生成了我想要的 RAM 块类型,并指出初始化文件是我指定的文件。当尝试使用 Altera 的 ModelSim 版本进行仿真时,数据信号开始时完全未初始化,我不知道为什么。我查看了论坛等,有人提到 ModelSim 可能不支持我正在使用的“.mif”格式,但会支持“.hex”,所以我将初始化文件更改为“.hex”。我还读到相对文件路径可能是一个问题,
关于为什么没有初始化内存以及如何使其初始化的任何想法?
包含推断内存的大量修剪模型:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library work;
--use work.types.all;
entity CPU is
--...
end entity CPU;
architecture rtl of CPU is
--these types are actually included in a package
subtype reg is std_logic_vector(15 downto 0);
type mem is array (0 to 1023) of reg;
--...
--memory read port
signal MR : reg;
signal MRA : std_logic_vector(9 downto 0); --flops
--memory write port
signal MW : reg; --flops
signal MWA : std_logic_vector(9 downto 0); --flops
signal MWE : std_logic; --flop
signal data : mem;
attribute ram_init_file : string;
attribute ram_init_file of data : signal is "RAM_init.hex";
attribute ramstyle : string;
attribute ramstyle of data : signal is "no_rw_check";
begin
--...
--memory spec
MR <= data(to_integer(unsigned(MRA(9 downto 0))));
memory_process : process(clk)
begin
if (clk'event and clk = '1') then
if(MWE = '1') then
data(to_integer(unsigned(MWA(9 downto 0)))) <= MW;
end if;
end if;
end process;
end architecture rtl; --CPU
Modelsim 在编译 CPU.vhd 时没有显示任何警告或错误,也没有任何加载初始化文件的指示。
这是我使用 Altera 软件或内存初始化文件的第一个设计,如果问题是非常基本的问题,或者我从根本不正确的角度处理这个问题,我不会感到惊讶。我通常会在包中使用常量定义内存,但这是针对一个类的,它要求我有一个内存初始化文件(它也需要 .mif 格式,但这只是模拟和综合之间的 3 个字符变化文件)。