我想用一长串变量来表示一个赋值。我怎样才能让它紧凑? 我尝试了生成和网表,但无法弄明白。长度可以是变量,因此必须使用参数。
assign ldistance =
distance(upin[127:120],downin[127:120])
+ .....
+ distance(upin[23:16],downin[23:16])
+ distance(upin[15:8],downin[15:8])
+ distance(upin[7:0],downin[7:0]);
答案 0 :(得分:3)
对于IEEE1364-2001或更新版本:
parameter WIDTH=128;
integer ldistance;
integer lsb;
always @* begin
ldistance = 0;
for(lsb=0; lsb<WIDTH; lsb=lsb+8) begin
ldistance = ldistance + distance( upin[lsb +: 8], downin[lsb +: 8] );
end
end
答案 1 :(得分:2)
在编辑中,'gnoejh'表示他通过以下方式解决了这个问题:
genvar p;
assign ldist[0] = 0;
generate
for (p=1; p < `CHANNELS + 1; p = p + 1) begin
assign ldist[p] = (ldist[p-1] + distance(upin[(8 * (p-1)) +: 8],
downin[(8 * (p-1)) +: 8])>>2);
end
endgenerate
assign ldistance = ldist[`CHANNELS];