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


module save_random (clk,in,out);
parameter size=10;
parameter k=10;
 input clk;
 input [k-1:0] in;
 output [k-1:0]out;
 wire [size:0] cout;
 genvar i;     
generate
for(i=0;i<size;i=i+1)
begin: level1
always@(posedge clk) begin
 random ins(clk,in[i],cout[i+1]);//generte 10 instances from module random to save it //in registers
 end
end
endgenerate
assign cout[0]=in[0];
assign out=cout[k];
endmodule

我有一个任务是编写生成 10 个随机值的合成代码,并将每个值保存在寄存器或 Dflipflop 或类似的东西中。

第一个(save_random)模块,从模块随机(the 2nd one)生成 10 个实例并connected ..,但是当我将 clk 输入与 generate i 一起使用时,它仍然有错误。

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

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

genvar i;     
generate begin
  for(i=0;i<size;i=i+1) begin: level1
    random ins(clk,in[i],cout[i+1]);
  end
end

但是,请注意,in[i]cout[i+1] 不是 8 位值。因此,如果要使用完整的 8 位寄存器,则需要将它们声明为 10(或 11 表示 cout)8 位向量:

input [7:0] in [9:0];
wire [7:0] cout [10:0];

本教程可能会让您更好地了解生成块的工作原理:https://www.youtube.com/watch?v=5CKfP4n9ge0

最新更新