Writing Testbenches
Functional Verification of HDL Models
Home  |  SystemVerilog  |  Reviews  |  Errata  |  Resources  |  Guild
 
 

First edition errata

  Despite the best efforts of my technical editor, no book is ever written without any errors. Until the next edition of the book, you will find a list of known errors in the current and past editions of the book.

The first section lists corrections of syntax errors in the code examples, or that could lead to misinterpretation in the text. The second section enumerates minor corrections to errors that do not otherwise affect the readability or understandability of the text.

If you find an error not listed here, please send an email to the author describing the error and a suggested solution. Please do not forget to include the edition and page number, as well as any sample or figure number where applicable.


Significant Errors

Chapter 2 5th
print
3rd/4th
print
2nd
print
1st
print
Page 27, 2nd paragraph: the line "with the "_bus" prefix" should read "with the "_bus" suffix".    
Chapter 4 5th
print
3rd/4th
print
2nd
print
1st
print
Page 98, Sample 4-16: "data <= std_logic_vector(unsigned(data, 8));" should read "data <= std_logic_vector(unsigned(wdat, 8));".  
Page 99, Sample 4-17: "wait until bus_gt == 1'b1;" should read "wait bus_gt == 1'b1;" and "endtask" is missing before "endmodule".    
Page 100, Sample 4-18: "wait until bus_gt == 1'b1;" should read "wait bus_gt == 1'b1;" and "endtask" is missing before "endmodule".    
Page 111, Sample 4-31: The following compiler symbols should be defined with the following bit ranges:
     `define HEC      [ 40: 33]
     `define PAYLD_0  [ 48: 41]
     `define PAYLD_1  [ 56: 49]
     ...
     `define PAYLD_47 [424:417]
                           
 
Page 118, Footnote: Ben's last name should be spelled "Cohen", not "Chon".      
Page 130, first paragraph: The first sentence should read "Processes sensitive to the new values are then executed at the next delta cycle".  
Page 133, Sample 4-48 and Sample 4-49: Line comments should start with "--" instead of "//".    
Page 152, Figure 4-14: both "radd" labels should read "wdat" and "wdat" ("radd") value in (a) should be "8'h00" instead of "8'h5A"      
Chapter 5 5th
print
3rd/4th
print
2nd
print
1st
print
Page 199, Sample 5-53: Line comments should start with "--" instead of "//".    
Page 200, Sample 5-54: Line comments should start with "--" instead of "//".    
Page 202, Sample 5-57: Line comments should start with "--" instead of "//".    
Page 207, Sample 5-61: "MEM_RD = 0;" should read "MEM_RD = 0,"    
Page 208, Sample 5-62: Line comments should start with "--" instead of "//".    
Chapter 6 5th
print
3rd/4th
print
2nd
print
1st
print
Page 223, Sample 6-2: There is no semi-colon at the end of the first line after the keyword "is".    
Page 241, Sample 6-14: The second record type declaration should be named "frm_srv_typ" instead of "frm_srv".    
Page 243, Sample 6-17: the line "data := frm_src.data;" should read "data := frm_srv.data;"    
Page 244, Sample 6-18: the direction of the "data" parameter of the "write" procedure should be of mode "in" instead of "out".  
Page 249, Sample 6-24: There is no semi-colon after the "is" keywords in both package and package body declarations.    
Page 249, Sample 6-24: The package declaration is missing a "end packet;" before the package body declaration.    
Page 252, Sample 6-27: The 'transaction attribute cannot be used on a signal-class argument in a subprogram (AAAAAaaaaaarrrrrgggghhhhhh!).

There are two solutions:

  1. Use global signals for the control records instead of passing them through the procedure's interface
  2. Add a boolean field in the control records that you must toggle every time you assign to them to force an event.
Page 266, Sample 6-45: "m0.DWITDH = DSIZE" should read "m0.DWIDTH = DSIZE".    
Chapter 7 5th
print
3rd/4th
print
2nd
print
1st
print
Pages 275, Sample 7-6: The if statement should read as follow:
   if (read) data = entry >> (addr[3:0] * 16);
   else ...
                           
Pages 279, Sample 7-11: The assignment to the signal named "strope" should be to the signal named "strobe".  
Pages 290, Sample 7-17: The assert statement should read as follow:
   assert false
      report "Simulation terminated normally"
      severity failure;
                           
   
Pages 293, Sample 7-20: The first $write statement is missing a closing newline and double-quote and should read as follow:
   $write("*FAIL*: %0d missed errors\n", expect);
                           
   
Pages 295: Item 3 should read as follow: "Specify a directory to search for files likely to contain the definition of a missing module, using the -y option. The files used in the simulation depend on the +libext command-line option."    
Pages 295: Item 5 should read as follow: "Include a source file inside another using the `include directive. The actual file included in the simulation depends on the +incdir command-line option."    
Pages 303, Sample 7-37 and Sample 7-38: "$Source$" should be replaced with "$Header$".    
Page 314, Sample 7-56: Line comments should start with "--" instead of "//".    
Appendix A 5th
print
3rd/4th
print
2nd
print
1st
print
Page 342: The second always block in the code example that creates a race condition should read:
    always @ (r)
    begin
       if (r) q <= 1'b0;
    end
                           
 

Minor Errors

