当前位置: 首页 > news >正文

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核

文章目录

  • 1 IP 核是什么
  • 2 为什么要使用 IP 核
  • 3 IP 核的存在形式
  • 4 IP 核的缺点
  • 5 Quartus II 软件下 IP 核的调用
  • 6 Altera IP 核的分类

在本小节当中,我们来学习一下 IP 核的相关知识。

IP 核在 FPGA 开发当中应用十分广泛,它被称为快速开发的法宝。在本小节当中,我们将和各位朋友一起来学习了解 IP 核的相关知识、理解掌握 IP 核的调用方法。

我们分为以下几个部分进行 IP 核的学习

  1. 首先是第一部分:IP 核是什么。在这一部分,我们会对 IP 核的基本概念做一个解析
  2. 第二部分是:为什么要使用 IP 核。在这一部分会告诉大家 IP 核的一个使用目的
  3. 第三部分是:IP 核的存在形式,也就是 IP 核的一个分类
  4. 第四部分是:IP 核的缺点。事物的存在有利也有弊,IP 核也不例外。这一部分会讲解一下:IP 核使用的一个局限性
  5. 第五部分就是:Quartus II 软件下 IP 核的一个调用。在这一部分会带领各位朋友,了解如何在 Quartus II 软件下调用 IP 核
  6. 第六部分是 Altera IP 核的一个分类。这部分内容的讲解目的是方便各位朋友,在以后的使用过程中能够快速准确的调用 IP 核

首先是第一部分内容的讲解:IP 核是什么?

1 IP 核是什么

IP 是一个英文(首字母缩写)简称,英文全称是:Intllectual Property,译为中文就是知识产权。在半导体产业中将 IP 核定义为:用于 ASIC 或者 FPGA 中预先设计好的电路功能模块;换句话说:IP 就是指电路功能模块。

在数字电路当中,我们将常用的而且比较复杂的功能模块设计成参数可修改的模块。比如说后面常用到的 FIFO、RAM,还有 SDRAM 控制器;这些常用的而且比较复杂的功能模块设计成参数可修改的模块,在使用过程中其他用户可以直接调用这些模块,这个就是 IP 核。

现在了解了 IP 核的概念之后,我们进入下一个问题:为什么要使用 IP 核?

2 为什么要使用 IP 核

随着科技的进步、IC 工艺的提高,FPGA 的规模越来越大;随着 FPGA 的规模越来越大,FPGA 的设计也是越来越复杂;IC 的复杂度每年以 55% 的速率提高,而我们的设计能力每年只提高 20% 左右;我们设计者的主要任务,是在规定的时间周期内完成一个复杂的设计,但是 IC 复杂度递增的速率大于我们设计能力的提高,这样就使得设计者需要的设计周期就越来越长,这样不利于产品的一个上市;为了解决这个问题,将一些在数字电路中常用的但是比较复杂的功能块,比如说前面提到的 FIFO、RAM、SDRAM 控制器设计成可修改的参数模块,就是前面提到的 IP 核,然后在开发过程中使用 IP 核,这样就可以避免重复劳动、提高开发效率、减少设计和调试的时间,加速开发进程、降低开发成本,这样也大大缩短了产品上市时间、减轻了工程师的一个负担,也是业内的一个发展趋势。这就是我们使用 IP 核开发的一个目的。

了解了 IP 核的概念以及使用目的之后,我们进入第三部分:IP 核的一个存在形式,就是它的分类

3 IP 核的存在形式

IP 核根据产品交付的方式进行分类,有三种不同的存在形式,分别对应我们常说的三类 IP 内核,这三种 IP 内核实现的方法也是各具特色

  1. HDL 语言形式–>软核

    软核也称为软 IP,它通常是以硬件描述语言 HDL 源文件的形式出现,它的应用开发过程与普通的 HDL 设计也是十分的相似,大多数应用于 FPGA 的 IP 内核均是软核。软核有助于用户调节参数并增强可复用性,就是说它可以进行参数的调整(复用性强);软核通常是以加密的形式提供,实际的用户是看不到内部的 RTL 代码的,但是它的布局布线是十分灵活的;在这些加密的软核当中如果对内核进行了参数化,用户就可以通过头文件或者说 GUI 图形界面对参数进行一个设置。软核它的设计周期短、设计投入少,软核由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了 IP 核的一个灵活性和适应性。

    同时,软核也是有缺点的。软核是以源代码的形式提供,尽管源代码可以采用加密的方法,但是它的知识产权保护的问题仍然不容忽视。

  2. 网表形式–>固核

    固核是软核与硬核的一个折中,固核是完成了综合的功能块,它有较大的设计深度。对于那些对时序要求十分严格的内核,比如说:PCIE 接口内核,对于这种时序要求比较严格的内核,它可以预布线特定信号,或者说分配特定的一个布线资源,目的是满足这些内核的时序要求。

    固核也是有缺点的:如果说固核它有固定的布局或者部分固定的布局,在使用过程中会影响其他电路的一个布局,这是它的一个缺点。

  3. 版图形式–>硬核

    硬核是完整提供设计的最终阶段产品——掩膜,硬核是以经过完全的布局布线的网表形式提供,这种硬核既具有可预见性,同时还可以针对特定的工艺或者说购买商进行功耗和尺寸的一个优化。

    但是它缺乏灵活性、可移植性较差;但是,它不存在 RTL 文件,更易于实现 IP 核的一个保护。

