数组元素的 Verilog OR

man*_*Man 4 arrays for-loop verilog system-verilog

我想按如下方式对参数化的 32 位总线进行“或”运算:out_bus = bus1 | 巴士2 | 巴士 3 | ... | 总线N;

我还想将总线声明为数组(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
Run Code Online (Sandbox Code Playgroud)

这个必须是可以综合的。必须有一个更干净/更好的方法,不是吗?

dav*_*_59 5

如果您使用 SystemVerilog,您可以将整个always块替换为

assign out_bus = bus.or();
Run Code Online (Sandbox Code Playgroud)