Xilinx系FPGA学习笔记(五)ROM的IP核学习

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • ROM IP
    • 分布式ROM生成
      • ROM配置
      • 创建COE文件
    • 块ROM生成
      • 如何快速生成Example Design
  • 两种ROM对比


前言

最近在学习小梅哥的xilinx型FPGA开发板,一边学习一边记录,简化整理一下笔记


ROM IP

在 Memories &Storage Elements 下可以看到有两个与 ROM 相关的 IP,一个是 Distributed Memory Generator,另一个是 Block Memory Generator
在这里插入图片描述

两种生成的 Core所占用的 FPGA 资源不一样

Distributed Memory Generator 生成的 ROM/RAM Core 占用的资源是 LUT(查找表,查找表本质就是一个小的 RAM);
可以生成:Distributed ROM、Distributed Single-Port RAM、Distributed Dual-Port RAM、Distributed Simple Dual-Port RAM

Block Memory Generator 生成的 ROM/RAM Core 占用的资源是 Block Memory(嵌入式的硬件 RAM)

ROM即随机只读存储器,所以一般只能读,我们可以编写COE文件,与生成的ROM进行绑定,这样从ROM读出来的数据就是我们自定义的

这里还有一种URAM,Ultra RAM是一种高性能、低延迟的存储器资源,实现大容量的存储和高带宽的存储访问,暂时还没有涉及该方面

分布式ROM生成

ROM配置

选择Distributed Memory Generator来生成IP核

在这里插入图片描述
Depth:设置 ROM 深度
Data Width:设置数据位宽
Memory Type:选择存储类型,这里选择 ROM
在这里插入图片描述
Input Options:设置是否对输入的地址增加一级寄存器,设置选择 Registered,对输入的地址增加一级寄存器,会发现多了一个CLK

Output Option:设置是否对输出的地址增加一级寄存器,这里选择 Both,输出数据信号 spo 和增加一级寄存器后的输出数据信号 qspo 都从端口引出。下面还有个 SinglePort Output CE 可选配,当勾选后,ROM Core 就会多出一个 qspo_ce 的端口,这个信号是用来控制使能输出寄存器的时钟。

Pipeline Stages:流水线级数,在生成 ROM 模式下,不可配。
在这里插入图片描述

添加 COE 文件位置,可以通过选择路径添加已有的 COE 文件,软件会通过 COE 文件生成 ROM 初始化文件 MIF 文件。
没有也可以直接创建编辑

COE Options:设置 ROM 中初始化数据没有覆盖的区域的数值,比如 ROM 深度 256,添加的 COE 文件中仅初始化了 200 个数据,这里就是统一设置剩下的 56 个数据的数值。Radix是进制

Reset Options:添加输出寄存器复位信号,可添加同步复位或异步复位

ce overrides 设置:
CE Overrides Sync Controls:在选择了输出寄存器同步复位和时钟使能才能启用,启用后,同步控制由时钟使能限定。
Sync Controls Overrides CE:在选择了输出寄存器同步复位和时钟使能才能启用,启用后,同步控制信号会工作,不受时钟使能限定。
前面未勾选时钟使能信号 CE,这里就不可设置,保持默认即可。

在这里插入图片描述
这里的a是输入地址,clk是时钟,qspo_ce是qspo的使能,不要也行,qspo是寄存一级的输出,spo是直接输出,qspo会比spo慢一个时钟周期

创建COE文件

新建行,添加进制和数据信息
在这里插入图片描述
memory_initialization_radix 是 ROM 初始化数值进制设置,对应后面 Value 值可设置 2,10,16,分别表示 2 进制,10 进制,16 进制。

memory_initialization_vector 是 ROM 初始化数据向量,对应后面 Value 值就是填写 ROM 初始化的数据,数据与数据之间通过空格或逗号隔开,数据个数不允许超过设置 ROM 的深度(可以少于设置的深度),数据不允许为负数。

注:Key 和 Value 里面填写内容不区分大小写。

设置完成后保存即可(软件会自动validate验证编写对否)

在这里插入图片描述
IP Source 窗 口 IP Synthesis 下 看 到 有dist_mem_rom_ip.mif 文件,这个文件就是 IP 生成过程中通过我们添加的 coe 文件自动生成的,这点和 quartus 有所不同(quartus 是用户直接添加指定 mif 文件)。有一点比 quartus 好的就是在 ROM Core 建立时 vivado 软件会根据用户添加 coe 文件以及设置 ROM 参数(深度,位宽)对 coe 文件进行校验,如果不符合要求会提示相关错误,可以有效避免初始化文件不匹配的问题。

mif文件可以用matlab来写txt生成一个我们想要的数据,当我们想要更换COE文件的时候,对 rom IP 进行重新的设置
在这里插入图片描述
重新绑定COE文件就行

块ROM生成

