크기값을 비교하여 위치값과 크기값이 묶인 데이터를 출력하는 verilog RTL 코드를 짜려고 합니다.

위치값이 연속되면 연속되는 위치값들 중에 크기값이 제일 큰 위치값과 크기값을 반환하는 알고리즘입니다.

위의 그림처럼 위치 1과 2가 연속되면 크기값 10과 8을 비교해 10에 해당하는 위치 1과 크기 10을 반환하고 다음에는 똑같이 7,8,9로 연속된 위치값들중에서 위치 9와 크기 32를 반환합니다. 연속되지않으면 위치값 4와 크기값 15를 반환하고요.


처음에 매틀랩에서 알고리즘을 짤 때 저 위치값과 크기값을 각각 id라는 배열과 mag라는 1차원 배열에 집어넣고,
id[i+1] - id[i] <= 1 이면 mag[i+1]과 mag[i]를 비교하여 큰 mag값과 거기에 해당하는 위치값을 id_sort와 mag_sort라는 다른배열에 입력하는 식으로 해결을 했었습니다.
그런데  RTL설계에서는 이 알고리즘을 fixed point로 바꾸면서 저 값들을 메모리에 미리 써놓지 않고 해결을 해야합니다.

iSTART 신호가 들어오면 매 클럭마다 위치값과 크기값이 하나씩 들어오게 됩니다.

한클럭에 위치값과 크기값들이 출력되면 이것들을 레지스터에 저장해두고 다음클럭에 들어온 위치값이 레지스터의 위치값과 연속되면 크기값을 비교하고 큰 크기값을 레지스터에 다시 저장하고 다음 클럭에서 위치값이 연속되지 않으면 레지스터의 값을 출력으로 보내려고 했습니다.
그런데 이렇게 하게 되면 마지막 위치값 9일때 다음 위치값이 들어오지 않고 끝나므로 따로 End신호를 받아와서 레지스터에 마지막에 저장된 값을 출력하게 하면 되는군요.
답을 알아냈습니다. 니들은 이제 필요없어