[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

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

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

相关文章

P3613 【深基15.例2】寄包柜(map)

本题我之前尝试用过vector&#xff0c;但是内存会超&#xff0c;所以用了map就过了 注意二维map的写法 map<int,map<int,int>> mp map<a,map<b,c>> mp; 会创立一个mp[b][c] a;的数组&#xff0c;其中a&#xff0c;b&#xff0c;c为数据类型 #inc…

SQLserver截取字符串

当我们存的数据是json的时候可以全部取出在模糊查询但是有多个重复数据的时候就没办法准确的模糊出来这个时候我们就需要用的字符串截取 --创建函数create FUNCTION [dbo].[Fmax] (str varchar(50),start VARCHAR(50),length VARCHAR(50)) RETURNS varchar(max) AS BEGINDEC…

零信任组件和实施

零信任是一种安全标准&#xff0c;其功能遵循“从不信任&#xff0c;始终验证”的原则&#xff0c;并确保没有用户或设备受信任&#xff0c;无论他们是在组织网络内部还是外部。简而言之&#xff0c;零信任模型消除了信任组织安全边界内任何内容的概念&#xff0c;而是倡导严格…

Java实现Socket聊天室

一、网络编程是什么&#xff1f; 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行数据传输。 应用场景&#xff1a;即时通讯、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景&#xff0c;都是计算机与计算机之间通过网络进行数据传输。 …

解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app

错误场景 更新了IOS的系统版本为最新的17.0, 运行报以下错误 Launching lib/main.dart on iPhone in debug mode... Automatically signing iOS for device deployment using specified development team in Xcode project: GN3DCAF71C Running Xcode build... Xcode build d…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-6复数Complex Number

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-6复数Complex Number x 2 − 2 x 2 0 ⇒ x 1 i x^2-2x20\Rightarrow x1\pm i x2−2x20⇒x1i 代数表达&#xff1a; z a b i , R e ( z ) a , I m ( z ) b zabi,\mathrm{Re}…

销售如何开发客户?

在销售过程中&#xff0c;开发客户是至关重要的一环。只有拥有足够的客户群体&#xff0c;才能为公司带来更多的业务机会和收入。 现如今&#xff0c;不管是哪一行竞争都十分激烈&#xff0c;特别是那些本身没有核心竞争力和核心技术的传统 to b企业&#xff0c;正处于十分尴尬…

Java网络编程 *TCP与UDP协议*

网络编程 什么是计算机网络? 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统 简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输 网络编程是干什么的? 网络…

西南科技大学C++程序设计实验十一(泛型程序设计与C++标准模板库)

一、实验目的 1. 掌握泛型程序设计概念; 2. 掌握vector、deque、list容器使用方法; 3.了解set、map容器使用方法。 二、实验任务 1.分析完善以下程序,理解vector容器使用方法: #include <iostream> __#include <vector>_______ //补充vector模板头文件 …

SDN随笔

SDN不支持跨厂商 vxlan有1600万个&#xff0c;随便用 openstack来通过sdn来管理网络 网络架构 openflow很激进&#xff0c;用的很少 华为解决方案 推动网络设备的自动化配发 网络流量与路径优化

Rust的eBFP框架Aya(一) - Linux内核网络基础

前言 在我的Rust入门及实战系列文章中已经说明&#xff0c; Rust是一门内存安全的高性能编程语言&#xff0c;从它的这些优秀特性来看&#xff0c;就是一门专为系统开发而诞生的语言。至于很多使用Rust来进行web开发的行为&#xff0c;不能说它们不好&#xff0c;只能说是杀鸡…

操作系统 2-6 课后作业2.3:系统调用

第1关版本1内核执行的完整系统调用序列 任务描述 分析版本1内核&#xff0c;回答下列问题&#xff1a; 从系统开机直到输出第 4 个字符‘1’&#xff0c;系统依次执行了哪些系统调用&#xff1f;分别是在几号进程中执行的&#xff1f;&#xff08;对于一组连续出现的 0 号进程…