使用硬件块 RAM 资源的 ROM IP,点击 Block Memory Generator
在这里插入图片描述
在这里插入图片描述
Interface选项有两种接口,一种是常规接口,一种是AXI 接口
memory type有 ROM 和 RAM 两种类型,ROM 又分为单端口 ROM 和双端口ROM。对于 RAM 而言,有三种可选项,单端口 RAM、简单双端口 RAM 和真双端口 RAM。

单端口 ROM,一个时钟,一个地址通道,一个数据通道。
双端口 ROM,两个时钟,两个地址通道,两个数据通道,可同时在两个时钟域下读取地址 ROM 中的数据。(相当于两个ROM)

Algorithm Options 算法类型:有三种选项可选,最小面积、低功耗、固定原语。(可查手册)

在这里插入图片描述
memory size设置位宽和深度
在这里插入图片描述
端口使能信号类型设置,一个是一直使能,一个是通过一个 ENA 信号管脚控制

Prot A Output Reset Options: 端口 A 输出置位/复位设置,这里置位/复位并不复位RAM 中的数据而是只复位寄存器上的值。

在这里插入图片描述
勾选 Load Init File,加载初始化文件,这里可以加载上面生成的 coe 文件,下面的 Fill Remaining Memory Location 是用来填充初始化文件没有覆盖的地址区域的数值(类似前面介绍的意思)

Latentcy 指的是相对于某个时钟起始位的 1 个或多个时钟后数据才有效,一般以时钟为单位,这里表示的是时钟采集到读数据地址到数据有效的时间间隔
在这里插入图片描述
这里 Latency 等于 3,是因为我们前面配置同时勾选了Primitives Output Register和 Core Output Register,相当于数据打了两拍。

如何快速生成Example Design

在 PROJECT 窗口的 IP Sources 中找到我们生成的 block ROM IP ,右键找到 Open IP Example Design。
在这里插入图片描述
会生成一个新的项目,会用VHDL帮我们写一个测试文件,然后我们自己Run Simulation就行了
在这里插入图片描述

两种ROM对比

在这里插入图片描述
在这里面可以看到具体资源使用情况,包括每个模块使用后的资源情况。
在这里插入图片描述

使用了 29 LUT、8 个触发器、12 个 F7 的选择器、6 个 F8 的选择器、17 个 IO资源(1 个时钟输入,8 个地址输入线,8 个数据输出线)
还有消耗了 Slice 和 Slice LUTs

CLB(Configurable Logic Block,可配置逻辑快)资源:包含了 2 个 Slice,每个 Slice 包含 4 个 6 输入 LUT、进位链、3 个多路复用器和 8 个寄存器,一个 LUT 逻辑容量为 2^6bit,
在这里插入图片描述
Block RAM生成的块 ROM IP,只使用了寄存器和 Block
RAM 资源。没有消耗 LUT 资源。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/418690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[QT] QT事件与事件重写

一.事件 事件(event)是由系统或者 Qt本身在不同的场景下发出的。当用户按下鼠标、敲下键盘,或者是窗口关闭等都会发出一个相应的事件。 一些事件在用户操作时发出(如鼠标/键盘事件); 另一些事件则是由系统自动发出(如计时器事件)。 Qt窗口中对于产生的一系列事件都…

Kotlin高阶函数与Lambda表达式及内联函数的介绍

目录 1、高阶函数1.1、什么是高阶函数?1.1.1、不带返回值的高阶函数1.1.2、带参数且带返回值的高阶函数1.1.3、与一般的函数进行比较 1.2、如何使用?1.3、高阶函数有什么作用? 2、Lambda表达式2.1、什么是Lambda表达式?2.1.1、无参…

通信工程学习:什么是PCM脉冲编码调制、DPCM差分脉冲编码调制、ADPCM自适应差分脉冲编码调制

