FPGA原型验证-时钟门控的替换

david 2022-01-28 09:00:16 2567

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。

感谢阅读文章,如果文章有用,麻烦点个“在看”或转发分享。

转载:全栈芯片工程师

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
david
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
david
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区