2025年9月21日日曜日

Synopsys Container を使ってみる

Alma Linux 9 上で IC Compiler 2 (X-2025.06) を使おうとしているのだが,不安定で必ずコアダンプして死ぬ.
% icc2_shell -64 -gui 
(略)
ディレクトリを開こうとすると
(略)
/cad/synopsys/icc2/icc2_ver/bin/icc2_shell: 380 行: 2337728 Illegal instruction     (コアダンプ) ${CONTAINER} ${REAL_EXEC_NAME} -root_path ${SYNOPSYS_ROOT} ${ARGS}
(Illegal instructionってでるのがおかしい気がするが,アーキテクチャの判定はちゃんとLinux64 の様だ)

もういい,仮想環境使うもん,ということで Synopsys Container を使ってみる.Singularity  をベースにしているらしい.今使おうとしているコンテナは CentOS7 らしい.なので ICC2 もそれ相応に古いものにしてみる (Q-2019.12-SP2 にした).

基本的にはマニュアル通りに入れればよい.
・Synopsys Container は Synopsys Installer で普通の CAD と同じようにインストール.
・Singularity は指定のバージョンをダウンロード.インストールは NFS でもローカルでもどちらでも OK.
% cd /cad/synopsys
% mkdir singularity
% cd singularity
% tar -xvfz ~/singularity.tar.gz
% sudo ./singularity_install --prefix=/path/to/singularity

・コンテナの設定ファイルを作成する.
% cd /cad/synopsys/installer/installer_ver/container_setup
% ./container_setup.sh config -source /cad/synopsys/snps_container/container_ver -exe /cad/synopsys/singularity/bin/singularity
./container_setup.sh は .synopsys_container 構成ファイル,デフォルトのコンテナイメージ (CentOS7),そのオートマウントを作成するらしい.

・コンテナの設定ファイルを CAD にデプロイする.
% ./container_setup.sh deploy -target /cad/synopsys/icc2/icc2_ver/
INFO: Update /cad/synopsys/icc2/icc2_ver/.snps_container

この状態で,各CADに -container オプションをつけて起動する.
% icc2_shell -64 -gui -container

Alma Linux 9 で古い IC Compiler 2 が起動した.

注意点(?)
提供されている Singularity の環境では,ユーザーの $HOME が存在するデバイスはパスも再現されてマウントされるが他のデバイスはマウントされていないっぽい.

例えば実態が
/mnt/ssd + /home + /user1
                                      + /user2
                    + /cad + /synopsys
                                  + /cadence

でそれぞれシンボリックリンクを
/home -> /mnt/ssd/home
/cad -> /mnt/ssd/cad
というように作っていると,/home/user1 は Singularity 環境もアクセスできるが,/home/user2,/cad などはアクセスができない./mnt/ssd/home/user2 や /mnt/ssd/cad/synopsys などはアクセスができる. 

多分 container_setup.sh  の設定次第で何をどこにマウントするなどは制御できるとは思われるのだが….

2025年9月20日土曜日

Xcelium 2409 Hotfix 実行時に cds.lib に関してワーニングが出る

 Xcelium 2409 Hotfix を入れて ncverilog を起動したところ以下のようなワーニングが大量に出た.

% ncverilog (略)
(略)
DEFINE cds_assertions ./CDS_ASSERTIONS
|
xmsim: *W,DLCPTH (/cad/cadence/XCELIUM2409/tools/inca/files/cdsvhdl.lib,12): cds.lib Invalid path '/cad/cadence/XCELIUM2409/tools/inca/files/CDS_ASSERTIONS' (cds.lib command ignored).

cdsvhdl.lib を開いてみると,確かに記述は cds.lib っぽいのだが,ワーニングの元がよくわからない.ただファイルがないと文句言っているようだ.

調べてみると確かにファイルはないようだ.ちなみに Xcelium 2409 Base にもない.
% ls /cad/cadence/XCELIUM2409/**/CDS_ASSERTIONS/ 
zsh: no matches found: /cad/cadence/XCELIUM2409/**/CDS_ASSERTIONS/

