2017-03-15 89 views
2

我想要OR參數化的32位總線數,如下所示: out_bus = bus1 | bus2 |公共汽車3 | ... | bus N;陣列元素的Verilog OR

我還要聲明總線作爲陣列(N爲一個固定的參數,在編譯時定義):

REG [31:0]總線[N-1:0];

我可以計算如何做到這一點是這樣的最好的:

parameter N; 
reg [N-1:0] temp; 
reg [31:0] out_bus; 
reg [31:0] bus[N-1:0]; 

always @(*) begin  
    for (j=0; j<32; j=j+1) begin : bits 
    for (k=0; k < N; k=k+1) begin : bus 
     temp = bus[k][j]; 
    end 
    out_bus[j] = |temp; 
    end 
end 

這就需要綜合的是。有一個更清潔/更好的方法,不是嗎?

回答

1

這將使用一個較少for環和一個較少的臨時信號:

reg [31:0] out_bus; 
reg [31:0] bus[N-1:0]; 
integer k; 

always @(*) begin  
    out_bus = {32{1'b0}}; 
    for (k=0; k < N; k=k+1) begin 
     out_bus = out_bus | bus[k]; 
    end 
end 
4

如果您正在使用SystemVerilog的,你可以用

assign out_bus = bus.or(); 
+0

更換整個always塊我使用系統的Verilog,所以我認爲它不會比這更好。 – mangoMan