Sunday, October 27, 2013

Fix Connections - Script

The 'Fix Connections' script is a modified version of 'Fix Overlaps' which was created by Petar Perisin and can be found at Altium Addons.

Download Script Link:

I will describe in this post how I used the 'Fix Connections'  script on a recent DDR3 design.

As demonstrated in DDR3 Routing Simplified - Part 2  to get accurate length data we need cleanly connected routes in our designs.

I recently reviewed a reference design and noted that 500+ bad connections were found in the design.

Click on images to view






















Let's clarify what the difference is for good and bad connections.

This design passed all DRC checks for opens and shorts, so in terms of connectivity there are no bad connections in the design.

However several of the length matched routes had bad connections in the design.  

These less than perfect connections resulted in wrong lengths being reported in the PCB panel for Total Net Lengths and the From -To Lengths.

Enter stage left, this where the 'Fix Connections' script shines.

As shown above 'All Nets' were checked for bad connections, however I wanted to verify the matched length routes in the DDR3 part of the design.

Using the drop down menu in the script I selected the 'DDR' Net Class which included all nets in the DDR3 circuitry and then selected Ok to run the script.























Note in this design there are also other DDR Net Classes that can be selected to focus on a specific data lane or the address and control lines.

By selecting a Net Classes and running the script I was able to easily find and fix the routes in the DDR Net Class.

Because the script remembers the last selected Net Class, I was able to quickly check and fix nets in selected Net Class.

Tip:

To further speed up the process the script was assigned to a custom menu and a hot key.

Conclusion


With a hot key set run the 'Fix Connections' script you can quickly find and clean up routes.

A big thank you to Petar Perisin, his efforts made this script possible.

Friday, October 25, 2013

Live Drill Table

Altium introduced the Live Drill Table in AD13.

The live drill table is scale-able which is nice, but I really don't see the value of the feature which updates the drill table every time I drop another via in the board. 

My main rant is that my fab drawings looked better when I used the old .legacy table.

For example here is screen shot of the .legacy


Click on images for better viewing
















Below is what the same board  looks like after placing the new live drill table.


















Nasty big graphic symbols, so crowded together that you can't tell what is what.

Also in the live drill table the option to use letters vice symbols appears to have been deprecated.

Sorry about the ranting today. AD14 was just released and with every new release I get a little angry. This because I'm getting tired of new features being introduced when in my opinion the Altium design software team should be focused on fixing bugs, adding better error handling to minimize the crashes and error reports.

As pointed out by Petr the Drill symbols can be scaled in the Outjob configuration.





















Thursday, October 17, 2013

Design Rules Reference

"This comprehensive reference provides detailed information on setting up design rules 
for a PCB design. It also covers addition of rule-based parameters to objects in the 
schematic and Design Rule Checking. Detailed information for each of the individual 
rule types and their associated constraints is also provided."

Source: Altium Design Rules Reference 

'via Blog this'

Wednesday, October 16, 2013

Measuring code performance in Delphi Scripts

First step in code optimization is to determine which procedures in our code need to be optimized.

A millisecond timer is needed to test for the elapsed time required to execute the code.

On a Windows Machine we can use 'GetTickCount'.  Below is a code snippet for Delphi.

procedure TForm1.ButtonClick(Sender: TObject);
var
  startTick  : DWord;
  delta      : DWord;
begin
  startTick := GetTickCount;

  DoSomething; // Your Code

  delta := GetTickCount - startTick;
  ShowMessage(IntToStr(delta) + 'ms');
end;


See what CapnBry has to say about GetTickCount:

'via Blog this'