DRC with tiles

edited December 2013 in Layout
Matthias,

I have a drc.lydrc file that I run on small GDS.
You mentionned that I should run on tiles for large layouts to speed up the DRC and use less memory.

How to run drc check by tiling the layout?
Is there a simple and easy method ?
If not, can you add a button on the DRC check to add this option ?

Thanks, Best regards,
Laurent

Comments

  • edited November -1

    Hi Laurent,

    Tiling is a method built into the DRC language and you can enable tiling by adding certain commands to the script. Please see http://www.klayout.de/doc/manual/drc_runsets.html#h2-639 for details.

    Regards,

    Matthias

    P.S. have you had a look at the comments I gave on the other forum entry recently?

  • edited December 2013

    Thanks Matthias,

    It works well. However, I found that the following command does not work if the "drc_log.txt" is not already created.:

    log_file("drc_log.txt")
    verbose(true)
    info("This message will be sent to the log file")
    ...
    

    By the way, how to log the time spent by each test.

    Also, the log ans timeline shown on KLAYOUT screen is the name of the command : "-", "sizing", "extention", ...
    Could you add the name of the test as set in the .output , if an .output command is also set on the same line?
    It would be of great help to know at which step we are in the DRC process.

    Thanks, Best regards,

    Laurent

  • edited December 2013

    Hi Laurent,

    thank you for mentioning that bug.

    Regarding the request: it's very difficult to output the name of the test, but I thought that adding the source line behind the command might provide enough information to associate the timing with the command. You could also add explicit log output. For example:

    report("A drc")
    verbose
    
    info("--- input part")
    poly = input(6)
    active = input(1)
    info("--- processing")
    gate = poly & active
    gate_width = gate.width(0.25.micron)
    info("--- output")
    gate_width.output("cat100")
    

    will output something like this:

    --- input part
    "_input" in: drc.lydrc:5
    Elapsed: 0.000s
    "_input" in: drc.lydrc:6
    Elapsed: 0.000s
    --- processing
    "&" in: drc.lydrc:8
    Elapsed: 0.000s
    "width_check" in: drc.lydrc:9
    Elapsed: 0.000s
    --- output
    "_output" in: drc.lydrc:11
    Elapsed: 0.000s
    Total run time: 0.010s
    

    Matthias

  • edited November -1
    Matthias,

    My DRC check has now 400lines, when running it, it would be nice to know the line that is curently processing.
    The only command shown on the layout : "tiling and" or "space" or "enclosing" is not enough to know the step un der processing. If an .output command is on the line, the best would be to use check description in .output to mention the check un processing.

    Thanks, Regards,
    Laurent
  • edited January 2014

    Hi Laurent,

    KLayout DRC is based on immediate execution of the commands, rather than collecting the information. Specifically the .output method runs after the actual operation, so it's not possible to determine the output a specific operation leads to while it's running.

    But maybe I was not specific enough: if you look at the log above, it will save "... in drc.lydrc:11". ":11" is the line of the statement, so there is some feedback about the progress, but not necessarily related to an output.

    If you want to give more meaningful hints about the part of the runset that is executing I'd recommend to insert "info" statements which indicate a certain step as shown above.

    If you consistently use a scheme like

    info "--- Rule A"
    rule_a = ... compute output of rule A ...
    rule_a.output("Rule A")
    

    The output will indicate the step the way you request. You can add some syntactic sugar with the aid of a helper function

    def rule("---" + name, &block)
      info "name"
      block.call.output(name)
    end
    
    # this is how you can write rules now (note that .output is omitted)
    rule("gate_width") do
      poly = input(6)
      active = input(1)
      gate = poly & active
      gate.width(0.25.micron)
    end
    

    Maybe that provides a feasible solution for your problem.

    Regards,

    Matthias

  • edited November -1
    Hello, sorry for washing this old topic up again, but I couldn't find a better space.

    When I run my DRC scripts under Ubuntu Studio 14, *lydrc:line is diplayed. Running them under Win7, colon and line number are missing.

    The scripts are the same and I also use my Windows klayoutrc file in Ubuntu. Hardware, except for the SSD, is the very same. The installation under Ubuntu was done via the software manager, under Windows I'm using the zipped binary package. 0.23.11 in both cases.

    Is there any setting, maybe in the technology settings, where I can alter this behaviour? Having the line number displayed is very useful indeed.

    Thank you,
    Michael
  • edited June 2015

    Hi Michael,

    that's very likely related to the Ruby version used in the Windows binary. I am preparing a new major release currently which uses a different Ruby version and I'll check whether the problem is gone with that.

    Thanks for mentioning the topic.

    BTW: don't worry about opening a new thread for such topics.

    Regards,

    Matthias

Sign In or Register to comment.