时间:2024-08-10 来源:网络搜集 关于我们 0
RTL设计、验证完成后,就该上菜FPGA原型验证了。将芯片RTL设计修改映射到FPGA上,没有FPGA工程师的话就得自己上啦。芯片ASIC设计中,不可避免会例化门级单元,比如CRG里:
一方面,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:
所有verilog文件会用到的define定义,可以统一放在include.v里面,include.v里就一句: include.v添加到FPGA工程后,会发现include.v编译不进去,很多模块找不到`define FPGA的定义,造成Error报警。解决办法:set Global include
还有个容易出错的地方,改了代码老发现工具还用的老代码编译,可能是开了如下开关,造成RTL代码被编译到vivado自己的目录下了,所以当我改了新代码后,编译进去的还是它自己目录下的老代码。解决办法就是取消该选项,不要Copy sources into project。感谢阅读文章,如果文章有用,麻烦点个“在看”或转发分享。