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 的相关文章

  • 将数组复制到动态分配的内存

    我的代码可以正常工作 但我觉得好像有一种更快的方法可以做到这一点 特别是在我的函数副本中 这是我的代码 这能再快一点吗 顺便说一句 这是 C 语言 另外 当我从函数返回 cpy 时 它是否会删除动态内存 因为它超出了范围 我不想发生内存泄漏
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 抛出错误的分配

    我在尝试使用升压托管共享内存时收到 bad alloc 我从他们的快速指南中复制了升压示例 以供不耐烦的人使用 并结合了我自己的更改 我的代码如下 我注释掉了示例内容并在下面编写了自己的代码 我还进行了一些调试和测试 有人有什么想法吗 任何
  • 写入二维数组时出现分段错误

    我的程序中有一个小的内存访问问题 但我没有找到错误 也许有人可以帮助我 我创建了一个新类型来存储 RGB 颜色值 该类型看起来像 typedef struct pixel unsigned char r unsigned char g un
  • 较低级别的缓存是否可以具有更高的关联性并且仍然保留包含性?

    较低级别的缓存是否可以具有更高的关联性并且仍然保留包含性 假设我们有 2 级缓存 L1 最接近 CPU L2 最接近主内存 L1 高速缓存是与 4 个组关联的 2 路组 假设 L2 高速缓存与 16 个高速缓存行直接映射 并假设两个高速缓存
  • 在 python 3.7.2 中导入 numpy 后的 RAM 使用情况

    我使用 python 3 7 2 win32 运行 conda 4 6 3 在 python 中 当我导入 numpy 时 我发现 RAM 使用量增加了 80MB 由于我使用的是多处理 我想知道这是否正常 是否有办法避免这种 RAM 开销
  • JMeter 负载服务器会影响我的结果吗?

    我正在使用亚马逊 EC2 实例 大型 作为使用 1 000 个线程的负载服务器来运行 JMeter 测试 负载服务器CPU利用率稳定在90 左右 内存利用率稳定在70 是否存在关于负载服务器在什么时候没有足够资源 内存或 CPU 而导致负载
  • 到底什么是“位填充”或“填充位”?

    我只是在互联网上找不到任何关于 位填充 真正含义的详细解释 并且在 Stack Overflow 上也没有找到与位填充相关的线程的任何答案 我还搜索了 ISO 9899 1990 其中提到了 位填充 但没有根据我的需要进行解释 我在网上找到
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • C# 应用程序可以使用多少 RAM? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 查找可以为 C# 中的数组分配多少内存

    我正在做一些需要初始化大数组的计算 数组的最大大小决定了我能解决的问题的最大大小 有没有一种方法可以以编程方式确定有多少内存可供使用 例如可能的最大字节数组 Thanks 嗯 依赖单个大数组会带来一系列相关问题 内存碎片 连续块 最大对象大
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • VHDL 中奇怪的 XNOR 行为

    导致问题的代码看起来像正常的 xnor 操作 如下所示 S 1 lt L 16 xnor L 26 该行会导致以下错误 ncvhdl p E EXPSMI HDL aes sbox enc depth16 vhd 169 14 expect
  • 删除指向对象的 C++ 指针

    我认为删除命令会释放我分配的内存 有人可以解释为什么删除后我似乎仍然有内存在使用吗 class Test public int time int main Test e e new Test e gt time 1 cout lt lt e
  • 尝试了解 ARM 二进制映像中的加载内存地址 (LMA) 和二进制文件偏移量

    我在一家ARM 皮质 M4 STM32F4xxxx 我试图了解二进制文件 elf and bin 在内存中构建并闪存 特别是关于内存位置 具体来说 我不明白的是LMA从实际的二进制文件偏移量进行 翻译 让我用一个例子来解释一下 我有一个 e
  • 确定虚拟内存的页表大小

    考虑一个具有 38 位虚拟字节地址 1KB 页和 512 MB 物理内存的虚拟内存系统 假设有效位 保护位 脏位和使用位总共占 4 位 并且所有虚拟页都在使用中 则本机上每个进程的页表总大小是多少 假设磁盘地址未存储在页表中 好吧 如果问题
  • 如果 free() 知道我的数组的长度,为什么我不能在自己的代码中请求它?

    我知道将动态分配的数组的长度传递给操作它们的函数是一个常见的约定 void initializeAndFree int anArray size t length int main size t arrayLength 0 scanf d

随机推荐

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

    我的输入是 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 初始化该