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

快速开发的法宝——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

<think>好的,我现在需要帮助用户了解如何在FPGA中使用IP设计FIR滤波器。首先,我得回顾一下用户提供的引用内容,看看有哪些关键点可以利用。用户给出的引用1到4主要提到了使用MATLAB设计滤波器系数,然后通过FPGAIP实现电路,以及具体的步骤和资源。 首先,我应该明确FIR滤波器在FPGA中的设计流程。根据引用1,设计分为两个步骤:MATLAB设计系数和FPGA实现。用户的问题是关于IP的使用,所以重点应该放在如何在FPGA开发环境中配置和调用FIR IP。 接下来,我需要考虑用户可能的背景。他们可能已经有一定的FPGA和数字信号处理基础,但需要具体的步骤指导。因此,回答需要结构清晰,分步骤说明,并确保每个步骤都有足够的细节,比如工具的使用(Vivado)、参数配置(滤波器系数、数据位宽)等。 然后,根据引用3和4中的示例,比如输入输出信号的频率,以及IP的动态配置,可能需要提到如何将设计好的系数导入FPGA,以及如何验证滤波器的效果。例如,引用4中的案例是将3MHz和4MHz信号混频后滤出1MHz信号,这可以作为实际应用场景的例子。 另外,用户的问题中提到了资源或方法,因此需要推荐相关的参考资料,如引用3中列出的各种教程和笔记,这些可以帮助用户深入理解。同时,可能需要提到仿真和测试的方法,比如使用MATLAB生成测试信号,并在Vivado中进行仿真验证。 需要注意的是,用户可能对具体的IP配置步骤不太熟悉,因此需要详细说明在Vivado中如何找到FIR IP、设置参数、导入系数文件,以及如何连接其他模块(如DDS、乘法器)来完成整个系统设计。此外,引用4中的例子使用了DDS和乘法器,这可能需要在步骤中提及,说明各部分如何协同工作。 还要考虑到用户可能会遇到的问题,比如系数文件的格式、数据位宽的选择、时钟域的处理等。因此,在步骤中加入这些注意事项,可以帮助用户避免常见错误。例如,引用3中提到动态更改滤波器系数,这可能是一个高级应用,但至少在基础步骤中需要确保用户正确导入系数文件。 最后,生成的相关问题需要围绕用户可能进一步感兴趣的点,如优化方法、性能分析、应用场景等,这样可以帮助他们扩展知识。例如,引用1提到了FPGA实现结构,可能涉及到不同的滤波器结构(如直接型、转置型),这可以作为相关问题之一。 总结起来,回答的结构应该是:首先概述步骤,然后分步详细说明,包括MATLAB设计、IP配置、仿真测试、注意事项,最后提供相关资源和问题。确保每个步骤都有引用支持,并在适当的位置添加引用标识,如引用1到4中的内容。</think>### 如何在 FPGA 中使用 IP 设计 FIR 滤波器 #### **步骤 1:设计 FIR 滤波器系数** 1. **使用 MATLAB 设计滤波器** 根据系统需求(如截止频率、通带纹波、阻带衰减等),通过 MATLAB 的 `fir1`、`firpm` 或 Filter Designer 工具生成符合要求的滤波器系数。例如,设计一个低通滤波器,截止频率为 $f_c$,阶数为 $N$: ```matlab coeff = fir1(N, fc/(fs/2)); % fs为采样频率 ``` 生成的系数需保存为 `.coe` 或 `.txt` 文件,供 FPGA IP 调用[^1][^4]。 2. **量化系数** FPGA 中需将浮点系数转换为定点数(如 16 位有符号整数),以满足硬件资源限制。 --- #### **步骤 2:在 Vivado 中调用 FIR IP ** 1. **创建 IP 实例** - 在 Vivado 工程中,打开 IP Catalog,搜索 "FIR Compiler"。 - 配置滤波器参数: - **系数来源**:选择 "COE File",并导入 MATLAB 生成的系数文件。 - **数据位宽**:设置输入/输出数据的量化位宽(如 16 位)。 - **结构选择**:根据需求选择直接型(Direct Form)或转置型(Transposed Form)[^3][^4]。 2. **时钟与资源优化** - 若需高性能,启用并行结构或流水线优化。 - 配置多通道处理(如多路信号分时复用)[^3]。 --- #### **步骤 3:仿真与验证** 1. **生成测试信号** 使用 MATLAB 或 Vivado 的仿真工具生成输入信号(如混合正弦波),并导出为 `.txt` 文件。例如: ```matlab t = 0:1/fs:1; signal = sin(2*pi*2e6*t) + sin(2*pi*8e6*t); % 2MHz + 8MHz ``` 2. **功能仿真** 在 Vivado 中搭建测试平台,将输入信号加载到 FIR IP ,观察输出波形是否滤除高频分量(如保留 2MHz 信号)。 3. **资源与时序报告** 综合后检查资源占用(如 LUT、DSP 单元)和时序余量(Slack),确保满足硬件约束。 --- #### **步骤 4:集成与部署** 1. **连接其他模块** 将 FIR 滤波器与前端 ADC 接口、后端数据处理模块(如 DDS、乘法器)集成[^4]。例如: ```verilog // 示例:混频后滤波 wire [15:0] mixed_signal = dds_output * adc_data; fir_filter u_fir (.clk(clk), .data_in(mixed_signal), .data_out(filtered_signal)); ``` 2. **动态重配置(可选)** 若需实时调整滤波器参数,可通过 AXI 接口动态更新系数。 --- #### **注意事项** - **系数对称性**:若滤波器系数对称,可启用 "Symmetric" 选项以减少乘法器数量。 - **时钟域同步**:多速率滤波时需注意跨时钟域处理(如 FIFO 或双端口 RAM)。 --- ### 相关资源推荐 1. **MATLAB 与 FPGA 联合设计**:引用[^3]中提到的《MATLAB与FPGA无线通信》系列教程。 2. **Vivado IP 配置详解**:引用[^4]的《FIR滤波器的FPGA实现【IP实现版】》。 3. **动态系数更新方法**:引用中的“Vivado FIR IP动态更改滤波器系数”文档。 --- §§ 相关问题 §§ 1. FIR 滤波器的直接型结构与转置型结构有何区别? 2. 如何通过 MATLAB 验证 FPGA 实现的 FIR 滤波器性能? 3. FPGA 中 FIR 滤波器的资源占用如何优化?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值