1
TUTORIALPARACRIAÇÃODELAYOUTDE
UMINVERSORUTILIZANDOCADENCE
Matheus Moreira / Fernando Moraes
24 / Setembro / 2015
Setup inicial do ambiente
Logar-se na máquina kriti com o usuário fornecido pelo professor:
•
•
ssh -X <usuario>@kriti.inf.pucrs.br
De fora da PUCRS: ssh -X <usuario>@eaco.inf.pucrs.br -p 7780
Fazer o download do lab3 e executar os seguintes comandos:
wget http://www.inf.pucrs.br/~moraes/microel/laboratorio3/layout.tar
tar -xvf layout.tar
cd layout
O conteúdo do diretório layout é dado abaixo:
layout
|-- .cdsinit
|-- .cshrc_cmos065
|-- .ucdprod
|-- cds.lib
`-- sim
|-- sim_anel_inv.sp
|-- sim_inv_ext.sp
`-- st65.scs
à
à
à
à
à
arquivo do design kit
arquivo do design kit
arquivo do design kit
indica as blbiotecas de trabalho
diretório onde será simulado o inversor
Executar os seguintes comandos para abrir a ambiente de projeto de células da CADENCE:
source /soft64/source_gaph
module load ic/5.1.41
csh
source .cshrc_cmos065
icfb &
(se não abrir: “icfb -nosplash &”)
Abrirá a seguinte janela (demora um pouco para carregar todas as bibliotecas):
2
Criação da biblioteca e das visões schematic e layout
Utilizar a ferramenta icfb para os seguintes passos:
a) Primeiro abrir o Library Manager: Toolsà Library Manager...
b) Criar a biblioteca onde os layouts serão gravados: Fileà New Library. Ao clicarmos em OK abre a
janela da biblioteca de referência. Marcar a opção “Attach to an existing techfile” para que a biblioteca faça
uso dos modelos disponíveis no design kit. Clicar em ok. Selecionar a tecnologia “cmos065”.
3
c) Agora, criar o esquemático do inversor: No Library Manager, selecionar a biblioteca criada e clicar em File à
New à Cell View... Digitar o nome da célula que será projetada, selecionar a ferramenta “ComposerSchematic”, dar um nome a visão (“schematic”) e clicar em ok.
O resultado é a interface gráfica da ferramenta de edição de esquemáticos.
Check
andsave
properties
instance
wire
pin
d) Instanciar a fonte de alimentação da célula e massa: clicar em
instance (ou apertar a tecla “i”), clicar em browse, escolher a
biblioteca cmos065, escolher a célula “vdd_inherit”, view
“symbol” e instanciá-la no esquemático, clicando em
qualquer lugar da janela do schematic editor (para sair teclar
ESC). Repetir o processo escolhendo a célula “gnd_inherit”.
DICA: PODE-SE ESCREVER O NOME DA CÉLULA NO
CAMPO “cell” do Library Browser”.
4
e) Agora deve-se instanciar dois transistores, um PMOS e um NMOS, para gerar o esquemático que implementa a
lógica do inversor. Para tanto deve-se: clicar em instance, clicar em browse, selecionar a biblioteca cmos065 e
instanciar o símbolo da célula “nsvtlp”. Repetir o processo, instanciando a célula “psvtlp”. Notar que esses são
os mesmos dispositivos utilizados nas simulações do laboratório 2.
O resultado é um esquemático similar à figura (a) abaixo.
(a) Esquemático com as instâncias
(b) Esquemático completo com adição dos fios e pinos
Notar que as dimensões dos transistores são definidas para mínimas por default (L=0.060 µm e W=0.135 µm)
f) O próximo passo é clicar em wire (ou apertar a tecla “w”) e conectar os dispositivos a fim de implementar a
lógica do inversor. Deve-se obter um esquemático equivalente ao que está representado na figura (b) acima.
Notar que o bulk do PMOS deve ser conectado a vdd e o do NMOS a gnd.
g) Dimensionar os transistores para os seguintes
tamanhos: transistor N para 0.2 µm e o transistor P
para 0.4 µm. Dessa forma obteremos uma célula com
tempos de propagação balanceados, conforme visto no
laboratório 2. Para redimensionar os transistores:
selecionar o dispositivo nsvtlp ou psvtlp, clicar em
property (ou apertar a tecla “q”), procurar o parâmetro
“Width” e modificá-lo para 0.2 ou 0.4,
respectivamente. Clicar em ok.
5
h) Os pinos de entrada e saída devem ser criados. Para tanto,
clicar em pin (ou apertar a tecla “p”). Criar um pino de entrada,
setando a direção (Direction) para “input” e nomeando-o. Para
o pino aparecer clicar na janela do esquemático. Executar o
mesmo procedimento para criar um pino de saída, porém dessa
vez a direção deve ser setada para “output”.
USAR os nomes in e out
i)
Clicar em Check and save. Se nenhuma mensagem de alerta/erro for gerada (na janela ifcb – a menor), a célula
está estruturalmente correta.
Criando a view layout
Agora criar a “visão” (view) layout: no Library Manager clicar em FILE à New à Cell view. Selecionar a
biblioteca previamente criada (no caso lab3), digitar o nome da célula que iremos desenhar, a visão layout e
selecionar a ferramenta Virtuoso.
O resultado é a interface gráfica da ferramenta, com a lista de camadas à esquerda (janela LSW).
6
Redimensionar
Copiar
Mover
Retângulo
Régua
•
NOTAR NA PALETTE DA ESQUERDA:
• AV - todos os níveis visíveis
• NV – nenhum nível visível – pode-se desabilitar tudo e só habilitar para edição um nível desejado –
MUITO ÚTIL
• AS - todos os níveis selecionáveis
• NS – nenhum nível selecionável – pode-se desabilitar tudo e só habilitar para seleção um nível desejado –
MUITO ÚTIL
•
DICAS DA INTERFACE GRÁFICA:
• Observar no topo da janela as coordenadas e as dimensões do retângulo que se está desenhando.
• A interface gráfica trabalha com um conceito de “empilhamento” de comandos. Cuidar o canto inferior
esquerdo, o qual indica o comando ativo – no caso o desenho de um retângulo. Pode-se por exemplo estarse inserindo um retângulo e fazer-se zoom (F ou Z).
• Os comandos de mover, zoom, apagar, salvar, esticar, undo, etc. concentram-se nos botões da esquerda da
interface gráfica.
• Outra dica para facilitar a edição do layout é ativar a opção “gravidade”, para que o cursor
automaticamente “caia” perto das bordas as quais utilizaremos como referência no momento da edição.
Para isto abrir o menu “options à layout editor” e selecionar “gravity on”, ou simplesmente digitar ‘g’.
• A régua pode ser invocada pelo atalho “K” do teclado e todas réguas são apagadas ao utilizar-se o atalho
“shift+K”.
• Para desfazer a ultima alteração no layout, pode-se usar o atalho “U” do teclado. Para refazê-la, o atalho
“shift+U”.
• Para visualizar todo o layout deve-se usar o atalho “F” do teclado.
• A ferramenta de zoom pode ser usada fazendo-se um retângulo na área a ser visualizada com o botão
direito do mouse.
• O local onde o desenho está armazenado é definido de forma absoluta no arquivo cds.lib. Por exemplo, a
última linha deste arquivo no meu exemplo é: “DEFINE lab3 /home/moraes/layout/lab3”. Se o layout for
copiado para outra máquina este arquivo deve ser editado manualmente.
7
Desenhando o INVERSOR
•
•
As regras de projeto serão dadas ao longo do laboratório. Caso
seja necessário, consultar o professor para regras mais
detalhadas.
NP
Nome
Poço N
Área Ativa (DIFUSÃO)
Região N+
Região P+
Polisilício
Contato
Metal 1
Via
Metal 2
Margens
OD
Observação
PP
Local para os transistores N
Local para os transistores P
OD
Conecta metal 1 ao metal 2
Delimita as margens da
célula
Estudar agora as regras de projeto. Exemplo de regras:
Nível
PO (poli)
M1 (metal 1)
•
NWELL
Principais camadas utilizadas:
Nível
NW
OD
NP
PP
PO
CO
M1
VIA1
M2
prBoundary
•
CAMADASPARAOSTRANSISTORES
Largura
Mínima
Espaçamento
Mínimo
0,06µm
0,09µm
0,12µm
0,09µm
Overlap
para
CTM/V1M
0,03µm
0,025µm
NP
OD
PP
Contatos (CTM): 0,09 x 0,09 µm, com espaçamento entre contatos
igual a 0,11 µm
Vias (VIA1): 0,1 x 0,1 µm
OD
prBoundary
O transistor N é formado por área ativa (OD), com N+ ao redor (NP). O transistor P é formado por área ativa
(OD), P+ ao redor (PP), e poço N ao redor da área P+ (NWELL)
•
Antes de iniciarmos o projeto físico do inversor, vamos explorar as
opções de exibição. Para isto, ir no menu “options à display”.
•
Selecionar a caixa “pin names”.
•
Explorar as opções de display, que auxiliam o projeto físico da célula.
•
Reparar os controles de grid de manufatura, X Snap e Y Snap
Spacing. Esses valores devem sempre estar coerentes com
especificações feitas pelo fornecedor da tecnologia utilizada. Nesse
caso, ambos estão setados para 0.005. Isso significa que, para essa
tecnologia, as dimensões de qualquer camada devem sempre ser
multiplas de 0.005 µm, tanto para o eixo X quanto para o eixo Y.
Para criar um retângulo, deve-se primeiro selecionar a camada desejada na pallet do LSW. O próximo passo é usar
o botão “Retângulo” (atalho “R” no teclado), clicar em qualquer lugar do editor de layout, arrastar o mouse e clicar
novamente, fazendo assim um retângulo da camada escolhida. Para acertar as dimensões, usar a ferramenta
“Régua” (tecla “K” do teclado) para medir o tamanho desejado, e a ferramenta “Redimensionar” (atalho “S”) para
definir o novo tamanho. Para redimensionar, clicar na borda do retângulo e arrastar o mouse até obter-se o tamanho
desejado, então clicar novamente.
8
1. Faça um zoom próximo da
intersecção dos eixos, e com a
régua faça as medidas 0,6 x
0,33 µm. Desenhar dois
retângulos 0,6 x 0,33 µm, para
as linhas de alimentação, 1,88
µm de distância entre si.
Utilizar a camada M1
(drawing) no pallet LSW. Dica:
o segundo retângulo pode ser
obtido copiando o primeiro
através do botão copiar ou do
atalho “C”, no teclado. Para
tanto, clicar no retângulo
desenhado, arrastar o mouse e
clicar novamente no local
desejado.
2. Desenhar dois retângulos de
difusão, um 0,48 x 0,2 µm para
o NMOS (na porção inferior do
layout), e um 0,48 x 0,40 µm
para o PMOS (na porção
superior). Deixar 0,25 µm
entre difusão e metal1. Utilizar
a camada OD (drawing).
Desenhar agora um retângulo
de poli, camada PO (drawing).
Esse retângulo deve ter largura
de 0,06 µm e se sobrepor à
difusão, representando assim o
gate do transistor. Os gates dos
dois transistores desenhados,
podem ser conectados por poli.
OBS: respeitar regras de
layout!
DICA:acompanharo
tamanhodoretângulo
podedXeedYnotopo
dajanela
DICA:podeserdifícil
acertarotamanhodos
retângulos.Apóso
desenhoaproximado
pode-seselecionaro
retânguloecomoatalho
"q"(propriedades)fazer
oajustefino.
0,21
0,16
3. Desenhar os contatos. Cada
contato deve ser desenhado um
quadrado 0,09 x 0,09 µm e
utilizando a camada CO
(drawing). Lembrar que a
distância mínima entre contatos
é 0,11 µm. Além disso, a
camada de difusão deve se
sobrepor pelo menos 0.03 µm
para cada lado de cada contato.
Finalmente, os contatos devem
ter uma distância mínima de
0.09 µm do gate do transistor
(região que o poli sobrepõe a
difusão). Desenhar todos
contatos possíveis, respeitando
as regras de layout.
9
4. Desenhar as camadas de metal 1.
5. Criar o local para a inserção do
Utilizar a camada M1 (drawing) para
pino de entrada. Para isto, no
sobrepor os contatos e realizar a
polisilício: (a) desenhar um
conexão entre difusão e metal 1. Notar
retângulo 0,15x0,15 de poli; (b)
que o metal deve sobrepor o contato
centrar um contato no poli (com
em pelo menos 0,03 µm para cada
sobra de 0,03 µm para cada lado);
lado. Desenhar um retângulo de 0,09
(c) fazer um retângulo 0,28x0,15
µm de largura de metal 1 e conectar o
de metal sobre o poli e o contato.
source do PMOS à linha de metal
IMPORTANTE: Não é possível
desenhada na etapa 1, na porção
criar um pino na região em que o
superior do layout. Repetir o processo
poli se sobrepõe a difusão (gate do transistor).
para conectar o dreno do PMOS ao
source do NMOS e o dreno do NMOS 6. Criar pinos I/O.
a linha de metal da porção inferior.
Antes selecionar a
Notar que o espaçamento mínimo de
camada M1 (pin)
metal é de 0.09 µm.
no LSW (na
pallet), clicar em
Create à Pin
(atalho “ctrl+P”),
selecionar o modo
shape pin, definir o
pino como input e
dar um nome ao
pino. Esse nome deve ser o mesmo dado ao esquemático. Clicar
em “Display Pin Name Option” e modificar o valor de Height
para 0.1. Clicar em Ok.
7. Clicar em hide, clicar em qualquer lugar do editor de layout,
arrastar o mouse e clicar novamente.
Desenhar um quadrado 0,1 x 0,1 µm
(deixar o “+” do label dentro do
quadrado).
8. Repetir o processo de criação para o
pino de saída: (a) retângulo de M1/drw
0,15x0,15; (b) dessa vez selecionar o I/O
type “output” e posicionando-o no nodo
de metal 1 que conecta o PMOS ao
NMOS. O centro do label deve estar
dentro do retângulo do pino.
10
9. Conectar o substrato às
linhas de alimentação.
Desenhar dois retângulos de
difusão (OD) de 0.43 x 0.15
µm. Posicioná-los sobre as
linhas de alimentação,
desenhadas em metal 1, e
desenhar dois contatos entre
cada par de retângulos de
difusão e metal 1. Respeitar as
regras de layout para contatos.
10. Polarizar os retângulos de
difusão desenhados. Desenhar
um retângulo com a camada
NP (drawing) para a porção
superior e um retângulo com a
camada PP (drawing) para a
inferior. Notar que essas
camadas devem sempre
sobrepor a difusão (OD) em
pelo menos 0,16 µm para cada
lado. E devem estar a pelo
menos 0,13 µm de distância
dos transistores do inversor.
11. Polarizar os transistores desenhados, com P+ e N+. Desenhar um
retângulo que envolva o transistor da porção inferior do layout.
Utilizar a camada NP (drawing). Notar que essa camada deve sempre
sobrepor a difusão (OD) em pelo menos 0,16 µm para cada lado e ter
distância mínima de 0,13 µm da difusão utilizada para conectar o
substrato a alimentação. Fazer o mesmo para a porção superior do
desenho, porém dessa vez utilizar a camada PP.
12. Repetir o processo, na porção superior, para a camada NW (poço N).
Esse camada também deve sempre sobrepor a difusão em pelo menos
0,16 µm para cada lado. Porém, o usual é dar uma margem maior, para
que ela não fique exatamente em cima das camada PP e NP.
13. Desenhar um retângulo que envolva a célula inteira (do canto inferior
esquerdo do gnd ao canto superior do vdd), de uma linha de
alimentação até a outra, utilizando a camada prBoundary.
14. Finalmente, criar dois novos pinos, para as linhas de alimentação.
Primeiramente criar um pino com a camada M1 (pin), direção “input”
e nome “vdd!”. Esse pino deve ter o mesmo tamanho da camada M1
desenhada para a linha de alimentação na porção superior do layout e
deve ser posicionada de forma a sobrepor essa camada. O
procedimento deve ser repetido, porém agora criando um pino cujo
nome deve ser “gnd!” e posicionar-se sobre a camada de metal 1 da
linha de alimentação na porção inferior do layout.
O Resultado deve ser equivalente ao da figura abaixo.
Camada NN é o
retângulo amarelo
O poço N
(passo 12) é o
retângulo laranja
Camada PP é o
retângulo rosa
O retângulo branco é a camada
prBoundary (passo 13)
Camada NN é o
retângulo amarelo
Camada PP é o
retângulo rosa
11
Verificando se o desenho está correto
•
Este passo é feito através da ferramenta Calibre DRC (design rule checker).
•
Ir em “Calibre à Run DRC”, clicar em Run DK DRC e OK.
•
Escolher o modo DRC (Flat), pois desenhamos o inversor sem instanciar nenhum bloco hierárquico. Clicar em
Run DRC. Caso apareça a mensagem de sobrescrever o arquivo, clicar em ok. Será gerado um relatório geral
da ferramenta, mostrando todos os passos executados na verificação do layout.
•
Fechar a janela de relatórios e abrir a janela do RVE, que demonstra quais regras de layout foram violadas e
quais foram respeitadas. Dica, clicar no funil para filtrar apenas as regras que podem ter sido violadas, para
assim corrigir o layout. Selecionar a opção “Not Unresolved” e clicar em apply.
12
•
Havendo erros de DRC:
o
Serão sinalizados com o código da regra de projeto. Ao clicar na violação, será dada uma explicação do
erro. Nesse caso, a regra de área mínima para metal 1 não foi respeitada em 2 ocasiões. Notar que o
valor de área mínima é dado para que o layout seja corrigido.
o
Ao clicar duas vezes em uma das violações, a janela do virtuoso (com o layout) mostra exatamente
onde essa violação acontece.
•
Corrigir os possíveis erros de DRC e executar novamente a ferramenta de verificação. Deixar o layout livre de
violações.
•
Essa verificação, garante que o layout projetado é “fabricável”. Quando uma fábrica recebe as mascáras de um
layout, ela verifica se esse layout respeita as regras de projeto físico. Se sim, o projeto será fabricado. Se não,
ele retorna ao projetista.
13
Verificando se o layout e o esquemático são equivalentes
•
Este passo é feito através da ferramenta Calibre LVS (layout versus schematic).
•
Ir em “Calibre à Run LVS”. Escolher o modo Flat novamente e clicar em Run LVS. Caso apareça
uma mensagem de sobrescrever arquivo, clicar em OK. Será gerado um relatório geral da verificação.
Analisar esse relatório e fechar a janela.
•
Na janela RVE, são demonstrados os resultados da verificação LVS. Essa verificação garante que o
layout projetado implementa a mesma lógica que o esquemático que foi projetado.
•
Nesse caso, o layout não fecha com o esquemático. Ao espandir a discrepância, obtemos sua causa.
Nesse caso, o transistor NMOS MN, desenhado no layout possui um W de 0.21 µm, enquanto o
transistor equivalente, do esquemático, possui um W de 0.20 µm.
14
•
Ao clicarmos na discrepância, a ferramenta mostra, nas duas views (schematic e layout), aonde
encontra-se o problema.
•
Caso alguma violação de LVS aconteça, corrigir todos os problemas e executar a ferramenta
novamente. Garantir que o esquemático e o layout implementam a mesma função lógica.
Extração elétrica
•
Este passo é responsável pela realização da extração elétrica, ou seja, pela geração do netlist. Ir em
“Calibre à Run PEX”. Usar as opções padrão e clicar em OK. Caso apareça alguma mensagem,
solicitando para salvar o arquivo de configurações, clicar em não salvar. A ferramenta irá perguntar se
deseja criar uma pasta para o ambiente PEX, clicar em criar. Clicar na aba “Outputs” da ferramenta, e
escolher as opções de extração, C+CC e sem indutância. Clicar em Run PEX.
•
Clicar em Run PEX. Serão geradas duas janelas, uma mostrando os parasitas extraídos e outra
mostrando a descrição em spice do circuito obtido.
15
•
Pronto, temos o projeto físico do inversor completo. Reparar que foram criados três arquivos que
descrevem, em spice, o circuito extraído. No terminal, em layout/pexRunDir, encontram-se os
arquivos com essas descrições. Nesse exemplo os arquivos são:
o inv.pex.spi (base)
o inv.pex.spi.inv.pxi
o inv.pex.spi.pex
Simulação elétrica
SAIRDOCSH:exit
EXECUTARocomandoparaconfigurarosimuladorelétrico:moduleloadicmmsim
•
Abrir o arquivo base da descrição spice do inversor (arquivo pexRunDir/inv.pex.spi) e modificar sua
interface para que passe a possuir as entradas para as linhas de alimentação. Na linha 7, após “.subckt
(NOME_DA_CELULA)” é dada a pinagem do circuito. Adicionar ao final as duas entradas: vdd! e
gnd!. No exemplo aqui descrito, o resultado é o seguinte:
more inv.pex.spi
* File: inv.pex.spi
* Created: Tue Mar 26 17:26:56 2013
* Program "Calibre xRC"
* Version "v2011.3_29.20"
*
.subckt inv in out vdd! gnd!
*
XM1 out in vdd! vdd! psvtlp L=0.06 W=0.4 NFING=1 M=1 AS=0.084 AD=0.086 PS=0.82
+ PD=0.83 PO2ACT=0.212471 NGCON=1 lpe=1
XM0 out in gnd! gnd! nsvtlp L=0.06 W=0.2 NFING=1 M=1 AS=0.041 AD=0.043 PS=0.61
+ PD=0.63 PO2ACT=0.209881 NGCON=1 lpe=1
X2_noxref gnd! vdd! dnwps AREA=2.923 PJ=6.86
*
.include "inv.pex.spi.inv.pxi"
*
.ends
•
Ir para o diretório de simulação: cd sim
•
Abrir o arquivo sim_inv_ext.sp
16
•
•
•
•
Alterar a linha 15 para .include "../pexRunDir/inv.pex.spi"
Alterar a linha 20 para X1 iv out vcc 0 inv - verificar sempre se o mapeamento posicional de
pinos está correto.
Salvar o arquivo, e executar a simulação elétrica através da ferramenta Spectre. Executar o seguinte
comando: spectre sim_inv_ext.sp
Executar a ferramenta viva. Selecionar os probes no sinal de entrada e saída (iv e out) e envia-los para
o gráfico.
PRONTO!
Nossoinversor
funciona!
•
Modifique a linha do netlist que corresponde à carga de saída. Abrir o arquivo sim_inv_ext.sp,
localizar a linha que corresponde à carga de saída (21) e coloque 30fF:
C3
out
0
30fF
•
Executar novamente o comando : spectre sim_inv_ext.sp
•
No wavescan: fileàreload. Este aumento de capacitância deve resultar em um maior um tempo de
subida e de descida:
17
Simulação elétrica de um anel de inversores
•
Para concluir, simular um anel de inversores. Executar o seguinte comando (troque inversor por inv
no arquivo spice sim_anel_inv.sp, nas linhas 17 e 28 a 42):
spectre sim_anel_inv.sp
•
Executar novamente o wavescan e observar os resultados. Abrir o banco de dados da simulação do
arquivo sim_anel_inv.sp, observar a medida freq_ghz e anotar no relatório a frequência obtida.
Conteúdo do relatório a ser entregue
•
•
•
•
•
•
•
Layout do esquemático (15%) [print screen da tela] – ao salvar o esquemático, há no console
mensagem se houve ou não erro. Incluir esta tela.
Layout do inversor (40%) [print screen da tela]
Relatório do DRC (10%) [tela que indica se houveram erros ou não]
Relatório do LVS (10%) [tela que indica se houveram erros ou não]
Relatório da extração elétrica e netlist extraído (10%)
Curvas da simulação com variação de carga (5%)
Simulação do anel do inversor (10%), com indicação da frequência de operação (obtido do arquivo
sim_anel_inv.measure)
Download

Lab3 - PUCRS