RTL设计、验证完成后,就该上菜FPGA原型验证了。将芯片RTL设计修改映射到FPGA上,没有FPGA工程师的话就得自己上啦。芯片ASIC设计中,不可避免会例化门级单元,比如CRG里:
![FPGA原型验证-时钟门控的替换-fpga输出时钟用什么管脚 FPGA原型验证-时钟门控的替换-fpga输出时钟用什么管脚](https://ebaina.oss-cn-hangzhou.aliyuncs.com/wechat-official-crawl/2022-01/164333161233878.jpg)
一方面,ASIC设计里面可能存在很多个异步、同步/分频时钟,但FPGA可以将多个同步/分频时钟简单连接在一起用同一个时钟,甚至降频到10MHz进行仿真,因为我们只需要在FPGA上完成function功能验证。带Power domain(power gating cell/level shifter/isolation)的低功耗设计FPGA是无法模拟的,即低功耗设计是FPGA无法验证的,更何况ASIC芯片的时钟树和FPGA的时钟、复位是有质的不同的,因此,FPGA上完成function功能验证即可。
一方面,ASIC设计必然有大量门控时钟单元器件,当芯片RTL设计修改映射到FPGA上后,FPGA编译器肯定是不识别Foundry的STD Cell的,我们甚至可以直接assign clk_g = clk && en; (尽管存在毛刺风险),使用Synplify Premier综合时把下面选项勾上,类似于assign clk_g = clk && en的语句,工具会自动转为门控时钟,clk驱动信号,en变成CE这样的使能信号,功能不变。对大部分时钟门控信号而言,FPGA验证时直接忽略掉门控,用assign clk_g = clk,时钟变成直通;当然也可以使用BUFGCE来严格实现FPGA的门控时钟,但是费时费力,不见收益。
另外,我们设计RTL时候,需要考虑到如何映射到FPGA上面,因此通常我们会用到以下的`ifdef:
![FPGA原型验证-时钟门控的替换-fpga输出时钟用什么管脚3 FPGA原型验证-时钟门控的替换-fpga输出时钟用什么管脚3](https://ebaina.oss-cn-hangzhou.aliyuncs.com/wechat-official-crawl/2022-01/164333161387424.jpg)
解决办法:set Global include
感谢阅读文章,如果文章有用,麻烦点个“在看”或转发分享。
转载:全栈芯片工程师