如何解决如何在 Verilog 中的 2D Net 中分配一行?
我有一条 2D 线,我试图将其中的一排分配给相同长度的临时线。出于某种原因,在模拟中,临时线不采用这些值。
generate
for(i=16;i<64;i=i+1) begin
assign temp[31:0] = w[i-15];
assign s0 = {temp[6:0],temp[31:7]} ^ {temp[17:0],temp[31:18]} ^ {temp[2:0],temp[31:3]};
assign s1 = {temp[16:0],temp[31:17]} ^ {temp[18:0],temp[31:19]} ^ {temp[9:0],temp[31:10]};
assign out[i] = w[i-16] + s0 + w[i-7] + s1;
end
endgenerate
这里,变量 'temp
' 预计每次都取一行变量 'w
' 的值,但是在模拟过程中,'temp
' 总是有 32 'hzzzzz ... 值。
这是完整的代码
module message_scheduler(chunk_512,out);
input [31:0]chunk_512[15:0];
output [31:0]out[63:0];
wire[31:0]w[63:0];
wire[31:0]temp,s0,s1;
genvar i;
generate
for(i=0;i<16;i=i+1) begin
assign w[i] = chunk_512[i];
end
for(i=16;i<64;i=i+1) begin
assign w[i] = 32'b0;
end
endgenerate
generate
for(i=16;i<64;i=i+1) begin
assign temp[31:0] = w[i-15];
assign s0 = {temp[6:0],temp[31:10]};
assign out[i] = w[i-16] + s0 + w[i-7] + s1;
end
endgenerate
endmodule
有人可以帮我找出我哪里出错了吗?
这些是我用来提供输入的命令
force -freeze {sim:/message_scheduler/chunk_512[1]} {32'b01101111001000000111011101101111}
force -freeze {sim:/message_scheduler/chunk_512[2]} {32'b01110010011011000110010010000000}
force -freeze {sim:/message_scheduler/chunk_512[0]} {32'b01101000011001010110110001101100}
force -freeze {sim:/message_scheduler/chunk_512[3]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[4]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[5]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[6]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[7]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[8]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[9]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[10]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[11]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[12]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[13]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[14]} 32'b00000000000000000000000000000000
force -freeze {sim:/message_scheduler/chunk_512[15]} 32'b00000000000000000000000001011000
解决方法
我在编译您的模块时收到警告:
assign temp[31:0] = chunk_512[i-15];
|
xmelab: *W,BNDMEM : Memory index out of declared bounds.
您声明 chunk_512
有 16 个位置 (0-15),但您试图访问位置 16 及以上。这就是 temp
没有已知值的原因。
比如当for
循环到达i=31时,31-15=16,那么[16]就出界了。
此外,2D 端口要求您在模拟器中启用 SystemVerilog 功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。