Image Decompressor

Hardware & Software
role
Designer
Project type
Hardware & Software
Project year
2021

Ones and Zeroes

To understand and gain experience in digital system design, I designed and implemented a hardware image decompressor. Using the custom McMaster Image Compression revision 15 (.mic15), a 320x240 compressed image is delivered to the Altera DE2-115 board via UART and then decompressed and stored in the external static random access memory where the video graphics array controller displays the final decompressed image on a monitor. A finite state machine was designed and implemented to carry out the necessary steps needed to properly process and decompress the image.

How it works

The image decompression system works as follows:

  1. The compressed image is decoded in a lossless manner through dequantization. The compressed image bitstream is parsed and the raw blocks are extracted and dequantized.
  2. The dequantized data is then passed to an IDCT block (inverse signal transform) which converts the data to a YUV block where Y represents the brightness, U represents the blue-chroma, and V represents the red-chroma. The blue and red chroma are downsampled horizontally; half the original width.
  3. The YUV data is then passed to an interpolation block where the downsampled UV data is upsampled through an interpolation filter.
  4. Finally, colourspace conversion takes place and the YUV data is converted to the RGB colourspace and the pixels are written to the SRAM.

This project was very code and theory heavy and took a lot of processing and debugging in order to get fully working. It allowed me to exercise my knowledge of the relationship between software and hardware. Coding in a hardware description language is a challenge as having an understanding of all the moving parts is needed to properly debug code.

Knowing how to create state tables and knowing how to data trace is vital in order to create an efficient and effective finite state machine. Having an understanding of how RAM works to manipulate memory to read from and write to as well as SRAM addressing is needed to avoid any computing complications.

Takeaways

This project was an excellent example of how the coding process works on a hardware level; having an understanding of all the moving parts of a digital system is needed to be as efficient as possible given the resources at hand.

role
Designer
Project type
Hardware & Software
Project year
2021

Ones and Zeroes

To understand and gain experience in digital system design, I designed and implemented a hardware image decompressor. Using the custom McMaster Image Compression revision 15 (.mic15), a 320x240 compressed image is delivered to the Altera DE2-115 board via UART and then decompressed and stored in the external static random access memory where the video graphics array controller displays the final decompressed image on a monitor. A finite state machine was designed and implemented to carry out the necessary steps needed to properly process and decompress the image.

How it works

The image decompression system works as follows:

  1. The compressed image is decoded in a lossless manner through dequantization. The compressed image bitstream is parsed and the raw blocks are extracted and dequantized.
  2. The dequantized data is then passed to an IDCT block (inverse signal transform) which converts the data to a YUV block where Y represents the brightness, U represents the blue-chroma, and V represents the red-chroma. The blue and red chroma are downsampled horizontally; half the original width.
  3. The YUV data is then passed to an interpolation block where the downsampled UV data is upsampled through an interpolation filter.
  4. Finally, colourspace conversion takes place and the YUV data is converted to the RGB colourspace and the pixels are written to the SRAM.

This project was very code and theory heavy and took a lot of processing and debugging in order to get fully working. It allowed me to exercise my knowledge of the relationship between software and hardware. Coding in a hardware description language is a challenge as having an understanding of all the moving parts is needed to properly debug code.

Knowing how to create state tables and knowing how to data trace is vital in order to create an efficient and effective finite state machine. Having an understanding of how RAM works to manipulate memory to read from and write to as well as SRAM addressing is needed to avoid any computing complications.

Takeaways

This project was an excellent example of how the coding process works on a hardware level; having an understanding of all the moving parts of a digital system is needed to be as efficient as possible given the resources at hand.

No items found.