新浪博客

Verilog2001中generate的用法

2012-09-24 14:25阅读:
Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continous assignment,initial和always。在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。
为此,Verilog-2001还增加了以下关键字:generate,endgenerate,genvar,localparam。genvar为新增数据类型,存储正的integer。在generate语句中使用的index必须定义成genvar类型。localparam与parameter有些类似,不过其不能通过redefinition改变值。除了可以在generate语句中使用if-else,case外,还能使用for语句进行循环。
1)包含case语句的有条件的generate语句
generate
case ()
: begin:

end
: begin:

end
default: begin:

end
endcase
endgenerate
其中:constant_expression为常数表达式;value为case的取值;label为标号。
2)包含if-else语句的有条件的generate语句
generate
if () begin:
;
end else if () begin:
;
end else begin:
;
end
endgenerate
其中:condition为条件表达式;value为case的取值;label为标号
3)例化多个模块的generate语句
genvar ;
generate
for (=0; < ; =+1)
begin:

generate
genvar j ;
for(j=0;j<=INST_NUM;j=j+1) begin : inst
  dff #(PARAMETER) unit(
   .clk   (clk ),
   .ena   (ena ),
   .in    (in ),
   .out (out )
) ;
end
endgenerate
generate还可以进行多个assign赋值!
案例
module anytest_v(
input clk,
input[7:0] datain,
output[7:0] dataout,
output finish
);
wire[7:0] mem[31:0];
wire[32*8-1:0] xxx;
//reg[7:0] i;
generate
genvar j;
for(j=0;j<=31;j=j+1) begin :wiertech
assign mem[j]= 8'b0;
end
endgenerate

endmodule

我的更多文章

下载客户端阅读体验更佳

APP专享