Some questions:
Is it a good idea to operate banks in parallel, so that we always select
the same row and column in all banks? What granularity do we want for
the data? Eg we could combine two columns of each bank to a 8 bit data
word or 8 columns of each bank to a 32 bit word. I'm thinking we could
have an instruction which shifts 4 bits from all banks into the data
output register, so that a fragment of the program might look like
; A jump table at address 0. When the controller gets a request
; it asserts the busy-line of the controller, and sets the PC
; according to the instruction, and start executing.
jump refresh
jump read8
jump write8
...
read8:
; branch if row of requested address matches current row of banks
if_row_hit read8_hit
close_row ; close any opened row on banks
noop^CLOSE_ROW_CYCLES
open_row ; open row of requested address and set
; current column according to address
noop^OPEN_ROW_CYCLES
read8_hit:
shift_out_4 ; shift 1 bit from the 4 banks into output word
; and increment column
noop^NEXT_COLUMN_CYCLES
shift_out_4 ; shift 1 bit from the 4 banks into output word
; and increment column
done ; suspend execution
The noop^CONSTANT is expanded by the assembler to CONSTANT instructions,
if we don't implement repeats in hardware.
What is the difference between a refresh and a precharge-all? You
promised we didn't need to know about hardware... ;-)
Are there any module declaration available for the memory? I assume the
RAMB16_S36_36.v is not representative since it seems too simple; that's
SRAM, right?
I was thinking about doing incremental refresh, using opportunities
where there are no requests, but forcing an incremental request at a
mimimum frequency if there were no opportunities. We could do this with
a behavioural block which has priority to issue refresh instructions. It
would have one counter for the refresh period, one counter for the next
row to refresh, one top-priority refresh request line and one
bottom-priority request line. Would that be good or will there be
larger windows when we can do a full refresh?
I'm thinking it may be sufficient with 128 byte of program memory with 1
byte instructions where the top bit selects a jump, and no subroutines.
But if the instruction memory fills up with noop, we might need a (short)
repeat count for it.
Preliminary instructions format
0AAA AAAA jump AAAAAAA (relative or absolute, whichever is easier)
10AA AAAA if_row_hit AAAAAA (relative PC, -32..31 or maybe 0..63?)
1100 RRRR noop^RRRR
1111 0000 open_row
1111 0001 close_row
1111 1000 shift_out_4
1111 1001 shift_in_4
1111 1111 done
I have made some wild guesses here about the character of the problem,
but all these detail should expose the wrong assumptions.
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)