微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 新手求解verilog 中的生成块语句 的意思

新手求解verilog 中的生成块语句 的意思

时间:10-02 整理:3721RD 点击:
verilog 中的 generate for 语句好理解,但是 generate if 和 generate case 语句怎么理解?

首先你要明白,你写的逻辑代码,会被生成电路,如果用if else,就会生成一个判断选择的电路,而用generate,则只会生成你想要的电路,同样的资源,哪个消耗更少呢?
generate的判断值,按照很多公司的代码规范,一定要是常量或者是参数! 别问为什么,等你用熟了verilog,自然就会明白其利弊。
你可以把generate想象成C语言的编译前预处理语句,比如if def endif这种,只有define了,这段话才会被编译。

在线求解,谢谢

你别把 generate和for、if、case等联合起来,generate就是个独立的生成语句。
比如
generate
assign a = b ? c : d;
endgenerate
综合出来会是一个mux多选器。
但是,你可以根据各种条件来选择生成电路,比如我想通过某参数来确定要生成某种电路。
parameter MOD = "ADD";
generate
if(MOD == "ADD")
   assign a = b + c;
else
   assign a = b - c ;
endgenerate
这条generate语句就根据参数MOD的值来选择是生成加法器还是减法器,完成b和c的运算,再赋给a。
我想case在里面的用法你也清楚了。

您好,因为我是初学,所以不知道 生成语句是什么意思,请问您这第一个例子 中的generate 语句 和module 模块有什么不同吗?或者和task 任务有什么不同吗?
第二个例子 中是根据参数MOD的值来选择是生成加法器还是减法器,这个能具体的说下吗?和没用generate 直接用if 语句 有什么区别吗?(其实还是 对生成语句的意思不明白)

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

听了2位的答疑,我有点了解了,只是想不通,如果要用 generate if 来 判断 是否生成电路的话,那么判断依据应该是 常量吧,也就是说 判断依据适合 输入信号 没有关系的,那么 这样的话 不能直接 判断下吗?干吗还要用这个 语句呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top