本文涵盖了从初学者到专家级别的FPGA 项目及IP。所有 FPGA 项目都带有开源的源代码。
IP库简介
一直想做一个可以供大家学习、使用的开源IP库,类似OpenCores,OC上IP在领域内的IP很少,通用性强一点,所以作为OC的“补充”,所以做了一个开源IP库,侧重点在领域的IP辅以工程或者仿真验证,一个人能力有限,欢迎大家能够共同构建,有什么问题可以在网页邮箱批评指正,谢谢~
FPGA 上的跳频无线电
列表中的第一个 FPGA 项目是一个标准扩频系统,属于“direct sequence”或“frequency hopping”类型,或者是这两种“混合”类型的某种组合。在跳频中,系统在很宽的频带上从一个频率“跳”到另一个频率。频率参与的模式是代码序列的作用,从一个频率跳到另一个频率的速率是数据速率的函数。
该项目旨在 FPGA 上设计、仿真和开发用于跳频系统的发射器和接收器。该项目的完成涵盖了安全数字通信的艺术,现在正被用于商业、工业和军事目的。
该设计包括以下模块;PN sequence block; serial to parallel converter; random input block; frequency synthesizer; mixer block。
图1:无线电架构FPGA 上的数字视频缩放
此IP具有以下特点:
AXI STREAM接口;
支持向上或者向下缩放;
输入支持RGB或者YYCbCr 444;
允许独立的水平和垂直缩放,可以生成任何分辨率或者长宽比;
内具18个相位的7×7 FIR多相滤波器来提高视频质量;
支持2K及以上视频;
无需进行帧缓冲;
双线性和最近邻调整大小模式。
FPGA 上的 Canny 边缘检测
Canny 边缘检测是一种用于视觉处理的多阶段算法,用于复杂视觉算法(例如车牌识别)的边缘处理。Canny 边缘检测可以消除不相关的图像信息,并为每个像素提供清晰的输出。高性能计算传统上是通过 Canny 边缘检测来实现的。但是,现在可以在嵌入式平台上为低功耗移动应用程序实施视觉算法。多个处理阶段包括 Canny 等视觉算法。通常,处理器必须从外部存储器获取、处理输入图像帧并将其写回外部存储器。对于下一个处理块,处理器重复这个过程。这种传统的块间内存洗牌效率低下:在这个 FPGA 项目中,我们已经实现了带有 9×9 算子的 Canny 边缘检测器。能够在每个时钟周期产生 1 个像素。我们已经在高达 400Mhz 时钟频率的 Virte系列FPGA上成功实现。该项目的目的是检测图像中的锐利边缘。
图3:Canny 边缘检测直接数字频率合成器
直接数字合成 (DDS) 通过生成数字时变信号然后进行数模转换来生成模拟波形,通常是正弦波。由于 DDS 系统内部的操作主要是数字操作,因此它可以提供输出频率之间的快速切换、令人满意的频率分辨率以及在宽频率范围内的操作。设计人员可以使用多种频率生成:从基于锁相环 (PLL) 的甚高频合成技术到动态数模转换器 (DAC) 输出编程,以产生较低频率的任意波形。但在通信和工业应用中,DDS 方法正在迅速获得解决频率(或波形)生成要求的认可,因为单芯片 IC 器件只能产生具有高分辨率和准确性的可编程模拟输出波形。在这个 FPGA 项目中,我们实现了用于数字上/下转换和周期波形生成的高精度直接数字频率合成器 (DDFS)。例如,正弦波、余弦波、方波和锯齿波。输出是 16 位带符号数据样本。该项目非常适合正交信号生成、数字调制/解调和软件无线电应用。此外,它还可以用作振荡器和生成复杂的正交信号。以及周期性波形的产生。例如,正弦波、余弦波、方波和锯齿波。输出是 16 位带符号数据样本。该项目非常适合正交信号生成、数字调制/解调和软件无线电应用。此外,它还可以用作振荡器和生成复杂的正交信号。以及周期性波形的产生。例如,正弦波、余弦波、方波和锯齿波。输出是 16 位带符号数据样本。该项目非常适合正交信号生成、数字调制/解调和软件无线电应用。此外,它还可以用作振荡器和生成复杂的正交信号。
图4:正弦波优化区块链系统的哈希算法
加密哈希函数是一种哈希算法。它是一种将任意大小的信息映射到固定大小的哈希的数学算法。在 IT 中,加密哈希函数是很常用的。我们可以将它们用于数字签名、消息的身份验证码 (MAC) 和其他验证类型。我们还可以将它们用于哈希表中的索引数据、指纹识别、文件识别、检测重复项或用作校验和(我们可以感知发送的文件是否发生了意外或故意的数据损坏)。哈希函数的算法被设计为一种不可逆的单向函数。然而,近年来有多种哈希算法被破坏。该 FPGA 项目旨在提供哈希算法的 FPGA 实现,以生成工作量证明 (Pow) 的哈希值。在这个项目中,开发了区块链系统来挖掘0x比特币。我们使用了CVP 13 FPGA板,并在其上实现了Keccak-256算法。我们已经实现了每秒500千兆的哈希值。
雷达信号处理器在FPGA上的实现
用于机载降水回波信号处理的高性能数字电子电路——已开发出商用领域的雷达测量设备——可编程门阵列(FPGA)。以前,将雷达回波数据下行到后处理地面站是一种常见的做法,这是一种昂贵的做法,消除了近实时使用自动瞄准数据的可能性。理论上,一个由大约20个个人计算机类型的微处理器组成的系统可以执行机载处理;与这样的系统相比,当前基于 FPGA 的处理器体积小得多,功耗也低得多。或者,专用集成电路 (ASIC) 可用于板载处理。然而,与 ASIC 实现相比,当前的 FPGA 实现具有以下优势:(1) 研究应用程序具有更大的通用性,例如当前的应用程序;(2) 在研究应用程序典型的有限生产量中成本更低。在 FPGA 上实现雷达信号处理技术是重要的领域。在这个FPGA项目中,我们选择了FPGA中的几个算法实现雷达方程以及脉冲压缩算法,实现多普勒频移以检测目标速度,并实现脉冲多普勒波形。
在FPGA上实现了一种恒虚警率(CFAR)检测自适应算法,用于雷达系统在噪声、杂波和干扰的背景下检测目标信号。该项目的目的是从噪声条件下检测目标。
FPGA 上的快速傅立叶变换 (FFT)
快速傅里叶变换 (FFT) 是 DSP 系统中使用的基本构建块,其应用范围从基于 OFDM 的数字调制解调器到超声波、雷达和 CT 图像重建的算法。尽管它的算法简单易懂,但对于当今的工程师来说,实现架构和细节的变体是必不可少的,并且是一个巨大的时间消耗。在这个FPGA项目中,我们在FPGA上实现了快速傅里叶变换;我们已经使用蝶形技术在FPGA上实现了它。FFT用于在复杂信号计划中执行频率分量的查找。这是一个4096点的FFT。通过设备级固定点C模型,该FFT项目核心提供了四种不同的架构,并将平均实现时间从3-6个月缩短到按下一个按钮。它还为用户提供了对DSP算法和硬件工程师所需的所有适当算法和实现进行复杂权衡的机会。FFT项目强调增加动态范围,将数据和相位因子宽度的支持增加到34位,并支持IEEE单精度浮点数据形式。通过在内部使用更高精度的定点FFT,实现可比的噪声效率。
在 FPGA 上将 BCD 码转换为 7 段码
数字解码器 IC 是一种将一种数字格式转换为另一种数字格式的设备,二进制编码的十进制 (BCD) 到 7 段显示解码器是执行此操作最广泛使用的设备之一。7 段 LED(发光二极管)或 LCD(液晶显示器)式显示器为数字、字母甚至字母数字字符提供了一种非常方便的方式来显示信息或数字数据。通常,7 段显示器由七个不同颜色的 LED(称为段)组成。LED 段的正确组合需要在显示屏上点亮,以生成从 0 到 9 和 A 到 F 的必要数字或十六进制字符,相应地,BCD 到 7 段显示解码器 74LS47 就是这样做的。
图5:BCD 转七段显示FPGA 上的数字时钟
数字时钟的主要用途是使用 Artix-7 FPGA 板上的 7 段面板以数字方式显示时间。默认情况下,数字时钟显示运行时间,可以使用分配给板载开关的时间设置来调整时间。警报角色也使用警报集和套件开关上的警报进行配置。开发的数字时钟是为 24 时钟设计的格式。对于数字时钟的硬件实现,本项目采用FPGA。一旦 FPGA 打开,时钟就会开始。FPGA 和板载时钟将产生时序信号。可以使用板上的拨码开关设置时钟时间和闹钟时间。使用数字运算:计数、比较、递增和递减,改进了建议的数字时钟设计。使用时间设置开关,可以设置时钟时间,可以使用闹钟设置开关设置闹钟时间。如果时钟等于闹钟时间,闹钟就会响起。通过使用显示器上的按钮,可以增加和减少分钟和小时。在这个 FPGA 项目中,我们在 FPGA 上实现了数字时钟。该模块有一个输入“FPGA 的源时钟”,有 3 个输出(时针、分针和秒针)。
FPGA 上的 JPEG 硬件压缩器
压缩图像可以通过在不显着降低图像存储和传输图像质量的情况下最大限度地减少成本和时间来提高设备效率。可以在图像元素(像素)的矩阵上描述每个像素的单色图像,由8位的灰度值描述。图像数据的这种描述可能需要大量存储需求。图像压缩旨在减小图像的大小,同时保留大部分细节。它可以是有损压缩,也可以是无损压缩。与无损压缩相比,有损在数据量上有更高的压缩比;而只是初始压缩的近似值,可以重新创建图像。图像压缩有很多规范,例如联合图像专家解压缩 (CODEC) 团队、图形交换格式 (GIF)、便携式网络图形 (PNG)、文件图片标签格式 (TIFF)。最常用的 JPEG 压缩方式,使用并基于余弦离散变换 (DCT) 的有损图像压缩类型。根据在图像和图像中发现的细节,JPEG 格式的压缩图像的压缩效率可能约为原始大小的 10%。结果是所需带宽减少了 90%。这个 FPGA 项目包括一个完整的 JPEG 硬件,具有 4:1:1 子采样,能够以最大分辨率(256×256 @ 60 MHz)以每秒高达 42 张图像的速率进行压缩,并将压缩的JPEG图像输出到存储器。。
FPGA 上的 FM 接收器
我们在 FPGA 上构建了一个简单的 FM 接收器,用于解调 FM 调制频率信号。我们使用偶极天线接收 FM 信号,然后使用 FM 解调器逻辑解调接收到的信号。首先,我们使用ADC将模拟FM信号转换为数字信号,然后对其进行数字处理以去除载波,从而获得来自广播电台的唯一纯声波。
FPGA 上的平方根
在物理学中,平方根函数sqrt(x)是一个重要的基本函数——数字信号和图像处理,ANN方程。现场可编程门阵列(FPGA)目前正在扩展以解决这个问题。需要计算函数sqrt(x)的问题。FPGA制造商和第三方公司正在提出sqrt计算(x)的各种IP核心。但这些IP核心是几十年前开发的,通常没有考虑到最新一代FPGA的特性。因此,它们确实需要升级。在这个FPGA项目中,提出了一种计算sqrt(x)的增强特征算法,它适合FPGA的实现。已经在FPGA上编写了一个代码来寻找有符号数的平方根。该代码基于“非恢复平方根算法”。该代码采用一个32位大小的有符号数字,并返回平方根,平方根也是16位大小的带符号类型。提出了一种类似CORDIC的改进算法,用于推导平方根方程。该算法由与给定数据成比例的减少的步数之和分开,结果是位宽。
FPGA 错误检测-CRC
错误检测决定了通过介质获得的数据在传输时是否损坏。为实现这一点,发射器使用一种功能来测量原始数据帧的数据校验和并附加校验和值。为了为接收到的数据帧创建校验和,接收器使用相同的计算技术并将接收到的校验和与传输的校验和进行比较。如果两个校验和值相同,则得到的数据帧是正确的,在传输或存储过程中没有数据损坏。在这个 FPGA 项目中,在这个FPGA项目中,我们在FPGA上开发了CRC来检测传输消息中的错误。所生成的CRC电路的优点是假定输入被串行馈送到电路中。这意味着,输入可能很长,并且FPGA资源的使用仍然保持不变。
FPGA 上的环形计数器
环形计数器是一种由连接到移位寄存器的触发器组成的计数器,最后一个触发器的输出馈送到第一个触发器的输入,形成“循环”或“环形”结构。在硬件设计(例如,ASIC 和FPGA 设计)中,环形计数器也用于构造有限状态机。二进制计数器将需要一个比环形计数器复杂得多的加法器电路,并且随着位数的增加具有更显着的传播延迟,而无论代码的位数如何,环形计数器的传播延迟几乎都是恒定的。在这个FPGA项目中,在FPGA上实现了一个环形计数器,由一系列正连接的触发器组成。该电路是一种特殊类型的移位寄存器,其中最后一个触发器的输出被反馈到第一个触发器输入。
图6:FPGA 上的环形计数器基于 AES 的加密处理器的 FPGA 实现
对数据安全的需求增加是不可否认的事实。为了实现更高的安全性,加密算法在保护数据免遭未经批准的使用方面发挥着至关重要的作用。在这个 FPGA 项目中,我们展示了一个使用高级加密标准 (AES) 的加密处理器。AES 集成了一个 32 位通用 5 级流水线 MIPS 处理器。集成的AES模块是一个全流水线模块,遵循内圆和外圆流水线设计。结果表明,所呈现的 AES 算法流水线版本和 MIPS 处理器优于传统方法。在 553 MHz 的工作频率下,所提出的设计可以实现 58 Gbps 的吞吐量、240 ns 的延迟和 76 MW 的功耗。
设计是这样实现的,即使加密协处理器同时运行,加密指令也不会阻塞处理器的指令获取周期。默认情况下,如果指令是为处理器设计的,则每条指令都从指令内存单元中取出并在 MIPS 处理器上完成其所有周期。然而,如果获取指令不是MIPS指令,它将在解码阶段后的下一个时钟周期被发送到密码协处理器。我们将加密协处理器与 MIPS 合并并进行这种集成,以便加密协处理器由 MIPS 运行而不会干扰流水线阶段。本项目的主要贡献如下:
实现了AES的流水线版本,获得了高吞吐量、低延迟和低功耗。
提出了AES 和MIPS 的集成,可以运行在不同的频率。
实施的 AES 充当由 MIPS 指令控制的加密处理器,同时它不会干扰 MIPS 处理器的流水线阶段。
FPGA 上的AXI4-Stream 协议接口
其他
该仓库中还有一些其他的IP,就不一一介绍了,核心的IP和工程都在上面,如果对你有帮助,帮忙点个STAR。
点此FPGA源码
❝https://github.com/suisuisi/Xilinx_Library/tree/main/ThreePart/hardwarebee
❞