Array Instance Incorrect Column/Rows

This array in the picture attached surely shows 3 columns and 2 rows, why does it say 2 columns and 3 rows? Or is this just ambiguity of col vs row?

Comments

  • The directions of columns and rows are defined by two types of vectors: column vectors and row vectors.
    These are distinct from the rows and columns of seats - such as those found on trains or airplanes - that we encounter in our daily lives.


    Standard intuition


    Swapping rows and columns


    A more generalized concept of rows and columns

  • Thank you for the detailed explanation Sekigawa - How are you? I hope you are keeping well.

    I was mostly surprised because my software (dw2000) clearly defined the array as 3 columns and 2 rows but the klayout view (that my customer uses) shows the opposite and caused confusion.

    Again, thank you and take care -Tim.

  • edited November 4

    Hi Tim,
    It's been a long time. I'm doing well. Hope you are, too.

    I realized that my previous explanation was incomplete, so please allow me to add a few points.

    To illustrate column- and row-vector behavior, I created cells named TOP1, TOP2, and TOP3 and captured images of them; however, I omitted saving them to a GDSII file and reopening them for verification.
    Additionally, I overlooked that your initial post opened an OASIS (TEST.oas) file, so I have now examined that as well.
    For this discussion, I will focus on the TOP2 cell.

    First, when I reopen the saved f2891.gds file and check the Array Instance attributes, the results—shown in the image below—align with the standard intuitions.

    In contrast, when I reopen f2891.oas, the rows and columns are swapped.

    Next, I dumped the contents of the OASIS file with the dump_oas tool, with my own comments added (following the ;; markers).

    :
    :
    000000167   0d 02                    CELL (2)             ;; "TOP2"
    000000169   11 c8                    PLACEMENT
    000000171   00                       id=0
    000000172   01                       repetition (type=1)  ;; Regular X-Y array
    000000173   00                         nx=0               ;; columns = nx+2 = 2
    000000174   01                         ny=1               ;; rows = ny+2 = 3
    000000175   c0 84 3d                   dx=1000000         ;; x-spacing = 1000 um
    000000178   e0 c6 5b                   dy=1500000         ;; y-spacing = 1500 um
    :
    :
    

    While the relationship between the two vectors and the number of rows/columns is technically correct as it stands, it is more intuitive in this case to consider the column direction as X and the row direction as Y.
    So my view is that there is an issue in the process of opening an OASIS ---> populating Array Instance attributes.

    I have attached relevant files.

    Best regards,
    Kazzz-S

  • Dear @sekigawa and @digidat,

    I guess some old friends are meeting here. Nice to see that :)

    Regarding the particular problem: the COLUMN and ROW designation is taken from GDS and does not strictly describe rows or columns. As mentioned, the vectors can be anything, from being swapped or skew ones. KLayout takes the freedom to normalize the arrays, since it turns out some older tools expect a certain orientation. OASIS is a different topic as OASIS offers different variations of arrays internally and some are more compact than others. KLayout also takes the freedom here to optimize for compactness rather than preserving the row or column interpretation.

    I tend to look at arrays as spanning over two arbitrary vectors with correspondingly two indexes. In the API, the vectors are called "a" and "b" only, not "row" or "column". Swapping the vectors and dimensions does not change the shape of the array, hence that is a valid degree of freedom when mapping to a particular stream format.

    Best regards,

    Matthias

Sign In or Register to comment.