Quartus初始化RAM

2024-01-18

我制作了一个实体,其中 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 方法有一个潜在的优势:您可以仅更新存储器内容,而不需要另一个综合/布局和布线周期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quartus初始化RAM 的相关文章

随机推荐

  • 在正则表达式中查找模式的第二次出现

    我的输入是 String t1 test1 testVar varName ns2 test String t2 test2 testVar varName ns2 test defValue String patternString s
  • Ruby 相当于 Python 的 help() 吗?

    当使用交互式 Python 时 我倾向于依赖内置的help 函数告诉我期望和 或返回什么 并打印出任何可能对我有帮助的文档 Ruby 是否有与此功能等效的函数 我正在寻找可以在 irb 中使用的东西 例如 在交互式 Python 中我可以输
  • 使用 pydot 绘制决策树

    我已经训练了一个决定tree Python字典 如下 现在我尝试使用它来绘制它pydot http code google com p pydot 在定义树 pydot 图 的每个节点时 我为其指定一个唯一 且详细 的名称和一个简短的标签
  • 将双精度型/浮点型转换为字符串

    我需要将浮点数转换为十进制 或其他基数 的等效字符串 首先需要按照格式进行转换xE 0 where x是浮点数 我的想法是首先将浮点数截断为临时整数 然后将该整数转换为字符串 然后考虑小数部分 将其乘以10而小数部分不会变成0 将小数部分转
  • 有没有办法将 app/web.config 分成 2 个文件?

    我目前使用 app web config 来存储数据库的连接字符串 这意味着在升级时我们不会触及配置文件来保留这些字符串 然而 我们现在想要迁移到 MVC5 这样做需要在 app web config 中更新所有库定义 我们有一个具有类似配
  • 使用 CanCan 进行上下文感知授权

    我想使用 CanCan 来处理我的权限 我的网站有许多不同的权限级别 其中大多数都是上下文感知的 例如 以下是我的 3 个主要模型中的关系 class User lt ActiveRecord Base has many league re
  • 如何从 PHP 中的 URL 中去掉域名?

    我正在寻找一种方法 或函数 来删除输入到函数中的任何 URL 的 domain ext 部分 域名扩展名可以是任何内容 com co uk nl whatever 输入的 URL 可以是以下任何内容 http www domain com
  • Web.config URL 重写 - HTTPS 和非 WWW

    我需要两者兼而有之https and non www重写 同时也不对域进行硬编码 因为我们有很多服务器 这需要在web config 不在IIS 我读过很多文章 http www iis net learn extensions url r
  • 如何使用 Javascript 将查询参数附加到我的 URL?

    我正在构建一个 Web 应用程序 并使用 Firebase 将用户数据存储在 Cloud Firestore 中 我的网络应用程序上有一个页面 允许用户从 Cloud Firestore 查看他们的文档 我想在我的 URL 末尾添加一个查询
  • Wamp 图标为绿色,但点击时没有反应

    我面临的问题是 我新安装的 WAMP 3 0 正在运行 图标为绿色 apache 和 MYSQL 已启动并运行 本地主机页面可访问 但如果我单击 WAMP 图标来更改任何设置 图标没有反应根本不 鼠标左键或右键单击均不起作用 即使我想关闭
  • Backbone.js 在视图中获取渲染回调

    我有一个 Backbone 应用程序 我们有这样的东西 render function this el html template id plugin return this The id来自正在渲染的元素 这仅有时有效 因为它实际插入到
  • 注销后无法使用 Facebook 凭据登录

    我有一个 Android 应用程序 允许用户使用 Facebook 凭据登录 一旦他们第一次注销 他们就无法再次登录 清除应用程序的权限后用户设置中的应用程序页面 https www facebook com settings tab ap
  • FromHeader Asp.NET Core 绑定到默认值

    我正在使用以下基本控制器测试 Asp Net core WebApi Route test public class TestController Route mult HttpGet public int Multiply int x i
  • 对 python 源文件中的类定义进行排序的最佳方法是什么?

    我有一个包含许多类定义的 py 源 如下所示 class C code c class A code a class B code b 我想把它变成 class A code a class B code b class C code c
  • 数字矩阵 javascript

    我需要 JS 中一个函数的帮助 该函数按给定整数 N 打印矩阵 如下所示 N 2 Matrix 1 2 2 3 N 3 Matrix 1 2 3 2 3 4 3 4 5 我需要用两个循环来完成 但我不知道如何做 function solve
  • 如何禁用 JSpinner 的键盘和鼠标输入?

    当我尝试使 JSpinner 无法通过键盘或鼠标编辑时 如下所示 DefaultEditor mySpinner getEditor getTextField setEditable false mySpinner setEnabled f
  • 我无法解决“为标识符注册的笔尖无效(BNRItemCell)”

    正在阅读 Big Nerd Ranch iOS 书 我在第二天尝试解决这个问题 我快要疯了 有人能帮忙吗 我收到以下错误消息 2014 06 20 11 37 18 764 Homepwner 10388 60b 由于未捕获的异常 NSIn
  • 当底层表发生变化时更新物化视图

    我有一个这样定义的物化视图 CREATE MATERIALIZED VIEW M FOO REFRESH COMPLETE ON COMMIT AS SELECT FOO ID BAR FROM FOO WHERE BAR IS NOT N
  • 是什么 ?关于常规变量?

    我在一些常规代码中看到了这样的内容 trip id encodeAsHTML 使用或不使用 id 有什么区别 它检查对象是否为空 使用它 可以防止空指针异常 如果您使用它 则应该将其用于整个对象 例如 trip id otherstuff
  • Quartus初始化RAM

    我制作了一个实体 其中 quartus 成功识别 RAM 并为其实例化 RAM 宏功能 如果我可以从文件初始化 RAM 那就太好了 我找到了制作此类文件 mif 文件 的教程 现在我已经创建了该文件 我不知道如何让 quartus 初始化该