首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quartus初始化RAM

Quartus初始化RAM
EN

Stack Overflow用户
提问于 2013-11-03 08:32:53
回答 5查看 8.9K关注 0票数 3

我创建了一个实体,quartus成功地识别了RAM,并为它实例化了一个RAM超级连接。如果我能从一个文件中初始化这个RAM,那就太好了。我找到了制作此类文件的教程(.mif文件)。现在我已经创建了该文件,我不知道如何使quartus初始化该模块。任何帮助都是非常感谢的。

这是我的RAM实体:

代码语言:javascript
复制
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;
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-03 11:14:58

正如此文档中所指定的,这是从文件中插入内存的正确方法:

代码语言:javascript
复制
signal content: memory;
attribute ram_init_file : string;
attribute ram_init_file of content:
signal is "init.mif";
票数 1
EN

Stack Overflow用户

发布于 2013-11-03 09:57:23

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

考虑到以下代码:

代码语言:javascript
复制
type memory is array (65535 downto 0) of std_logic_vector (7 downto 0);
signal content: memory; 

你可以简单地写

代码语言:javascript
复制
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函数来测试它,而忽略实际的文件内容:

代码语言:javascript
复制
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方法有一个潜在的优点:您可以只更新内存内容,而不需要另一个合成/位置和路由周期。

票数 3
EN

Stack Overflow用户

发布于 2016-05-08 14:35:48

一种简化公羊面积的简单方法如下:(quartus 15.1测试)

代码语言:javascript
复制
(* ram_init_file = "Bm437_IBM_VGA8.mif" *) reg [7:0] Bm437_IBM_VGA8[4096];

向你问好乔希。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19751148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档