1. 前言
最近公司买了两个FPGA原型验证平台:S2C和HAPS,这两个平台均使用Xilinx VU440,在转为FPGA的代码上有一定的区别,但基本思路基本相同,本文介绍一下ASIC RTL转为FPGA版本的注意点。
2. ASIC设计转为FGPA设计
2.1 ASIC设计转为FPGA设计的准备
在ASIC代码转为FPGA代码前,主要有如下的设计必须被替换或重新编辑。
- AISC的门控时钟和时钟资源在FPGA中不适用。
- ASIC的memories
- Latches和异步延时
- ASIC的模拟模块
- IO端口
将ASIC设计转移到FPGA的一般准则
- ASIC结构不容易转换为FPGA结构
- latch
- AISC的memory
- 门控时钟
- 复杂的生成时钟
- 时钟多路复用器
- 顶层的IO pad
- 模拟模块需要连接到外部电路
- BIST
- 避免latch
- 避免组合逻辑环
- 为了确保ASIC RTL可移植到FPGA,不要在原始RTL中包含诸如时钟选通、测试插入和低功耗等优化。相反,将优化留给Soc工具,并尽可能保持RTL的纯净
- 使用’define和’ifdef包括或删除原型设计的代码。使用这些结构来隔离BIST、内存实例化等
- 在SOC和FPGA间分享make files
- 使用Wrappers来更改以避免ASIC RTL改变带来的影响,尽量替换文件而不是更改文件
2.2 分割设计
ASIC设计比FPGA设计要大得多,通常在多个FPGA上划分为多个分区。专设一章介绍。
2.3 处理IO PAD
更改顶层,让工具自己推断。
2.4 转换ASIC的Memories
ASIC存储器通常比通常在FPGA中实现的FPGA存储器要大得多、复杂得多。
- 根据设计需求转化FPGA的BRAM
- 运行逻辑综合:软件自动从RTL中推断RAMs
- 检查结果
- 是否超出了容量
- 查看log文件是否推断正确
转化ASIC Memory的几个方法
- 去掉原型验证不需要的ASIC存储器,以减少空间
- 尽可能用等效的FPGA模型替换ASIC存储器
- 用HDL code实例化存储器,软件可以推断出来。使用不同的Wrappers,一个是ASIC,另一个是FPGA
- 将测试和电源引脚忽视掉或者写为常数
- 在使用前,充分测试FPGA存储器的行为级模型
容量大的Memory的设计方法
- 尽可能映射大的存储器到FPGA中
- 如果复杂的存储器太大了不能放进FPGA中,使用DDR3、DDR4
- 创建两个RTL Wrapper,一个是FPGA原型,另一个ASIC。
2.5 转换AISC的时钟
ASIC时钟通常相当复杂,有许多时钟是平衡的,使用时钟树合成来避免时钟偏移。FPGA具有由软件编程的有限数量的低偏斜全局时钟BUFG,并且具有异步时钟域或为低功耗而选通的域。ASIC的时钟必须转换为适应FPGA架构的方式。
ASIC时钟转化的设计方法
- 简化时钟网络
- 避免时钟路径上的扫描和测试逻辑;
- 有必要保留mux的复用逻辑,使用BUFGMUX原语替换。
- 用MMCM资源替换ASIC的PLL
- 同步设计复位和MMCM lock信号
- 不同MMCM的锁定时间不能保证同时发生。建议轮询设计中所有MMCM的锁定信号以及锁定信号,然后使用此结果为整个设计创建延迟上电主复位
- 建议使用单独的复位来控制MMCM。此复位必须与上面讨论的主复位不同,用于将时钟复位电路与设计复位分离
2.6 检查资源使用
- 运行综合
- 第一次评估,运行快速综合策略
- 对于优化设计,用正常综合策略
- 检查资源使用量,IO、LUT、FF、Memory、Clock
- 如果使用量超过,使用register resources替换来实现memories
3. 总结
本文主要介绍了ASIC转为FPGA原型验证版本中需要更改的项目(IO、时钟资源、memory)的修改方法以及设计和验证的一般方法,经过验证此方法可以快速将ASIC版本转为FPGA原型验证的版本。
4. 参考资料
- 《protocompiler_user_guide.pdf》
- 你要的FPGA&数字前端笔面试题来了