硬件语言中的并发系统建模与FPGA实现
1. 并发交通灯系统主模块建模
在硬件语言建模并发系统时,以交通灯系统为例,主模块会将各个组件连接起来。以下是分解后的交通灯系统主模块的Verilog代码:
module traffic_lights_simple_dec
(GC ,YC ,RC ,GP ,RP ,req
,clk , reset );
output GC ,YC ,RC ,GP ,RP;
input req;
input clk , reset ;
wire z [1:5];
S1 SMC1 (GC ,YC ,RC ,z[1] ,z[3] , req ,z[2] , clk , reset );
S2 SMC2 (GP ,z[2] ,z[5] , req ,z[1] ,z[3] ,z[4] , clk ,
reset );
S3 SMC3 (RP ,z[4] , req ,z[2] ,z[5] , clk , reset );
endmodule
此代码展示了如何在Verilog中描述分解后的交通灯系统主模块,通过模块实例化将不同组件连接,以实现整个系统的功能。
2. 可编程设备简介
可编程设备的发展历程悠久,其起源可追溯到20世纪40年代末。当时,第一只晶体管以点接触式锗器件的形式被原型化,这一发明为后续逻辑器件的发展奠定了基础。
2.1 早期数字电路发展
- 晶体管 - 晶体管逻辑(TTL)设备 :20世纪50年代,第一批数字门和电路——TTL设备得以发展。这些设备最多包含十六个输入/输出引脚,每个引脚执行简单的数字功能。例如,7400设备包含四个2输入与非门,7404包含六个非反相器。
- 专用集成电路(ASIC) :TTL电路是最早被称为ASIC的设备。这类设备的逻辑功能固定且不可更改,最初包含专用逻辑值,无法重新配置。如今,ASIC通常指由单一公司开发、设计用于特定性能的电路。
2.2 可编程逻辑设备(PLD)
20世纪70年代,可编程逻辑设备(PLD)被引入。PLD由固定的与(或)函数阵列驱动可编程的或(与)函数阵列构成。最初用于实现简单的组合逻辑,后来增加了寄存器和三态输出。
PLD主要分为以下三类:
| 类型 | 特点 |
| ---- | ---- |
| 可编程只读存储器(PROM) | - |
| 可编程逻辑阵列(PLA) | - |
| 可编程阵列逻辑(PAL) | - |
它们的主要区别在于结构(固定/可编程的与/或门阵列)、速度和可配置性。
2.3 复杂可编程逻辑设备(CPLD)
20世纪80年代初,出现了CPLD。典型的CPLD由小的PLD块(也称为简单可编程逻辑设备,SPLD)通过互连阵列连接而成。不同厂商的CPLD制造技术有所不同,但核心思想一致,即所有可编程宏单元(和SPLD)共享公共互连阵列。
宏单元通常包含与 - 或矩阵,还包括可编程触发器和逻辑元件(如多路复用器、异或门)。由于宏单元围绕互连阵列,因此具有完全可配置性,但对于大型复杂功能,可能需要进行分解。
2.4 现场可编程门阵列(FPGA)
20世纪80年代中期,FPGA被引入。典型的FPGA由可编程逻辑块矩阵组成,其结构(逻辑块被可编程互连“海洋”包围)、高性能和高度可配置性(甚至具有部分重新配置的可能性)使其在生活的各个方面得到应用,如医学、密码学、航空航天工程、图像处理、可重构计算、测量以及并发控制系统等。
3. 现场可编程门阵列(FPGA)结构
3.1 FPGA总体结构
FPGA的主要核心是可配置逻辑块(CLB)矩阵,CLB按行和列排列,通过可编程互连连接。此外,设备中还包含额外的存储块——块RAM(BRAM),与外界的通信通过输入/输出(I/O)块实现。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(Block RAMs):::process --> B(CLBs):::process
C(CLBs):::process --> B
D(CLBs):::process --> B
E(CLBs):::process --> B
F(CLBs):::process --> B
G(I/O Blocks):::process --> B
3.2 BRAM和I/O块
- BRAM :也称为专用存储块,是FPGA中的一部分存储元素。其主要优点是可配置性和大小,例如,Virtex - 5 FPGA中的BRAM能够存储多达36K位的数据。每个存储块可独立配置,通常位于列中,可从组合逻辑(CLB)相对快速地访问,无需额外延迟。需要注意的是,Xilinx的块RAM是同步的,因此需要提供时钟信号。
- I/O块 :确保FPGA与原型系统其他元素之间的连接,其重要作用是保证适当的电源供应标准。I/O块组织成银行,每个银行可独立配置,因此可根据标准或电压需求使用不同的I/O标准。
3.3 CLB结构演变
- 早期CLB :早期的CLB包含一个简单的多路复用器、一个触发器和一个3输入查找表(LUT)。LUT能够执行最多三个输入和一个输出的任何组合逻辑功能,每个LUT与存储元素(触发器)和多路复用器连接,可实现顺序逻辑。
- 4输入LUT的CLB :后来引入了4输入LUT,为Xilinx的Spartan - 3E或Virtex - II Pro等系列提供了基础。此时,CLB结构发生变化,每个块被分为四个互连的元素,称为切片,切片成对分组,按列组织,具有独立的进位链。
- Virtex - 5 FPGA的CLB :从5系列FPGA开始,每个CLB被分为两个切片,一个位于底部,另一个位于顶部,两个切片连接到公共可编程互连矩阵。切片按行和列组织,每个切片的位置由“X”和“Y”坐标表示。
Virtex - 5 FPGA的典型切片结构包含:
- 四个6输入查找表
- 四个存储元素(配置为D型触发器或锁存器)
- 多路复用器
- 进位和算术逻辑
其中,有两种类型的切片:典型的SliceL和支持额外功能(如存储数据作为分布式随机存取存储器或移位寄存器)的SliceM。每个LUT有六个独立输入和两个独立输出,输出性能取决于实现的逻辑功能类型。
4. FPGA中并发控制系统的实现
4.1 实现流程概述
在FPGA中实现并发控制系统,通常基于硬件语言对系统的描述,经过逻辑综合、逻辑实现和位流生成等步骤,最终对FPGA进行物理配置。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(系统描述):::process --> B(逻辑综合):::process
B --> C(逻辑实现):::process
C --> D(位流生成):::process
D --> E(FPGA配置):::process
4.2 逻辑综合
逻辑综合是将控制器转换为特定网表文件的过程,即将设计转换为门级表示。生成的网表可以有多种格式,这里使用原生通用电路(NGC)格式。并且,原型系统的特定模块可以单独合成,生成独立的NGC文件,这一特性在并发控制系统的部分重新配置中会被用到。综合过程还可以估算实现系统(或特定模块)所需的硬件资源,以目标FPGA中使用的切片LUT和切片触发器表示。
4.3 逻辑实现
逻辑实现包括三个主要子阶段:
1.
转换(Translate)
:合并综合过程中获得的所有网表,以目标设备的原语形式生成系统的逻辑描述。此时需要提供约束数据,这些数据包含特定输入/输出信号的放置、I/O标准和电压的定义、时钟信号的时序等信息,通常在用户约束文件(UCF)中指定。
2.
映射(Map)
:将原型系统分布到目标FPGA上。
3.
布局和布线(Place and Route)
:进行设计的布局和布线,并验证时序约束,以满足用户的期望。
4.4 位流生成
位流生成会产生用于配置目标设备的数据部分。在传统原型设计步骤(无部分重新配置)中,该文件包含FPGA的完整描述。典型的位流文件大小超过一百万位,例如,XC5VLX50(Virtex - 5系列,ML501评估和开发平台的一部分)需要1,569,676位来配置设备。每次设计师准备新的并发控制系统版本时,都需要将这些数据发送到FPGA。不过,有一种技术可以减小配置文件的大小,甚至可以在不影响FPGA其余部分的情况下更换设备的一部分。
5. 并发控制器的部分重新配置
5.1 部分重新配置概念概述
部分重新配置是指在不影响FPGA其他部分的情况下,对并发控制系统的一部分进行重新配置。这一技术可以减小配置文件的大小,提高系统的灵活性和可维护性。
5.2 两种部分重新配置流程
提出了两种新的并发控制系统原型设计流程:
-
静态部分重新配置
:在系统运行前进行部分重新配置。
-
动态部分重新配置
:在系统运行过程中进行部分重新配置。
这两种技术都通过解释Petri网指定的系统示例进行说明。通过部分重新配置,可以在不重新配置整个FPGA的情况下,更新系统的部分功能,从而提高系统的效率和灵活性。
5.3 静态部分重新配置流程
静态部分重新配置是在系统运行前进行的,以下是其具体的操作步骤:
1.
系统分析与模块划分
:对并发控制系统进行详细分析,确定需要进行部分重新配置的模块。这些模块应该具有相对独立的功能,以便在不影响其他部分的情况下进行修改。
2.
独立模块综合
:将需要重新配置的模块单独进行逻辑综合,生成独立的网表文件(如NGC格式)。这样可以确保在重新配置时只更新这些模块的配置信息。
3.
生成部分配置文件
:根据独立模块的网表文件,生成部分配置文件。这些文件只包含需要重新配置的模块的信息,从而减小了配置文件的大小。
4.
系统配置
:在系统启动前,将部分配置文件加载到FPGA中,完成部分重新配置。
5.4 动态部分重新配置流程
动态部分重新配置是在系统运行过程中进行的,其操作步骤如下:
1.
实时监测与需求判断
:在系统运行过程中,实时监测系统的状态和需求。当满足部分重新配置的条件时,触发重新配置操作。
2.
暂停系统部分功能
:为了确保重新配置的安全性,需要暂停与重新配置模块相关的部分系统功能。
3.
加载部分配置文件
:将预先生成的部分配置文件加载到FPGA中,更新相应模块的配置。
4.
恢复系统功能
:重新配置完成后,恢复之前暂停的系统功能,使系统继续正常运行。
5.5 部分重新配置的优势与应用场景
部分重新配置技术具有以下优势:
| 优势 | 说明 |
| ---- | ---- |
| 减小配置文件大小 | 只更新需要修改的部分,减少了数据传输量和配置时间。 |
| 提高系统灵活性 | 可以在不重新配置整个FPGA的情况下,快速更新系统的部分功能。 |
| 增强系统可维护性 | 便于对系统进行局部修改和升级,降低了维护成本。 |
部分重新配置技术适用于以下应用场景:
-
实时系统
:在实时系统中,需要根据不同的任务需求快速调整系统的功能。部分重新配置可以在不影响系统实时性的情况下,实现功能的动态调整。
-
可重构计算
:可重构计算系统需要根据不同的计算任务重新配置硬件资源。部分重新配置可以提高资源的利用率,降低能耗。
-
系统升级与维护
:在系统的生命周期内,可能需要对部分功能进行升级或修复。部分重新配置可以在不中断系统运行的情况下,实现系统的局部更新。
6. 总结与展望
6.1 技术总结
本文介绍了硬件语言中并发系统的建模以及在FPGA中的实现,包括可编程设备的发展历程、FPGA的结构、并发控制系统的实现流程和部分重新配置技术。具体内容如下:
-
可编程设备
:从早期的ASIC到PLD、CPLD和FPGA,可编程设备的功能和可配置性不断提高。
-
FPGA结构
:FPGA由CLB、BRAM和I/O块组成,其高度可配置性使其在多个领域得到广泛应用。
-
并发控制系统实现
:通过逻辑综合、逻辑实现和位流生成等步骤,将并发控制系统在FPGA中实现。
-
部分重新配置
:静态和动态部分重新配置技术可以减小配置文件大小,提高系统的灵活性和可维护性。
6.2 未来展望
随着科技的不断发展,并发控制系统和FPGA技术将面临更多的挑战和机遇。未来的发展方向可能包括:
-
更高的集成度和性能
:FPGA将朝着更高的集成度和性能发展,以满足更复杂的应用需求。
-
智能化配置
:实现智能化的部分重新配置,根据系统的实时状态自动调整配置,提高系统的自适应能力。
-
跨领域应用拓展
:将并发控制系统和FPGA技术应用到更多的领域,如人工智能、物联网等,推动这些领域的发展。
总之,并发控制系统在FPGA中的实现和部分重新配置技术具有广阔的应用前景,将为未来的科技发展带来更多的可能性。
超级会员免费看
53

被折叠的 条评论
为什么被折叠?



