2014-11-21 31 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

相關問題