VHDL 中的 BRAM_INIT

2024-02-04

我正在模拟基于处理器的设计,其中程序存储器内容保存在 BRAM 中。我正在使用 VHDL(推断 BRAM)实现程序存储器。我试图避免使用 CoreGen,因为我想保持设计的可移植性。最终该设计将进入 FPGA。

我想看看是否有一种方法可以使用 VHDL 泛型来初始化 BRAM 的内存内容?我知道 Coregen 使用 COE 文件来初始化 BRAM,但是我们是否有基于 VHDL 代码的方法来执行此操作?

也让我知道您的替代建议。


是的,这当然是可能的。看看Xilinx 综合工具 (XST) 用户指南 http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/xst.pdf,特别是第187页。

他们建议执行此操作的代码复制如下。他们在用户指南中提供了有关将读取的文件格式的注释。请注意,此代码不直接使用泛型,但我可以想象您可以设置一个常量或泛型来保存文件名的名称......

--
-- Initializing Block RAM from external data file
--
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use std.textio.all;

entity rams_20c is
port(clk : in std_logic;
   we : in std_logic;
   addr : in std_logic_vector(5 downto 0);
   din : in std_logic_vector(31 downto 0);
   dout : out std_logic_vector(31 downto 0));
end rams_20c;
architecture syn of rams_20c is
   type RamType is array(0 to 63) of bit_vector(31 downto 0);
   impure function InitRamFromFile (RamFileName : in string) return RamType is
      FILE RamFile : text is in RamFileName;
      variable RamFileLine : line;
      variable RAM : RamType;
   begin
      for I in RamType’range loop
         readline (RamFile, RamFileLine);
         read (RamFileLine, RAM(I));
      end loop;
      return RAM;
   end function;
signal RAM : RamType := InitRamFromFile("rams_20c.data");
begin
   process (clk)
   begin
      if clk’event and clk = ’1’ then
         if we = ’1’ then
            RAM(conv_integer(addr)) <= to_bitvector(din);
         end if;
         dout <= to_stdlogicvector(RAM(conv_integer(addr)));
      end if;
   end process;
