跳转到主要内容

开发者分享 | Alveo加速卡上管理子系统 CMC 介绍

本文转载自:<span id="profileBt"><a href="https://mp.weixin.qq.com/s/cNzFy_kRvvsnKO5_c4XGtg">XILINX开发者社区微信公众号</a>…;

<font color="#FF8000">本文来自 XILINX 高级产品应用工程师, 赛灵思中文论坛经理 Zhendong Wu.</font>

Alveo 加速卡除了有我们 ultrascale+系列的芯片以外,还有 TI 的 MSP432,它的作用就是监控板子的状态,比如电流电压温度等信息。主控端可以通过 FPGA,访问 MPS432,然后获取这些信息。那么怎么样简单的获得这些信息呢,为此我们准备了 CMSIP。

<strong>系统构架</strong>

下面这个图就是整个主控与 FPGA 以及 MPS432 的模块图
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127112-1.p…; alt=""></center>

有几个关键的点简单说一下,

首先图中的红色框可以看到 CMS 和 MSP432 的数据通过 UART 接口。

然后获取的板上的信息都是存储在 BRAM 中(绿色)

Microblaze 是 CMS 的主控模块,控制 UART 接口,以及将获取的数据存储到 BRAM 中。

最后 CMS 本身有 AXI4-Lite 接口可以连接到 XDMA,主控端就可以访问到 BRAM 中的数据了。

<strong>CMS example 设计</strong>

CMS 的 IP 本身不用配置,而且 example 设计可以直接跑。下面介绍下步骤。

1). 首先打开 Vivado,选择 board,这里我用 U50 板卡。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127113-2.p…; alt=""></center>

然后在 IP catalog 里找到 CMS IP,选择 IP,然后不用配置,直接生成。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127114-3.p…; alt=""></center>

2). 在 source 窗口右键这个 IP,然后点击 “openexample design”

Vivado 会打开一个新的例子工程。一般例子工程会根据你选择的板卡,做好所有的管脚约束,所以只需要直接点击 generatebitstream。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127115-4.p…; alt=""></center>

Vivado 会自动给 cms IP 分配一个地址。打开 addresseditor,我们可以看到这个工程里的offset 恰好是 0x00000000,记住这个地址。后面在主机端访问时会用到。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127116-5.p…; alt=""></center>

3). 生成 bit 文件以后,将 U50 板子插在主机 PCIe 槽中,连上 “alveoprogramming cable”,上电,将 bit 文件烧录到 U50 板卡的 FPGA 以后,热启动主机,使其能够再次 scan并发现板卡。如果一切正常,在主机端使用 lspci 命令可以找到板卡。

Lspci-vd 10ee:
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127117-6.p…; alt=""></center>

0xee800000 就是 bar 空间地址,加上刚才 vivado 里看到 cms 的 offset 就可以直接访问cms的 register 空间。

CMS 的 register 空间可以在 PG348 里找到。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127118-7.p…; alt=""></center>

所有的板卡的电压,电流,功耗以及温度等信息都放在REG_MAP空间里,offset 时0x0280000。

所以如果要访问 CMS 的 REG_MAP 里的某一个寄存器的话,

地址= PCIebar 地址 + CMSoffset 地址 + REG_MAPoffset address+ 特定寄存器地址

简单的方法你可以使用 devmem2 直接访问,这样不需要任何驱动。

不过 CMS 的 microblaze 控制器时 resetactive 状况,所以我们先要解复位。

devmeme2 0xee820000 b 0x1

然后举个例子我们要读取下 12V 的平均功耗。
<center><img src="http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127119-8.p…; alt=""></center>

devmem20xee8282DC w

你就可以在终端看到 12V 电压的平均功耗。

用同样的方法你可以访问任何 CMS 的寄存器(首先记得要解复位 microblaze 哟)