Hi i am a electrical engineering student first year since we study only microcontrollers and processors I have decided to learn more about fpga (I have a little experience with spartan 3e vhdl) . My goal is to be able to perperform video processing on a video stream and detect ,track multiples objects . I have 4 months periode . For the fpga I think basys3 board from digilent will do fine ( 1800 kb of ram 90 dsp. Vivado ) ? The problem I don't know where to begin ? What I should study ? Ho im gonna feed the video to the fpga ? any help would be great thanks
closed as primarily opinion-based by Matt Young, Leon Heller, Ricardo, PeterJ, Daniel Grillo Apr 22 '15 at 13:46
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
FPGA is a logic device - thus you have to feed-in your video as a digital signal. So, let's assume that your image sensor (video source) provides you with depth resolution of 12bit (per pixel), 640x480 pixels image, and 30 frames per second, so your pixel rate feed in 640x480x30 pixels per second.
Life stream is a pixel by pixel process (that's how it is read out inside the image sensor register as an analog signal). Then it is converted by an ADC internally or externally ending up with a parallel or serial digital output. In parallel, you read all 12 bits of a pixel at once (at a pixel rate). In serial, you can read 1bit at a time, but 12 times the pixel rate. There are some sensors that have a mixed serial/parallel output, say 4 parallel outputs that provide serial 3 bit data at the pixel rate. In any case, you want to deserialize your signal, which is usually implemented on the FPGA.
Let's assume that you have a parallel video input (using 12bit bus?) and you feed in pixel by pixel. Obviously, to perform some processing, you need to collect the necessary amount of pixels, the whole frame, or several frames depending on the kind of processing operation. This is where the line buffers (image line), memories come in. After collecting the number of pixels you perform the filtering/processing - this is a completely different question that relates algorithm implementation techniques.
Without great experience of FPGA video processing, it is difficult to predict what size of the device will be sufficient enough. That's why, you design the logic and then perform estimation of required resources (using vivado), and then you will see which FPGA devises have enough resources. All this depends on the complexity of the video processing, video bitrate, speed, parallelism, and some other factors that I do not know about.
I would say that for a beginner writing a video processing VHDL implementation by hand is plain suicide. I have not written anything myself yet - I am a starter just like you. The way I am planning to approach it is first performing video processing in C (matlab), then translating the code to Simulink (as a block diagram) and then trying to convert it to Systems Generator (an Xilinx add-on for Simulink). This is not the only option, but for a beginner is right on.
Not to discourage, but 4 month for this project with zero experience will be intense, you will need some great support.
The choice of the board will depend on the interfacing requirements. Usually, the board is designed to fully exploit the resources of the FPGA device that is on it. See if it has enough accessible inputs/outputs for your application, master clock options, presence of SRAM/DRAM (for example, for video buffering), ability to perform real time simulation.
The choice of the FPGA depends on many factors specific to your application - read the last sentence of paragraph 4. After you have a description of you data and a better definition of your video processes, an experienced engineer might give you an opinion (guess) whether a given board (FPGA) should have enough resources to do the job.
I would suggest to start with creating a VHDL implementation and then, based on estimated resources, you could choose the board that will meet the requirements. I do not think that getting the board before will be of any help.