2014-11-21 30 views
0
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 
[email protected](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 

我刚开始学习VERILOG
VERILOG产生从另一个模块实例中总是@(posedge时钟)

我有一个任务写入生成10个随机值,并保存每个合成代码寄存器中的值或Dflipflop或者像这样。

第一(save_random)模块,其生成从模块随机(the 2nd one)connected ..但仍有10个实例具有错误时我使用CLK输入与生成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; 

[email protected](posedge clk) 


begin 
    cout<=d; 
    end 
    endmodule 

回答

1

不能实例化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位寄存器,你需要声明他们是(为cout或11)10 8位向量:

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

本教程可能会给你一个更好的主意是如何产生块工作:https://www.youtube.com/watch?v=5CKfP4n9ge0

相关问题