题解 | #使用generate…for语句简化代码#
使用generate…for语句简化代码
http://www.nowcoder.com/practice/618cb8d16a2c4e87b9e305f6659efe40
目录
generate语句
generate语句是verilog-2001添加的新语法,也被叫做生成语句,包括generate-for(循环生成语句)、generate-case(条件生成语句)和generate-if(条件生成语句)三种语句。
generate语句可以方便地重复实例化模块或者条件性实例化模块,这也是该语句的核心用法,如:
genvar i;
generate
for (i=0; i < 8; i=i+1) begin
myModule insModule (.a(a[i]), .b(b[i]), .c(c[i]));
end
endgenerate
重复赋值问题,如本题,其实使用常规的for循环就可以解决。
代码
`timescale 1ns/1ns
module gen_for_module(
input [7:0] data_in,
output [7:0] data_out
);
genvar i;
generate
for(i = 0 ; i < 8; i = i + 1) begin
assign data_out[i] = data_in[7-i];
end
endgenerate
endmodule
简析
需要注意的是,generate-for语句的循环变量i
必须使用genvar
声明。此外,for
循环的赋值必须使用assgin
或者always
完成,不可以像C/C++那样直接赋值。错误示例如下:
genvar i;
generate
for(i = 0 ; i < 8; i = i + 1) begin
data_out[i] = data_in[7-i]; // 错误示例!!
end
endgenerate
Verilog篇题解 文章被收录于专栏
本人对牛客网verilog篇题目一些理解