It's been a while since I've posted here and time changes many things, including my 65C816 computer design
I was going to use an FPGA for the address/data demuxing and address decoding, along with video, sound, uart, and ps/2 keyboard support. I have since decided that I might be biting of more than I can chew and way over complicating things. I still plan on using the FPGA for video, sound, keyboard, etc. but I have decided to move the address demuxing and decoding out of the FPGA. This will allow me to get up and running without the FPGA in the design and should make it easier for me to modularize things a bit. Trying to manage all of that in the FPGA was getting pretty unwieldy for a noob like me. I have also decided to move from 3.3V to 5V to take advantage of some additional timing headroom and will access the 3.3v FPGA through some level shifters (Using the TI TXB0108PWR).
I have also settled on an aprox 7.14Mhz clock speed giving me a 140ns clock period. Without the FPGA in the system I will use a 7Mhz osc. (I'll actually start with a 1Mhz osc and work my way up if things are looking good) One I add the FPGA into the system, it will generate a clock with a 140ns period derived from it's internal 100Mhz clock.
To do my address/data demuxing I am planning on using the circuit described in the '816 datasheet using a 74AC245 and 74AC573. I have also planned out my address decoding and was wondering if somebody would be willing to give it a quick look and tell me if there are any gotchas in my design and if any of the signals might need some kind of gating with PHI2. This is just generating chip selects for the RAM, ROM, and I/O. It looks like the timing for RAM access will be really close, but I should have the RAM enable valid with about 2ns to spare. I have simulated the logic using Logisim and the logic itself does what I am wanting, but logisim does not simulate realistic propagation delays.
I am including an annotated screenshot from logisim and have added in the max propagation times next to the components and have signal valid times relative to the falling edge of PHI2. I am going to use SRAM and Flash with 55ns access times.
Attachment:
AddrDecode.png [ 336.36 KiB | Viewed 872 times ]
One thing to note is that when I add in the FPGA video functionality it will share the bus with the CPU for memory access by pulling RDY and BE low to halt the CPU when it wants to access the bus. The timing of that will be synchronized with PHI2 with RDY going low about 20ns before the falling edge of PHI2 and BE going low with the falling edge. None of this is in the screenshot, just providing some context. All of the address decoding is after the address/data demuxing and will be active while the CPU is halted with the exception of the I/O address space. Access to I/O is only allowed for the CPU which is why the BE signal is included in the screenshot.
I also have a couple of general questions. I plan on using 74ACxx logic wherever possible but my need to resort to HC parts when AC is not available. Is it ok to mix AC and HC? I have seen the discussions regarding TTL vs HC and HCT, but nothing specifically about mixing HC and AC. I would think it would be fine to do that since they are both CMOS parts.
Another question is in regards to the 65xx support chips, (6522, etc.) and their CS signals. Garth Wilson has mentioned many times that they need to be asserted before the rising edge of PHI2 or they don't work (datasheet for the 65C22 says 10ns setup time). My decoding does not handle that. What would be a recommendation for that? I need to qualify the IO chip selects with the BANK0 signal to constrain IO to the first 64Kb of memory and I just can't figure out a way to do that more quickly. There is a good possibility that it would work fine since I am designing for max prop delays and when I figure out timing based on typical prop delays my timing is all good.
Thanks Guys.