0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA内部的ROM以及程序对该ROM的数据读操作

电子设计 来源:电子设计 作者:电子设计 2022-02-08 16:30 次阅读

作者: ALINX

适用于板卡型号:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

实验Vivado工程为“rom_test”

FPGA本身是SRAM架构的,断电之后,程序就消失,那么如何利用FPGA实现一个ROM呢,我们可以利用FPGA内部的RAM资源实现ROM,但不是真正意义上的ROM,而是每次上电都会把初始化的值先写入RAM。本实验将为大家介绍如何使用FPGA内部的ROM以及程序对该ROM的数据读操作。

1.实验原理

Xilinx在VIVADO里为我们已经提供了ROM的IP核, 我们只需通过IP核例化一个ROM,根据ROM的读时序来读取ROM中存储的数据。实验中会通过VIVADO集成的在线逻辑分析仪ila,我们可以观察ROM的读时序和从ROM中读取的数据。

2. 程序设计

2.1 创建ROM初始化文件

既然是ROM,那么我们就必须提前给它准备好数据,然后在FPGA实际运行时,我们直接读取这些ROM中预存储好的数据就行。Xilinx FPGA的片内ROM支持初始化数据配置。如下图所示,我们可以创建一个名为rom_init.coe的文件,注意后缀一定是“.coe”,前面的名称当然可以随意起。

pIYBAGAJlkSADj6fAAAXhmyP0T4901.png

ROM初始化文件的内容格式很简单, 如下图所示。第一行为定义数据格式, 16代表ROM的数据格式为16进制。从第3行开始到第34行,是这个32*8bit大小ROM的初始化数据。每行数字后面用逗号,最后一行数字结束用分号。

pIYBAGAJloGAAPqdAABmGOBr0NA634.jpg

rom_init.coe编写完成后保存一下, 接下去我们开始设计和配置ROM IP核。

2.2 添加ROM IP核

在添加ROM IP之前先新建一个rom_test的工程, 然后在工程中添加ROM IP,方法如下:

2.2.1 点击下图中IP Catalog,在右侧弹出的界面中搜索rom,找到Block Memory Generator,双击打开。

o4YBAGAJlsKACHUcAACIrr-GvG0236.jpg

2.2.2 将Component Name改为rom_ip,在Basic栏目下,将Memory Type改为Single Prot ROM。

pIYBAGAJlwmAWbGhAACSuvD2380169.jpg

2.2.3 切换到Port A Options栏目下,将ROM位宽Port A Width改为8,将ROM深度Port A Depth改为32,使能管脚Enable Port Type改为Always,并取消Primitives Output Register

o4YBAGAJl0eAAWVBAAB8UIy6iWc134.jpg

2.2.4 切换到Other Options栏目下,勾选Load Init File,点击Browse,选中之前制作好的.coe文件。

pIYBAGAJl7uAPgKHAABmm59nQ1c005.jpg

2.2.5 点击ok,点击Generate生成ip核。

pIYBAGAJl_qAZK3jAABTQh9aB0g294.jpg

3. ROM测试程序编写

ROM的程序设计非常简单, 在程序中我们只要每个时钟改变ROM的地址, ROM就会输出当前地址的内部存储数据,例化ila,用于观察地址和数据的变化。ROM IP的实例化及程序设计如下:

`timescale1ns/1ps module rom_test( input sys_clk, //25MHz时钟 input rst_n //复位,低电平有效 ); wire[7:0] rom_data; //ROM读出数据 reg [4:0] rom_addr;//ROM输入地址 //产生ROM地址读取数据 always@(posedge sys_clk ornegedge rst_n) begin if(!rst_n) rom_addr <=10'd0; else rom_addr <= rom_addr+1'b1; end //实例化ROM rom_ip rom_ip_inst ( .clka (sys_clk ),//inoput clka .addra (rom_addr ),//input [4:0] addra .douta (rom_data )//output [7:0] douta ); //实例化逻辑分析仪 ila_0 ila_m0 ( .clk (sys_clk), .probe0 (rom_addr), .probe1 (rom_data) ); endmodule

绑定引脚
##################Compress Bitstream############################
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property PACKAGE_PIN AB11 [get_ports sys_clk]set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]create_clock -period 40.000 -name sys_clk -waveform {0.000 20.000} [get_ports sys_clk]set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]set_property PACKAGE_PIN W13 [get_ports {rst_n}]

4. 仿真

仿真结果如下,符合预期,与RAM的读取数据一样,数据也是滞后于地址一个周期。

5. 板上验证

以地址0为触发条件,可以看到读取的数据与仿真一致。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21734

    浏览量

    603099
收藏 人收藏

    评论

    相关推荐

    ROM对计算机性能的影响

    是一种非易失性存储器,即使在断电的情况下也能保持数据不丢失。它通常用于存储固件,这些固件是计算机启动和运行操作系统所必需的。ROM的内容在制造过程中被写入,并且通常不能被用户更改。 ROM
    的头像 发表于 11-04 10:31 306次阅读

    ROM数据丢失的常见原因

    的常见原因 1. 硬件故障 1.1 物理损坏 ROM芯片可能因为物理冲击、高温、湿度、腐蚀等因素而损坏。这些因素可能导致芯片内部电路断裂或短路,从而造成数据丢失。 1.2 老化 随着时间的推移,
    的头像 发表于 11-04 10:29 632次阅读

    了解ROM与固态硬盘的关系

    ,但同时也存在一定的联系。 1. ROM的定义与特点 ROM是一种非易失性存储器,这意味着即使在断电的情况下,存储在ROM中的数据也不会丢失。ROM
    的头像 发表于 11-04 10:24 597次阅读

    手机中的ROM与内存的区别

    1. ROM(只读存储器) 定义: ROM是一种非易失性存储器,这意味着即使在断电的情况下,存储在ROM中的数据也不会丢失。在智能手机中,ROM
    的头像 发表于 11-04 10:23 629次阅读

    ROM在嵌入式系统中的应用

    ROM(Read-Only Memory,只读存储器)是一种非易失性存储器,即使在断电的情况下也能保持存储的数据。在嵌入式系统中,ROM扮演着至关重要的角色,它用于存储固件、操作系统、
    的头像 发表于 11-04 10:06 321次阅读

    如何选择适合的ROM类型

    在现代电子设备和计算机系统中,ROM扮演着至关重要的角色。它用于存储固件、操作系统、启动代码以及其他重要的系统信息。随着技术的发展,ROM的种类和特性也在不断变化。 1.
    的头像 发表于 11-04 10:04 278次阅读

    固态ROM的工作原理

    数据总线和控制逻辑组成。存储单元是ROM的核心,用于存储数据;地址解码器负责将输入的地址信号转换为存储单元的选择信号;数据总线用于传输数据
    的头像 发表于 11-04 10:03 383次阅读

    什么是ROM存储器的定义

    一、ROM存储器的定义 ROM存储器是一种在计算机和电子设备中用于存储固定数据的存储器。与RAM(随机存取存储器)不同,ROM存储器中的数据
    的头像 发表于 11-04 09:59 527次阅读

    在Keystone II器件上使用Arm ROM引导加载程序

    电子发烧友网站提供《在Keystone II器件上使用Arm ROM引导加载程序.pdf》资料免费下载
    发表于 09-19 12:33 0次下载
    在Keystone II器件上使用Arm <b class='flag-5'>ROM</b>引导加载<b class='flag-5'>程序</b>

    rom和ram都是内存储器吗

    存储的数据在断电后仍然可以保持。ROM主要用于存储计算机启动时所需的系统程序和固件,如BIOS、操作系统等。 1.2 RAM(Random Access Memory):随机存取存储器
    的头像 发表于 08-06 09:09 685次阅读

    rom断电后数据会丢失吗

    ROM的内容通常是在制造过程中被编程的,而且其内容在正常操作期间是只读的,用户无法对其进行改写。因此,ROM非常适用于存储固定的操作系统、固件、BIOS固件和其他嵌入式设备所需的固定
    的头像 发表于 02-09 07:38 7261次阅读

    rom是什么存储器是内存还是外存

    ROM(Read-Only Memory)是一种只读存储器,用于存储计算机程序数据,它在计算机系统中扮演着非常重要的角色。ROM的存储内容在制造时就被写入,并且在计算机运行过程中不能
    的头像 发表于 02-05 10:05 5996次阅读

    ram和rom的作用和区别是什么

    详细探讨RAM和ROM的作用和区别。 一、RAM的作用: 临时存储:RAM被用作临时存储器,用于计算机处理数据程序时的工作区域。当计算机启动时,操作系统和应用
    的头像 发表于 02-04 17:05 4824次阅读

    RAM和ROM的区别,哪个与CPU连接

    数据和指令,而ROM则用于存储计算机的基本操作系统和启动程序。本文将探讨RAM和ROM的区别,以及
    的头像 发表于 01-31 14:14 2536次阅读

    rom与ram的主要区别 rom断电后数据会丢失吗

    ,断电后数据不会丢失。ROM中的数据在制造过程中被永久地写入芯片中,并且无法从ROM中删除或修改数据。这使得
    的头像 发表于 01-25 10:46 3915次阅读