Close

*right* on the threshold...

A project log for sdramThingZero - 133MS/s 32-bit Logic Analyzer

Add an old SDRAM DIMM to your SBC for a 133MS/s 32-bit Logic Analyzer, add ADCs for a Scope...

eric-hertzEric Hertz 08/30/2016 at 09:413 Comments

So, check this out... In a (long-) previous log, I had the idea of making use of the SDRAM's DQM inputs to make it possible to connect all 32 bits (four bytes) of the sampled-data to a single byte-wide bus using nothing more than resistors (and, for when the logic-being-analyzed isn't capable of driving the load, 4 74x244's, or similar)...

So, when the sampling occurs, the buffers drive the DQs... The outputs of the buffers are strong-enough to basically treat the resistors as open-circuits... (or, frankly, if the logic-being-analyzed is strong-enough, the buffers are unnecessary... but during sampled-data-read-back it's necessary to remove that logic-being-analyzed from the circuit... so the buffers' output-enables are handy. Nevermind, adding those buffers allows for e.g. making the "logic-analyzer" capable of various different logic-levels... 74AHC's or similar would allow for 5VTTL as well as 3.3VTTL... Others, plausibly in series, could make for 1.8V logic-analysis, etc. And, e.g. it'd be plausible to use 1.8V logic on 16 bits, tied to 3.3V logic on the other 16 bits and determine some intermediate-values for the same measured-signals.).

Now, per a recent log, I think it's possible to handle *more* I/O in a similar manner... Specifically: The Address-lines, which are *directly* fed-back to Data I/O's...

This starts to get a bit more complicated...

The address lines need a "default" value, as pulled-up/down by resistors, to make this possible.

The *only* "default" value they *need* is that used by the Load-Mode-Register command, so we set those bits accordingly, via pull-up/down resistors, and go on our way. (be sure to check that previous log-entry).

So, note... These resistor (networks) could be replaced with buffers... That'd be the logical way to go about it. But, doing-so, again, results in the necessity for Output-Enable pins for *each* byte. By using resistors we can take advantage of the inherent "output-enable"-nature of the DQM-inputs on the SDRAM.

