verilog 生成块



你需要先理解综合前后程序的变化。综合前,程序是一段纸面上的逻辑语言。但是综合后,程序被构建为一张逻辑电路图,称为网表。
当你写下if等判断逻辑代码时,意思是希望这些“if”逻辑最后会变成电路。
generate if是告诉综合器:除非满足某条件才将以下代码综合为电路。换句话说,如果generate if的条件不满足,那么这段纸面代码会被综合器直接忽略。   两者有本质不同。

来源  http://bbs.elecfans.com/jishu_462684_1_1.html

generate相关的有generate for generate if generate case generate blockgenvar  generate可以理解为静态展开行为。一般用的比较多的是它的generate forgenerate if。这个和普通的forif不一样的地方在于,它描述的是设计单元,而非单纯的组合逻辑电路。而对他的要求在于一定要能在编译时期展开,把行为预先确定下来。而forif可以理解为运行期行为。
举例而言,假设你有一个
parameter ODD_CHKSUM = 1'b1;
generate begin
if (ODD_CHKSUM == 1'b1) begin
  odd_checksum i_checksum(data, o_chksum);
end
else
begin
  eva_checksum i_checksum(data, o_chksum);     //    Pingufocpux 理解:不会被编译器编译,和没有生成块的优势是 节约资源
end
endgenerate

上述两个instance只能实例化一个。在simulation的信号列表里面只会看到一个。而普通的if就不是这样了,两个分支你都看的到。所以在generate block里面可以有:instance 实例化,assign 语句,always 模块注意这些都是模块级别的语句。

来源:

http://www.zybang.com/question/c7637e7a33da09dad8c2e3a2d6616202.html

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值