天天看点

DS5使用记录

最近使用ds5操作fpga原型验证板子,  记录点使用方法。

1. fpga原型验证型号, 无非就是A家(Altera)和X家(Xilinx)... 我整的板子用的是赛灵思的Virtex UltraScale系列。 最高端的VU440, 查看官网描述, 最多可以支持4000万ASIC门电路的设计和验证。 另外当然还有控制板, 用的是常见的ZYNQ7000系列, 内部集成了一个ARMv7 Cortex-A9 处理器。 可以用作验证环境的控制, 如重启, 烧录bitfile, 交互, 控制等等。

2. 介绍下fpga, Field Programmable Gate Array 即现场可编程的逻辑门阵列。顾名思义, 它是一个可以编程改变的内部门电路连线的芯片, 除了fpga, 其他诸如asic, dsp, cpu啥的各种芯片, 都无法动态改变内部的逻辑门电路。 

3. 我这边也不搞芯片设计, 不写verilog, 反正拿到bitfile, 烧录到fpga上就开始整。 从bootloader到内核, 再到各种功能验证。 基本和arm端整Linux没啥区别。

4. ok, 由于我这边arm端只会烧写下bitfile, 修改下时钟频率。所以fpga这端bootrom能起来后, 就直接接ds5进行操作了。

这里记录下ds5使用过程中遇到的一些问题:

Q: ds5查找不到usb设备? (ds5用usb和客户端主机相连) 

A: ds5 reset按钮按下试试...

Q: ds5连接不到target? 说target不存在或连接线问题?

A: 嗯, 可能是bitfile有问题, 芯片bootrom都没起来... (和澎湃S2一样?)

    我这边换了几个bitfile, 还是连接不上, 后来发现是fpga全局时钟没配置。(GCCLK?)  正确配置时钟频率后bootrom的log就能出来了。

Q: bootrom代码到底在哪里? 

A: 关于bootrom, 我的感觉是bitfile中已经含有了。即最开始的这部分bootrom代码已经固化成了硬件逻辑电路了。即最开始的start.s, BL1的代码, 都经过编译, 汇编 以及其他的一些方式变成bitfile的一部分了。不管怎样, 这部分代码 跟芯片本身逻辑门电路一样, 流片后就无法改变了... 类似三星以前的stepping stone, 利用跳线方式可以支持很多种启动方式, 比如Nand 启动, 可将Nand Flash的前4K, 上电后自动拷贝到特定的sram中。stepping stone这个机制本事其实就是bootrom。也是soc中的特定机制,  流片后无法改变。

Q: ds5连接上后为啥只有一个cpu核心?

A: 前面说了赛灵思VU440系列也就只能支持4000万ASIC门电路的模拟... 现在的soc晶体管数量动则几十亿上百亿的级别。 比如麒麟980采用台积电7nm工艺,内部集成了69亿个晶体管。最新的990集成了103亿个晶体管... 所以千万数量级的fpga片子肯定无法把所有ip设计都放入里面。故基本都是按模块只放需要验证的ip进去。 例如需要验证usb控制器,  那就把cpu, usb控制器, dma, gic一类的必要ip放进去, 即可。包括cpu核心, fpga内部不一定能放下多个核心, 所以有些bitfile就放一个cpu核心是正常的。

Q: ds5如何配置?

A: 创建配置数据库,选择platfrom... autodetect到相应target, 之后就可以创建调试工程, 关联该数据库, 可以attch上板子, 利用jtag控制内存, cpu, 寄存器等。基本和trace32操作类似。具体就不详细贴了,  可参考相关手册。

Q: ds5启动uboot

A: 我都是用ddr boot, 这个简单, 编译uboot, 将uboot镜像加载到指定内存。(如0x2000000) 

pc指向entry point。 (一般是reset异常向量处)  执行即可。

Q: ds5启动linux内核

A: ddrboot简单, 把内核, 设备树加载到内存指定地址, 如果使用initrd作为最终根文件系统, 可将initrd编入内核镜像。

最后利用uboot的boot命令。 如未压缩的Image内核镜像, 利用booti kern_addr fdt_addr boot_args啥的, 

如果是uImage格式, 可利用bootm方式。

================================================================================================

ok... 就先记录这些。

2019.10.11