前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一问】initial可以被综合吗?

【每周一问】initial可以被综合吗?

作者头像
狂人V
发布2020-12-08 17:07:39
4.5K1
发布2020-12-08 17:07:39
举报
文章被收录于专栏:电子狂人

前言

先说明下这个【每周一问】,并不是我每周都一定会发一个,这个话题下的其他号主也会发,然后每周就会有个一两个问题以及相关解答的文章,所以如果我没发,其他号主也是在发的

如果回答有错误之处,请指出~

说下今天的问题吧,今天在一个技术讨论群里看到有人问“initial可以被综合吗?为什么ise里头还提供了使用initial初始化ram的代码?”

解答

initial这个语法一般使用于仿真所用的激励文件中,只是给寄存器类型的变量赋初值用的,因此理论上是不可以被综合的

那为什么还会有用initial进行ram的初始化的官方代码呢?

先解释下FPGA的运行机制,大部分的FPGA是基于SRAM查找表结构实现,即上电后需要从外部加载配置信息等,所以这就相当于有了一个空隙,然后initial在这种情况下让存储器载入了一个初始化文件,因此这种给存储器赋初值的行为属于一种可综合的行为

以上都是比较教科书式的回答,接下来我们用实际的测试说话吧。

代码语言:javascript
复制
//测试代码 
module dzkr_test( 
    output reg  out 
); 
initial begin  
    out = 1'b1; 
end 
endmodule

直接在vivado里运行这串简单的代码,可以看到,综合和电路的实现都成功通过了。

打开综合后的RTL图,可以看到out实际上是连到了一个高电平,也就是说该种赋值成功了。

然后稍微改一下代码;

代码语言:javascript
复制
module dzkr_test( 
    output reg  [3:0]out, 
    output reg  [3:0]out2 
); 
initial begin  
    out = 4'hf; 
    out2 = 4'h2; 
end 
endmodule

继续综合,并看生成的RTL图:

然后你是不是有点怀疑各种教程的回答了......

其实那些教程文档并没错,只是编译器对这些语法有进行类似预处理的操作(message里面发现的,看下图),使得该语法能够成功映射到实际电路中~

于是最后我得到的结论就是:initial下可综合的语句最终在FPGA中其实是可以被综合的,不过我依然不建议用这种进行赋初值,有些编译器就会出现警告或者直接报错,使用复位赋初值它不香吗?

ASIC的话,网上的言论一致,那就是一定无法综合。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档