("Hey! Why not tie the DQM signals *to* output-enable inputs *on* buffers such as the '244? Because DQM is used for BOTH Read AND Write commands... So, we'd *really* need another D-Q latch for *each* of those buffers' output-enable signals. AND FURTHER, using resistors allows for reading AND writing the DQ's (writing being a bit less-necessary in a logic-analyzer sense). )

The use of resistors, instead of logic, basically make for *bidirectional* communication, which would be a bit more difficult with glue-logic.

So... Where we at...?

I have yet to analyze *every single* case... but, having a vague idea of which cases we'll be making use of... I think this should work. Resistors marked "1" are, e.g. 1Kohm... Resistors marked "2" 2Kohm, etc. These aren't *values,* they're *multipliers*... So, maybe, I use 390ohms for the resistors marked "1" and 390*2=780ohms for those marked "2"... you get the idea.

(As the resistance increases, so does the delay in overriding input-capacitances, etc... is that a problem...?)

Anyways, the key, here, is that different *modes* treat these resistor(networks) differently... And, so far, it seems that *each* mode can work with this system.

There are a few other cases we need (are there?), and I haven't considered *them all* all the way through... But I'm pretty certain that these values are *close*, and darn-near functional.

Here's the thing, VIH-Min = 2V, and VIL-Max = 0.8V... That's *Darn Near* 2/3*V+ and 1/3*V+, respectively. if V+ = 3.0V... A bit of math might need to be done for 3.3V, and a bit more math might need to be done for consideration of the fact that 0.8V != 1V... But Doable...? Plausibly.

And... I've just saved myself not only SIX bidirectional D-Latches, but *also* (and more importantly?) the associated signals that would be necessary to *choose* those D-Latches, and their directions... Don't believe me? Just consider this: Each of those latches would require, at the very least, *both* an Output-Enable (to the bus) and a Direction input... That's already TWELVE new control-signals, avoided by using resistor-networks *and* taking-into-account the latch/direction/output-enable circuitry already built-into the SDRAMs.

Here we go...

There are basically two cases... One case where the AddrH bit is pulled-Low (all AddrH bits are

pulled-Low due to the Mode that needs to be written to the Mode Register), and the corresponding AddrL bit is pulled-High. And the other case where the AddrH is pulled-Low and the corresponding AddrL bit is Also pulled-Low...

So we have some voltage-dividers...

If we were working with VIH-Min = 2V, VIL-Max=1V, and V+=3V, this'd work... within specs. VIL-Max=0.8V, and I'm *planning* to work with V+=3.3V (or maybe 3.6V)... (Nevermind needing to consider whether the supply voltage might vary slightly). Can the same be accomplished within specs?

Discussions

James Newton wrote 08/30/2016 at 19:00 point

wow... trying to wrap my head around this... you are basically building multiplexers? With... priority? based on the resistor values?

  Are you sure? yes | no

Eric Hertz wrote 08/31/2016 at 06:36 point

Pretty much, yeah... But keep in mind that the SDRAM has, essentially, output-enables built-in (nevermind inbuilt direction-control for Reads/Writes) and those are *definitely* being made-use-of in this scenario. 

So, in a sense, this is a bit like connecting a bunch of 74245 bidirectional-buffers to the same 8-bit bus, with the caveat that those buffers' direction and output-enable signals are controlled by some mysterious entity that happens to change them whenever it pleases (and in groups!), rather than allowing *direct* and *immediate* control of each individual output-enable and direction pin.

I'm working on some new diagrams showing the associated I/Os and output-enables as e.g. 74245-style I/Os. 

Also doing a bit more verification that it's possible to do this *within* specs... E.G.1: Using VIL-Max = 1V is *probably* functional in most devices, but technically the spec says 0.8V. 

E.G.2. VOH isn't going to be exactly 3.0V, and may be dragged down a bit depending on how many outputs it's feeding (is that true for CMOS inputs?), and whether there's a path to ground through the resistors... So, not *certain* those resistor-values are realistic. And, in a case like this, changing one resistor-value affects the *entire* system... (e.g. dropping my "1" resistors to "0.8" while leaving the "2" resistors *at* 2 would fix the VIL-Max problem, but affect VIH-Min. 

WEE MATH!

Those "1" "2" and "4"s seem right, in the intuitive-hand-waving sense, but aren't *quite* within specs. And, frankly, this basically will *only* work reliably if that math just happens to work out in our favor. I can recall the basic voltage-divider equation, but now we're talking about numerous voltage-dividers, numerous different scenarios, numerous equations, and numerous unknowns... and, frankly, I don't remember how to do matrix-math, my TI-91's long-gone, and I don't even remember how to *set up* matrix math... And, worse, I never really did wrap my head around math using '<' and '>' (what happens, again, when I multiply both sides by some number? Or when I divide by a variable? Does the sign switch directions?) So we'll see where this goes.  I think I can wrap my head around it better if I see some graphs...

Again, I'm pretty sure the "1" "2" and "4" values would *work,* if I ran the thing at 3.0V, but probably not within specs, and maybe not at all if I bumped it up to 3.3V.

So, yeah, maybe saving *numerous* additional OEs and DIRs, but at the cost of some extra thinking and a lot of resistors. (And, in this era, it's entirely plausible that all these resistor-networks could be replaced by a few bidirectional-latches for nearly the same price... And maybe even take less space... There was a previous log where I discovered 'em... I think they were the 74xx16543).

  Are you sure? yes | no

Eric Hertz wrote 08/30/2016 at 10:04 point

Unquestionably... with bidirectional-latches, this entire system would be within-specs, and therefore unquestionably-(more)-reliable. The question becomes... What can be accomplished by the SDRAM's inherent-features...? It may be a tiny bit slower to wait for the input-capacitances to be overcome by our feed-back resistors... Are those delays going to add up to anything significant...?

  Are you sure? yes | no