事物的存在有利也有弊,IP 核在拥有众多的优点的同时,它也存在巨大的缺点

4 IP 核的缺点

我们来看一下 IP 核的缺点

  1. 首先第一点:IP 核往往不能跨平台使用。这句话什么意思呢?每个 FPGA 开发厂商会根据自己的芯片适配定制的 IP,如果说你之前使用的是赛灵思的芯片,使用了其中的一个 IP 核,但是因为某些原因,你需要将这个代码移植到 Altera 平台上,就必须在 Altera 平台上选择具有相同功能的 IP 核,进行一个替换,否则你就不能使用,这样就增加了代码移植的一个复杂性。
  2. IP 核的第二条缺点是:IP 核不透明,看不到内部的核心代码。IP 核相当于一个黑匣子,它是不透明的,我们只能看到输入信号和输出信号,内部的核心代码是看不到的;因为 IP 核都是各大 FPGA 厂商专门设计的,都会进行一个加密,内部的核心代码是看不到的。如果说我们在使用过程中,想要根据实际的应用进行一个优化,这是不可能的;因为我们是无法进行修改的。这个问题在使用过程中就很棘手
  3. IP 核的第三个缺点就是:定制的 IP 需要额外收费。我们平时使用的一些具有简单功能的 IP 核是 FPGA 厂商提供的,是免费的;但是说,如果你想要使用某些能够实现特殊功能的 IP 核,需要进行一个额外收费。

IP 核在能够缩短我们开发周期的情况下存在以上三个问题。这时候我们就需要权衡利弊,针对具体的需求来做一个具体的选择。

下面我们讲解第五部分:在 Quartus II 开发软件下进行 IP 核的一个调用

5 Quartus II 软件下 IP 核的调用

在 Quartus II 开发软件下进行 IP 核的调用有四种方式

  1. 第一种是 Mega Wizard 的插件管理器
  2. 第二种是 SOPC 构造器
  3. 第三种是 DSP 构造器
  4. 第四种是 Qsys 设计系统例化

在这四种方式中,后两种方式(DSP 构造器、Qsys 设计系统例化)它们仅支持部分的一个 IP 核的例化和使用,最为常用的 IP 核的调用方式是第一种:使用插件管理器的调用方式
Mega Wizard 插件管理器它可以用于创建和修改包含定制 IP 核的一个设计文件,然后在设计文件中例化 IP 核;可以自动生成设计文件、例化模板以及例化声明文件;使用这个插件管理器,可以指定 IP 核的不同选项,包括设置参数值、选择可选端口;还可以为第三方综合工具生成网表文件(第三方的 IP 核是以网表文件的形式进行提供的)。

说了这么多,下面就和各位朋友一起学习使用插件管理器进行一个 IP 核的调用。

我们回到桌面,然后打开 Quartus II 开发软件,关闭开发软件的启动页

image-20231206101736665

第一步就是启动 Mega Wizard 插件管理器:选择 Tools–>MegaWizard Plug-In Manager

image-20231206102053569

弹出了一个 Mega Wizard 插件管理器的选择页面

image-20231206102507483

其中有三个选项

  1. Create a new custom megafunction variation:创建一个新的 IP 核
  2. Edit an existing custom megafunction variation:编辑已经存在的 IP 核
  3. Copy an existing custom megafunction variation:复制已经存在的 IP 核

我们这儿选择第一个:创建一个新的 IP 核,然后点击下一步

image-20231206103003465

然后就到了 2a 页面

image-20231206103125427

首先第一步要选择右上角的位置,选择我们的 FPGA 芯片属于哪个系列;因为不同的器件类型,它可以使用的 IP 核是不同的;比如说我们选择征途系列开发板使用的器件就是 Cyclone IV E 系列

image-20231206103400296

所以说这个地方要保持与工程创建时我们选择的器件系列一致,避免出现 IP 核不支持器件的一个情况。

第二个位置要设置 IP 核输出文件的语言类型,语言类型的设置取决于工程具体设计所使用的语言,我们使用的是 Verilog 就选择 Verilog HDL

