|
The Quartus® II software allows I/O pins in Altera® devices to be configured as bidirectional pins. Bidirectional pins can be specified with a BIDIR
port that is connected to the output of a TRI primitive. The signal between the pin and the TRI primitive is a bidirectional signal that can be used to drive other logic in the project.
The bus_reg2.tdf and bus_reg3.tdf files shown below both implement a register that samples the value found on a tri-state bus. It can also drive the stored value back to the bus. One file implements the DFF and TRI primitives with in-line logic function references; the other uses a Register Declaration and Instance Declaration, respectively, in the Variable Section.
SUBDESIGN bus_reg2 ( clk : INPUT; oe : INPUT; io : BIDIR; ) VARIABLE dff_out : NODE; BEGIN dff_out = DFF(io, clk, ,); io = TRI(dff_out, oe); END; |
SUBDESIGN bus_reg3 ( clk : INPUT; oe : INPUT; io : BIDIR; ) VARIABLE my_dff : DFF; my_tri : TRI; BEGIN my_dff.d = io; my_dff.clk = clk; my_tri.in = my_dff.q; my_tri.oe = oe; io = my_tri.out; END; |
The bidirectional io
signal, driven by TRI, is used as the d
input to a D flipflop (DFF).
You can also connect a bidirectional pin from a lower-level Text Design File (.tdf) to a top-level pin. The bidirectional output port of the subdesign should be connected to a bidirectional pin at the top level of the hierarchy. The Function Prototype for the lower-level TDF should include the bidirectional pin in the RETURNS
clause. The bidir1.tdf file shown below includes four instances of the bus_reg2
function shown above.
FUNCTION bus_reg2 (clk, oe) RETURNS (io); SUBDESIGN bidir1 ( clk, oe : INPUT; io[3..0] : BIDIR; ) BEGIN io0 = bus_reg2(clk, oe); io1 = bus_reg2(clk, oe); io2 = bus_reg2(clk, oe); io3 = bus_reg2(clk, oe); END;
- PLDWorld - |
|
Created by chm2web html help conversion utility. |