gpt4 book ai didi

memory - Quartus 初始化 RAM

转载 作者:行者123 更新时间:2023-12-04 00:08:44 26 4
gpt4 key购买 nike

我创建了一个实体,其中 quartus 成功识别了 RAM,并为它实例化了一个 RAM 宏功能。如果我可以从文件初始化那个 RAM,那就太好了。我找到了制作此类文件(.mif 文件)的教程。现在我已经创建了那个文件,我不知道如何让 quartus 初始化那个模块。任何帮助表示赞赏。

这是我的 RAM 实体:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity RAM is
port (
clk: in std_logic;
we: in std_logic;
data_in: in std_logic_vector (7 downto 0);
read_addr: in integer range 0 to 65535;
write_addr: in integer range 0 to 65535;
data_out: out std_logic_vector (7 downto 0)
);
end entity RAM;

architecture RAM_arch of RAM is
type memory is array (65535 downto 0) of std_logic_vector (7 downto 0);
signal content: memory;
begin
process(clk)
begin
if (RISING_EDGE(clk)) then
if (we = '1') then
content(write_addr) <= data_in;
end if;
data_out <= content(read_addr);
end if;
end process;
end architecture;

最佳答案

可能最好的初始化内存的方法是......在内存变量上放置一个初始化子句。可能有特定于 Quartus 的加载 .MIF 文件的方法,但这可能更简单,肯定更便携(例如对于 Xilinx),并且更灵活,因为您可以定义文件格式,而不必生成 .mif文件。

给定以下代码:

type memory is array (65535 downto 0) of std_logic_vector (7 downto 0);
signal content: memory;

你可以简单地写

type memory is array (65535 downto 0) of std_logic_vector (7 downto 0);
signal content: memory := init_my_RAM(filename => "ram_contents.txt");

现在 Quartus 有可能但不太可能不支持这种方式的初始化,所以我们可以通过编写一个忽略实际文件内容的简单 init_my_ram 函数来测试它:

function init_my_ram (filename : string) return memory is
variable f : file;
variable m : memory;
begin
file_open(f, filename, read_mode);
for i in memory'range loop
m(i) := X"55";
end loop;
file_close(f);
return m;
end init_my_ram;

因为函数调用是一个初始化器,并且在设计合成时在细化时调用,所以这都是可合成的。

如果编译成功并且 Quartus 生成了一个充满 X"55"的内存,那么你就可以在 init_my_ram 函数中解析任何你想要的文件格式了。 (二进制文件更难,阅读器代码在工具之间可能不那么可移植,但并非不可能)。

.MIF 方法有一个潜在优势:您可以只更新存储器内容,而无需另一个综合/布局和布线周期。

关于memory - Quartus 初始化 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com