本文转载自:XILINX开发者社区微信公众号
本文来自 XILINX 高级产品应用工程师, 赛灵思中文论坛经理 Zhendong Wu.
Alveo 加速卡除了有我们 ultrascale+系列的芯片以外,还有 TI 的 MSP432,它的作用就是监控板子的状态,比如电流电压温度等信息。主控端可以通过 FPGA,访问 MPS432,然后获取这些信息。那么怎么样简单的获得这些信息呢,为此我们准备了 CMSIP。
系统构架
下面这个图就是整个主控与 FPGA 以及 MPS432 的模块图
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127112-1.png)
有几个关键的点简单说一下,
首先图中的红色框可以看到 CMS 和 MSP432 的数据通过 UART 接口。
然后获取的板上的信息都是存储在 BRAM 中(绿色)
Microblaze 是 CMS 的主控模块,控制 UART 接口,以及将获取的数据存储到 BRAM 中。
最后 CMS 本身有 AXI4-Lite 接口可以连接到 XDMA,主控端就可以访问到 BRAM 中的数据了。
CMS example 设计
CMS 的 IP 本身不用配置,而且 example 设计可以直接跑。下面介绍下步骤。
1). 首先打开 Vivado,选择 board,这里我用 U50 板卡。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127113-2.png)
然后在 IP catalog 里找到 CMS IP,选择 IP,然后不用配置,直接生成。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127114-3.png)
2). 在 source 窗口右键这个 IP,然后点击 “openexample design”
Vivado 会打开一个新的例子工程。一般例子工程会根据你选择的板卡,做好所有的管脚约束,所以只需要直接点击 generatebitstream。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127115-4.png)
Vivado 会自动给 cms IP 分配一个地址。打开 addresseditor,我们可以看到这个工程里的offset 恰好是 0x00000000,记住这个地址。后面在主机端访问时会用到。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127116-5.png)
3). 生成 bit 文件以后,将 U50 板子插在主机 PCIe 槽中,连上 “alveoprogramming cable”,上电,将 bit 文件烧录到 U50 板卡的 FPGA 以后,热启动主机,使其能够再次 scan并发现板卡。如果一切正常,在主机端使用 lspci 命令可以找到板卡。
Lspci-vd 10ee:
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127117-6.png)
0xee800000 就是 bar 空间地址,加上刚才 vivado 里看到 cms 的 offset 就可以直接访问cms的 register 空间。
CMS 的 register 空间可以在 PG348 里找到。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127118-7.png)
所有的板卡的电压,电流,功耗以及温度等信息都放在REG_MAP空间里,offset 时0x0280000。
所以如果要访问 CMS 的 REG_MAP 里的某一个寄存器的话,
地址= PCIebar 地址 + CMSoffset 地址 + REG_MAPoffset address+ 特定寄存器地址
简单的方法你可以使用 devmem2 直接访问,这样不需要任何驱动。
不过 CMS 的 microblaze 控制器时 resetactive 状况,所以我们先要解复位。
devmeme2 0xee820000 b 0x1
然后举个例子我们要读取下 12V 的平均功耗。
![](http://xilinx.eetrend.com/files/2021-03/wen_zhang_/100063327-127119-8.png)
devmem20xee8282DC w
你就可以在终端看到 12V 电压的平均功耗。
用同样的方法你可以访问任何 CMS 的寄存器(首先记得要解复位 microblaze 哟)