首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

verilog2001中generate的精妙用法

verilog2001中generate的精妙用法

verilog2001中有generate这个语法,近日有用到,简单归纳如下:
语法:
1。genvar后面的for,变量必须是genvar变量;generate+if,不如`ifdef `else `endif;
2。for里必须有begin,哪怕只有一句;
3。begin必须有名称,原因见4;
4。这里例化的模块名称是inst[j].unit;
5。generate语句可以看作是标准化为块的综合指令。

应用实例:
generate可以用for,case,if。其中,generate实例化多个器件很简洁。
案例
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 i;
for(i=0;i<=31;i=i+1)
begin :wiertech
assign mem= 8'b0;
end
endgenerate
endmodule
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表