【发布时间】:2014-04-21 07:50:19
【问题描述】:
我有一个用于 Altera FPGA 目标的内存模块,我已将其推断为 Altera 的 ALTSYNCRAM 块之一。内存是 1024x16,我有一个用属性指定的内存初始化文件。 综合时,综合报告表明它生成了我想要的 RAM 块类型,并指出初始化文件是我指定的文件。 当尝试使用 Altera 的 ModelSim 版本进行仿真时,数据信号开始时完全未初始化,我不知道为什么。 我查看了论坛等,有人提到 ModelSim 可能不支持我正在使用的“.mif”格式,但会支持“.hex”,所以我将初始化文件更改为“.hex”。我还读到相对文件路径可能是一个问题,但我检查了我的仿真目录,看起来 QuartusII 在我尝试仿真时将初始化文件复制到了该目录中。
关于为什么内存没有被初始化以及如何让它这样做的任何想法?
一个包含推断内存的高度修剪模型:
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 个字符变化文件)。
【问题讨论】:
标签: vhdl modelsim intel-fpga