This project performs grayscale conversion and Sobel filtering with the aim of detecting edges in an image.
Below is a block diagram of the implementation:
It is necessary for the pixels to be sent via an SPI protocol; for this purpose, the input ui_in[2:0]
is designated as follows:
ui_in[0]
→ SPI Clockui_in[1]
→ Chip Selectui_in[2]
→ Input PixelAs shown in the previous image, there are some processing options:
To select one of the processing options, the input ui_in[4:3]
is designated as follows:
ui_in[4:3]
= $00$ → Grayscale + Sobelui_in[4:3]
= $01$ → Sobelui_in[4:3]
= $10$ → Grayscaleui_in[4:3]
= $11$ → BypassTo perform the Sobel filter processing, it must be enabled according to the selected processing. This can be enabled or disabled as needed through the input ui_in[5]
, where $1$ enables and $0$ disables.
The result of the processing corresponds to the output uo_out[0]
.
There is also a functionality for the input to the different processing options to come from an internal LFSR block; for this purpose, the pins uio_in[3:2]
are dedicated for input.
Any device that allows sending data via an SPI protocol, like a Raspberry Pi.
# | Input | Output | Bidirectional |
---|---|---|---|
0 | spi_cs_i | select_process_i[0] | LFSR_enable_i |
1 | spi_sck_i | select_process_i[1] | seed_stop_i |
2 | spi_sdi_i | ena | lfsr_en_i |
3 | select_process_i[0] | spi_sdo_o | lfsr_mode_sel_i |
4 | select_process_i[1] | lfsr_done | sa_clear_i |
5 | start_sobel_i | ||
6 | sa_en_i | ||
7 | frame_done_i |