2017-03-15 75 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