Abel PDF
Abel PDF
Version 8.0
Copyright
This document may not, in whole or part, be copied, photocopied, reproduced,
translated, or reduced to any electronic medium or machine-readable form without
prior written consent from Lattice Semiconductor Corporation.
The software described in this manual is copyrighted and all rights are reserved by
Lattice Semiconductor Corporation. Information in this document is subject to change
without notice.
The distribution and sale of this product is intended for the use of the original
purchaser only and for use only on the computer system specified. Lawful users of
this product are hereby licensed only to read the programs on the disks, cassettes, or
tapes from their medium into the memory of a computer solely for the purpose of
executing them. Unauthorized copying, duplicating, selling, or otherwise distributing
this product is a violation of the law.
Trademarks
The following trademarks are recognized by Lattice Semiconductor Corporation:
Generic Array Logic, ISP, ispANALYZER, ispATE, ispCODE, ispDCD,
ispDOWNLOAD, ispDS, ispDS+, ispEXPERT, ispGDS, ispGDX, ispHDL, ispJTAG,
ispSmartFlow, ispStarter, ispSTREAM, ispSVF, ispTA, ispTEST, ispTURBO,
ispVECTOR, ispVerilog, ispVHDL, ispVM, Latch-Lock, LHDL, pDS+, RFT, and Twin
GLB are trademarks of Lattice Semiconductor Corporation.
E2CMOS, GAL, ispGAL, ispLSI, pDS, pLSI, Silicon Forest, and UltraMOS are
registered trademarks of Lattice Semiconductor Corporation.
Project Navigator is a trademark of Data I/O Corporation. ABEL-HDL is a registered
trademark of Data I/O Corporation.
Microsoft, Windows, and MS-DOS are registered trademarks of Microsoft
Corporation.
IBM is a registered trademark of International Business Machines Corporation.
Lattice Semiconductor Corporation
5555 NE Moore Ct.
Hillsboro, OR 97124
(503) 268-8000
December 1999
Limited Warranty
Lattice Semiconductor Corporation warrants the original purchaser that the Lattice
Semiconductor software shall be free from defects in material and workmanship for a
period of ninety days from the date of purchase. If a defect covered by this limited
warranty occurs during this 90-day warranty period, Lattice Semiconductor will repair
or replace the component part at its option free of charge.
This limited warranty does not apply if the defects have been caused by negligence,
accident, unreasonable or unintended use, modification, or any causes not related to
defective materials or workmanship.
To receive service during the 90-day warranty period, contact Lattice Semiconductor
Corporation at:
Phone: 1-800-LATTICE
Fax: (408) 944-8450
E-mail: [email protected]
If the Lattice Semiconductor support personnel are unable to solve your problem over
the phone, we will provide you with instructions on returning your defective software
to us. The cost of returning the software to the Lattice Semiconductor Service Center
shall be paid by the purchaser.
Limitations on Warranty
Any applicable implied warranties, including warranties of merchantability and fitness
for a particular purpose, are hereby limited to ninety days from the date of purchase
and are subject to the conditions set forth herein. In no event shall Lattice
Semiconductor Corporation be liable for consequential or incidental damages
resulting from the breach of any expressed or implied warranties.
Purchasers sole remedy for any cause whatsoever, regardless of the form of action,
shall be limited to the price paid to Lattice Semiconductor for the Lattice
Semiconductor software.
The provisions of this limited warranty are valid in the United States only. Some states
do not allow limitations on how long an implied warranty lasts, or exclusion of
consequential or incidental damages, so the above limitation or exclusion may not
apply to you.
This warranty provides you with specific legal rights. You may have other rights which
vary from state to state.
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
What is in this Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Where to Look for Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Documentation Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Related Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
12
12
14
15
15
16
17
17
17
17
19
19
19
20
20
20
20
24
24
24
29
29
30
31
34
38
38
39
39
40
40
41
41
41
41
42
42
42
42
43
43
43
43
44
44
44
45
45
47
47
47
48
50
50
51
53
53
53
54
54
55
56
58
60
62
62
62
62
63
63
State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use Identifiers Rather Than Numbers for States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Powerup Register States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unsatisfied Transition Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D-Type Flip-Flops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Other Flip-flops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Precautions for Using Dont Care Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Number Adjacent States for One-bit Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use State Register Outputs to Identify States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Register Bit Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Symbolic State Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Symbolic Reset Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Symbolic Test Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Complement Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ABEL-HDL and Truth Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Basic Syntax - Simple Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Influence of Signal polarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using .X. in Truth tables conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using .X. on the right side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Special case: Empty ON-set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Registered Logic in Truth tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
65
67
67
67
68
68
72
72
73
74
74
75
75
77
78
79
80
81
82
82
Preface
Documentation Conventions
Documentation Conventions
This user manual follows the typographic conventions listed here:
Convention
Italics
Bold
Courier
Font
Monospaced (Courier) font indicates file and directory names and text that the
system displays. For example:
The C:\isptools\ispsys\config subdirectory contains...
Bold
Courier
Bold Courier font indicates text you type in response to system prompts. For
example:
SET YBUS [Y0..Y6];
|...|
Vertical bars indicate options that are mutually exclusive; you can select only one.
For example:
INPUT|OUTPUT|BIDI
Quotes
NOTE
CAUTION
TIP
Related Documentation
Related Documentation
In addition to this manual, you might find the following reference material helpful:
These books provide technical specifications for the LSC device families and give
helpful information on device use and design development.
10
Chapter 1
ABEL-HDL Overview
11
pin ;
pin ;
pin istype
"Outputs
'reg,buffer';
"Submodule declarations
hiercnt interface (clk,rst,en -> q3, q2, q1, q0);
"Submodule instances
cnt1 functional_block hiercnt;
cnt2 functional_block hiercnt;
12
Equations
cnt1.clk = clk;
cnt2.clk = clk;
cnt1.rst = rst;
cnt2.rst = rst;
cnt1.en = en1;
cnt2.en = en2;
"Each counter may be enabled independent of the other. This module
may be used as a Sub-module for a higher-level design, as these
counters may be cascaded by feeding the ovoutputs to the en inputs
of the next stage.
ov1.clk = clk;
ov2.clk = clk;
ov1 := a3 & a2 & a1 & !a0 & en1;
"look-ahead carry -
overflow
ov2 := b3 & b2 & b1 & !b0 & en2; "indicator
a3 = cnt1.q3; a2 = cnt1.q2; a1 = cnt1.q1;
a0 =
cnt1.q0;
b3 =
cnt2.q0;
test_vectors
([clk,rst,en1,en2]
[ 0 , 0, 0 , 0 ]
[ c , 1, 0 , 0 ]
[ c , 0, 1 , 0 ]
[ c , 0, 1 , 0 ]
[ c , 0, 1 , 0 ]
[ c , 0, 0 , 1 ]
[ c , 0, 0 , 1 ]
END
cnt2.q3;
->
->
->
->
->
->
->
->
b2 = cnt2.q2;
b1 = cnt2.q1;
b0 =
[a3,a2,a1,a0,b3,b2,b1,b0,ov1,ov2])
[ x, x, x, x, x, x, x, x, x, x ];
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
[ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ];
[ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ];
[ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 ];
[ 0, 0, 1, 1, 0, 0, 0, 1, 0, 0 ];
[ 0, 0, 1, 1, 0, 0, 1, 0, 0, 0 ];
13
What is ABEL-HDL?
ABEL-HDL is a hierarchical logic description language. ABEL-HDL design
descriptions are contained in an ASCII text file in the ABEL Hardware Description
Language (ABEL-HDL). For example, the following ABEL-HDL code describes a
one-bit counter block:
MODULE obcb
TITLE 'One Bit Counter Block'
"Inputs
clk, rst, ci
pin ;
"Outputs
co
pin istype 'com';
q
pin istype 'reg';
Equations
q.clk = clk;
q := !q.fb & ci & !rst
"toggle if carry in and not reset
# q.fb & !ci & !rst
"hold if not carry in and not reset
# 0 & rst;
"go to 0 if reset
co = q.fb & ci;
"carry out is carry in and q = 1
END
For detailed information about the ABEL-HDL language, refer to the ABEL-HDL
Reference Manual and the online help of ispDesignExpert. An online version of the
ABEL-HDL Reference Manual is provided in the ispDesignExpert CD (accessible by
selecting Help Manuals from the ispDesignExpert Project Navigator).
14
Overview of Design
Overview of Design
With ispDesignExpert, you can create and test designs that will be physically
implemented into Programmable devices. ispDesignExpert uses the Project
Navigator interface (Figure 1-2) as the front-end to all the design tools which creates
an integrated design environment that links together design, simulation, and
place-and-route tools.
The Sources in Project Window (Sources window)
shows all the design files associated with a project.
Projects
In ispDesignExpert, a single design is represented by a single project that is created
and modified using the Project Navigator. The project contains all the logical
descriptions for the design. In addition, the project can contain documentation files,
and test files.
A project represents one design, but you have the option of targeting your design to a
specific device. When you switch the target device, the processes and design flow in
the Project Navigator changes to one that is appropriate for the new target device.
15
Overview of Design
Project Sources
In ispDesignExpert, a project (design) consists of one or more source files.
Each type of source is identified by an icon and name in the Sources in Project
window. The Sources in Project window is the large scrollable window on the left side
of the Project Navigator display. The Sources in Project window lists all of the sources
that are part of the project design.
In addition to the sources that describe the function of the design, every project
contains at least two special types of sources: the project notebook and the device.
Project Notebook The project notebook is where you enter the title and name of the
project. You can also use the project notebook to keep track of external files (such as
document files) that are related to your project.
Device The device is a source that includes information about the currently selected
device.
The supported sources are:
Figure 1-3 shows the sources as they appear in the Project Navigator. The top-level
ABEL-HDL file RM12PS6K contains INTERFACE statements that instantiate (links to)
the lower-level ABEL-HDL files PSSR8X16 and RAM12.
Project Title
Targeted Device
ABEL-HDL Test Vectors
Top-level ABEL-HDL File
Lower-level ABEL-HDL Files
16
Overview of Design
Design Hierarchy
When designs can be broken into multiple levels, this is called hierarchical designing.
ispDesignExpert supports full hierarchical design, which permits you to create a
design that is divided into multiple levels, either to clarify its function or permit the
easy reuse of functional blocks. For instance, a large complex design does not have
to be created as a single module. By using hierarchical designing, each component
or piece of a complex design could be created as a separate module. Figure 1-3
shows a two-level hierarchy.
For more information on hierarchical designing, refer to Chapter 2, ABEL-HDL
Hierarchical Designs.
Design Compilation
After design entry, you can compile your design using the ispEXPERT Compiler. The
compiler first verifies designs for correct syntax, then optimizes and parittions
designs, and fits logic and performs place-and-route to map the logic to specific
devices, it finally generates a JEDEC fusemap file used to program the device and a
netlist file for post-route simulation.
The compiler gathers all compilation results and writes this information to the
ispEXPERT Compiler report that can be read using Process View from the
Project Navigator.
If an error occurs, the compiler stops and issues the auto-make log file
(automake.log) in the Report Viewer. Using the log file information, you can
change your design and recompile it.
Design Simulation
In ispDesignExpert, functional and timing simulation is available using ABEL-HDL
Test Vector (.abv) files or Waveform Description Language (.wdl) files. The
functional and timing simulator and Waveform Viewer enable you to verify your design
before implementing it into a specific device. For more information on simulation, refer
to the Design Verification Tools User Manual.
Device Programming
After the compiler produces a fusemap of your finished design, the integrated ISP
Download System in ispDesignExpert enables you to download the JEDEC device
programming file to an ispLSI device using an ispDOWNLOAD cable. See the ISP
Daisy Chain Download User Manual for more details.
17
Chapter 2
18
Project Title
Top-down
Bottom-up
Inside-out (mixed)
Regardless of the approach you choose, you start from those parts of the design that
are clearly defined and move up or down to those parts of the design that need
additional definition.
The following sections explain the philosophy and techniques of each approach.
19
TIP
20
21
TIP
The name of the lower-level schematic must match the Block Name (schematic), or
the interface name (ABEL-HDL) in the upper-level module. This associates the
lowe-level module with the symbol representing it. The schematic (Figure 2-3) must
be named AND.sch.
The nets in the lower-level schematic correspond to the pin names (schematics), or
pine names (ABEL-HDL) in the upper-level module.
MODULE and1
TITLE 'and1 gate Instantiated by nand1 - Simple hierarchy example'
" The pins must match the Symbol pins (schematic),
" or interface names (ABEL-HDL) in the upper-level module.
IN1, IN2, OUT1 pin;
EQUATIONS
OUT1 = IN1 & IN2;
TEST_VECTORS
([ IN1, IN2] -> [OUT1])
[
0,
0] -> [ 0];
[
0,
1] -> [ 0];
[
1,
0] -> [ 0];
[
1,
1] -> [ 1];
END
TIP
22
Chapter 3
This chapter provides information on what the ispEXPERT Compiler functions during
compiling ABEL-HDL designs. It covers the following topics:
Design Entry
Design Compilation
Design Simulation
23
To start a new project and set up a new directory for this tutorial:
1. Start ispDesignExpert. The Project Navigator window appears.
2. Select File New Project. The Create New Project dialog box (Figure 3-1)
appears.
24
25
NOTE
The module name and file name should have the same base
name as demonstrated above. (The base name is the name
without the 3 character extension.) If the module and file
names are different, some automatic functions in the Project
Navigator might fail to run properly.
6. If you like, enter a descriptive title AND gate with a flip-flop in the Title
text box.
7. When you have finished entering the information, click the OK button. You now
have a template ABEL-HDL source file as shown in Figure 3-5.
26
NOTE
9. To describe the actual behavior of this design, enter two equations in the following
manner:
Equations
output_q
:= input_1 & input_2;
output_q.clk
= Clk;
These two equations define the data to be loaded on the registered output, and
define the clocking function for the output.
27
28
Design Compliation
In general, compiling involves every process after Design Entry that prepares your
design for simulation and implementation. These processes include compiling and
optimizing steps which can be done at the level of a single module or for the entire
design.
However, which processes are available for your design depends entirely on which
device architecture you want to implement your design.
This chapter discusses some of the general considerations and processes used in
ABEL-HDL compiling. For more information about design considerations, refer to
Chapter 4, ABEL-HDL Design Considerations.
Keeping Track of Process: Auto-update
Figure 3-7 shows the Project Naviagor window for the and_ff2 ABEL-HDL module.
29
30
The selected type of source file in the Sources window (for example, ABEL-HDL).
The selected process in the Processes window
31
32
33
TIP
Design Simulation
The following section briefly discusses simulation and waveform viewing. For further
information on simulation, refer to the Design Verification Tools User Manual.
34
35
TIP
The Waveform Viewer works like a logic analyzer. You can display any signal in
the design, group signals into buses and display them in a choice of radices. You
can also jump between times, place cursors and measure delta times, and do
other typical logic analyzer tasks.
For more information on selecting waveforms to view in the Waveform Viewer,
refer to the Design Verification Tools User Manual.
36
Chapter 4
37
Hierarchy in ABEL-HDL
Hierarchical Design Considerations
Node Collapsing
Pin-to-Pin Architecture-independent Language Features
Pin-to-Pin Vs. Detailed Descriptions for Registered Designs
Using Active-low Declarations
Polarity Control
Istypes and Attributes
Flip-flop Equations
Feedback Considerations Using Dot Extensions
@DCSET Considerations and Precautions
Exclusive OR Equations
State Machines
Using Complement Arrays
ABEL-HDL and Truth Tables
Hierarchy in ABEL-HDL
You use hierarchy declarations in an upper-level ABEL-HDL source to refer to
(instantiate) an ABEL-HDL module.
NOTE
38
Hierarchy in ABEL-HDL
39
Hierarchy in ABEL-HDL
Buried Nodes
Buried nodes in lower-level sources are handled as follows:
Dangling Nodes
Combinational nodes
Registered nodes
40
Hierarchy in ABEL-HDL
41
Node Collapsing
All combinational nodes are collapsible by default. Nodes that are to be collapsed (or
nodes that are to be preserved) are flagged through the use of signal attributes in the
language. The signal attributes are:
Istype 'keep'
'collapse'
Selective Collapsing
In some instances you may want to prevent the collapsing of certain nodes. For
example, some nodes may help in the simulation process. You can specify nodes you
do not want collapsed as Istype 'keep' and the optimizer will not collapse them.
42
Signal Attributes
Signal attributes remove ambiguities that occur when no specific device architecture
is declared. If your design does not use device-related attributes (either implied by a
DEVICE statement or expressed in an ISTYPE statement), it may not operate the
same way when targeted to different device architectures. See Pin Declaration,
Node Declaration and Istype in the ABEL-HDL Reference Manual for more
information.
43
44
Clock;
!Q1.Q # Preset;
In this form of the design, specifying the D input to a D-type flip-flop and specifying
feedback directly from the register restricts the device architectures in which the
design can be implemented. Furthermore, the equations describe only the inputs to,
and feedback from, the flip-flop and do not provide any information regarding the
configuration of the actual output pin. This means the design will operate quite
differently when implemented in a device with inverted outputs versus a device with
non-inverting outputs.
To maintain the correct pin behavior, using detailed equations, one additional
language element is required: a buffer attribute (or its complement, an invert
attribute). The buffer attribute ensures that the final implementation in a device has
no inversion between the specified D-type flip-flop and the output pin associated with
Q1. For example, add the following to the declarations section:
Q1 pin istype buffer;
Detailed Descriptions: Designing for Macrocells
One way to understand the difference between pin-to-pin and detailed description
methods is to think of detailed descriptions as macrocell specifications. A macrocell is
a block of circuitry normally (but not always) associated with a devices I/O pin.
Figure 4-1 illustrates a typical macrocell associated with signal Q1.
45
46
pin
pin;
istype 'reg';
equations
Q1.clk = Clock;
Q1
:= !Q1.fb # Preset;
test_vectors ([Clock,Preset]
[ .c. ,
1 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
1 ]
[ .c. ,
1 ]
end
->
->
->
->
->
->
->
Q1)
1;
0;
1;
0;
1;
1;
pin
pin;
istype 'reg_D,buffer';
= Clock;
= !Q1.Q # Preset;
test_vectors ([Clock,Preset]
[ .c. ,
1 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
1 ]
[ .c. ,
1 ]
end
->
->
->
->
->
->
->
Q1)
1;
0;
1;
0;
1;
1;
The first description can be targeted into virtually any device (if register synthesis and
device fitting features are available), while the second description can be targeted
only to devices featuring D-type flip-flops and non-inverting outputs.
To implement the second (detailed) module in a device with inverting outputs, the
source file would need to be modified as shown in the following section.
47
=
=
pin
pin;
istype 'reg_D,invert';
Clock;
Q1.Q # Preset;
test_vectors ([Clock,Preset]
[ .c. ,
1 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
1 ]
[ .c. ,
1 ]
end
->
->
->
->
->
->
->
Q1)
1;
0;
1;
0;
1;
1;
In this version of the module, the existence of an inverter between the output of the
D-type flip-flop and the output pin (specified with the 'invert' attribute) has
necessitated a change in the equation for Q1.D.
As this example shows, device-independence and pin-to-pin description methods are
preferable, since you can describe a circuit completely for any implementation. Using
pin-to-pin descriptions and generalized dot extensions (such as .FB, .CLK and .OE)
as much as possible allows you to implement your ABEL-HDL module into any one of
a particular class of devices. (For example, any device that features enough flip-flops
and appropriately configured I/O resources.) However, the need for particular types of
device features (such as register preset or reset) might limit your ability to describe
your design in a completely architecture-independent way.
If, for example, a built-in register preset feature is used in a simple design, the target
architectures are limited. Consider this version of the design:
48
pin
pin;
istype 'reg,buffer';
Clock;
Preset;
!Q1.fb ;
test_vectors ([Clock,Preset]
[ .c. ,
1 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
1 ]
[ .c. ,
1 ]
end
->
->
->
->
->
->
->
Q1)
1;
0;
1;
0;
1;
1;
The equation for Q1 still uses the := assignment operator and .FB for a pin-to-pin
description of Q1's behavior, but the use of .AP to describe the reset function
requires consideration of different device architectures. The .AP extension, like the
.D and .Q extensions, is associated with a flip-flop input, not with a device output pin.
If the target device has inverted outputs, the design will not reset properly, so this
ambiguous reset behavior is removed by using the buffer attribute, which reduces
the range of target devices to those with non-inverted outputs.
Using .ASET instead of .AP can solve this problem if the fitter being used supports
the .ASET dot extension.
Versions 5 and 7 of the design above and below are unambiguous, but each is
restricted to certain device classes:
module Q1_7l
Q1
Clock,Preset
equations
Q1.CLK =
Q1.AR
=
Q1
:=
pin
pin;
istype 'reg,invert';
Clock;
Preset;
!Q1.fb ;
test_vectors ([Clock,Preset]
[ .c. ,
1 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
0 ]
[ .c. ,
1 ]
[ .c. ,
1 ]
end
->
->
->
->
->
->
->
Q1)
1;
0;
1;
0;
1;
1;
49
NOTE
You also need to specify istype invert or buffer when you use
detailed syntax.
Using := for flip-flop types other than D-type is only possible if register synthesis
features are available to convert the generated equations into equations appropriate
for the alternative flip-flop type specified. Since the use of register synthesis to
convert D-type flip-flop stimulus into JK or SR-type stimulus usually results in
inefficient circuitry, the use of := for these flip-flop types is discouraged. Instead, you
should use the .J and .K extensions (for JK-type flip-flops) or the .S and .R extensions
(for SR-type flip-flops) and use a detailed description method (including 'invert' or
'buffer' attributes) to describe designs for these register types.
There is no provision in the language for directly writing pin-to-pin equations for
registers other than D-type. State diagrams, however, may be used to describe
pin-to-pin behavior for any register type.
50
istype 'reg';
equations
[q1,q0].clk = clock;
[q1,q0] := ([q1,q0].FB + 1) & !reset;
test_vectors ([clock,reset]
[ .c. , 1 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 1 ]
end
->
->
->
->
->
->
->
->
[
[
[
[
[
[
[
[
q1,
0 ,
0 ,
1 ,
1 ,
0 ,
0 ,
0 ,
q0])
0 ];
1 ];
0 ];
1 ];
0 ];
1 ];
0 ];
51
equations
[q1,q0].clk = clock;
![q1,q0] := (![q1,q0].FB + 1) & !reset;
test_vectors ([clock,reset]
[ .c. , 1 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 1 ]
end
->
->
->
->
->
->
->
->
[!q1,!q0])
[ 0 , 0 ];
[ 0 , 1 ];
[ 1 , 0 ];
[ 1 , 1 ];
[ 0 , 0 ];
[ 0 , 1 ];
[ 0 , 0 ];
equations
[q1,q0].clk = clock;
![q1,q0].D := (![q1,q0].Q + 1) & !reset;
test_vectors ([clock,reset]
[ .c. , 1 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 0 ]
[ .c. , 1 ]
end
->
->
->
->
->
->
->
->
[!q1,!q0])
[ 0 , 0 ];
[ 0 , 1 ];
[ 1 , 0 ];
[ 1 , 1 ];
[ 0 , 0 ];
[ 0 , 1 ];
[ 0 , 0 ];
Both of these designs describe an up counter with active-low outputs. The first
example inverts the signals explicitly (in the equations and in the test vector header),
while the second example uses an active-low declaration to accomplish the same
thing.
52
Polarity Control
Polarity Control
Automatic polarity control is a powerful feature in ABEL-HDL where a logic function is
converted for both non-inverting and inverting devices.
A single logic function may be expressed with many different equations. For example,
all three equations below for F1 are equivalent.
(1) F1 = (A & B);
(2) !F1 = !(A & B);
(3) !F1 = !A # !B;
In the example above, equation (3) uses two product terms, while equation (1)
requires only one. This logic function will use fewer product terms in a non-inverting
device than in an inverting device. The logic function performed from input pins to
output pins will be the same for both polarities.
Not all logic functions are best optimized to positive polarity. For example, the
inverted form of F2, equation (3), uses fewer product terms than equation (2).
(1) F2 = (A # B) & (C # D);
(2) F2 = (A & C) # (A & D) # (B & C) # (B & D);
(3) !F2 = (!A & !B) # (!C & !D);
Programmable polarity devices are popular because they can provide a mix of noninverting and inverting outputs to achieve the best fit.
Using Istype neg, pos, and dc to Control Equation and Device Polarity
The neg, pos, and dc attributes specify types of optimization for the polarity as
follows:
53
Flip-flop Equations
neg
pos
dc
NOTE
The polarity of devices that feature a fixed inverter in this location, and a
programmable inverter before the register, cannot be specified using invert and
buffer.
Flip-flop Equations
Pin-to-pin equations (using the := assignment operator) are only supported for D
flip-flops. ABEL-HDL does not support the := assignment operator for T, SR or JK
flip-flops and has no provision for specifying a particular output pin value for these
types.
If you write an equation of the form:
Q1 := 1;
and the output, Q1, has been declared as a T-type flip-flop, the ABEL-HDL compiler
will give a warning and convert the equation to
Q1.T = 1;
54
55
56
module pin2pin;
Clk
Toggle
Ena
Qout
pin
pin
pin
pin
1;
2;
11;
19 istype 'reg';
equations
Qout
:= !Qout.FB & Toggle;
Qout.CLK = Clk;
Qout.OE
= !Ena;
test_vectors([Clk,Ena,Toggle]
[.c., 0 , 0
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
end
-> [Qout])
->
0;
->
1;
->
0;
->
1;
->
0;
-> .Z.;
->
1;
-> .Z.;
->
0;
57
device 'P16R8';
pin 1;
pin 2;
pin 11;
pin 19 istype 'reg_D';
equations
!Qout.D
Qout.CLK
Qout.OE
test_vectors([Clk,Ena,Toggle]
[.c., 0 , 0
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
end
-> [Qout])
->
0;
->
1;
->
0;
->
1;
->
0;
-> .Z.;
->
1;
-> .Z.;
->
0;
NOTE
To implement this design in a device that does not feature inverted outputs, the
design description must be modified. The following example shows how to write this
detailed design:
58
module detail2
Clk
Toggle
Ena
Qout
equations
Qout.D
Qout.CLK
Qout.OE
pin
pin
pin
pin
1;
2;
11;
19 istype 'reg_D';
test_vectors([Clk,Ena,Toggle]
[.c., 0 , 0
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
[.c., 1 , 1
]
[ 0 , 0 , 1
]
end
-> [Qout])
->
0;
->
1;
->
0;
->
1;
->
0;
-> .Z.;
->
1;
-> .Z.;
->
0;
59
([i3,i2,i1,i0]->[f3,f2,f1,f0])
[ 0, 0, 0, 0]->[ 0, 0, 0, 1];
[ 0, 0, 0, 1]->[ 0, 0, 1, 1];
[ 0, 0, 1, 1]->[ 0, 1, 1, 1];
[ 0, 1, 1, 1]->[ 1, 1, 1, 1];
[ 1, 1, 1, 1]->[ 1, 1, 1, 0];
[ 1, 1, 1, 0]->[ 1, 1, 0, 0];
[ 1, 1, 0, 0]->[ 1, 0, 0, 0];
[ 1, 0, 0, 0]->[ 0, 0, 0, 0];
This truth table has four inputs, and therefore sixteen (24) possible input
combinations. The function specified, however, only indicates eight significant input
combinations. For each of the design outputs (f3 through f0) the truth table specifies
whether the resulting value should be 1 or 0. For each output, then, each of the eight
individual truth table entries can be either a member of a set of true functions called
the on-set, or a set of false functions called the off-set.
Using output f3, for example, the eight input conditions can be listed as on-sets and
off-sets as follows (maintaining the ordering of inputs as specified in the truth table
above):
on-set
0 1 1
1 1 1
1 1 1
1 1 0
of f3
1
1
0
0
off-set of f3
0 0 0 0
0 0 0 1
0 0 1 1
1 0 0 0
The remaining eight input conditions that do not appear in either the on-set or off-set
are said to be members of the dc-set, as follows for f3:
dc-set of f3
0 0 1 0
0 1 0 0
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 1
60
pin;
pin istype 'dc,com';
([i3,i2,i1,i0]->[f3,f2,f1,f0])
[ 0, 0, 0, 0]->[ 0, 0, 0, 1];
[ 0, 0, 0, 1]->[ 0, 0, 1, 1];
[ 0, 0, 1, 1]->[ 0, 1, 1, 1];
[ 0, 1, 1, 1]->[ 1, 1, 1, 1];
[ 1, 1, 1, 1]->[ 1, 1, 1, 0];
[ 1, 1, 1, 0]->[ 1, 1, 0, 0];
[ 1, 1, 0, 0]->[ 1, 0, 0, 0];
[ 1, 0, 0, 0]->[ 0, 0, 0, 0];
end
61
Exclusive OR Equations
Exclusive OR Equations
Designs written for exclusive-OR (XOR) devices should contain the 'xor' attribute for
architecture-independence.
istype 'com,xor';
Also, when writing equations for XOR PALs, you should use parentheses to group
those parts of the equation that go on either side of the XOR. This is because the
XOR operator ($) and the OR operator (#) have the same priority in ABEL-HDL. See
example octalf.abl.
This design describes a simple four-bit counter. Since the addition operator results in
XOR operators for the four outputs, the 'xor' attribute can reduce the amount of
circuitry generated.
62
Exclusive OR Equations
NOTE
63
Exclusive OR Equations
You can emulate a JK flip-flop with a D flip-flop and an XOR gate. This technique is
useful in devices such as the GAL20VP8. The circuitry and Boolean expression is
shown in Figure 4-10.
64
State Machines
State Machines
A state machine is a digital device that traverses a predetermined sequence of states.
State-machines are typically used for sequential control logic. In each state, the
circuit stores its past history and uses that history to determine what to do next.
This section provides some guidelines to help you make state diagrams easy to read
and maintain and to help you avoid problems. State machines often have many
different states and complex state transitions that contribute to the most common
problem, which is too many product terms being created for the chosen device. The
topics discussed in the following subsections help you avoid this problem by reducing
the number of required product terms.
The following subsections provide state machine considerations:
65
State Machines
module Sequence
title 'State machine example';
q1,q0
clock,enab,start,hold,reset
halt
in_B,in_C
sreg
"State Values...
A = 0;
pin
pin
pin
pin
=
B = 1;
C = 2;
equations
[q1,q0,halt].clk = clock;
[q1,q0,halt].oe = !enab;
state_diagram sreg;
State A:
" Hold in state A until start is active.
in_B = 0;
in_C = 0;
IF (start & !reset) THEN B WITH halt := 0;
ELSE A WITH halt := halt.fb;
State B:
" Advance to state C unless reset is active
in_B = 1;
" or hold is active. Turn on halt indicator
in_C = 0;
" if reset.
IF (reset) THEN A WITH halt := 1;
ELSE IF (hold) THEN B WITH halt := 0;
ELSE C WITH halt := 0;
State C:
" Go back to A unless hold is active
in_B = 0;
" Reset overrides hold.
in_C = 1;
IF (hold & !reset) THEN C WITH halt := 0;
ELSE A WITH halt := 0;
test_vectors([clock,enab,start,reset,hold]->[sreg,halt,in_B,in_C])
[ .p. , 0 , 0 , 0 , 0 ]->[ A , 0 , 0 , 0 ];
[ .c. , 0 , 0 , 0 , 0 ]->[ A , 0 , 0 , 0 ];
[ .c. , 0 , 1 , 0 , 0 ]->[ B , 0 , 1 , 0 ];
[ .c. , 0 , 0 , 0 , 0 ]->[ C , 0 , 0 , 1 ];
[
[
[
[
.c.
.c.
.c.
.c.
,
,
,
,
0
0
0
0
,
,
,
,
1
1
0
0
,
,
,
,
0
0
1
0
,
,
,
,
0
0
0
0
]->[
]->[
]->[
]->[
A
B
A
A
,
,
,
,
0
0
1
1
,
,
,
,
0
1
0
0
,
,
,
,
0
0
0
0
];
];
];
];
[
[
[
[
.c.
.c.
.c.
.c.
,
,
,
,
0
0
0
0
,
,
,
,
1
0
0
0
,
,
,
,
0
0
0
0
,
,
,
,
0
1
1
0
]->[
]->[
]->[
]->[
B
B
B
C
,
,
,
,
0
0
0
0
,
,
,
,
1
1
1
0
,
,
,
,
0
0
0
1
];
];
];
];
end
66
State Machines
67
State Machines
Other Flip-flops
If none of the state conditions is met in a state machine that employs JK, RS, and
T-type flip-flops, the state machine does not advance to the next state, but holds its
present state due to the low input to the register from the OR array output. In such a
case, the state machine can get stuck in a state. You can use this holding behavior to
your advantage in some designs.
pin
pin
pin
pin
1, 8, 7;
16;
15..13;
11..9;
"Preset control
= 1, 0, .C., .X.;
= [S3..S0];
Reset inputs to traffic light flip-flops
= [GA.S,GA.R];
= [YA.S,YA.R];
= [RA.S,RA.R];
= [GB.S,GB.R];
= [YB.S,YB.R];
= [RB.S,RB.R];
= [ 1 , 0 ];
= [ 0 , 1 ];
68
State Machines
State
State
State
State
1:
2:
3:
4:
State 5:
YellowA = Off;
RedA
= On ;
RedB
= Off;
GreenB = On ;
goto 8 with COMP = 1;
if (!SenA & SenB ) then 8 with COMP = 1;
if ( SenA & !SenB ) then 12 with COMP = 1;
if ( SenA == SenB ) then 9 with COMP = 1;
State 8:
State
State
State
State
9:
10:
11:
12:
State 13:
end
69
State Machines
This design uses the complement array feature of the Signetics FPLA devices to
perform an unconditional jump to state [0,0,0,0]. If you use the @DCSET directive,
the equation that specifies this transition
[S3,S2,S1,S0].R = (!COMP & [1,1,1,1]);
will conflict with the dc-set generated by the state diagram for S3.R, S2.R, S1.R, and
S0.R. If equations are defined for state bits, the @DCSET directive is incompatible.
This conflict would result in an error and failure when the logic for this design is
optimized.
To correct the problem, you must remove the @DCSET directive so the implied dc-set
equations are folded into the off-set for the resulting logic function. Another option is
to rewrite the module as shown below.
module TRAFFIC1
title 'Traffic Signal Controller'
Clk,SenA,SenB
PR
GA,YA,RA
GB,YB,RB
pin
pin
pin
pin
1, 8, 7;
16;
15..13;
11..9;
S3..S0
H,L,Ck,X
Count
"Preset control
70
State Machines
@DCSET
state_diagram Count
State 0:
State 1:
State 2:
State 3:
State 4:
State 5:
State 6:
State 7:
State 8:
State
State
State
State
9:
10:
11:
12:
State 13:
State 14:
State 15:
Off;
On ;
if (!SenA
if ( SenA
if ( SenA
goto 10;
goto 11;
goto 12;
GreenB =
YellowB =
goto 13;
YellowB =
RedB
=
RedA
=
GreenA =
goto 0;
goto 0;
"Power up
RedA
=
YellowA =
GreenA =
RedB
=
YellowB =
GreenB =
goto 0;
Off;
On ;
Off;
On ;
Off;
On ;
Off;
On ;
Off;
On ;
end
71
State Machines
Simple
Bit Values
00
01
10
11
Preferred
Bit Values
00
01
11
10
If one of your state register bits uses too many product terms, try reorganizing the bit
values so that state register bit changes in value as few times as possible as the state
machine moves from state to state.
Obviously, the choice of optimum bit values for specific states can require some
tradeoffs; you may have to optimize for one bit and, in the process, increase the value
changes for another. The object should be to eliminate as many product terms as
necessary to fit the design into the device.
72
State Machines
State Register Bit Values
State Name
A
B
C1
C2
C3
D
Q3
0
0
1
1
1
0
Q2
0
0
0
1
1
1
Q1
0
1
1
1
0
0
This choice of state register bit values allows you to use Q3 as a flag to indicate when
the machine is in any of the Cn states. When Q3 is high, the machine is in one of the
Cn states. Q3 can be assigned directly to an output pin on the device. Notice also that
these bit values change by only one bit as the machine cycles through the states, as
is recommended in the section above.
73
State Machines
pin;
pin;
pin istype 'com';
" inputs
" reset inputs
" simple outputs
state_register;
state;
equations
sreg1.clk = clock;
state_diagram sreg1
state S0:
goto S1 with {x = a & b;
y = 0;
}
state S1: if (a & b)
then S2 with {x = 0;
y = 1; }
state S2: x = a & b;
y = 1;
if (a) then S1 else S2;
state S3:
goto S0 with {x = 1;
y = 0; }
async_reset S0: a_reset;
sync_reset S0: s_reset;
end
74
75
module DECADE
title 'Decade Counter
Uses Complement Array
Michael Holley
Data I/O Corp'
decade
device 'F105';
Clk,Clr,F0,PR
pin 1,8,18,19;
P3..P0
node 40..37;
COMP
node 49;
F0,P3..P0
_State
H,L,Ck,X
istype 'reg_sr,buffer';
= [P3,P2,P1,P0];
= 1, 0, .C., .X.;
equations
[P3,P2,P1,P0,F0].ap = PR;
[F0,P3,P2,P1,P0].clk = Clk;
"Output
Next State
Present State
Input
[F0.S, COMP,
P0.S] = !P3.Q & !P2.Q & !P1.Q & !P0.Q & !Clr; "0 to 1
[
COMP,
P1.S,P0.R] = !P3.Q & !P2.Q & !P1.Q & P0.Q & !Clr; "1 to 2
[
COMP,
P0.S] = !P3.Q & !P2.Q & P1.Q & !P0.Q & !Clr; "2 to 3
[
COMP,
P2.S,P1.R,P0.R] = !P3.Q & !P2.Q & P1.Q & P0.Q & !Clr; "3 to 4
[
COMP,
P0.S] = !P3.Q & P2.Q & !P1.Q & !P0.Q & !Clr; "4 to 5
[F0.R, COMP,
P1.S,P0.R] = !P3.Q & P2.Q & !P1.Q & P0.Q & !Clr; "5 to 6
[
COMP,
P0.S] = !P3.Q & P2.Q & P1.Q & !P0.Q & !Clr; "6 to 7
[
COMP,P3.S,P2.R,P1.R,P0.R] = !P3.Q & P2.Q & P1.Q & P0.Q & !Clr; "7 to 8
[
COMP
P0.S] = P3.Q & !P2.Q & !P1.Q & !P0.Q & !Clr; "8 to 9
[
P3.R,P2.R,P1.R,P0.R] =
!COMP; "Clear
"After Preset, clocking is inhibited until High-to-Low clock transition.
test_vectors
([Clk,PR,Clr] -> [_State,F0 ])
[ 0 , 0, 0 ] -> [
X , X];
[ 1 , 1, 0 ] -> [^b1111, H]; " Preset high
[ 1 , 0, 0 ] -> [^b1111, H]; " Preset low
[ Ck, 0, 0 ] -> [
0 , H]; " COMP forces to State 0
[ Ck, 0, 0 ] -> [
1 , H];
"
..vectors edited...
[ Ck, 0, 1 ] -> [
0 , H]; " Clear
end
76
The OFF-set lines in a Truth Table are necessary when more than one output is
assigned in the Truth Table. In this case, not all Outputs are fired under the same
conditions, and therefore OFF-set conditions do exist.
OFF-set lines are ignored because they represent the default situation, unless the
output variable is declared dc. In this case, a third set is built, the DC-set and the
Output inside it is assigned proper values to achieve the best logic reduction
possible.
If output type dc (or @dcset) is not used and multiple outputs are specified in a
Truth table, consider the outputs one by one and ignore the lines where the
selected output is not set.
Don't Cares (.X.) used on the right side of a Truth Table have no optimization
effect.
When dealing with multiple outputs of different kind, avoid general settings like
@DCSET which will affect all your outputs. Use istype .....DC on outputs for
which this reduction may apply.
Beware of Outputs for which the ON-set might be empty.
As a general guideline, it is important not to rely on first impression or simple
intuition to understand Truth tables. The way they are understood by the compiler
is the only possible interpretation. This means that Truth Tables should be
presented in a clear and understandable format, should avoid side effects, and
should be properly documented (commented).
77
Example 2 differs from example 1 because Out is now type COM, DC. (optimizable
dont care).
In this case, the lines commented as L1 and L2 are the ON-set, L3 and L4 are the
OFF-set and other combinations become dont care (DC-set) meaning 0 or 1 to
produce the best logic reduction. As a result in this example, the equation is VERY
simple.
@DCSET instruction would have produced the same result as to declare Out of type
dc. But @DCSET must be used with care when multiple outputs are defined: they all
become dc.
MODULE DEMO1
TITLE 'Example 2'
" Inputs
A, B, C pin;
"Output
Out pin istype 'com, dc';
Truth_Table
([A,B,C] -> Out )
[0,1,0] -> 1; // L1
[1,1,1] -> 1; // L2
[0,0,1] -> 0; // L3
[1,0,0] -> 0; // L4
END
// Resulting Reduced Equation :
// Out = (B);
78
For active-low outputs, one must be careful to specify 1 for the active state if the
Output appears without the exclamation point (!).
0 must be used when !output is defined in the table header.
We recommend the style used for Out1.
For Out3, line used is L3, L1 and L2 are ignored.
79
L1 is in fact ignored. Out is active high, therefore only line L4 is taken into account.
Likewise, L5 intersects L3, but is ignored since it is not in the ON-set for Out.
Globally, only L2, L3 and L4 are taken into account, as we can check in the resulting
equation, without any error reported.
80
NOTE
Example 6 shows that-> .X. states are not optimized if DC type or @DCSET are not
used.
These lines are ALWAYS ignored.
MODULE DEMO6
TITLE 'Example 6'
" Inputs
A, B, C pin;
"Output
Outpin istype 'com';
" Equivalence
X = .X.;
Truth_Table
([A,B,C] -> Out )
[0,0,0] -> 0;
[0,0,1] -> X;
[0,1,0] -> 1;
[0,1,1] -> X;
[1,X,X] -> X;
END
// As is : Out = (!A & B & !C);
// With istype 'com,DC' : Out = (B);
They are in fact of no use, except maybe as a way to document that output does not
matter.
81
What we obtain is slightly unexpected. This table should produce Out=0; as the
result. (We enumerated only OFF conditions, and the polarity is POS (or default), so
unlisted cases should also turn into zeroes.)
One reason to build such a table could be when multiple outputs are defined, and
when Out needs to be shut off for whatever reason.
In the absence of the line L4, the result is not intuitive. The output is 0 only for the
listed cases (L1, L2, L3), and is 1 for all other cases, even if dc or pos is used.
When line L4 is restored, then the output equation becomes Out = (!A & !B & !C);
because we fall in the general situation where the ON-set is not empty.
82
Index
Symbols
Attributes
collapsing nodes 42
in lower-level sources 39
Auto-update 29
'attribute'
and polarity control 54
'collapse'
selective collapsing 42
'neg'
and polarity control 53
.D 56
.FB 55
.PIN 55
.Q 55
:=
alternate flip-flop types 50
@DCSET
example 61
with state machines 68
'xor' 62
collapse
collapsing nodes 42
Keep
collapsing nodes 42
B
Bottom-up design 20
C
Collapsing nodes 42
selective 42
Combinational nodes 40
Compilation 17
Complement arrays 75
example 76
A
ABEL-HDL
enter an ABEL-HDL description 25
enter logic description 27
enter test vectors 28
overview 14
properties 31
strategies 32
ABEL-HDL Compiling 24
Active-low declarations 51
actlow1.abl 52
actlow2.abl 51
Attributes
and architecture independence 43
Architecture independence
attributes 43
dot extensions 43, 56
dot extensions, example 57
resolving ambiguities 44
Arrays, complement 75
D flip-flop
unsatisfied transition conditions 67
Dangling nodes 40
dc
and polarity control 53
dc.abl 61
Dc-set 60
and optimization 61
decade.abl 76
Declarations
active-low 51
Design hierarchy 17
Design Overview
compilation 17
device programming 17
hierarchy 17
projects 15
simulation 17
sources 16
Dot extensions
and detail descriptions 58
Detail descriptions 45
and macrocells 45
example, dot extensions 58, 59
example, inverting 48
example, non-inverting 47
when to use 50
83
Index
detail1.abl 58
detail2.abl 59
Device programming 17
Devices
programmable polarity 53
Don't Care .X.
on left side of Truth Table 80
on right side of Truth Table 81
Detail descriptions
and dot extensions 58
Dot extensions
.D 56
.FB 55
.PIN 55
.Q 55
and architecture independence 43, 56
and architecture independence,
example 57
and feedback 55
example, detail 58, 59
no 55
E
Emulation of flip-flops 63
Equation polarity 53
Equations
for flip-flops 54
XOR 62
F
Feedback
and dot extensions 55
merging 41
Flip-flops
and dot extensions 54
detail descriptions 50
D-type 67
emulation with XORs 63
state diagrams 50
using := with 50
H
Hierarchical design
abstract 19
advantages of 19
approaches to 19
bottom-up 20
defined for ABEL-HDL 20
mixed 20
philosophy 19
symbols in 20
techniques 19
top-down 20
Hierarchical levels
defined 18
Hierarchy 17, 38
modular design 18, 19
I
Identifiers
in state machines 65
Inside-out design 20
Instantiation 38
Interface
submodule 39
Istype, and polarity control 54
J
JK flip-flop
and := 50
emulation of 63
L
Linking modules
merging feedbacks 41
post-linked optimization 41
Lower-level sources 39
instantiating 38
M
Mixed design 20
N
Node
collapsing 42
combinational 40
complement arrays 75
dangling 40
registered 40
removing redundant 41
selective collapsing 42
O
Off-set 60
One-bit changes 72
On-set 60
in Truth Tables 78
Optimization
and @DCSET 61
of XORs 62
post-linked 41
reducing product terms 72
Output enables 39
84
Index
P
pin2pin.abl 57
Pin-to-pin descriptions 44
and flip-flops 54
example 47
resolving ambiguities 44
Polarity control 53
active levels 53
Ports
declaring lower-level 39
Post-linked Optimization 41
Powerup state 67
Preset
built-in, example 48
Product terms
reducing 72
Programmable designing 12
Programmable polarity, active levels for
devices 53
Project sources 16
Properties 31
Q
Q11.abl
Q12.abl
Q13.abl
Q15.abl
Q17.abl
47
47
48
49
49
R
Redundant nodes 41
Registered design descriptions 44
Registered nodes 40
Registers
bit values in state machines 72
cleared state in state machines 67
powerup states 67
Reset
example, inverted architecture 49
example, non-inverted architecture 49
resolving ambiguities 49
S
Selective collapsing 42
sequence.abl 66
Simulation 17
Sources
ABEL-HDL 16
device 16
graphic waveform stimulus 16
project notebook 16
schematic 16
test vector 16
Verilog HDL 16
Verilog test fixture 16
VHDL 16
VHDL test bench 16
SR flip-flop
and := 50
State machine example 66
@DCSET 70
no @DCSET 68
State machines
and @DCSET 61, 68
cleared register state 67
design considerations 65
identifiers in 65
identifying states 72
illegal states 67
powerup register states 67
reducing product terms 72
using state register outputs 72
State registers 72
Strategies 32
Symbolic state descriptions 74
T flip-flop
and equations 54
Top-down design 20
traffic.abl 68
traffic1.abl 70
Transferring designs 43
Transition conditions 67
Tristate outputs 39
Truth Tables
ABEL-HDL 77
X
x1.abl 62
x2.abl 62
XORs
and operator priority 63
example 62
flip-flop emulation 63
implied 62
optimization of 62
85