verilog 生成块

来源:互联网 发布:淘宝售后客服工作规范 编辑:程序博客网 时间:2024/06/07 05:01


你需要先理解综合前后程序的变化。综合前,程序是一段纸面上的逻辑语言。但是综合后,程序被构建为一张逻辑电路图,称为网表。
当你写下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

0 0
原创粉丝点击