发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[通信技术资料]

拓扑原理下的多片FPGA菊花链的技术讲解与实现

[复制链接]
2345|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lllxxx111 于 2023-3-29 13:13 编辑

#技术资源# #申请原创# #每日话题# #有奖活动# @21小跑堂
                                                       拓扑原理下的多片FPGA菊花链的技术讲解与实现   

1、菊花链布线拓扑菊花链布线拓扑(Clos Network)是一种常用于构建高性能计算机系统的互连网络。
        一个简单的菊花链布线拓扑通常包含三个级别:输入级、交换级和输出级。输入级包含所有输入端口,交换级用于路由数据,输出级包含所有输出端口。交换级中的每个开关通常都有多个输入和多个输出端口,因此它可以在多个输入和输出端口之间路由数据。这种结构可以轻松地扩展到更多级别,以支持更大的系统。
菊花链布线拓扑的一个优点是它可以提供高带宽和低延迟的通信。因为每个处理器或开关都有多个连接,所以可以同时进行多个通信操作。另外,它还具有较好的可扩展性,可以方便地增加处理器或开关的数量以支持更多的计算资源。

图一 布线拓扑

2、多片FPGA用JTAG配置实现

       JTAG(Joint Test Action Group)是一种用于测试和调试集成电路的标准接口,也可以用于配置和编程FPGA芯片。
图二  Xilinx FPGA芯片
       JTAG菊花链是一种常用的FPGA设计技术,它使用JTAG接口将多个FPGA芯片连接在一起,形成一个串行菊花链的结构,这样的话单个JTAG仿真器就可以对多片JTAG逻辑器件进行控制。
  图三 经典JTAG菊花链FPGA连接
       在使用JTAG菊花链时,需要将多个FPGA芯片串联在一起,形成一个链式结构。在菊花链中,第一个FPGA芯片连接到主机(例如PC或嵌入式系统),并且通过JTAG接口向后传递数据和控制信号。其他芯片连接到前面一个芯片的JTAG接口,并且依次串联在一起。
要实现JTAG菊花链,需要在每个FPGA芯片中配置JTAG控制器。 JTAG控制器是一个硬件模块,它可以将JTAG信号转换为内部的数据和控制信号,并将其传递给其他模块。在菊花链中,每个FPGA芯片都有一个JTAG控制器,用于将信号传递到下一个芯片。
在Xilinx芯片中,FPGA级联通常使用FPGA的配置接口完成。
下面是一些基本步骤:
1、将多个FPGA芯片按照菊花链的结构进行连接。这通常需要在每个FPGA芯片上设置特定的引脚,以确保正确的电气连接。
2、在级联菊花链中的每个FPGA芯片上,将配置JTAG端口连接到下一个级联单元的JTAG端口。确保连接正确无误。将最后一个FPGA芯片的配置JTAG端口连接到JTAG编程器或开发板上的JTAG端口。
3、在JTAG编程器或开发板上打开FPGA设计工具,选择级联菊花链中的第一个FPGA芯片作为主控FPGA,并将其FPGA设计文件编译成比特流文件。
4、将编译生成的比特流文件加载到主控FPGA芯片中。该芯片将根据其配置JTAG端口连接到下一个FPGA芯片,依此类推,将比特流文件传递到整个级联菊花链中的所有FPGA芯片。
5、检查级联菊花链中的每个FPGA芯片是否已正确加载比特流文件,并可以正常工作。

FPGA级联菊花链可以用于构建大型、高性能的FPGA系统,以满足需要大量逻辑资源和高速通信的应用程序需求。它也可以被用于构建多处理器系统,其中每个处理器都由一个FPGA芯片实现,并通过FPGA级联实现通信和协同工作。
3、Verilog主控FPGA代码
   以下是一个简单的 Verilog 代码示例和 连接图,用于实现一个具有两个输入和一个输出的简单菊花链,其中第一个FPGA芯片作为主控芯片,控制整个菊花链:


图四 JTAG菊花链

图五 Verilog代码示例
            在这个例子中, "top_module" 是一个顶层模块,它将实例化两个FPGA芯片,第一个芯片作为主控芯片,第二个芯片作为从属芯片,以构建一个菊花链。在 "top_module" 中还定义了一个"shift_data" 寄存器,用于在菊花链中传递数据。
"master" 模块是第一个FPGA芯片,它具有输入端口 "in1" 和 "in2",时钟信号 "clk",复位信号 "rst",输出端口 "out" 和 "shift_data" 端口。 "slave" 模块是第二个FPGA芯片,它的输入端口连接到第一个FPGA芯片的输出端口,输出端口 "out" 和 "shift_data" 端口。
主控FPGA芯片(即"master" 模块)将监视输入信号,并将 "shift_data"寄存器中的数据传输到下一个芯片。从属FPGA芯片(即"slave" 模块)将等待来自主控芯片的输入信号,并将从其输入端口接收到的信号传递到输出端口 "out"。在这个例子中,主控芯片仅仅将"in1" 信号传递到下一个芯片,但是我们可以在主控FPGA芯片的设计中添加更多的逻辑和控制结构,以实现更复杂的功能。实际上,在设计FPGA芯片时,需要考虑更多的因素,如时序和布线,这些因素会影响FPGA的性能和可靠性。同时,为了实现更高级的功能,通常需要使用FPGA设计工具(如Vivado、Quartus等)来编写和编译代码,并生成FPGA芯片的配置文件。另外,还需要考虑如何在多个FPGA芯片之间传递数据等等。代码在下面的附件中。





两个输入和一个输出的简单菊花链.rar

501 Bytes

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2023-03-30
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-3-30 15:53 回复TA
简述菊花链拓扑,并在FPGA实现其过程 

相关帖子

沙发
Ben@hw| | 2023-3-30 19:26 | 只看该作者
多个器件时使用菊花链需要谨慎,要计算一下可能导致加载时间延长的风险,另外注意TCK和TRST等信号的驱动能力风险。

使用特权

评论回复
评论
Ben@hw 2023-4-1 10:55 回复TA
@lllxxx111 :这倒没必要,因为JTAG时钟来自JTAG控制方,例如负责加载的CPU或者外部PC的JTAG卡,这个时钟速度并不快,对抖动等要求不高,244之类驱动器即可,时钟芯片犯不着。 
lllxxx111 2023-3-31 11:04 回复TA
可以给每个器件配置单独的时钟芯片 
板凳
woai32lala| | 2023-3-31 08:52 | 只看该作者
学习

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

71

帖子

4

粉丝