PCM脉冲编码调制、DPCM差分脉冲编码调制、ADPCM自适应差分脉冲编码调制 PCM、DPCM、ADPCM是音频编码技术中的三种重要方式,它们在音频信号的数字化、压缩和传输中起着关键作用。以下是对这三种技术的详细解释: 一、PCM(Pulse Code Modulatio…

Java线程池和Executor框架-面试与分析

线程池 什么是线程池?为什么要用线程池? 在Java并发框架中,线程池时使用最多的东西,几乎所有需要异步并发执行任务的程序都可以使用线程池。 使用线程池带来的好处: 降低资源消耗。通过重复利用已创建的线程降低线程…

ffmpeg安装测试(支持cuda支持SRT)

文章目录 背景安装ffmpeg直接下载可执行文件选择版本选择对应系统版本下载测试Linux下安装 查看支持协议以及编码格式 常见错误缺少 libmvec.so.1LD_LIBRARY_PATH 错误 GPU加速测试SRT服务器搭建下载srs5.0源码解压安装配置启动 SRT推流测试SRT播放测试 背景 在音视频开发测试中…

【扇贝编程】使用Selenium模拟浏览器获取动态内容笔记

文章目录 selenium安装 selenium下载浏览器驱动 获取数据处理数据查找一个元素查找所有符合条件的元素 控制浏览器 selenium selenium是爬虫的好帮手, 可以控制你的浏览器,模仿人浏览网页,从而获取数据,自动操作等。 我们只要让…

LLM 模型压缩之三: FoldGPT

0. 资源链接 论文: FoldGPT: Simple and Effective Large Language Model Compression Scheme 项目: to be released. 1. 背景动机 现有的大语言模型推理存在以下问题: LLM 模型因为有大量的参数,以及 next token 的预测方式,导致 LLM 模…

关于CPP——std::future异步操作

目录 一、std::future 简介 1.1 概念 1.2 应用场景 1.3 关联的方法 1.3.1 std::async 1.3.2 std::package 1.3.3 std::promise 二、future 用法 2.1 使用std::async关联异步任务 2.2 使用std::packaged_task 1. 获取任务结果的机制: 2. 异步任务的管理&a…

Qt/C++开源项目 TCP客户端调试助手(源码分享+发布链接下载)

这是一个TCP客户端调试助手,具有简洁直观的界面,用户能够方便地测试TCP协议的通信功能,并可同时作为客户端与服务器端使用。以下是该程序的功能特点及用途介绍: 功能特点: TCP客户端与服务器调试:支持同时…

【word导出带图片】使用docxtemplater导出word,通知书形式的word

一、demo-导出的的 二、代码操作 1、页面呈现 项目要求,所以页面和导出来的word模版一致 2、js代码【直接展示点击导出的js代码】 使用插件【先下载这五个插件,然后页面引入插件】 import docxtemplater from docxtemplater import PizZip from pizzip …

LTE PSS主同步信号搜索 MATLAB实现

本期带来PSS相关检测说明和MATLAB实现,本期只讲相关方面的,所以MATLAB实现也是相关的部分,频偏估计方面的待下期开讲。 LTE 4G PSS搜索分为TDD搜索和FDD搜索,但是对于 TDD 和 FDD 而言,PSS同步信号的结构是完全一样的&…

sheng的学习笔记-AI-半监督聚类

AI目录:sheng的学习笔记-AI目录-CSDN博客 半监督学习:sheng的学习笔记-AI-半监督学习-CSDN博客 聚类:sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 均值算法:sheng的学习笔记-AI-K均值算法_k均值算法怎么算迭代两次后的最大…

图形验证码从设计到实现

验证码的使用场景 图形验证码在我们的日常使用中是非常常见的,比如一些App、小程序、PC网站等。涉及到的业务也比较广泛、例如用户登录流程、注册流程、找回密码。下面我们来大致梳理下上述流程: 登录流程 用户首先在登录界面输入手机号然后通过图形验…

VMware时提示系统尚未修改安装失败

安装VMware安装失败,提示系统尚未修改 有以下解决方案: 1.操作系统不兼容 2.安装文件损坏 3.安装程序错误 4.硬件问题 解决:由于重装系统前,安装过VAware,所以应该操作系统,硬件没有问题。下载一个软件v…

关于Redis集群同步/持久化/淘汰机制的详解

Redis是非常常用的KV数据库, 使用内存以及HashMap进行存储的特点带来了高效的查询. 本文将围绕Redis的常见开发使用场景, 阐述在Redis集群中各个节点是如何进行数据同步, 每个节点如何进行持久化以及在长期使用中如何对数据进行更新和淘汰. 如果对Redis有更多的兴趣, 可以查看我…

Java中方法的使用详解

1.引言 假设有一个美女博主,每次发的照片都特别漂亮 然后该博主的评论区每次都会有很多粉丝的评论: 哇!宝宝好漂亮,求上衣链接!!! 老婆亲亲!这个口红是什么色号呀? 宝…

【go】内存分配模型

内存是怎么分配给对象的? 内存分配优化的地方是? 讲讲golang内存分配模型? ans: 1.按照对象的大小分配:先算出对象的大小如果是tiny对象,就从tiny block中获取地址和偏移量,将对象打包到mcache;如果是16B以…

Python 在Excel中应用和取消多种不同类型的数据筛选

目录 安装Python Excel处理库 Python 在 Excel 中应用文本筛选 Python 在 Excel 中应用数字筛选 Python 在 Excel 中应用字体颜色、单元格颜色或图标集筛选 Python 在 Excel 中应用日期筛选 Python 在 Excel 中应用动态日期筛选 Python 在 Excel 中筛选空单元格或非空单…

【ArcGIS Pro第一期】界面简介

ArcGIS Pro简介 ArcGIS Pro界面简介1.1 打开工程1.2 使用功能区上的工具 参考 ArcGIS Pro 是一种基于功能区的应用程序。 ArcGIS Pro 窗口顶部的功能区有许多命令可供选择,而根据需要打开的各个窗格(可停靠窗口)中则提供了更为高级或专用的功…

快速排序(QuickSort)-归并排序(MergeSort)[java编写]

1. 快速排序 1.1 基本概述 快速排序采用分治思想,即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot 将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用…