The Designer's Guide to VHDL

Peter J. Ashenden


Errata

If you detect an error, I would be pleased to hear about it. You can send email to me at petera@cs.adelaide.edu.au. I will add errata to this list and acknowledge you as the finder. However, before sending an erratum, please check to make sure it's not already on the list.

Thanks.


Errata for the first to fourth printings

You can tell which printing of the book you have by looking at the copyright page overleaf from the title page.  Below the line "Printed in the United States of America" is a line with one or more double-digit and single-digit numbers.  The rightmost double-digit number is the year of printing, and the rightmost single-digit number is the printing number.  For example, the line
00   99   98   97   96     5   4   3   2   1
indicates the first printing (in 1996).


From: hutchins@west.smc.com (Robert Hutchins x2441)

In Figure 1-4 on page 6, there are two blocks labeled S. The one on the right should be labeled M. 


From: Ben Cohen <VhdlCohen@aol.com>

On page 198, in the discussion of procedure parameters, the text states:

"It is just a quirk of VHDL that we can specify both constant and in, even though to do so is redundant. Usually we simply leave out the keyword constant, relying on the mode to make our intentions clear."
The LRM states that a constant parameter may not be of an access type or a file type. Thus, a parameter of an access type must be of class variable . In VHDL-87, a parameter of a file type must be of class variable . In VHDL-93, a parameter of a file type must be of class file. Insert after the above quoted sentences:
"(The exceptions are parameters of access types, discussed in Chapter 17, and file types, discussed in Chapter 18.)"

From: Peter J. Ashenden <petera@cs.adelaide.edu.au>

In Figure 6-10 on page 174, the labels "ovf" on the two adders should be moved left a bit to clear the symbol outline.

In Figure 7-23 on page 220, the leftmost of the two vertical lines should be extended to meet the end of the horizontal line. 


From: Marvin Rich <mrich@VNET.IBM.COM>

In Figure 7-21 on page 218, the procedure p1 contains an assignment to the signal s. Since s and p1 are both declared in the enclosing architecture body, the asignment to s is illegal, for the reasons discussed in the last paragraph on page 202. In Figure 7-21, replace "s <= v1;" with "v1 := s;". 


From: Garland Bayley <garlandb@acm.org>

On page 320, second to last line, the text states, "If there is a primary binding indication, the incremental binding indication may not include an entity part." Replace "may not" with "must not", to emphasize that in this circumstance an entity part is prohibited in the incremental binding indication. 


From: Pat Narikawa <inarikawa@ccgate.hac.com>

On page 38, make the following corrections.

Line 17: change "There are two predefined ..." to "There are three predefined ..."

Insert after line 18 a new code line:

type file_open_kind is (read_mode, write_mode, append_mode);
Line 21: change "and the type file_open_status is" to "and the types file_open_kind and file_open_status are".

Change the sentence in the VHDL-87 break-out to:

The types file_open_kind and file_open_status are not predefined in VHDL-87.

From: Christoph Cerny <cerny@fhe.tgm.ac.at>

On page 217, in the VHDL-87 break-out, replace the operator xor with xnor.

On page 624, in the VHDL-87 break-out, replace the operator xor with xnor.

On page 688, in the index entry for "xnor operator", add a reference to page 217. 


From: Peter J. Ashenden <petera@cs.adelaide.edu.au>

In Figure 5-32 on page 150, the instances of the reg4 entity should not include the and gates.  Instead, the clr and clk inputs to each reg4 instance should be connected as separate inputs to each flipflop, as shown in this corrected version.


From: Ken DellaPenta at Morgan Kaufmann Publishers, Inc.

On page 28, the cross-reference to Chapter 7 should be to Chapter 8.

On page 36, the cross-reference to Section 2.3 should be to Section 2.4.

Exercise 3 of Chapter 5 is not completely answered in Appendix G.  On page 659, add the following to the end of the answer to Exercise 3:


From: Peter J. Ashenden <petera@cs.adelaide.edu.au>

On page 52, Exercise 9 should be marked as difficulty level 2, not 1.


From: Alexei Krouglov <Alexei.Krouglov@matrox.com>

On page 181, change the last word of the page from "subtract" to "add".
 


From: Edward Wade at Morgan Kaufmann Publishers, Inc.

On page 136, Figure 5-24 is missing a caption.  Insert the following caption:


From: Alexei Krouglov <Alexei.Krouglov@matrox.com>

On page 346, fourth to last line: change "back_array" to "bank_array".

On page 359, eighth line, insert a new sentence after "... of the value.":

In Figure 15-35 on page 400, change the lower of the two labels "S1 bus" to "S2 bus".

On page 430, tenth line from the bottom, change "ir_enable" to "ir_immed2_en".
 


From: Graham Minchin <gtminch@tartarus.uwa.edu.au>

On page 43, Figure 2-4: the line from "record types" to "constrained array types" should be from "array types" to "constrained array types."
 


Errata for the fifth printing

You can tell which printing of the book you have by looking at the copyright page overleaf from the title page.  Below the line "Printed in the United States of America" is a line with one or more double-digit and single-digit numbers.  The rightmost double-digit number is the year of printing, and the rightmost single-digit number is the printing number.  For example, the line
00   99   98     5
indicates the fifth printing (in 1998).



From: Neil Boroky at The University of Adelaide

In Figure 5-10 on page 120: the labelling of the fourth and fifth delta cycles should be "0 + 3 delta" and "0 + 4 delta" respectively.


From: John A. Rupf, Ph.D. <jrupf@spsu.edu>

On page 35: In the type definition for length, the correct number of um per mil is 25.4.  However, VHDL requires the multiple in a secondary units definition to be an integer.  Thus we cannot change 254 um to 25.4 um in this context.  Instead, change the type declaration to the following:

    type length is range 0 to 1E9
      units
        um;               -- primary unit: micron
        mm = 1000 um;     -- metric units
        m = 1000 mm;
        inch = 25400 um;  -- imperial units
        foot = 12 inch;
      end units length;

Also, in the examples of physical literals at the bottom of page 35, delete "450 mil", and insert "2 foot" at the end of the line.


From: Todd Salter <ra1700@email.sps.mot.com>

In Exercise 11 on page 79: The problem statement requires you to develop a model with an input of an enumeration type.  This requires an entity declaration with an input port of the enumeration type.  The only way an enumeration type can be made visible at the point of a port declaration is to declare the enumeration type in a package.  However, packages are not introduced until a later chapter.

To avoid this difficulty, change the problem statement as follows:

Develop a model for a floating-point arithmetic unit with data inputs x and y, data output z and function code inputs f1 and f0 of type bit.  Function codes f1 = '0' and f0 = '0' produce addition; f1 = '0' and f0 = '1' produce subtraction of y from x; f1 = '1' and f0 = '0' produce multiplication; and f1 = '1' and f0 = '1' produce division of x by y.

In the solution to Exercise 3 on page 658: The exit statement should exit from all of the nested loops.  Label the outermost loop with the label "search_loop", and change the exit statement to refer to this label.  The corrected code is:

    ...
    search_loop : for side in 0 to 1 loop
        for track in 0 to 79 loop
            for sector in 0 to 17 loop
                if ... then
                    ...
                    exit search_loop;
                ...