The Designer's Guide to VHDL, 3rd Edition

Peter J. Ashenden


If you detect an error that is not on the list below, I would be pleased to hear about it. You can send email to me at Thanks.

Corrections to the first printing

Page 20: In the VHDL-2002 call-out at the bottom of the page, delete assert from the list of identifiers that are not used as reserved words in VHDL-2002.

Page 50: In the first and second if statements on the page, replace cs2 with ncs2.

Page 92: In the assertion statement two-thirds down the page, replace expdata with expected_data. Also, delete the spurious closing parenthesis at the end of the assertion statement.

Page 103: In the assignment statement, change int_en to int_enable.

Page 113: In Example 4.5, in the architecture, insert a line containing the reserved word begin immediately after the first line of the architecture.

Page 114: In the entity instantiation at the top of the page, insert "work." before the entity name sample_processor.

Page 114: On the last line, change the two occurrences of typographers (curly) quotation marks to straight quotation marks.

Page 119: Change the expressions near the top of the page to

  minimum(string'(B"0001"), string'(B"0110")) = B"0001"
  maximum(string'(B"001000"), string'(B"10")) = B"10"

Page 120: In the declaration of signal x, change the reserved word signal to boldface.

Page 123: In the sixth line of the second paragraph, insert the following immediately before the sentence starting "On the other hand":

In this case, for each dimension at that level of the hierarchy, the array being converted must a matching element for each target index value.

Page 125: In the case statement near the top of the page, insert when before each of the two choice expressions.

Page 146: Add a semicolon to the end of the next-to-last line on the page:

  q <= (others => '0'); 

Page 147: In the assignment to req near the top of the page, change next_random_delay(ran_seed) to next_random_delay.

Pages 147-148: In the case statement that crosses the page turn, add arrows (=>) after the second, third, and fourth choices:

  case d_sel is
    when "00" =>
      q <= source0;
    when "01" =>
      q <= source1;
    when "10" =>
      q <= source2;
    when "11" =>
      q <= source3;
  end case; 

Page 148: The paragraph starting "This form of signal assignment ..." and the process next_state_logic that follows should be moved to page 147 and inserted immediately before the paragraph starting "The waveforms in a conditional signal assignment..." near the top of the page. Also, in the process next_state_logic, change "with current_state select" to "case current_state is" and insert when before each of the two choice expressions.

Page 149: In the case statement running over from the previous page, change the two occurrences of "grant =>" to "grant <=".

Page 165: In the last line of the process in Example 5.12, change next_state to next_state_logic.

Page 175: In the code in Example 5.20, add the concatenation operator (&) to the end of the line containing the reserved word report, as follows:

  report "Incorrect use of S_R_flip_flop: " &

Page 223: In Example 6.14, change the name of the procedure from swap_bv_arrays to swap.

Page 384: In Example 12.9, change the parameter in the call to procedure push from pending_stacks to pending_vertices.