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)
这个必须是可以综合的。必须有一个更干净/更好的方法,不是吗?
如果您使用 SystemVerilog,您可以将整个always
块替换为
assign out_bus = bus.or();
Run Code Online (Sandbox Code Playgroud)