R
rickman
Guest
On Oct 1, 11:43 am, Johannes <johannesman...@gmail.com> wrote:
not saying you can't, but it seems like it might mess up the read.
You actually have two separate timing constraints. One is the path
you have outlined above, the read access timing. The other is the
SDRAM read cycle and refresh timing. Your FPGA interface timings add
up to 32 ns of the 72 ns total. The SDRAM is only using 40 ns in this
process. That means you can use the other 40 ns (or is it 32 ns?) of
the total cycle time to do the refresh and not have to worry about the
refresh conflicting with the read in progress.
.... | NOP | ACTIVE | NOP | READ | NOP | DATA | REFRESH | NOP | ... |
NOP | ACTIVE | ...
^ ^
^
Processor Req Data Output to FPGA
Processor Req
Another advantage of this approach is that you can use the chip wide
auto refresh and don't need to supply the address. You can use an
internal counter to time the refresh interval and just send NOPs in
the idle time until a refresh is required. Heck, I think the timing
may work out to let you run the SDRAM at 100 MHz.
Rick
Are you sure you can do a refresh on a currently running read? I'mBrian, you are right. Also thanks gabor for the insight, I am right
now looking at a chart and trying to figure out worst case timings,
and it appears to work, even without duplicating sdrams or having the
same data in multiple banks. Something like this:
SDRAM @ 125 MHz.
- host cpu issues a read for adress 'A'. FPGA propagation delay appr.
12 ns before reaching SDRAM
- synchronizing to SDRAM clk costs maximum 1 clk' = 8 ns
- 0.5 clk' delay for command to be clocked in to SDRAM
- SDRAM cycle 1: ACTIVE adress 'A'
- SDRAM cycle 2: NOP
- SDRAM cycle 3: READ (2 clk' between ACTIVE and READ fulfills Trcd
15 ns)
- SDRAM cycle 4: ACTIVE adress 'B' for refresh, according to a running
refresh counter. (3 clk' between the two actives fullfills Trrd > 15
ns)
- SDRAM cycle 5: NOP
- SDRAM cycle 5,5: DATA valid (CAS latency = 2)
- FPGA propagation delay appr: 12 ns
TOTAL SUM: 12+8+4+4,5*8+12 = 72 ns
then the next cycle the refresh algorithm could do a precharge for
that row. If a read request for an already open row would appear this
is no problem since it's just to go on and read then. I will go
through this again monday, but so far so good.
Good feeling a friday night, again thanks all for this precious help!
/Johannes
not saying you can't, but it seems like it might mess up the read.
You actually have two separate timing constraints. One is the path
you have outlined above, the read access timing. The other is the
SDRAM read cycle and refresh timing. Your FPGA interface timings add
up to 32 ns of the 72 ns total. The SDRAM is only using 40 ns in this
process. That means you can use the other 40 ns (or is it 32 ns?) of
the total cycle time to do the refresh and not have to worry about the
refresh conflicting with the read in progress.
.... | NOP | ACTIVE | NOP | READ | NOP | DATA | REFRESH | NOP | ... |
NOP | ACTIVE | ...
^ ^
^
Processor Req Data Output to FPGA
Processor Req
Another advantage of this approach is that you can use the chip wide
auto refresh and don't need to supply the address. You can use an
internal counter to time the refresh interval and just send NOPs in
the idle time until a refresh is required. Heck, I think the timing
may work out to let you run the SDRAM at 100 MHz.
Rick