では前のバージョンでは?と調べるとこちらはある.
% ls /cad/cadence/XCELIUM1909/**/CDS_ASSERTIONS/
/cad/cadence/XCELIUM1909/tools.lnx86/inca/files/CDS_ASSERTIONS/:
cds_assertion_stubs  xm.lnx86.068.pak  xm.lnx8664.068.pak
/cad/cadence/XCELIUM1909/tools.lnx86/inca/files/IEEE_pure/CDS_ASSERTIONS/:
cds_assertion_stubs  xm.lnx86.068.pak  xm.lnx8664.068.pak

もっとよく調べると,1909 には
/cad/cadence/XCELIUM1909/tools/inca/files/CDS_ASSERTIONS
/cad/cadence/XCELIUM1909/tools/inca/files/CDS_ASSERTIONS.src

があるのに,2409 は
/cad/cadence/XCELIUM1909/tools/inca/files/CDS_ASSERTIONS
しかない.ソースがコンパイルできていないということ?

しかたないので,src しかないものをすべて Xcelium 1909 からリンクすることに.
% cd /cad/cadence/XCELIUM1909/tools/inca/files/
% ln -s /cad/cadence/XCELIUM1909/tools/inca/files/CDS_ASSERTIONS

これを実行したら変なワーニングは出なくなったけれど,この対応でいいのかはわからない.

2025年9月13日土曜日

Alma Linux 9 で IC Compiler がうごかない (頑張ってQt4を入れる)

タイトルの通りだが,問題は以下の通り.
(1) IC Compiler が QT4 を必要とする.
% icc_shell
galaxy_icc_exec: error while loading shared libraries: libQtScript.so.4: cannot open shared object file: No such file or directory

(2) RPMで入れようとすると古い libc などが必要となって依存関係を解決できない.

(3) ということでQt4をソースから入れてみる.4.8.7が最終らしい.
https://download.qt.io/archive/qt/4.8/4.8.7/

(4) 結論として,Alma Linux 9 では IC Compiler は起動するようになったがすぐにセグフォでクラッシュしてしまう.

