这是生成和分配的错误用法。
产生不应该使用的是宽松的Verilog和它们的使用应该是这样延伸的模块参数化一些特别的东西等
如果可以静态地展开(根据您的使用情况在这里),然后循环纯本来可以使用的。生成通常用于参数化模块实例;
assign
应该是每根导线一次,并不断驱动右侧表达到该导线上。
您的代码看起来你只是想或disp
总线,这可以用一个或还原操作来实现:
wire bus;
assign bus = |disp ;
UPDATE1
DISP实际上是定义为一个存储和我们并不试图计算一个单一位或减少。这里可以使用for循环来计算OR。
logic [3:0] data [5:0];
logic [3:0] or_data;
integer i;
always @* begin
or_data = 4'b0;
for(i=0; i<6; i=i+1) begin
or_data = or_data | data[i] ;
end
end
简单的模拟:
logic [3:0] data [5:0];
logic [3:0] or_data;
integer i;
initial begin
for(i=0; i<6; i=i+1) begin
data[i] = i*2;
end
#1ns;
for(i=0; i<6; i=i+1) begin
$displayb(data[i]);
end
or_data = 4'b0;
for(i=0; i<6; i=i+1) begin
or_data = or_data | data[i] ;
end
#1ns;
$displayb(or_data);
end