Design 
                  
                    - Create a design specification before beginning design 
                      work
 
                    - Always use the latest development system and Service 
                      Pack
 
                    - Use design components optimized for Xilinx 
                      
                    
 
                    - Use synchronous design practices
 
                    - Use HDL coding that works 
                      well for FPGAs 
                      
                        - Use CASE statements in place of IF-THEN-ELSE
 
                       
                     
                    - Design for a lookup table based architecture 
                      
                        - Limitation is on number of inputs, not complexity
 
                        - Recognize that inverters are always free
 
                        - Consider 
  
                          one-hot encoding for 
                          state machines 
                        - Consider 
  
                          LFSRs for counters 
                       
                     
                    - Partition logic intelligently 
                      
                        - Flip-flops at the outputs of the block
 
                       
                     
                    - Pipeline logic whenever speed is more important than latency
 
                    - Duplicate logic to improve routing delays or logic reduction
 
                    - Use built-in resources whenever possible 
                      
                        - Carry logic
 
                        - Global initialization
 
                        - Dedicated clock buffers
 
                        - Dedicated clock enables
 
                       
                     
                    - Use RAM in place of flip-flops
 
                    
                      - Small state machines
 
                      - FIFOs
 
                     
                   
                  Implementation
                  
                    - Do a functional simulation first
 
                    - Use realistic timing constraints 
                      to control placement and routing
 
                    - On the first implementation try, examine the mapping 
                      results before continuing to place and route 
 
                    
                      - Verify the correct logic resources are used
 
                      - Verify that no logic is incorrectly deleted
 
                      - Estimate if the number of levels of logic is sufficient 
                        to meet timing
 
                     
                    - On the first place and route try, use the default options
 
                    - For the best results, do not pre-assign pin locations
 
                    - Use the Timing Analyzer for quick timing analysis before 
                      simulation
 
                   
                   |