Altera_Forum
Honored Contributor
14 years agoCVI won't output more than one frame, eop
Hello Forum,
(sorry in advance for such a long post) I'm experiencing some issues with a video processing system that uses the VIP blockset. I think the issue I'm seeing can be attributed to the Clocked Video Input (CVI) block. The issue I'm seeing is that the CVI outputs a single frame of video, and then never outputs another one...no end of packet (eop), no nothin', even then the subsequent block says it's ready, and there are pixels coming in from the outside world. A description of my system: I'm attempting to blend/mix video from two different external video sources; one is an NTSC video A/D (ADV7403), the other source is a separate processor (OMAP) that is generating graphics that I want to overlay on top of the live video. I started my design using the files from AN427 (dated July 2010) as a basis. However, I'm using a custom board, and only have 2MBytes of RAM for buffering...so, I removed the triple buffer in the deinterlacer, and the double-buffer before the Alpha Blender. I also removed the second (progressive) clipper and scaler from the AN427 files. However, I did need some buffering for ADV7403 pipiline, so I added a double buffer after the initial clipper. I can get this system running just fine, with a TPG as the background layer, and my live video as layer-1 (no layer-2 yet). The problem arises when I attempt to add the graphics layer. The graphics layer pipline is: CVI-->Clipper-->Triple Frame Buffer-->Layer 2 of Alpha Blender-->CVO So, the only blocks I added to the system described in the previous paragraph were the CVI, Clipper, and Triple Buffer, plus I added an extra input layer to the blender. Mixer layers are now: (0) TPG, (1) Live video, and layer (2) is graphics. I'm also using a NIOS to control nearly all of the blocks that have the option of presenting a MM interface. The problem I'm seeing is that when I start these blocks, I get a single frame out of the graphics CVI, and then I never get another one. The system is instrumented with SignalTap. Using SignalTap, I can see that the CVI outputs a single frame, and signals ONE TIME on the "is_eop" line that it has reached the end of a frame. However, after that it never outputs another eop signal. I've also looked at the signals feeding back from the subsequent clipper, and I see that it continuosly signals that it is ready to receive more data. I could understand if the CVI wouldn't output any more frames if it was getting backpressure from the downstream blocks, but that isn't the case here...the downstream blocks are ready for more data. Some specifics of the graphics pipeline: the incoming video is 640x480, external sync, ~73frames/sec, progressive. The clipper outputs only a small portion of the incoming pixels: it outputs 640x32. Thus, the triple frame buffer only requires ~300KB of memory. The SOPC system is running at 100MHz. I've done the memory bandwidth calcs, and I'm only using about 1/4 of my available bandwidth. The design is constrained using the sdc files that come with the VIP blocks. The thing that really makes this confusing is that I can generate an SOPC system with only the following blocks: CVI-->Clipper (set to 640x480 out) -->CVO, and the graphics displays just fine. So, why is it, when connected to the other system, and no signals from downstream blocks indicating a stall condition, doesn't the CVI output more frames? Any thoughts or suggestions would be greatly appreciated. Again, sorry for the book. Thanks! EDIT: I added a few pictures of the system.