你需要先理解“综合”前后程序的变化。综合前,程序是一段纸面上的逻辑语言。但是综合后,程序被构建为一张逻辑电路图,称为网表。
当你写下if等判断逻辑代码时,意思是希望这些“if”逻辑最后会变成电路。
而generate if是告诉综合器:除非满足某条件才将以下代码综合为电路。换句话说,如果generate if的条件不满足,那么这段纸面代码会被综合器直接忽略。 两者有本质不同。
来源 http://bbs.elecfans.com/jishu_462684_1_1.html
generate相关的有generate for, generate if, generate case, generate block,genvar。 generate可以理解为静态展开行为。一般用的比较多的是它的generate for和generate if。这个和普通的for和if不一样的地方在于,它描述的是设计单元,而非单纯的组合逻辑电路。而对他的要求在于一定要能在编译时期展开,把行为预先确定下来。而for和if可以理解为运行期行为。
举例而言,假设你有一个
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