Verilog generate 和for的区别

Verilog generate 和for的区别

  • generate for
  • for loop

一直搞不清generate 和for的区别是什么,自己写了个module看看综合后的效果。

generate for

	module top_module( 
	    input [7:0] in,
	    output [7:0] out );//
	
	    // assign out[31:24] = ...;
	    genvar i;
	    generate
	        for(i = 0; i < 4; i = i + 1) begin : bit_reverse
	            assign out = {in,{1'b0}};
	        end
	    endgenerate
endmodule

综合后可以看到只有最低1bit为0,其余位向高位移动一位,相当于out = {in,{1’b0}}复制了多份,但是每次效果是一样的
Verilog generate 和for的区别_第1张图片

for loop

module top_module( 
    input [7:0] in,
    output [7:0] out );//

    // assign out[31:24] = ...;
    reg [7:0] in_reg;
    always@(*) begin:test
    	integer i;
     	in_reg = in;
        for(i = 0; i < 4; i = i + 1) begin : bit_reverse
            in_reg = {in_reg,{1'b0}};
        end
    end
    assign out = in_reg;
endmodule

综合后可以看到只有最低4bit变为0,高4bit移动了4次,相当于in_reg = {in_reg,{1’b0}}重复执行了4次。
Verilog generate 和for的区别_第2张图片

你可能感兴趣的:(IC,verilog)