(a) Qt を入れる
Qt4.8.7 を解凍して,手順通りに ./configure → make → make install
% ./configure
% make
ssl/qsslcertificate.cpp:504:36: エラー: invalid use of incomplete type ‘EVP_PKEY’ {aka ‘struct evp_pkey_st’}
  504 |     } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DH) {

エラーがでる,古い OpenSSL (1.0.1系より前) のAPIを使っているため,古い OpenSSL を落としてくる.(セキュリティー的にどうよ)
https://openssl-library.org/source/old/1.0.1/

ただ,試したときに configure のオプションに -no-openssl というのがあったので,そっちにしてみよう.

% ./configure -no-openssl
% gmake
dialogs/qprintdialog_unix.cpp:281:19: エラー: ‘class Ui::QPrintPropertiesWidget’ has no member named ‘cupsPropertiesPage’
  281 |     delete widget.cupsPropertiesPage;
      |                   ^~~~~~~~~~~~~~~~~~

https://forum.qt.io/topic/142527/qt-4-8-7-compilation-fails-qprint-errors/4
コードにバグがあるから直せとのこと.

qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h
の2500行目の break continue にする.もなおらないなぁ,次の記事だと,cups 関係だから --no-cups にすればよいとのこと.
https://blog.csdn.net/weixin_43777852/article/details/125395832

別のエラーが発生する.
% ./configure -no-openssl --no-cups
% gmake
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:69: エラー: ‘std::tr1’ has not been declared

std::tr1 は C++11 のプレビュー版にあって,2011 年以降デフォルトでサポートしていない,とのこと.
https://forum.qt.io/topic/94118/attempting-to-deal-with-qtbug-41361/2

Windows だと mkspecs\win32-g++\qmake.conf に
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98
を書き足せとのこと.
https://stackoverflow.com/questions/52061472/installing-qt-from-source-v-4-8-6
https://stackoverflow.com/questions/10354371/stdtr1-has-not-been-declared

こいつは Linux なんだよなぁ,ということで調べたら
mkspecs/linux-g++-32/qmake.conf
mkspecs/linux-g++-64/qmake.conf

があったのでそれぞれ
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98
と書き足してみる.しかしうまくいかない ($$を$にしてもだめ).

パッチがあるらしい.
https://hg.slitaz.org/wok-current/rev/03352f30e977
以下の二つのファイルに上記オプション相当を書き足してみる.
qt-everywhere-opensource-src-4.8.6/src/script/script.pro
qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/widgets.pro

% ./configure -no-openssl --no-cups
% gmake
また別のエラー
messagemodel.cpp:186:61: エラー: ordered comparison of pointer with integer zero (‘MessageItem*’ and ‘int’)

パッチがあるみたい.
https://aur.archlinux.org/packages/qt4?O=30
以下のファイルを書き換える.
tools/linguist/linguist/messagemodel.cpp

% ./configure -no-openssl --no-cups
% gmake
% sudo make install

Qt4 はいったぞ.

% icc_shell
galaxy_icc_exec: error while loading shared libraries: libQtScript.so.4: cannot open shared object file: No such file or directory

シェアードオブジェクトが PATH にないみたい.Qt4 については以下にあるようだ.

% ls /usr/local/**/libQtScript.so.4
/usr/local/Trolltech/Qt-4.8.7/lib/libQtScript.so.4

LD_LIBRARY_PATHに書いてあげる.
https://qiita.com/Alaska_Panda/items/7b34e8236696039f6f42
% export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/Trolltech/Qt-4.8.7/lib

再実行
% icc_shell
(略)
icc_shell>

ようやく起動した,長い戦いであった.

と思っていたのだが,すごく遅い上にものすごい高確率でセグメンテーションフォルトで死ぬので実質使えないかも….

---その2---

Qt の問題について gcc のバージョンを変えろとある.
https://gcc.gnu.org/pipermail/gcc/2020-May/232481.html
https://discuss.getsol.us/d/8439-qt487

gcc-75 にしてみる.
https://bigsearcher.com/mirrors/gcc/releases/gcc-7.5.0/

解凍,gcc ディレクトリで以下を実行して gmp,mpfr,mpc,islをダウンロード.
./contrib/download_prerequisites

解凍,build ディレクトリを掘って configure
% ../configure --program-suffix=-7.5.0 --disable--multilib
/usr/bin/ld: cannot find crt1.o: No such file or directory

i686 の glibc がいるみたい.(--disable-multilibが効かない?)
このあたりを参考にした.
http://blog.livedoor.jp/itukano/archives/51848514.html
https://nextremer-nbo.blogspot.com/2018/09/fedora28gcc73.html
https://stackoverflow.com/questions/6329887/how-to-fix-linker-error-cannot-find-crt1-o

% sudo dnf install glibc-devel.i686 
% ../configure --program-suffix=-7.5.0 --disable--multilib
% make
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:157:10: fatal error: linux/cyclades.h: そのようなファイルやディレクトリはありません

Bug 100379 - cyclades.h is removed from linux kernel header files
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100379

コードを書き換えろとのこと.変更点は次の通り.
https://github.com/easybuilders/easybuild-easyconfigs/pull/14453/commits/e495b58ff4c4a95fdffd9bef635cf05205626ec2

また止まる
% make
../../../../libsanitizer/sanitizer_common/sanitizer_internal_defs.h:261:72: error: size of array ‘assertion_failed__1139’ is negative

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105029
古いバージョンはもうメンテしていないから自分で直せとのこと.変更点は次の通り.
https://gcc.gnu.org/cgit/gcc/commit/?id=75003cdd23c310

% make

なんかコンパイルできたぞ.

% sudo make install
% which gcc-7.5.0
/usr/local/bin/gcc-7.5.0

古い GCC を使うようにリンクを張り替える.これでいいのかよくわからない.
sudo mv /usr/bin/gcc /usr/bin/gcc-11
sudo mv /usr/bin/gcc-ar /usr/bin/gcc-ar-11
sudo mv /usr/bin/gcc-nm /usr/bin/gcc-nm-11
sudo mv /usr/bin/gcc-ranlib /usr/bin/gcc-ranlib-11
sudo mv /usr/bin/g++ /usr/bin/g++-11
sudo ln -s /usr/local/bin/gcc-7.5.0 /usr/bin/gcc
sudo ln -s /usr/local/bin/gcc-ar-7.5.0 /usr/bin/gcc-ar
sudo ln -s /usr/local/bin/gcc-nm-7.5.0 /usr/bin/gcc-nm
sudo ln -s /usr/local/bin/gcc-ranlib-7.5.0 /usr/bin/gcc-ranlib
sudo ln -s /usr/local/bin/g++-7.5.0 /usr/bin/g++

(a) に戻る.

% ./configure -no-openssl --no-cups
% gmake
% sudo make install

再実行
% icc_shell -gui
(略)
icc_shell>

やっぱりウィンドウ立ち上げたりするとすぐにセグフォでクラッシュしてしまう.これはだめかもしれん.

---OMAKE---

IC Compiler II は以下のトラブルがあった.

% icc2_shell
bin/icc2_exec: symbol lookup error: /lib64/libkrb5.so.3: undefined symbol: krb5int_c_deprecated_enctype, version k5crypto_3_MIT

これもググっても調べてわからなかったのだが,結局
% dnf provides libkrb5.so.3
krb5-libs-1.21.1-8.el9_6.i686 : The non-admin shared libraries used by Kerberos 5
Repo        : baseos
一致:
提供する    : libkrb5.so.3

krb5-libs-1.21.1-8.el9_6.i686 : The non-admin shared libraries used by Kerberos 5
Repo        : baseos
一致:
提供する    : libkrb5.so.3

ということで,krb5-libs-1.21.1-8.el9_6.x84_64 を入れたらちゃんと起動した.ICC2 は QT4 をつかっていないのね.Primewave も起動した.

2025年9月7日日曜日

RHEL9 系に dstat を入れる

dstat という独立したパッケージではなくて,pcp-system-tools に入っているみたい.

https://almalinux.pkgs.org/9/almalinux-appstream-x86_64/pcp-system-tools-6.3.7-1.el9_6.x86_64.rpm.html

 % dnf install -y pcp-system-tools

軽くググっただけでは情報が出てこなかったのでメモ.

2025年9月6日土曜日

xrdp で Linux Mint (Ununtu) にログインすると即座に接続が閉じられてしまう話

オチ:GUIセッションでログインしている同一ユーザーで xrdp 接続はできない.

接続先のUbuntuですでにGUIセッションを用いている場合、同一ユーザではXRDP接続するユーザのセッションが利用できません。(RDP接続の認証情報入力後すぐに接続が閉じられてしまう。)XRDP接続用のユーザを別途作成して、そのユーザで接続する前提とします。
GUIセッション落としたら普通にログインできた….

ここに至る日記

以下の様な構成で手元の ノートPC (Win 10)から Linux Mint  なミニ PC を介して Headless Alma Linux 9 サーバーに接続している.

+---------+          +--------------+         +----------+
| Win 10 |-vnc->| Linux Mint |-ssh->| Alma 9  | 
+---------+          +--------------+         +----------+

ここで Linux Mint の VNC セッションから Headless サーバーに ssh でつないで X を飛ばしながら Virtuoso につなぐと,キーボード入力があべこべになる.qwerty と打つと c.gvn[空]になる.
この現象はすごく不思議で,例えば Linux Mint の (VNCでなく) 画面出力で操作したり,Win 10 PC から mobaXterm でつないで X 飛ばした場合は正常にキー入力でき,VNC だけ動きがおかしい.色々調べたらこれ QT のバグじゃない?という報告があった.


仕方が無いので xrdp にしたのだが,ログインすると則遮断されるので困ったなぁ,と 2 日ぐらいかけていたというオチであった.

なんでこんな面倒な事をしているかというと,前ラボで Headless サーバーがグローバル IP を持っていたので VNC を開けたくなかったということと,サーバーに刺さっている「画面が写ればええねんGPU(GT710)」が RHEL9 クローンと相性が悪くて X を入れると調子が悪くなるという理由である.

なお xrdp は VNC に比べると圧倒的に圧倒的に速い.Virtuoso ってこんなにサクサク動くもんだっけ,と驚いてしまう (Gen4 SSD 2TBx3 RAID5 だからかもしれないが).

2025年9月5日金曜日

Alma Linux 9 に Virtuoso (IC618.170)を入れる

新しいサーバーをセットアップして Virtuoso を入れるのは毎回大騒ぎである.(正確には CentOS 7 が入っていたマシンを AlmaLinux 9.6 にアップグレードした)

lsb_release が無いので Linux のバージョンがわからないと言われる.RHEL9系の標準のリポジトリには lsb_release が無いので EPEL を使う.

https://rhel.pkgs.org/9/epel-aarch64/lsb_release-3.2-2.el9.noarch.rpm.html
https://www.server-memo.net/almalinux/almalinux9_epelrepo.html

% dnf install -y dnf-plugins-core
% dnf config-manager --enable crb
% dnf -y install epel-release
% dnf install -y epel-next-release
% dnf install -y lsb_release

libcrypto.so.10 が無いといわれる.RHEL9 系では compat-openssl11 になってしまった.RHEL8 向けの RPM を入れる.

https://forums.almalinux.org/t/almalinux-9-cant-find-libcrypto-so-10-or-libssl-so-10/3952/4
https://www.rpmfind.net/linux/rpm2html/search.php?query=libcrypto.so.10()(64bit)

% dnf install compat-openssl10-1.0.2o-4.el8_10.1.x86_64.rpm

libdb-4.7 も必要だが 5.3 しかないので RPM を落として入れる.

https://amazonlinux.pkgs.org/2/amazonlinux-core-x86_64/compat-db47-4.7.25-28.amzn2.x86_64.rpm.html
https://amazonlinux.pkgs.org/2/amazonlinux-core-x86_64/compat-db-headers-4.7.25-28.amzn2.noarch.rpm.html

% dnf install compat-db47-4.7.25-28.amzn2.x86_64.rpm compat-db-headers-4.7.25-28.amzn2.noarch.rpm

あとは地道に virtuoso 起動 → シェアードオブジェクト無い → dnf provides "シェアードオブジェクト" → パッケージを見つけて dnf install を繰り返す.dnf provides で出てきたパッケージが i686 だったりするが,これは x86_64 に読み替えてインストールする.

dlopen failed to open 'libdb.so' と言われる. /lib64/libdl.so が無いので /lib64/libdl.so.2 をスタティックリンクしてあげる.以下がヒントになった.
https://www.linuxquestions.org/questions/linux-newbie-8/dlopen-failed-to-open-%27libdl-so-error-4175493930/

% sudo ln -s /lib64/libdl.so.2  /lib64/libdl.so

最初 Cadence Community の議論から db4-devel-4.7 (そのためにdb4とdb4-cxxも必要)を入れると良さそうと思って頑張って入れたのだが変化無かった.RHEL6 の RPM 入れたからかもだが….
https://community.cadence.com/cadence_technology_forums/f/custom-ic-design/31432/cadence-ic-base-6-15-011-hotfix-6-15-171-problem

64bit バイナリで動かすなら「環境変数 CDS_AUTO_64BIT をALL」も必要かもしれない.
https://www.anagix.com/gijutsu-memo/artistmemo/ic617dedlopenfailedtoopenlibdlsoerror

入れるだけ入れたが,キーボード入力がおかしい.qwerty が c.gvn になってしまう.後半に続く.

2025年9月3日水曜日

mdadm で設定した RAID ディスクを遅延マウントする

mdadm で SSD RAID5 を設定して /home に割り当てたのだが,マウントポイント指定後起動時に以下のメッセージが出てシステムがエマージェンシーに入ってしまう

block sdb the capability attribute has been deprecated

メッセージでググっていたら,ディスクの準備ができていない状態で fstab のディスクをマウントしようとするとあっさりエマージェンシーモードに入るとのこと.

mdadm が起動したあとでマウントすればよいのね,ということで遅延マウント(?)してみる.基本的にははてなブログの記事の通りにすればよい.

初めてホームディレクトリにアクセスするときにマウントが動くので起動時の最初のユーザーに "block sdb..." と同じメッセージがでるのだが,すぐにマウントされるので安定的に動くようになった.

2025年8月16日土曜日

Figure 1 or Fig. 1?

 結論から言うと,文頭は "Figure 1 shows..." で始めるべきで "Fig. 1 shows..." は誤り.文中はどちらでもよいが,表記は統一したうえで,掲載誌の方針に従ってくださいとのこと.このルールは表 (Table),式 (Equation) でも同様らしい.


2025年8月15日金曜日

Draw.io で数式を書く

 Draw.io でテキスト形式で数式を書くお勧めのフォントは Georgia です.
テキストボックスを選んだ状態で右のオプションのフォントを Georgia にします.

Draw.ioで Latex 式に数式を書くには,[拡張]→[数式組版]を選ぶとできます.
この状態でテキストボックスに,$$で囲んだLatex形式の数式を書き,テキストボックスの選択を外すと組版されます.
フォントは Geogia っぽいフォントだけれど子細が違うようです.

フォントについて補足すると,一応外部フォントを入れられるみたいですが,CTAN の Latin-modern-math の指定は上手くいきませんでした.なので MS 数式とフォントが変わってしまうのは悩みどころです.(Cambria Mathの指定もダメ)




2025年8月14日木曜日

IHP 130nm CMOS/BiCMOS スタンダードセルライブラリ

 忘れるので調べた.ライブラリは sg13g2_stdcell です.

* AO
sg13g2_a21o_1
sg13g2_a21o_2

* AOI/OAI
sg13g2_a21oi_1
sg13g2_a21oi_2
sg13g2_a22oi_1
sg13g2_a221oi_1
sg13g2_o21ai_1

* AND/OR
sg13g2_and2_1
sg13g2_and2_2
sg13g2_and3_1
sg13g2_and3_2
sg13g2_and4_1
sg13g2_and4_2
sg13g2_or2_1
sg13g2_or2_2
sg13g2_or3_1
sg13g2_or3_2
sg13g2_or4_1
sg13g2_or4_2

* INV/BUF
sg13g2_buf_1
sg13g2_buf_2
sg13g2_buf_4
sg13g2_buf_8
sg13g2_buf_16
sg13g2_inv_1
sg13g2_inv_2
sg13g2_inv_4
sg13g2_inv_8
sg13g2_inv_16

* NAND/NOR
sg13g2_nand2_1
sg13g2_nand2_2
sg13g2_nand2b_1
sg13g2_nand2b_2
sg13g2_nand3_1
sg13g2_nand3b_1
sg13g2_nand4_1
sg13g2_nor2_1
sg13g2_nor2_2
sg13g2_nor2b_1
sg13g2_nor2b_2
sg13g2_nor3_1
sg13g2_nor3_2
sg13g2_nor4_1
sg13g2_nor4_2

* MUX
sg13g2_mux2_1
sg13g2_mux2_2
sg13g2_mux4_1

* XOR/XNOR
sg13g2_xnor2_1
sg13g2_xor2_1

* DFF w/ async neg reset, Q and Q_N output
sg13g2_dfrbp_1
sg13g2_dfrbp_3

* Latch Family
sg13g2_dlhq_1 * Pos. transparent Latch
sg13g2_dlhr_1 * Pos. transparentLatch w/ async neg reset
sg13g2_dlhrq_1 * Pos. transparentLatch w/ async neg reset, Q and Q_N output
sg13g2_dllr_1 * Neg. transparentLatch w/ async neg reset
sg13g2_dllrq_1 * Neg. transparentLatch w/ async neg reset, Q and Q_N output

* Scan FF 
sg13g2_sdfbbp_1 * w/ async reset and set

* Delay
sg13g2_dlygate4sd1_1
sg13g2_dlygate4sd2_1
sg13g2_dlygate4sd3_1

* Tri-states
sg13g2_ebufn_2
sg13g2_ebufn_4
sg13g2_ebufn_8
sg13g2_einvn_2 
sg13g2_einvn_4 
sg13g2_einvn_8 

* Gated Clock
sg13g2_lgcp_1  * w/o scan
sg13g2_slgcp_1 * w scan

* Signal hold (closs-coupled inverter w/o input switch)
sg13g2_sighold

* Physical only cell
sg13g2_antennanp
sg13g2_decap_4
sg13g2_decap_8
sg13g2_tiehi L_HI
sg13g2_tielo L_LO