end syn;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VHDL 中的 BRAM_INIT 的相关文章

  • 将 n 位的 std_logic_vector 向右或向左移位

    我有一个向量signal tmp std logic vector 15 downto 0 我必须将它向左或向右移动 n 位 我怎样才能实现这个操作 我想到了串联操作 但我不知道如何使用它 Use the ieee numeric std库
  • 将 *.vhdl 编译到库中时出现编译器错误 - Altera Quartus II

    我已经从以下位置下载了浮点包http www vhdl org fphdl http www vhdl org fphdl 并做了以下事情 我在项目中包含了 math utility pkg vhd fixed pkg c vhd 和 fl
  • 轻量级正则表达式解析器

    我想使用正则表达式解析器来帮助 C 应用程序中的一些字符串处理 我理想地寻找轻量级和开源的东西 目标平台是嵌入式系统 因此我们希望尽可能节省内存消耗 我在网上找到了许多选项 但想知道是否有人可以提出可能在这种特定情况下有所帮助的其他建议 非
  • vhdl中process语句的顺序执行

    对于vhdl中的process语句 据说process语句内部的执行顺序是连续的 我的问题是 请先看下面的代码 a b和c信号在进程语句中的if语句中是同时还是顺序分配给它们的新值 process clk is begin if risin
  • __CC_ARM、__ICCARM__、__GNUC__ 和 __TASKING__ 宏的含义是什么?

    我正在 stm 的 STM32l151rct6a 上工作 我偶然发现了这些宏定义 CC ARM ICCARM GNUC TASKING 有谁知道他们的意思吗 这些是针对 ARM 处理器的不同编译器 可能这些宏用于隐藏可由多个编译器编译的代码
  • 将指向 const 的指针或指向 const 的 const 指针声明为形参

    我最近对代码进行了一些调整 其中我必须更改函数中的形式参数 最初 该参数类似于以下内容 注意 该结构之前已进行类型定义 static MySpecialStructure my special structure static unsign
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • 在单周期数据路径中加载半字和加载字节

    有人询问如何在单周期数据路径中实现加载字节而无需更改数据存储器 解决方案如下 替代文本 http img214 imageshack us img214 7107 99897101 jpg http img214 imageshack us
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • Linux 中的直接内存访问

    我正在尝试直接访问嵌入式 Linux 项目的物理内存 但我不确定如何最好地指定内存供我使用 如果我定期启动设备并访问 dev mem 我就可以轻松地读写任何我想要的位置 然而 在这里 我访问的是可以轻松分配给任何进程的内存 我不想做 我的
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 快速CRC算法?

    我想从 ASCII 字符串创建一个 32 位数字 CRC32 算法正是我正在寻找的 但我无法使用它 因为它需要的表太大了 它适用于资源非常稀有的嵌入式系统 那么 对于快速且精简的 CRC 算法有什么建议吗 当冲突的可能性比原始 CRC32
  • C 中的可移植函数(无汇编)返回其堆栈帧的大小

    用 C 编写一个可移植函数 无需汇编 返回其堆栈帧的大小 int stackframe size 尝试如下解决 该函数在使用 VS 2010 编译时返回 228 字节 有没有办法验证其正确性 int stackframe size int
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 产生并处理软件中断

    有人可以告诉我如何在Linux下生成软件中断然后用request irq处理它吗 或者也许这是不可能的 您可以使用软中断来代替 您可以通过编辑 include linux interrupt h 来定义您的 sofirq 然后使用函数 ra
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • 设计新的 Twitter 小部件(嵌入时间线)

    几天 几周前 我的一些网站的 Twitter 小部件停止正确提取数据 事实证明 版本 2 的 Twitter 小部件已被弃用 显然 新的嵌入式时间轴小部件是唯一的出路 https dev twitter com blog planning
  • oracle apex 值列表 - 选择值并在下一个字段的 SQL 查询中使用

    我将 Apex 4 0 2 与 Oracle XE 11 结合使用 我有一个表格 上面有一个字段 P200 CARD TYPE 是从值列表中设置的 我想要发生的是使用我在设置 仅显示 字段的查询中选择的值 P200 DESC 在源代码部分中
  • 在for循环中声明两个变量

    是否可以在 for 循环的初始化部分声明两个变量 我想对字符串的每个字符调用一个函数 for var i 0 c aString charAt i i lt aString length i problem here not itterat
  • 使用 javascript 区分表单中的两个提交按钮

    我怎样才能知道在javascript中点击了哪个提交按钮 function submitForm if find open popup else if add continue in the same window
  • 骆驼模拟 - MockEndpoint.whenAnyExchangeReceived 处理方法不执行

    我下面有示例代码 为什么 MockEndpoint whenAnyExchangeReceived 中的 process 方法没有执行 我期望响应是 来自模拟远程 http 调用的预期正文 但实际响应是请求中传递的内容 Camelrocks
  • 如何通过批处理将 SQL 存储过程保存到 .sql 文件

    我想将我的 MS SQL Server 2005 存储过程自动保存到 sql 文件 更喜欢可以通过 bat 调用的工具 这样我就不必手动单击每个存储过程并保存它 我已经从 devio IT 找到了 SMOscript 但它会收集所有表和存储
  • 无法更改 Android 模拟器中的电池配置

    我试图在模拟器中将电池状态更改为容量和交流状态 但不起作用 我做了整个步骤 1 通过telnet连接到模拟器 2 尝试使用 power ac off 和 powercapacity 70 等命令3 每次我检查电量显示时 都会出现相同的配置
  • 完整 .NET Framework 控制台应用程序中的 JSON 配置

    我有一个针对 NET 4 7 1 的控制台应用程序 我正在尝试在我的 Net Framework 应用程序中使用 net core 之类的配置 我的 App config 是
  • 限制 C++ 函数允许的抛出有什么好处? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Hibernate 尝试加载“not-found=ignore”关联?

    我有一个类 代表一个项目 它通过多对一关系映射另一个类 代表一个用户 随着用户的来来去去 我确保设置未找到财产给ignore关系上 然而 Hibernate 似乎仍然尝试通过为每个项目执行一个额外的 SQL 查询来加载 丢失的 用户 未找到
  • 如何让我的 DIV 出现在彼此下方

    我有以下内容 div style padding right 1 div
  • 如何访问对象ID标识属性?

    在 IB 的 身份 选项卡下 您可以找到一个名为 对象 ID 的属性 我找不到从代码中获取此 ID 的方法 哦 我知道标签属性 但这不是我需要的 我本质上想获取屏幕上触摸的 UIComponent 的唯一对象 ID 我已经有了 UITouc
  • Xcode 构建完美失败——找不到 COpenSSL

    代码 8 0 Swift 工具链 3 0 版本 完美的 Package url https github com PerfectlySoft Perfect HTTPServer git majorVersion 2 minor 0 跑起来
  • PID和TID的区别

    PID和TID有什么区别 标准答案是 PID 用于进程 而 TID 用于线程 然而 我发现有些命令可以互换使用它们 例如 htop有一个 PID 列 其中显示同一进程的线程的 PID 具有不同的值 那么PID什么时候代表线程或进程呢 这很复
  • 如何检测IE6,并显示警报?

    我试图在使用 IE6 的用户使用我的网站时显示警报 我想这样的事情会起作用 我会对此进行测试 但我没有可以使用 ATM 的 Windows 盒子 这是正确的方法吗 是的 这有效 当然 你可以使用像这样的东西 http code google
  • 如何解析 XML 并获取特定节点属性的实例?

    我在 XML 中有很多行 并且正在尝试获取特定节点属性的实例
  • 如何使 Eclipse Formatter 不破坏注释掉的代码?

    我的很多同事喜欢留下注释掉的代码 以及如何使 Eclipse Formatter 不破坏该代码的格式 现在它会生成一个大斑点或块 附 我知道我可以以某种方式配置格式化程序以忽略该代码 我做过一次 但我不记得如何做 在 Eclipse 格式化
  • 使用 Python 通过 Mailgun 提交变量时出错

    我正在尝试使用 Python 通过 Mailgun 发送邮件 在这种情况下 我正在尝试将变量推到旁边 我的代码如下 requests post MailGun URL auth api api key data from From Mail
  • 使用 Cx_freeze 或 Py2Exe 打包 Scrapy 应用程序

    我正在尝试打包一个网络抓取脚本 使用 scrapy 构建 作为独立应用程序运行 供我的老板使用 我使用 Tkinter 构建了一个小型桌面 GUI 它通过 os system 调用来调用我的 Scrapy 蜘蛛 我当前的构建实现 使用 cx
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用