verilog在always@(posedge clk)中从另一个模块生成实例

verilog在always@(posedge clk)中从另一个模块生成实例,verilog,Verilog,不能在始终块内实例化模块。由于您有一个模块random,它是一个大小为size的寄存器,如果需要多个模块,您只需在generate中实例化该模块: module random(clk,d,cout); parameter size=8; input [size-1:0] d; input clk; output [size-1:0]cout; reg [size-1:0]cout; integer i; always@(posedge clk) begin

不能在
始终
块内实例化模块。由于您有一个模块
random
,它是一个大小为
size
的寄存器,如果需要多个模块,您只需在generate中实例化该模块:

module random(clk,d,cout);

 parameter size=8;
 input [size-1:0] d;    
 input clk;

output  [size-1:0]cout;
reg  [size-1:0]cout;
    integer i;

always@(posedge clk)


begin
     cout<=d;
   end 
   endmodule
本教程可能会让您更好地了解“生成块”的工作原理:

module random(clk,d,cout);

 parameter size=8;
 input [size-1:0] d;    
 input clk;

output  [size-1:0]cout;
reg  [size-1:0]cout;
    integer i;

always@(posedge clk)


begin
     cout<=d;
   end 
   endmodule
genvar i;     
generate begin
  for(i=0;i<size;i=i+1) begin: level1
    random ins(clk,in[i],cout[i+1]);
  end
end
input [7:0] in [9:0];
wire [7:0] cout [10:0];