image-20231206103617075

第三个位置就是搜索框以及搜索框下方的列表,如果搜索框中不进行输入,下方列表就会分类显示出所有的 IP 核

image-20231206104022328

在这个搜索框当中输入我们想要使用的 IP 核的名称来进行一个 IP 核的搜索,比如说我们想要使用锁相环的 IP 核就输入 pll,下方列表当中就会显示出与我们搜索 IP 核相关的一些 IP 核

image-20231206104231907

然后我们选择使用其中一个 IP 核,选中 ALTPLL;在列表右侧我们就要选择 IP 核输出文件的一个保存位置,这个保存位置一般都是工程文件夹

image-20231206104609952

假如说在 2a 页面选择完毕之后,点击下一步就可以进行参数的一个设置,最后生成我们的 IP 核

image-20231206104649084

以上部分,就是使用 Mega Wizard 插件管理器实现 IP 核一个调用。

下面进入第六部分,就是 Altera IP 核的一个分类

6 Altera IP 核的分类

我们回到 Mega Wizard 插件管理器的 2a 页面,然后清空搜索框,搜索框下方的 IP 核列表当中显示的就是 Altera 提供的 IP 核

image-20231206122121483

下面就参照这个列表来对 Altera IP 核的类型做一个讲解。首先是:数学运算 IP 核

image-20231206122409266

这里面包含了四个部分

  1. 第一部分就是:LPM 类型的整数运算 IP 核

    LPM 表示参数化类型 IP 核库。LPM_ADD_SUB这个就是加法器和减法器的 IP 核、LPM COMPARE这个是比较器、LPM_COUNTER是计数器、LPM_DIVIDE是除法器、LPM_MULT是乘法器

  2. 第二部分就是:ALT 类型的整数运算 IP 核

    ALT 表示的是 Altera 特定的 IP 核。ALTMULT_ACCUM(MAC)是乘累加器、ALTMEMMULT是基于存储的常系数乘法器、ALTMULT_ADD是它的乘加器、ALTMULT_COMPLEX是它的复数乘法器

  3. 第三部分就是:浮点数运算 IP 核

    ALTFP_ADD_SUB就是浮点数加/减法器、ALTFP_DIV是浮点数的除法器、ALTFP_MULT是浮点数的乘法器、ALTFP_SQRT就是浮点数的平方根计算器

然后就是:逻辑运算 IP 核

image-20231206145709311

LPM_CLSHIFT是循环移位、LPM_CONSTANT常数、LPM_DECODE解码和LPM_MUX复用。

第三大类是:存储器 IP 核

image-20231206145941021

里面有 FIFOFIFO、RAM initializerRAM:1-PORTRAM:2-PORTRAM、ROM:1-PORTROM:2-PORTROM 等等
第四大类是:数字信号处理 IP 核

image-20231206150300040

这里边有 CIC v13.0CIC、FIR Compiler II v13.0FIR Compiler v13.0FIR 编码器,然后还有 NC0 v13.0NCO、FFT v13.0FFT(傅里叶变换)
然后是:数字通信类的 IP 核

image-20231206150545059

这儿有 CRC Compiler v13.0CRC 编码,还有 8B10B Encoder-Decoder v13.08B 转 10B 的编码译码器 IP 核。

下一个分类是:视频和图像处理 IP 核

image-20231206150836959

接下来就是:输入输出 IP 核

image-20231206150949454

刚才使用的 PLL(锁相环) 也在这里面ALTPLL,然后还有 ALTLVDS_RXALTLVDS_TXLVDS 收发器的 IP 核。

下面就是:接口 IP 核

image-20231206151158421

这里面有 PCIPCI 接口、PCI ExpressPCIE 接口、SDISDI 接口,还有 Ethernet以太网的接口等等一些的接口。
最后是:FPGA 调试部分的 IP 核

image-20231206151437183

这儿有 Parallel Flash Loader并行的 Flash、Serial Flash Loader串行的 Flash,然后后面会讲到的 SignalTap II Logic Analyzer在线逻辑分析仪。

除了刚刚讲到的一些 IP 核的分类之外,还有一些针对部分 Altera 系列的 FPGA 应用的专用的一些 IP 核,这儿就不再进行讲解了。


参考资料:

41-第二十四讲-快速开发的法宝

24. 快速开发的法宝 — IP核

File:Kamehameha DB scheme.svg

相关文章:

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中,我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛,它被称为…...

每日一题:LeetCode-11.盛水最多的容器

每日一题系列(day 13) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…...

查看电脑cuda版本

1.找到NVODIA控制面板 输入NVIDIA搜索即可 出现NVIDIA控制面板 点击系统信息 2.WINR 输入nvidia-smi 检查了一下,电脑没用过GPU,连驱动都没有 所以,装驱动…… 选版本,下载 下载后双击打开安装 重新输入nvidia-smi 显示如下…...

