《Linux设备驱动开发详解 A》一一2.4 CPLD和FPGA

简介:

本节书摘来华章计算机出版社《Linux设备驱动开发详解 A》一书中的第2章,第2.4节,作者:宋宝华 更多章节内容可以访问云栖社区“华章计算机”公众号查看。1

2.4 CPLD和FPGA

CPLD(复杂可编程逻辑器件)由完全可编程的与或门阵列以及宏单元构成。
CPLD中的基本逻辑单元是宏单元,宏单元由一些“与或”阵列加上触发器构成,其中“与或”阵列完成组合逻辑功能,触发器完成时序逻辑功能。宏单元中与阵列的输出称为乘积项,其数量标示着CPLD的容量。乘积项阵列实际上就是一个“与或”阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑。在“与”阵列后一般还有一个“或”阵列,用以完成最小逻辑表达式中的“或”关系。图2.19所示为非常典型的CPLD的单个宏单元结构。
图2.20给出了一个典型CPLD的整体结构。这个CPLD由LAB(逻辑阵列模块,由多个宏单元组成)通过PIA(可编程互连阵列)互连组成,而CPLD与外部的接口则由I/O控制模块提供。

image

图2.19 典型的CPLD的单个宏单元结构
image

图2.20 典型的CPLD整体架构
图2.20中宏单元的输出会经I/O控制块送至I/O引脚,I/O控制块控制每一个I/O引脚的工作模式,决定其为输入、输出还是双向引脚,并决定其三态输出的使能端控制。
与CPLD不同,FPGA(现场可编程门阵列)基于LUT(查找表)工艺。查找表本质上是一片RAM,当用户通过原理图或HDL(硬件描述语言)描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路所有可能的结果,并把结果事先写入RAM。这样,输入一组信号进行逻辑运算就等于输入一个地址进行查表以输出对应地址的内容。
图2.21所示为一个典型FPGA的内部结构。这个FPGA由IOC(输入/输出控制模块)、EAB(嵌入式阵列块)、LAB和快速通道互连构成。
image

图2.21 典型的FPGA内部结构
IOC是内部信号到I/O引脚的接口,它位于快速通道的行和列的末端,每个IOC包含一个双向I/O缓冲器和一个既可作为输入寄存器也可作为输出寄存器的触发器。
EAB(嵌入式存储块)是一种输入输出端带有寄存器的非常灵活的RAM。EAB不仅可以用作存储器,还可以事先写入查表值以用来构成如乘法器、纠错逻辑等电路。当用于RAM时,EAB可配制成8位、4位、2位和1位长度的数据格式。
LAB主要用于逻辑电路设计,一个LAB包括多个LE(逻辑单元),每个LE包括组合逻辑及一个可编程触发器。一系列LAB构成的逻辑阵列可实现普通逻辑功能,如计数器、加法器、状态机等。
器件内部信号的互连和器件引出端之间的信号互连由快速通道连线提供,快速通道遍布于整个FPGA器件中,是一系列水平和垂直走向的连续式布线通道。
表2.2所示为一个4输入LUT的实际逻辑电路与LUT实现方式的对应关系。
image

CPLD和FPGA的主要厂商有Altera、Xilinx和Lattice等,它们采用专门的开发流程,在设计阶段使用HDL(如VHDL、Verilog HDL)编程。它们可以实现许多复杂的功能,如实现UART、I2C等I/O控制芯片、通信算法、音视频编解码算法等,甚至还可以直接集成ARM等CPU内核和外围电路。
对于驱动工程师而言,我们只需要这样看待CPLD和FPGA:如果它完成的是特定的接口和控制功能,我们就直接把它当成由很多逻辑门(与、非、或、D触发器)组成的可完成一系列时序逻辑和组合逻辑的ASIC;如果它完成的是CPU的功能,我们就直接把它当成CPU。驱动工程师眼里的硬件比IC设计师要宏观。
值得一提的是,Xilinx公司还推出了ZYNQ芯片,内部同时集成了两个Cortex?-A9 ARM多处理器子系统和可编程逻辑FPGA,同时可编程逻辑可由用户配置。

相关文章
|
20天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
66 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
3月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
43 6
|
3月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
47 5
|
4月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
99 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
102 3
|
4月前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
95 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
4月前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
81 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
4月前
|
弹性计算 运维 自然语言处理
阿里云OS Copilot测评:重塑Linux运维与开发体验的智能革命
阿里云OS Copilot巧妙地将大语言模型的自然语言处理能力与操作系统团队的深厚经验相结合,支持自然语言问答、辅助命令执行等功能,为Linux用户带来了前所未有的智能运维与开发体验。
|
4月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决