8.3.3 Altera
Because Altera complex PLDs use a deterministic routing structure, they can be designed more easily using a self-contained software package—an “all-in-one” software package using a single interface. We shall assume that we can generate a netlist that the Altera software can accept using Cadence, Mentor, or Compass software with an Altera design kit (the most convenient format is EDIF).
Table 8.8
shows the EDIF preroute netlist in a format that the Altera software can accept. This netlist file describes a single inverter (the line 'cellRef not'). The majority of the EDIF code in
Table 8.8
is a standard template to pass information about how the VDD and VSS nodes are named, which libraries are used, the name of the design, and so on. We shall cover EDIF in Chapter
9
.
|
TABLE 8.8
EDIF netlist in Altera format for the halfgate ASIC.
|
|
|
Table 8.9
shows a small part of the reports generated by the Altera software after completion of the place-and-route step. This report tells us how the software has used the basic logic cells, interconnect, and I/O cells to implement our design. With practice it is possible to read the information from reports such as
Table 8.9
directly, but it is a little easier if we also look at the netlist. The EDIF version of postroute netlist for this example is large. Fortunately, the Altera software can also generate a Verilog version of the postroute netlist. Here is the generated Verilog postroute netlist, halfgate_p.vo (not
'.v'
), for the halfgate design:
|
TABLE 8.9
Report for the halfgate ASIC fitted to an Altera MAX 7000 complex PLD.
|
|
** INPUTS **
Shareable
Expanders Fan-In Fan-Out
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
43 - - INPUT 0 0 0 0 0 0 1 myInput
|
|
** OUTPUTS **
Shareable
Expanders Fan-In Fan-Out
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
41 17 B OUTPUT t 0 0 0 1 0 0 0 myOutput
|
|
** LOGIC CELL INTERCONNECTIONS **
Logic Array Block 'B':
+- LC17 myOutput
|
LC | | A B | Name
Pin
43 -> * | - * | myInput
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
// halfgate_p (EPM7032LC44) MAX+plus II Version 5.1 RC6 10/03/94
// Wed Jul 17 04:07:10 1996
`timescale 100 ps / 100 ps
module
TRI_halfgate_p( IN, OE, OUT );
input
IN;
input
OE;
output
OUT;
bufif1 ( OUT, IN, OE );
specify
specparam
TTRI = 40;
specparam
TTXZ = 60;
specparam
TTZX = 60;
(IN => OUT) = (TTRI,TTRI);
(OE => OUT) = (0,0, TTXZ, TTZX, TTXZ, TTZX);
endspecify
endmodule
module
halfgate_p (myInput, myOutput);
input
myInput;
output
myOutput; supply0 gnd; supply1 vcc;
wire
B1_i1, myInput, myOutput, N_8, N_10, N_11, N_12, N_14;
TRI_halfgate_p tri_2 ( .OUT(myOutput), .IN(N_8), .OE(vcc) );
TRANSPORT transport_3 ( N_8, N_8_A );
defparam
transport_3.DELAY = 10;
and
delay_3 ( N_8_A, B1_i1 );
xor
xor2_4 ( B1_i1, N_10, N_14 );
or
or1_5 ( N_10, N_11 );
TRANSPORT transport_6 ( N_11, N_11_A );
defparam
transport_6.DELAY = 60;
and
and1_6 ( N_11_A, N_12 );
TRANSPORT transport_7 ( N_12, N_12_A );
defparam
transport_7.DELAY = 40;
not
not_7 ( N_12_A, myInput );
TRANSPORT transport_8 ( N_14, N_14_A );
defparam
transport_8.DELAY = 60;
and
and1_8 ( N_14_A, gnd );
endmodule
The Verilog model for our ASIC,
halfgate_p
, is written in terms of other models:
and
,
xor
,
or
,
not
,
TRI_halfgate_p
,
TRANSPORT
. The first four of these are
primitive models for basic logic cells and are built into the Verilog simulator. The model for
TRI_halfgate_p
is generated together with the rest of the code. We also need the following model for TRANSPORT, which contains the delay information for the Altera MAX complex PLD. This code is part of a file (
alt_max2.vo
) that is generated automatically.
// MAX+plus II Version 5.1 RC6 10/03/94 Wed Jul 17 04:07:10 1996
`timescale 100 ps / 100 ps
module
TRANSPORT( OUT, IN );
input
IN;
output
OUT;
reg
OUTR;
wire
OUT = OUTR; parameter DELAY = 0;
`ifdef ZeroDelaySim
always
@IN OUTR <= IN;
`else
always
@IN OUTR <= #DELAY IN;
`endif
`ifdef Silos
initial
#0 OUTR = IN;
`endif
endmodule
The Altera software can also write the following VHDL postroute netlist:
-- halfgate_p (EPM7032LC44) MAX+plus II Version 5.1 RC6 10/03/94
-- Wed Jul 17 04:07:10 1996
LIBRARY IEEE; USE IEEE.std_logic_1164.all;
ENTITY n_tri_halfgate_p IS
GENERIC (ttri: TIME := 1 ns; ttxz: TIME := 1 ns; ttzx: TIME := 1 ns);
PORT (in0 : IN X01Z; oe : IN X01Z; out0: OUT X01Z);
END n_tri_halfgate_p;
ARCHITECTURE behavior OF n_tri_halfgate_p IS
BEGIN
PROCESS (in0, oe) BEGIN
IF oe'EVENT THEN
IF oe = '0' THEN out0 <= TRANSPORT 'Z' AFTER ttxz;
ELSIF oe = '1' THEN out0 <= TRANSPORT in0 AFTER ttzx;
END IF;
ELSIF oe = '1' THEN out0 <= TRANSPORT in0 AFTER ttri;
END IF;
END PROCESS;
END behavior;
LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE work.n_tri_halfgate_p;
ENTITY n_halfgate_p IS
PORT ( myInput : IN X01Z; myOutput : OUT X01Z);
END n_halfgate_p;
ARCHITECTURE EPM7032LC44 OF n_halfgate_p IS
SIGNAL gnd : X01Z := '0'; SIGNAL vcc : X01Z := '1';
SIGNAL n_8, B1_i1, n_10, n_11, n_12, n_14 : X01Z;
COMPONENT n_tri_halfgate_p
GENERIC (ttri, ttxz, ttzx: TIME);
PORT (in0, oe : IN X01Z; out0 : OUT X01Z);
END COMPONENT;
BEGIN
PROCESS(myInput) BEGIN ASSERT myInput /= 'X' OR Now = 0 ns
REPORT "Unknown value on myInput" SEVERITY Warning;
END PROCESS;
n_tri_2: n_tri_halfgate_p
GENERIC MAP (ttri => 4 ns, ttxz => 6 ns, ttzx => 6 ns)
PORT MAP (in0 => n_8, oe => vcc, out0 => myOutput);
n_delay_3: n_8 <= TRANSPORT B1_i1 AFTER 1 ns;
n_xor_4: B1_i1 <= n_10 XOR n_14;
n_or_5: n_10 <= n_11;
n_and_6: n_11 <= TRANSPORT n_12 AFTER 6 ns;
n_not_7: n_12 <= TRANSPORT NOT myInput AFTER 4 ns;
n_and_8: n_14 <= TRANSPORT gnd AFTER 6 ns;
END EPM7032LC44;
LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE work.n_halfgate_p;
ENTITY halfgate_p IS
PORT ( myInput : IN std_logic; myOutput : OUT std_logic);
END halfgate_p;
ARCHITECTURE EPM7032LC44 OF halfgate_p IS
COMPONENT n_halfgate_p PORT (myInput : IN X01Z; myOutput : OUT X01Z);
END COMPONENT;
BEGIN
n_0: n_halfgate_p
PORT MAP ( myInput => TO_X01Z(myInput), myOutput => myOutput);
END EPM7032LC44;
The VHDL is a little harder to decipher than the Verilog, so the schematic for the VHDL postroute netlist is shown in
Figure 8.2
. This VHDL netlist is identical in function to the Verilog netlist, but the net names and component names are different. Compare
Figure 8.2
with
Figure 5.15
(c) in
Section 5.4
, “
Altera MAX
,” which shows the Altera basic logic cell and
Figure 6.23
in Section 6.8, “Other I/O Cells,” which describes the Altera I/O cell. The software has fixed the inputs to the various elements in the Altera MAX device to implement a single inverter.
|
|
|
FIGURE 8.2
The VHDL version of the postroute Altera MAX 7000 schematic for the halfgate ASIC. Compare this with Figure 5.15(c) and Figure 6.23.
|