[Coco] A Video Timing Question

tim franklinlabs.com tim at franklinlabs.com
Sun Sep 13 17:23:19 EDT 2015


   That's exactly the kind of info I was looking for. You gave me an idea
   that should work. The bandwidth should be OK ( I haven't actually
   looked at it yet). Admittedly, I haven't even considered reading the
   video RAM yet. I'm taking baby steps. LOL
   My planned max resolution is 800x600 @ 60Hz frame rate and the clock
   timing is 40MHz, If the RAM can handle 12nsec reads & writes we should
   be good.

     On September 13, 2015 at 3:21 PM Neal Crook <foofoobedoo at gmail.com>
     wrote:
     Hi Tim,
     I'm not sure whether you're using on-FPGA (synchronous) RAM or
     off-FPGA
     asynchronous RAM. The basic problem is the same in any case.
     Calculate how
     much bandwidth you can squeeze out of the RAM. Calculate how much
     bandwidth
     is needed by the video readout. If you're lucky your RAM will have
     2x the
     bandwidth needed by the readout. In that case you can simply
     alternate
     cycles between the CPU and the VDU. Each can only access within
     their time
     window (in both cases they may or may not need to perform an
     access). This
     is simplest if the control logic cycles at a clean multiple of the
     video
     rate. If a simple calculation shows you don't have enough bandwidth
     then
     you have to stall the CPU or change your architecture. One
     architectural
     trick is to divide the memory into 2 independent banks and address
     it so
     that the video readout accesses alternate banks. That effectively
     doubles
     the bandwidth available and provides the extra bandwidth needed for
     CPU
     access. In all cases, you need to carefully co-ordinate the
     sequencing of
     the CPU's access; you may need to stall the CPU to get it to the
     right
     time-slot (if you're super-aggressive you would put a single write
     buffer
     here so the CPU can dump-and-run on writes and only stalls if the
     write
     buffer is full).
     Your FIFO approach sounds interesting, but I wonder how you cope
     with CPU
     reads from video memory? Correctness demands that a read cannot
     overtake
     writes and so you must stall the CPU until older writes have flushed
     through the FIFO.
     Perhaps you could turn your FIFO idea on its head: use the FIFO to
     hold
     video data. Fill the FIFO at maximum SRAM rate, empty it at the
     video rate.
     Since you know the time that the CPU needs to perform an access you
     will
     know how full the FIFO needs to be in order for you to allow the CPU
     to
     proceed "now" (stalling FIFO fill) without incurring video underrun.
     If the
     FIFO is not full enough, you must stall the CPU. When you reach the
     end of
     the active row/frame, the FIFO will fill up and remain full (ie will
     not
     get read during the blanking time) and the CPU will naturally have
     access
     to all of the bandwidth during that time.
     Since you refer to "sparkles" can I infer that you are debugging
     this on
     the bench? In debugging various problems with my multicomp-derived
     design I
     have written very small 6809 test programs and run the whole thing
     as a
     logic simulation. If you haven't ventured down this path I
     thoroughly
     recommend it.
     My apologies in advance if anything I have suggested is laughably
     obvious
     to you.
     Neal.
     On 13 September 2015 at 20:30, tim franklinlabs.com
     <tim at franklinlabs.com>
     wrote:
     > OK, this is a "best practices" question for those working with
     FPGA
     > video. My SOCoCo project is moving along. I got the CPU running in
     > SDRAM and the video running on SRAM. However, I have struggled
     with the
     > best method of syncing the CPU writes to the Video. I first tried
     a
     > FIFO to delay the writes until the vertical and horizontal sync
     pulses.
     > This worked but when I sped up the CPU to over 1MHz, with
     continuous
     > writes, I was getting dropped character (sync times are too slow).
     Then
     > I tried letting the CPU write to SRAM (still using a FIFO) and
     sync the
     > writes within the reads of video (i.e. when data is ready to write
     I
     > write instead of read). This method works well but I get sparkles
     on
     > continuous CPU to video writes. I think that this is caused by the
     data
     > going to the dac from the previous read cycle is actually delayed
     and
     > held by the write cycle time.
     >
     > So, I'm wondering how others have addressed this?
     >
     >
     > --
     > Coco mailing list
     > Coco at maltedmedia.com
     > https://pairlist5.pair.net/mailman/listinfo/coco
     >
     >
     --
     Coco mailing list
     Coco at maltedmedia.com
     https://pairlist5.pair.net/mailman/listinfo/coco
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tim at franklinlabs.com.vcf
Type: text/vcard
Size: 245 bytes
Desc: not available
URL: <https://pairlist5.pair.net/pipermail/coco/attachments/20150913/bfb91d41/attachment.bin>


More information about the Coco mailing list