我正在为累积直方图方法开发一个verilog代码,用于中值滤波器。它使用嵌套for循环,第二个for循环的输入依赖于first for循环的输出。问题在于此处。第二个for循环不接受该输入。请帮忙。 代码是
module median(a, b,k,n,h);
input [4:0] a;
output [255:0] b;
output k,n,h;
reg [255:0] b;
reg [255:0]k,n,h;
always @(a) begin
for (n=0;n < 256;n=n+1)
b[n]=0;
for (n=0;n<=4;n=n+1) begin
b[a[n]]=b[a[n]]+1;
h=a[n]+1;
for ( k = h;k <=255;k = k+1) begin
b[k]=b[k]+1;
end
end
for (n=0;n<=255 ;n=n+1) begin
if(b[n]==3)begin
$display ("the median is %d",n);
end
end
end
endmodule
答案 0 :(得分:1)
只看这段代码:
for (n=0;n<=4;n=n+1) begin
b[a[n]]=b[a[n]]+1;
n是256位,但是这个循环只从0到4 这将从a(5位)中选择一个值,因此我们选择a的第0位到第4位。
a的每个选择都是1位,包含0或1,因此我们在for循环的每次迭代中选择并递增b [0]或b [1]。
然而b也是256位,因此b [0]和b [1]也是1位值,当递增时它们将在1和0之间切换。
我猜测上述行为并非意图,而您实际上想要使用向量:
reg [255:0] b [0:4) ;
b以上有5个可选位置,每个位置保持256位整数。这意味着b [0]将是256位整数,而不是当前示例的1位整数。