centos7 docker Mysql8 搭建主从

Mysql8 搭建主从 docker的安装docker-compose的安装安装mysql配置主从在master配置在slave中配置在master中创建同步用户在slave中连接 测试连接测试配置测试数据同步遇到的问题id重复错误执行事务出错,跳过错误my.cnf 不删除多余配置的错误可能用到的命令 docker的…...

CSS中 设置文字下划线 的几种方法

在网页设计和开发中,我们经常需要对文字进行样式设置,包括字体,颜色,大小等,其中,设置文字下划线是一种常见需求 一 、CSS种使用 text-decoration 属性来设置文字的装饰效果,包括下划线。 常用的取值&…...

Docker构建自定义镜像

创建一个docker-demo的文件夹,放入需要构建的文件 主要是配置Dockerfile文件 第一种配置方法 # 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR/usr/local# 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo…...

C#生成Token字符串

Token字符串来保证数据安全性,如身份验证、跨域访问等。但是由于Token字符串的长度比较长,可能会占用过多的空间和带宽资源,因此我们需要生成短的Token字符串 方法一:使用Base64编码 Base64编码是一种常用的编码方式&#xff0c…...

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究 文献速递介绍 近年来,人工智能(AI)领域日益被探索,作为一种增强传统医学诊断和…...

Docker创建RocketMQ和RocketMQ控制台

安装RocketMQ 安装最新版本的RocketMQ(名为RocketMQ)在Docker上的过程大致可以分为以下步骤: 1. 准备工作 确保你的系统中已经安装了Docker。可以通过运行 docker --version 来验证Docker是否已安装及其版本信息。 2. 拉取RocketMQ镜像 …...

Python---面向对象其他特性

1、类属性 Python中,属性可以分为实例属性和类属性。 类属性就是 类对象中定义的属性,它被该类的所有实例对象所共有。通常用来记录 与这类相关 的特征,类属性 不会用于记录 具体对象的特征。 在Python中,一切皆对象。类也是一…...

【Ambari】Python调用Rest API 获取YARN HA状态信息并发送钉钉告警

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…...

linux之buildroot(3)配置软件包

Linux之buildroot(3)配置软件包 Author:Onceday Date:2023年11月30日 漫漫长路,才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档: Buildroot - Making Embedded Linux Easymdev.t…...

学会用bash在linux写脚本 (一)

本章主要介绍如何使用bash写脚本。 了解通配符 了解变量 了解返回值和数值运算 grep的用法是“grep 关键字 file”,意思是从file中过滤出含有关键字的行。 例如,grep root /var/log/messages,意思是从/var/log/messages 中过滤出含有root …...

Leetcode 2949. Count Beautiful Substrings II

Leetcode 2949. Count Beautiful Substrings II 1. 解题思路2. 代码实现 Leetcode 2949. Count Beautiful Substrings II 1. 解题思路 这一题真的很丢脸,居然没有搞定,是看了大佬们的思路之后才想明白的,就感觉丢脸丢大了…… 这道题讲道…...

【Python系列】Python函数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…...

Spring 高级装配详解

一、环境与profile ​ 在3.1版本中&#xff0c;Spring引入了bean profile的功能。要使用profile&#xff0c;首先要将所有不同的bean定义整理到一个或者多个pofile之中&#xff0c;再将应用部署到每个环境时&#xff0c;确保对应的profile处于激活状态。 在Java配置中&#xf…...

mapbox Marker添加自定义html

思路就是先渲染出空div使用getElementsByClassName找到点&#xff0c;之后使用insertAdjacentHTML(‘beforeend’, div) 加自定义内容。 const el document.createElement(div);// 添加一个标记el.className j_icon;const itemIcon new MapboxGl.Marker({element: el,}).set…...

Linux UUCP命令教程:如何在Linux系统中进行文件复制(附实例详解和注意事项)

Linux UUCP命令介绍 UUCP&#xff08;Unix-to-Unix Copy&#xff09;是一套允许远程执行命令和传输文件的程序。UUCP命令是该套件中的一个程序&#xff0c;它为请求文件复制操作提供了用户界面。UUCP套件还包括uux&#xff08;远程命令执行的用户界面&#xff09;、uucico&…...

【android开发-21】android中调用系统摄像头camera拍照和相册的用法详解

1&#xff0c;调用摄像头 在Android中&#xff0c;调用系统摄像头拍照需要使用Intent来启动Camera应用&#xff0c;并在应用中设置相应的权限。下面是一个简单的例子&#xff1a; // 创建一个Intent对象&#xff0c;指定要执行的动作是拍照 Intent intent new Intent(Medi…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...