Table of Contents 5th
print
3rd/4th
print
2nd
print
1st
print
Page v: Title should be spelled "Table of Contents".      
Pages vi, viii, x, and xii: Header should be spelled "Table of Contents".    
Page v: "Reconvergeance" should be spelled "Reconvergence".      
About the Cover 5th
print
3rd/4th
print
2nd
print
1st
print
Page xiv, 3rd paragraph: "two and a half tons more" should read "two and a half times more".    
Page xiv, last line: "job" should be plural.      
Chapter 1 5th
print
3rd/4th
print
2nd
print
1st
print
Pages 4, 7, and 11: "Reconvergeance" should be spelled "Reconvergence".      
Page 6: "Poka-Yoka" should be spelled "Poka-Yoke".    
Pages 12-15: "controlability" should be spelled "controllability".      
Page 14, 3rd paragraph: "inputs and output" should be spelled "inputs and outputs".    
Page 16, 3rd paragraph: "by pass" should be spelled "bypass".    
Chapter 2 5th
print
3rd/4th
print
2nd
print
1st
print
Page 25, last paragraph: "32-bit wise" should be read "32-bits wide".    
Page 26, 2nd paragraph: "greater then 32 bits" should be read "greater than 32 bits".    
Page 34, last paragraph: "locked-step" should be spelled "lock-step".      
Page 41, 1st paragraph, 4th line: the line "that is has executed" should read "that it has executed"    
Page 46, 2nd paragraph: the last instance of the word "tool" should be plural.      
Page 46, 4th paragraph: "level abstraction" should read "level of abstraction".      
Page 54, 1st paragraph, 6th line: "are be" should read "are"    
Chapter 3 5th
print
3rd/4th
print
2nd
print
1st
print
Pages 65-66, 77, and 79: "controlability" should be spelled "controllability".      
Page 70, 1st paragraph, 4th line: "your have" should read "you have"    
Page 70, 1st paragraph, 7th line: "If detail" should read "If detailed"    
Page 76, 1st side note: "Groups features" should read "Group features"    
Chapter 4 5th
print
3rd/4th
print
2nd
print
1st
print
Page 92, 4th paragraph, line 5: "in smaller" should read "into smaller"    
Page 102, 2nd paragraph, line 4: "at all time" should read "at all times"    
Page 113, last word: should read "usefulness".      
Page 114, 2nd paragraph: should read "Two implementation avenues".  
Page 120, 2nd paragraph, line 4: "easy mean" should read "easy means"    
Page 122, last sidenote: "while Verilog as" should read "while Verilog has"    
Page 125, 2nd and 5th paragraphs: The last sentence should end with a period.    
Page 126, 3rd paragraph: "most frustrating concept" should read "most frustrating concepts".    
Page 128, 1st paragraph, line 5: "on Verilog" should read "in Verilog"    
Page 136, Sample 4-53: "for I in" should read "for i in" (twice).    
Page 154, last paragraph: "described in details" should read "described in detail", and "make Verilog models non-portables" should real "make Verilog models non-portable".    
Chapter 5 5th
print
3rd/4th
print
2nd
print
1st
print
Page 155, 2nd paragraph: "they are" should read "it is".    
Page 176, 1st paragraph: "reproduceable" should be spelled "reproducible".    
Page 176, 3rd paragraph: "simply" should read "simple".      
Page 183, Sample 5-37: semi-colons should not be bold.    
Page 187, last paragraph "a asynchronous" should read "an asynchronous".      
Page 205, 2nd paragraph "for output monitor" should read "for an output monitor".    
Page 206, 2nd paragraph "0XDEADBEEF" should read "0xDEADBEEF".    
Page 206, 2nd paragraph "0XDEADBEEF" should read "0xDEADBEEF".    
Page 211, 1st paragraph: "and show how" should read "and shows how".    
Chapter 6 5th
print
3rd/4th
print
2nd
print
1st
print
Page 223, Sample 6-2: There is no semi-colon at the end of the first line after the keyword "is".    
Page 224, 2nd paragraph: "With the suprograms" should read "With the subprograms".    
Page 224, 4th paragraph: "and called" should read "and is called".    
Page 258, last paragraph: "difference data" should read "different data".    
Page 259, 3rd paragraph: "number of time" should read "number of times".    
Page 264, 1st paragraph: "implicitely" should be spelled "implicitly".    
Page 264, 2nd paragraph: "reproduceable" should be spelled "reproducible".    
Page 265, last paragraph: "the AWIDTH and DWITH" should read "the AWIDTH and DWIDTH".    
Page 266: The last line is repeated on the next page      
Chapter 7 5th
print
3rd/4th
print
2nd
print
1st
print
Pages 282-283: "Reconvergeant" should be spelled "Reconvergent".      
Pages 283, Figure 7-2: "Input Formater" should be read "Input Formatter".    
Pages 283, first line: "by different switching node" should read "by a different switching node".    
Pages 312, last paragraph: "succesful" should be spelled "successful".    
Appendix A 5th
print
3rd/4th
print
2nd
print
1st
print
Pages 320, last paragraph: "reguardless" should be spelled "regardless".    
Pages 343, first paragraph: "ouput" should be spelled "output".    
Index 5th
print
3rd/4th
print
2nd
print
1st
print
Page 351: "Poka-Yoka" should be spelled "Poka-Yoke".    
Pages 352 and 254: "Reconvergeance" should be spelled "Reconvergence".