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)