Replies: 1 comment 8 replies
-
I find this a very interesting discussion that I have seen more often. Bi-directional buses are basically used to reduce pin-count, but also have their inherent "problems". When I did my studies in the 1980's this was a big issue, as the limitation was on the PCB, and we were working at "high" frequencies starting from 100MHz. Nowadays we have to ask at which level are we going to do digital design, PCB-level or ASIC/FPGA level. On PCB, bi-directional buses make sense, as the different IC's require less "pads", but on ASIC/FPGA level it only introduces unnecessary delays due to the capacitance that needs to be charged/discharged (three-state; analog aspects of digital circuits), that reduces drastically the speed of the overall system compared to s simple "Push-Pull" input-output system. The basic Idea in LE for the moment is a digital design in an FPGA/ASIC, where the bi-directional behavior is only on top-level for IO-PAD reduction. Just my 5c's. |
Beta Was this translation helpful? Give feedback.
-
As far as I know, L-E's only "bidirectional" component is the RAM component, which can be configured to have bidirectional data pins.
However, to create a circuit using the bidirectional RAM component, you're forced to create a separate DATA_IN input pin and DATA_OUT output pin, and connect them both to the RAM's data pins. (Additionally you would create WE and OE input pins, connected, respectively, to the RAM's WE and OE pins, and a CLK input pin if you're using a clock to drive the RAM's read/write operations.)
You can connect the DATA_IN and DATA_OUT pins directly to the RAM's data pins, so long as they're configured as tri-state (Three-state property set to Yes). Of course you have to ensure that: 1) the DATA_IN pin is floating (U) when reading from RAM (OE=1), 2) the DATA_OUT pin is floating when writing to RAM (WE=1), and 3) the OE and WE pins are not both 1 at the same time; otherwise you'll see signal/bus conflicts (red lines between the RAM's data pins and the DATA_IN and DATA_OUT pins).
This arrangement works fine when the RAM component is used in a stand-alone main circuit, but causes problems when used as a subcircuit.
Because the RAM subcircuit uses separate DATA_IN and DATA_OUT input and output pins, the master circuit is forced to also deal with separate data input and data output signals. Depending on the master circuit's requirements, it can create its own DATA_IN and DATA_OUT input and output pins, but if it attempts to tie the two pins together (as was done in the RAM subcircuit) an immediate Oscillation Apparent error occurs.
One solution is to use controlled buffers in the RAM subcircuit, one controlled by its WE input pin, the other controlled by its OE input pin. The outputs of both buffers are then connected directly to the RAM's data pins. This eliminates the oscillation error in the master circuit. Through experiments, I discovered that only a WE controlled buffer is needed; the DATA_OUT output pin can be connected directly to the RAM's data pins without any oscillation errors in the master circuit.
But all of this could be avoided if L-E provided a bidirectional input/output pin (see the Digital simulator for an example of such a component). Such a pin would eliminate the need for separate DATA_IN and DATA_OUT input and output pins tied, directly or through buffers, to the RAM's bidirectional data pins; instead a single bidirectional DATA (or BUS) pin, tied directly to the RAM's data pins, would suffice. This would more naturally reflect how an actual RAM component would be connected in a circuit.
Comments?
Beta Was this translation helpful? Give feedback.
All reactions