Pesquise

10 de jun. de 2015

Alliance VLSI no Ubuntu

A suíte Alliance é um conjunto de ferramentas gratuitas para projeto VLSI, que inclui um compilador e um simulador VHLD, ferramentas de síntese lógica, e ferramentas de posicionamento e roteamento automáticos.

A versão para o Ubuntu contém alguns problemas, cujas soluções obtive ao estudar a distribuição dos arquivos no sistema e compará-los com a versão (funcional) disponível para o Fedora. Neste post estou utilizando o Lubuntu 14.04 LTS, mas acredito que os problemas e procedimentos se apliquem a outras versões e distros.


Instalação

A instalação do Alliance no Ubuntu é simples e direta: basta executar
$ sudo apt-get install alliance
Se tudo der certo, você já pode executar alguns programas da suíte, como vasy e alliance-genpat (que no Fedora é simplesmente genpat).

Diferentemente do Fedora, onde a documentação é dispobilizada como um pacote à parte (alliance-doc, instalada em /usr/share/doc/alliance-doc), no Ubuntu ela já vem no pacote, e fica em /usr/share/doc/alliance.


Problemas - arquivo não encontrado

* Ao executar o xpat: Xsb: Parameters file /usr/etc/xpat.par can't be opened
* Ao executar o graal: rpr:rprparse.3003 error can't open file in technological file /usr/etc/cmos.rds
* Ao executar o xsch: XSB_parse.951 Parameters file /usr/etc/xsch.par can't be opened
* Ao executar o genpat: fatal error: genpat.h: No such file or directory

Todos esses problemas no Ubuntu são devido à mudança da distribuição dos arquivos da ferramenta nas pastas do sistema. Enquanto no Fedora os arquivos estão concentrados na pasta /usr/lib/alliance, no Ubuntu as subpastas foram espalhadas de acordo com outra hierarquia, que não foi levada em consideração.

A hierarquia encontrada no Fedora é:
/usr/lib/alliance/
├── bin
├── cells -> /usr/share/alliance/cells
├── etc -> /usr/share/alliance/etc
├── include
├── lib
└── man -> /usr/share/alliance/man
No Ubuntu temos as seguintes mudanças:
/usr/lib/alliance/bin -> /usr/bin
/usr/share/alliance/etc -> /etc
/usr/lib/alliance/include -> /usr/include/alliance
/usr/lib/alliance/lib -> /usr/lib/alliance
/usr/share/alliance/man -> /usr/share/man
Para solucionar estes problemas, abra o arquivo /etc/profile.d/alc_env.sh como root
$ sudo su
# gedit /etc/profile.d/alc_env.sh
Onde há
...
# Where the Alliance CAD is installed
        ALLIANCE_TOP=/usr;                       export ALLIANCE_TOP
         SYSCONF_TOP=$ALLIANCE_TOP/etc
           CELLS_TOP=$ALLIANCE_TOP/cells
 if [ "$ALLIANCE_TOP" = "/usr/lib/alliance" ]; then
  # FHS Installation.
         SYSCONF_TOP="/etc/alliance"
           CELLS_TOP="/usr/share/alliance/cells"
 fi

# Alliance environment variables.
...
Substitua por
...
# Where the Alliance CAD is installed
    ALLIANCE_TOP=/usr/lib/alliance;
    export ALLIANCE_TOP
    SYSCONF_TOP=/etc
    CELLS_TOP=$ALLIANCE_TOP/cells

# Alliance environment variables.
...
O mesmo deve ser feito para o arquivo /etc/profile.d/alc_env.csh:
# sudo gedit /etc/profile.d/alc_env.csh
Onde há
...
# Where the Alliance CAD is installed
 setenv ALLIANCE_TOP         "/usr"
 set    SYSCONF_TOP          "${ALLIANCE_TOP}/etc"
 set    CELLS_TOP            "${ALLIANCE_TOP}/cells"
 if ( "${ALLIANCE_TOP}" == "/usr/lib/alliance" ) then
# For installation in the FHS.
   set  SYSCONF_TOP          "/etc/alliance"
   set  CELLS_TOP            "/usr/share/alliance/cells"
 endif


# Alliance environment variables.
...
Substitua por
...
# Where the Alliance CAD is installed
 setenv ALLIANCE_TOP         "/usr/lib/alliance"
 set    SYSCONF_TOP          "/etc"
 set    CELLS_TOP            "${ALLIANCE_TOP}/cells"

# Alliance environment variables.
...
Agora vamos à pasta /usr/lib/alliance para criar links que simulam a estrutura no Fedora:
# cd /usr/lib/alliance
# ln -s /usr/bin ./bin
ln -s /usr/share/alliance/cells/ ./cells
# ln -s /usr/include/alliance ./include
# ln -s /usr/lib/alliance ./lib
Faça logout e login, abra o terminal e veja se as modificações foram aplicadas:
$ echo $ALLIANCE_TOP
/usr/lib/alliance
Agora os programas podem ser abertos normalmente.


Problema no alliance-genpat

error while loading shared libraries: libPgn.so.3: cannot open shared object file: No such file or directory

Desta vez o pacote do Ubuntu deixou de incluir um arquivo de configuração para disponibilizar as bibliotecas do Alliance para os programas em C.

Como root, crie o arquivo /etc/ld.so.conf.d/alliance.conf com o seguinte conteúdo:
# Alliance VLSI system
/usr/lib/alliance
Em seguida execute
$ sudo ldconfig
Agora o genpat pode ser executado sem problemas.


====== ATUALIZAÇÃO 14/junho ======

Problema no genlib
Agora, após as correções acima, o genlib deixa de funcionar. Para corrigir, edite o arquivo /usr/bin/genlib como root. Onde há:
...
# Start of the Makefile text.

cat << EOF > $MAKEFILE
  ALLIANCE_INCLUDE = $ALLIANCE_TOP/include/alliance
  ALLIANCE_LIB     = $ALLIANCE_TOP/lib/alliance
...
Substitua por
...
# Start of the Makefile text.

cat << EOF > $MAKEFILE
  ALLIANCE_INCLUDE = $ALLIANCE_TOP/include
  ALLIANCE_LIB     = $ALLIANCE_TOP/lib
...

Nenhum comentário:

Postar um comentário