| 
 
  
  
  
  
  
   |  | SummaryIt is rather easy to write a Verilog description that simulates fine, but 
produces cryptic error messages during the implementation (synthesis) phase. 
This document lists common problems and provides troubleshooting tips to resolve 
them (the links are simply bookmarks on this web page):   Multiple outputs driving a common net
  DescriptionMultiple circuit outputs (gates or flip-flops) are tied together. This is 
  not acceptable from an electrical standpoint.SymptomsSynthesis error message: “Net nnn has multiple drivers”CauseThe same output signal name appears in more than one ‘always’ blockTroubleshootingSearch for the net named in the error message, and identify all the 
  ‘always’ blocks where the name appearsSolutionEnsure that the output signal is contained within a single ‘always’ blockCommentsThis problem is symptomatic of a sequential programming mindset. In order 
  to break this mindset, focus your attention exclusively on a single device (a 
  counter, for example), and write one ‘always’ block that describes the entire 
  behavior of the counter (its behavior on asynchronous reset, and its normal 
  behavior).  Inferred latch
  DescriptionA latch (similar to a flip-flop, except it is level-triggered instead of 
  edge-triggered) has been placed at the output of what is intended to be a 
  purely combinational circuit. SymptomsSynthesis warning message: “Inferred latch…” CauseCombinational logic that does not fully specify the output behavior for 
  all possible input combinations TroubleshootingFirst look for all combinational circuit ‘always’ blocks (those that do 
  not have edge qualifiers). Inside these blocks look for ‘if’ statements that 
  do not have an ‘else’, and ‘case’ statements that do not have a ‘default’.SolutionFix the ‘if’ or ‘case’ statement, or use technique of first setting all 
  outputs to a nominal value before the conditional statements. CommentsInserting unintended memory devices in your design can cause operational 
  problems in hardware, and will also cause problems in the implementation step.
   Ignored synthesis warning messages
  DescriptionYou see one or more warnings during synthesis step, but ignore them and 
  proceed to implementation SymptomsYellow warnings appear in synthesis, followed by red error messages in 
  implementation CauseSynthesis warnings mean that something is not correct. The problem may not 
  be severe enough to be called an “error” that stops synthesis, but it 
  effectively is an error for you because your design will not implement 
  properly.TroubleshootingSame procedure as 'Solution' nextSolutionStart with first synthesis warning and solve that problem first. Often 
  many (or all) successive warnings stem from the first cited problem. If you 
  still have warnings, or possibly a totally new set of warnings, still tackle 
  the first warning first. CommentsThe only synthesis warnings that can be safely ignored are those that you 
  understand completely. For example, if you have intentionally connected an 
  output pin to an input pin, you will see a warning about a “feed-through net”.
   Synthesis tool removes portions of your design
  DescriptionThe synthesis tool always optimizes your design, and will eliminate any 
  apparently unused portions of your circuit.SymptomsSynthesis warning message about “unreachable code” (as in an ‘if-else’ 
  statement with a conditional test that is always false) or “unlinked cell,” or 
  “removing pads.” Implementation error message saying named nets in UCF file 
  are not found in your design.CauseIf the synthesis tool concludes that some part of your circuit is useless 
  (for example, its output does not connect to an external port and does not get 
  used by any other internal device), then the tool removes the circuit and 
  backtracks to remove any previous circuits that are only associated with the 
  useless circuit. Eventually this can cause input ports to get removed as well.TroubleshootingSame procedure as 'Solution' nextSolutionFocus your attention on the named files and devices in the synthesis 
  warning messages. Look for device outputs that do not connect to anything, or 
  that connect to circuits that do nothing. CommentsThis is one of the more challenging problems to resolve!  Mixed edge-sensitive and level-sensitive signals in 
‘always’ block sensitivity list 
  DescriptionYour ‘always’ block begins with something like: ‘always @ (posedge 
  FirstSignal or SecondSignal)’SymptomsSynthesis tools will generate specific warningCauseIf your circuit is supposed to be sequential, then you must use an edge 
  qualifier (posedge or negedge) on both signals in the sensitivity listTroubleshooting Solution CommentsThe faulty ‘always’ block will simulate just fine, but it won’t 
  synthesize.  Failure to name all inputs in sensitivity list 
for a combinational circuit 
  DescriptionCombinational circuits described by an ‘always’ block must list all inputs 
  in the sensitivity listSymptomsSimulation will show a circuit output that is apparently unresponsive to 
  one or more of the inputs. Synthesis will generate a warning about an 
  “untested input”. CauseSimulator does not update an output unless the input is included in the 
  sensitivity list; it effectively is blind to changes in that input. TroubleshootingLook at all signals on the right-hand side of all assignments in the 
  ‘always’ block, and look for signal names that do not show up in the 
  sensitivity list.SolutionEnsure that every signal is included in the sensitivity list.Comments 
 Design Project Homepage   
      |