目录

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