On 2008-07-23, Timothy Normand Miller wrote:
> I was thinking that we should have one port that indicates type
> (address, read count, write data) and byte enables or target. The
> other port would be the data/address port and also dequeue.
Done.
> Something I just realized: We need an enable/disable for the data
> cache in the address decoder. For memory accesses, it has a 16-word
> cache that we need to bypass when HQ is running. Sometimes we want to
> leave it on. For instance, in text mode, it doesn't hurt anything.
As far as I can see from pci_address_decode.v, this is used for target
reads, right? So, as long as reads are pure, it doesn't hurt to leave
it on. Of course, HQ can always yield some side-effect on read, but is
that useful? If not, we could maybe reformulate the target read ports
of HQ to allow transmitting more than a single word, and thus benefit
from the cache.
> Another way to do it is to encode the target into the port, like we
> did with byte enables. There are only two (maybe three, more on this
> later) targets that can be accessed via the bridge, memory and engine.
> So we just need two address ports:
> MEM_SEND_ADDR_MEM
> MEM_SEND_ADDR_ENG
Done, and we just leave space for a third port.
> Everything else stays the same.
Well, I wasn't quite satisfied, but we can go back to the previous
version, if you like. I assumed the master command queue is the same as
the master write queue, so that the _FREE ports should be the same.
Thus, I did something similar to the memory port, including the names.
Now, all enqueuing ports are named _SEND and all dequeuing ports are
named _RECEIVE.
;; PCI Target Numbers
let PCI_TARGET_CFG = 0 ; (not seed by HQ) configuration
let PCI_TARGET_ENG = 1 ; engine
let PCI_TARGET_MEM = 2 ; memory
let PCI_TARGET_PROM = 3 ; (not seen by HQ)
let PCI_TARGET_IO = 4 ; IO
;; PCI Ports
;; =========
let _PCI_B = -0x20 ; base address for PCI ports
;; Master Command
let PCI_M_CMDQ_FREE = _PCI_B + 0x00 ; in - number of commands we can write
let PCI_M_SEND_CMD = _PCI_B + 0x01 ; enq - direction and count
;; Master Write
let PCI_M_SEND_DATA_0000= _PCI_B + 0x10 ; enq - 16 ports for data word, where
; lower 4 address bits are byte enables
let PCI_M_SEND_DATA_1111= PCI_M_SEND_DATA_0000 + 15 ; for convenience
;; Master Read
let PCI_M_READQ_COUNT = _PCI_B + 0x04 ; in - number of words available to read
let PCI_M_RECEIVE_DATA = _PCI_B + 0x05 ; deq - data word
;; Target Write
let PCI_TW_COUNT = _PCI_B + 0x08 ; in - number of words in write queue
let PCI_TW_INFO = _PCI_B + 0x0a ; in - type, target, byte-enables
let PCI_TW_INFO_TARGET_SHIFT = 29
let PCI_TW_INFO_TARGET_MASK = 0xe0000000
let PCI_TW_INFO_TYPE_MASK = 0x03000000
let PCI_TW_INFO_TYPE_ADDR = 0x00000000
let PCI_TW_INFO_TYPE_RCOUNT = 0x01000000
let PCI_TW_INFO_TYPE_WDATA = 0x02000000
let PCI_TW_INFO_ENABLE_MASK = 0x0000000f
let PCI_TW_RECEIVE = _PCI_B + 0x0b ; deq - address or written data
;; Target Read
let PCI_TR_PENDING = _PCI_B + 0x0c ; in - nonzero if pending read
let PCI_TR_RECEIVE_ADDR = _PCI_B + 0x0d ; deq - the one address that is pending
let PCI_TR_SEND_DATA = _PCI_B + 0x0e ; enq - where we write the one word
;; Memory Ports
;; ============
let _MEM_B = -0x40 ; base address for memory ports
let MEM_CMDQ_FREE = _MEM_B + 0x00 ; in - free slots in command pipe
let MEM_SEND_ADDR_MEM = _MEM_B + 0x08 ; enq - address for memory read or write
let MEM_SEND_ADDR_ENG = _MEM_B + 0x09 ; enq - address for engine read or write
let MEM_SEND_READ_COUNT = _MEM_B + 0x0f ; enq - do a read of given word count
let MEM_SEND_DATA_0000 = _MEM_B + 0x10 ; enq - 16 ports for data stream, where
; lower 4 address bits are enables
let MEM_SEND_DATA_1111 = MEM_SEND_DATA_0000 + 15
let MEM_READQ_AVAIL = _MEM_B + 0x02 ; in - number of words in FIFO
let MEM_RECEIVE_DATA = _MEM_B + 0x03 ; deq - data stream from memory
;; [1] http://readlist.com/lists/duskglow.com/open-graphics/1/6252.html.
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)