0
매개 변수화 된 배열 내에서 최대 값을 찾으려고하는데, 나는 이것을 post에서 찾고 forloop-generate를 발견했습니다. 내가하고 싶은 유일한 변화는 매개 변수화 된 배열에 대한 명시 적 배열의 접근 방식을 변경하는 것이지만 genvar
할당 문제가 발생합니다.Verilog, 매개 변수화 된 배열 선언으로 생성/루프
reg [$clog2(LENGTH)-1:0] arr [0:LENGTH-1];
wire [$clog2(LENGTH)-1:0] value_l1[0:LENGTH-2];
wire [$clog2(LENGTH)-1:0] index_l1[0:LENGTH-2];
genvar gen_i, gen_j, gen_k;
generate
for(gen_i = 0; gen_i < LENGTH; gen_i = gen_i + 2) begin : loop1
Compare cmp1(.A(arr[i])
,.B(arr[i+1])
,.indexA(i)
,.indexB(i+1)
,.value(value_l1[i/2])
,.index(index_l1[i/2])
);
end
gen_k = 0;
for(gen_i = 1; gen_i < $clog2(LENGTH); gen_i = gen_i + 1) begin : loop2_1
for(gen_j = 0; gen_j < LENGTH/(2*gen_i); gen_j = gen_j + 2) begin : loop2_2
Compare cmp2(.A(value_l1[gen_k + gen_j])
,.B(value_l1[gen_k + gen_j+1])
,.indexA(index_l1[gen_k + gen_j])
,.indexB(index_l1[gen_k + gen_j+1])
,.value(value_l1[(LENGTH/(2*gen_i))+(gen_j/2)])
,.index(index_l1[(LENGTH/(2*gen_i))+(gen_j/2)])
);
end
//gen_k = gen_j; // <--------- problem here
end
endgenerate
내 접근 방식은 비교 된 요소의 목록을 갖고 그 목록을 비교하여 결과를 같은 목록에 다시 쓰는 것입니다. 예를 들어
original array : 0 1 2 3 4 5 6 7
것
compare array : 1 3 5 7 | 3 7 | 7
^ ^
| |
| largest element
|
gen_k + gen_j
로 결과 다음 출력이 가장 큰 요소로서 7
하지만 I 인덱스를 저장 (비교] 어레이의 두 번째 부분에 대한 오프셋)하는 gen_k = gen_j
할 수 없다. generate
을 매개 변수화 된 배열과 함께 사용할 수 있습니까? 그렇다면이 문제를 어떻게 해결할 수 있습니까?