Hello everyone!

I have to develop a uvm test environment for an edge detector.

Algorithm of my edge detector consist in the calculation of the gradient of an image.

My input transaction is formed by 3 fields that are 3 input 8-bit rgb (red,green e blue) on which the edge detector performs this algorithm.

(Red,green and blue originate from a txt file that contains a matrix of pixels 1366x768)

```
class rgb_inputs extends uvm_sequence_item;
rand logic[7:0] red;
rand logic[7:0] green;
rand logic[7:0] blue;
```

The algorithm is

```
I = red + green + blue;
for i=1:size(I,1)-2
for j=1:size(I,2)-2
%Sobel mask for x-direction:
Gx=((I(i+2,j)+2*I(i+2,j+1)+I(i+2,j+2))-(I(i,j)+2*I(i,j+1)+I(i,j+2)));
%Sobel mask for y-direction:
Gy=((I(i,j+2)+2*I(i+1,j+2)+I(i+2,j+2))-(I(i,j)+2*I(i+1,j)+I(i+2,j)));
%The gradient of the image
B(i,j)=abs(Gx)+abs(Gy);
```

Therefore Dut,to process one output needs to work on previous transaction.

My problem is in the implementation of scoreboard.

I used the approach with which I compose the scoreboard with comparator and predictor but while in a standard situation the predictor produces the output according to a single input transaction Here I need it keeps the memory even of the previous transaction (because I(i,j) depends from red(i,j),green(i,j) and blue(i,j) and I(i+1,j) from red(i+1,j) etcâ€¦).

My idea was to allocate an array in the predictor for saving the entire matrix of input pixels and

then process the outputs.

I can do it?

If there is a way to do it, then how do you sync the corresponding outputs of the DUT with the corresponding outputs of the predictor?