Академический Документы
Профессиональный Документы
Культура Документы
30 Junho de 2008
c Alberto Rui Frutuoso Barroso, 2008
LII PORTO
CEuD FACULDADE DE DO
ENGENHARIA
UNIVERSIDADE PORTO
A Dissertação intitulada
o júri
Presidente Professor Doutor José Alfredo Ribeiro da Silva Matos
Professor Catedrático da Faculdade de Engenharia da Universidade do Porto
i
ii
Abstract
Nowadays CMOS processes with features below 100nm allow designers to develop multi
Gigabit memory devices, and integrate Mega sized memory banks in microprocessors and
ASIC products.
Due to the fact that the memory Yield decreases with the increase of the number of
storage cells, the manufacturing of RAM products must integrate built-in self-test (BIST)
and built-in self-repair (BISR) mechanisms to achieve an acceptable manufacturing Yield.
Some techniques of BIST and BISR currently used are presented in this dissertation.
A mirror BIST system is proposed and described associated with a programmable BISR,
and with an adaptable refresh schema.
A programmable logic system was developed, to simulate BIST and BISR mechanisms
used in synchronous memories. This system was implemented using a Xilinx XC3S400
FPGA kit, with a sister board with 4 Megabytes of asynchronous DRAM.
Four memory channels were integrated in the sister board, with the objective of sim-
ulating multiple bank structure seen in synchronous RAM devices. HCT latches were
installed in the the address lines to simulate North-Bridge connections, and a parallel port
was implemented for bilateral command and data transfers.
With the objective of developing minimum die overhead solutions, a mirror BIST
solution was created to be implemented in multi-bank RAM architectures, simulating the
data path between the sense amplifiers switches and the output pins controller.
As a complement to the redundant elements present in conventional BIR systems, a
time measurement unit (TMU) was tested to measure retention time of cells, and to setup
refresh controllers in adaptable refresh systems.
Adding configuration registers to redundant row and column repair systems, and using
mirror BIST units in the prefetch data path of current synchronous memory products, the
feasibility of integrating the proposed BIST schema in the memory device, with a die
overhead in the spine zone less than 72%, became proved.
iii
iv
Acknowledgements
I would like to thank Professor João Canas Ferreira for the continuous support.
My sincere thanks to Mr. Christian Seibert for the huge interest in this work.
v
vi
Dedicated to my parents
vii
viii
Conteúdo
1 Introdução 1
1.1 Built in Self Test em dispositivos de memória . . . . . . . . . . . . . . . . . 3
1.2 Built In Self Repair em dispositivos de memória . . . . . . . . . . . . . . . 5
1.3 Apresentação dos objectivos e da metodologia utilizada . . . . . . . . . . . 8
1.3.1 BIST por espelho de falhas . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 BISR por granularidade e por refrescamento adaptativo . . . . . . . 11
1.3.3 Apresentação da metodologia utilizada . . . . . . . . . . . . . . . . . 12
1.4 Descrição do sistema de lógica programável . . . . . . . . . . . . . . . . . . 13
1.5 Roteiro das próximas secções . . . . . . . . . . . . . . . . . . . . . . . . . . 18
ix
x CONTEÚDO
5 Conclusões 73
A Esquemas eléctricos 75
A.1 Kit Altium live design Spartan-3 . . . . . . . . . . . . . . . . . . . . . . . . 76
A.2 Placa de memória dinâmica registada . . . . . . . . . . . . . . . . . . . . . . 86
Referências 124
Lista de Figuras
xi
xii LISTA DE FIGURAS
xiii
xiv LISTA DE TABELAS
Lista de acrónimos
xv
xvi LISTA DE TABELAS
Introdução
1
2 Introdução
A famı́lia lógica CMOS, série 4000, foi um desses exemplos, sendo criada para resolver
os problemas de autonomia que alguns sistemas aeroespaciais tinham quando implemen-
tados com tecnologia bipolar lógica TTL.
Apesar de necessitarem de mais potência para funcionarem, as caracterı́sticas eléctricas
dos circuitos integrados bipolares eram nessa altura bastante superiores aos produtos fab-
ricados no processo CMOS. Os circuitos integrados em tecnologia bipolar eram obrigato-
riamente utilizados em projectos de sistemas de alto desempenho: circuitos lógicos com
frequências de relógio superiores a 500MHz e circuitos analógicos para amplificação difer-
encial, com slew rates superiores 500V/us, são alguns exemplos.
Famı́lias lógicas TTL, ECL e produtos MSLP em tecnologia bipolar eram obrigatoria-
mente utilizados, porque a sua integração em dispositivos ASIC era difı́cil ou impraticável.
1.2) e escolha a estratégia que garanta os melhores resultados de AQL (acceptable quality
level ).
O mecanismo ideal de BISR teria a capacidade de substituir uma única célula com
problemas por outra do bloco de redundância. Na prática tal resolução de reparação não
é viável e as soluções que existem utilizam granularidades por segmentos, linhas, palavras
divididas (figura 1.5), colunas, blocos, etc.
As soluções de BISR utilizadas nas DRAM actuais são bastante complexas e versáteis.
Ocupam alguma área de silı́cio na espinha dorsal da DRAM e a sua eficiência é avaliada
pela capacidade “milagrosa” de produzir um yield superior a 50% em bolachas de silı́cio
onde esse valor é 0% antes da reparação BISR ser efectuada.
Os defeitos no óxido de silı́cio provocam muitas falhas SCF (single cell fails) e, se o
fabricante utilizar uma granularidade demasiado elevada no mecanismo de redundância,
pode correr o risco de algumas SCF estarem presentes nos blocos que iriam ser utilizados
na reparação.
Na figura 1.6 podemos verificar que a granularidade é demasiado elevada, o que provoca
desperdı́cio de células e o aparecimento de blocos redundantes com falhas.
1.2 Built In Self Repair em dispositivos de memória 7
Paralelamente sabemos que é impossı́vel integrar uma cobertura total de teste para
os modelos de falha conhecidos e que a cobertura mais eficiente para detecção de falhas é
realizada no produto final (test at the application).
Partindo dessa realidade, o mecanismo de BIST em espelho, desenvolvido neste tra-
balho, tira proveito do paralelismo existente nos actuais produtos DDR/DDR2/DDR3/XDR
e em sistemas de microprocessadores multicore.
Esta solução de BIST foi desenvolvida e simulada para ser integrada nos percursos da
espinha dorsal do dispositivo, em particular na zona entre o multiplexador de prefetch e a
matriz de memória(ver figura 1.7).
A dimensão da área pré-testada será calculada com base na taxa de falhas da matriz:
um determinado dispositivo de memória que tenha em média 10% de endereços com falhas,
necessita de um sector de arranque testado nessa dimensão.
Quando o BIST é accionado no produto final, o número de blocos iniciais sem falhas,
vai ser utilizado para carregar o contador de paragem do bloco de referência (ver flag
AdMax na fonte em Verilog).
Esta solução de BIST utiliza partes de memória convencional para guardar os endereços
que falharam, o controlador de BIST utiliza a arquitectura em espelho dos quatro (ou oito)
blocos de memória existentes nas memórias DRAM DDRx, para registar no primeiro bloco
testado (sem falhas) as posições de memória que falharam no bloco oposto.
Na figura 1.8, podemos ver que o controlador de BIST vai ficar integrado no bloco de
I/O gating, que é a zona que permite integrar este tipo de BIST sem grande intrusão nos
percursos existentes.
Nos actuais dispositivos DRAM, a matriz é dividida teoricamente em X linhas e Y
colunas, mas na prática, são divididas em palavras com um número de bits que depende
da arquitectura de saı́da (x4, x8, x16).
Este sistema de BIST pode ser dividido em micro unidades (figura 1.9), de forma que
a matriz a testar seja simétrica (quadrados com o mesmo número de linhas de dados e
endereços) para utilizar um endereço por falha, ou então, distribuir o endereço de falha
com Z bits por Z/n posições no bloco de memória (com largura n) que está a ser utilizado
para registar os endereços em falha.
O bloco espelho de falhas deve ser carregado com zeros, para funcionar como indicador
de último endereço com falha.
Os endereços em falha podem ficar registados no disco duro ou numa memória flash
(presente na actual geração de computadores com Windows Vista) e serem utilizados e
descartados em operações de recuperação BISR, ou então serem utilizados em mecanismos
de protecção de memória do microprocessador.
arquitectura interna (figura 1.12) que permite que se liguem em paralelo os bits com o
mesmo peso, “dobrando” a meio o barramento de dados para utilização em sistemas de 8
bits. Os sinais de controlo UB* e LB* permitem colocar as suas linhas de dados em estado
de alta impedância.
Esta placa auxiliar foi projectada com o objectivo de permitir operações em quatro ban-
cos, leitura de 32 bits em simultâneo, utilização de paralelismo para operações BIST/BISR
e comunicações de dados com o PC utilizando uma segunda porta paralela (IEEE1284).
Esta placa utilizou as 34 linhas de I/O presentes nos conectores HDR1/HDR2 e 40
linhas que eram utilizadas pelos displays DS1 a DS5.
Os barramentos de dados dos quatro módulos SIM de 30 pinos (figura 1.14) estão
ligados independentemente à FPGA utilizando 32 IOs. Porém devido a estes utilizarem
sinalização TTL, foram instalados divisores resistivos (R1, R2, R6, R7, R11, R12, R16,
R17) para não se exceder os 4.4V de tensão máxima permitida pela FPGA nas suas
entradas, e colocar alguma limitação de corrente nos conflitos neste barramento entre a
memória e a FPGA (bus contention).
As dez linhas de endereços destes módulos SIM partilham os mesmos IOs da FPGA
utilizando latches transparentes (74HC373N) para adaptação, registo de sinais (e evitar o
uso de mais 26 linhas de IO).
Nesta sister board (figura 1.13) foram utilizadas latches transparentes SN74HC373 no
barramento de endereços dos quatro módulos SIM para adaptar os sinais de lógica LVTTL
da FPGA, e partilha de I/O para as dez linhas de endereços destes módulos.
No projecto desta placa foi instalado um condensador de desacoplamento por circuito
integrado, cujo valor foi calculado para uma corrente transitória de 3V/2ns e 30pF por
pino.
Utilizando as equações:
dv
T ransitory : I = C. (1.1)
dt
dt
F ilter : C = I. (1.2)
dv
foi obtido um valor de 64nF, que foi arredondado para os clássicos 100nF. Escolheram-
se condensadores de baixo ESR, com dieléctrico de poliéster e com tensão nominal de
100V.
1.4 Descrição do sistema de lógica programável 17
A placa irmã ficou colocada sob a placa do kit (figura 1.15) tentando minimizar a
distância das ligações entre os pinos I/O da FPGA e os quatro módulos de memória
dinâmica.
Foi implementada na sister board uma porta paralela (tabela 1.1) com capacidades de
funcionar em modo ECP, utilizando um registo para escrita e leitura de dados (endereço
0x378), um registo de estado/status (endereço 0x379) e um registo de controlo no endereço
0x37A. O bit 5 do registo de controlo é utilizado para permitir a bidireccionalidade da
porta paralela.
Devido ao facto de a camada HAL (Hardware Abstraction Layer ) nos sistemas oper-
ativos Windows com tecnologia NT (W2K, XP, Vista) não permitir o acesso directo aos
recursos de hardware, foi utilizada uma biblioteca dinâmica inpout32.DLL (figura 1.16) ex-
istente na Internet [7] como alternativa à utilização de um Device Driver, ou à instalação
de um sistema operativo sem HAL (MS-DOS, Windows9x, etc.)
O ficheiro inpout32.DLL tem integrado um driver que é instalado em modo de ker-
nel nas versões de Windows com HAL, permitindo acessos directos de leitura e escrita
utilizando as funções inp32 e out32.
Neste capı́tulo é feita uma breve apresentação sobre a evolução tecnológica dos produ-
tos de memória, é descrito o percurso dos fabricantes que foram marcos nesta indústria,
são descritos os dispositivos de memória CMOS volátil utilizados em produtos CCC e são
apresentados os principais problemas que afectam os dispositivos de memória fabricados
com tecnologias CMOS inferiores a 100nm. No final deste capı́tulo, o processo de teste
de memórias é descrito e são apresentados os principais métodos de DFT utilizados em
dispositivos de memória.
19
20 Dispositivos de memória: evolução e fabrico
Esta dinâmica provocou uma autêntica lei da selva nesta indústria ocorrendo com reg-
ularidade algumas situações muito melindrosas: concertação de preços entre fabricantes,
apoio financeiro do governo Coreano, embargo da UE à Hynix, litı́gios sobre roubo de
propriedade intelectual, headhunting dos recursos humanos da concorrência, etc.
O desaparecimento dos produtos de memória da Intel e da Mostek chocou o mercado
tecnológico nos anos 80, mas desde 1994 têm ocorrido numerosas desistências e fusões; eis
uma pequena lista das ocorrências mais divulgadas:
• A Elpida surge com a fusão de fábricas de DRAM da Hitachi e da NEC; e mais tarde
absorve o sector DRAM da Mitsubishi.
• PDAs com acesso à Internet por Wimax, VoIP, jukebox de vı́deo e áudio digital,
recepção de DVB-H e GPS.
• Sistemas de IPTV com funções de PVR, VIOD e Internet browsing com jogos em
flash e Java.
Resumo:
O mercado das DRAM é muito instável, mas existem vários produtos CCC em franca
expansão que vão consumir bastantes dispositivos de memória e, a médio prazo, poderão
trazer mais estabilidade na relação entre a oferta e a procura. A curto prazo e utilizando
os actuais processos CMOS no desenvolvimento de produtos de memória, a decisão de
incluir mecanismos eficazes de BIST/BISR nesses dispositivos é um dos factores mais
determinantes para se obter Yields elevados e manter maiores margens de lucro na venda
destes produtos.
24 Dispositivos de memória: evolução e fabrico
Devido a esta estrutura interna da matriz, existem restrições temporais (figura 2.5) de
acesso que têm que ser respeitadas entre as fases de desactivação, acesso a linha e acesso
a coluna.
Os parâmetros tRP(ta(c)), tRCD(tRLCL), tdis(ch) e tw(ch) definem respectivamente:
atraso do RAS para CAS, tempo de acesso aos dados pós CAS, tempo de atraso para alta
impedância, e tempo de desactivação (emphprecharge time.
Do ponto de vista de projecto as memórias dinâmicas exigem controladores de memória
complexos, mas a sua densidade e preço por bit compensam as muitas desvantagens que
possuem.
Nesta geração de memórias começaram a serem incluı́das algumas facilidades que se uti-
lizam nos actuais produtos de memória: controlador de refrescamento automático (figura
2.7), auto-refrescamento com oscilador RC integrado e reconfigurações de matriz para
modos de teste.
A utilização de DRAM-FPM expandiu-se com a introdução dos processadores de 32bits
80386/80486 da Intel no mercado de computadores PC. Foi nesta geração de computa-
dores pessoais que começou a leitura e gravação de áudio e vı́deo em formatos MPEG e
que surgiram os primeiros problemas de largura de banda da memória que limitavam a
resolução de digitalização.
28 Dispositivos de memória: evolução e fabrico
As SDRAM tinham como caracterı́sticas principais serem alimentadas por 3.3V com
sinalização LVTTL, menor consumo, a organização em quatro bancos permitia “esconder”
os tempos de acesso aos blocos individuais, bursts programáveis de 1/2/4/8 colunas por
linha, sequência de burst programável para controlo de cache fill, interrupção do burst
nas operações de leitura/escrita/precharge (figura 2.11), mascaramento de DQs ciclo a
ciclo, latência de CAS programável, controlador de refrescamento gatilhado por RAS, e
controlador de auto-refrescamento com oscilador RC interno.
Utilizando os mesmos pinos de controlo de uma memória assı́ncrona (CS,RAS,CAS,WR)
e algumas linhas de endereço, a SDRAM executa os comandos definidos pela norma
JEDEC (tabela 2.1) e alguns comandos proprietários (número de série, modos de teste,
BIST, BISR, etc.).
A Rambus (figura 2.12) foi pioneira com a RDRAM e mais tarde a JEDEC utilizou o
mesmo princı́pio nos produtos DDR e GDDR.
Podemos ver na tabela 2.2 a evolução das memórias DDR, utilizando o prefetch como
mecanismo para aumentar a largura de banda no interface.
Na figura 2.13 está representada a arquitectura interna de uma memória DDR, com um
bloco de prefetch 2n utilizado na leitura e o conversor série-paralelo utilizado na escrita.
O bloco de prefetch 2/4/8/16n é implementado com um multiplexador com um número
de entradas iguais ao nı́vel de prefetch e a largura (número de bits) dessas entradas vão
depender da organização da memória (x4, x8, x16).
O controlador da memória DDR gere os sinais de select deste multiplexador em con-
junto com um registo e driver que envia dados nos flancos ascendentes e descendentes do
sinal DQS.
Na escrita, o problema de largura de banda que existe na matriz de células (velocidade
ligeiramente superior a 100Mbps) é ultrapassado com a utilização de uma memória FIFO
de alta velocidade acedida com o sinal DQS, como relógio de escrita externa, e os registos
de conversão série-paralelo de n bits de largura nos IOs (DQ0,1, n) para n vezes o nı́vel
de prefetch.
A ligação da matriz de células para esta interface (datapath interno) varia entre fabri-
cantes e pode ser reconfigurada para modos de teste (testar a memória na largura máxima).
É nesta interface que as soluções BIST podem ser inseridas com a menor intrusão.
Analisando a figura 2.15 podemos ver o aumento de desempenho que os novos produtos
CCC vão apresentar; a SDRAM continua a ser o cavalo de trabalho (work horse) dos
produtos com menor exigência computacional (linha branca e castanha), os dispositivos
DDR (redes SOHO) vão absorver parte das aplicações que utilizavam SDRAM e vão surgir
produtos de alto desempenho (IPTV-HDTV, visualização 3D, consolas de jogos, DVB-S2)
que irão necessitar de dispositivos de memória com grande largura de banda (DDR3, XDR,
GDDR).
Os produtos que utilizam memórias celulares (figura 2.16) estão a abandonar os dispos-
itivos SDRAM. As memórias LPDDR (DDR de baixa potência) a partir de 2010 poderão
alcançar uma cota de 100% do mercado.
Com um custo de fabrico por bolacha de silı́cio quase constante, os fabricantes de cir-
cuitos integrados VLSI preferem utilizar bolachas com diâmetro elevado (300mm e 450mm)
e escolhem o processo CMOS mais vantajoso, que permita aumentar a produtividade e
reduzir os custos de produção.
Geometricamente, a utilização de processos CMOS mais reduzidos, permite aumentar
o número de circuitos integrados na bolacha de silı́cio, mas devido a alguns problemas
técnicos que existem nestes processos CMOS mais avançados, o rendimento de produção
é nulo (Yield of zero).
Nas tecnologias CMOS maiores que 200nm o Yield em produtos de memória era bas-
tante baixo (50%), mas com a utilização de geometrias inferiores a 200nm este desceu para
zero e também aumentou o número de dispositivos que não são recuperáveis por limitações
dos actuais sistemas de reparação por redundância.
Exemplo: utilizando as falhas no óxido como mecanismo de falha mais comum e com
energia de activação de 0.3eV, stress de temperatura 125◦ C em relação a 50◦ C e com 1V
de stress de voltagem, obtemos 56 horas (a 50◦ C) por cada hora de burnin a 125◦ C.
O teste destas caches era realizado pela ROM BIOS do PC durante a execução de
rotinas de POST, porque a AMD colocou um registo especial ( Array Access Register ) no
microprocessador que permitia endereçar e ler estas memórias (figura 2.20) utilizando os
registos ECX, EDX e EAX.
A estratégia tester in the chip é a melhor solução para o teste dos actuais produtos
SOC, a sua estrutura interna com múltiplos microprocessadores permite que estes sejam
utilizados internamente em funções de BIST.
• Uma única unidade que contenha controladores de loopback para os percursos analógicos
e digitais e fornecer resultados globais (SNR, tensões, BER) com o auxilio do pro-
cessador embutido, com foco no Auto-teste na aplicação final.
Um, ou vários controladores de BIST devem ficar posicionados junto ao bloco a testar,
podendo tirar partido da granularidade da RAM para simplificação da implementação.
Consoante o estimulo de teste que o controlador (figura 2.22) fornece ao bloco em
teste, os sistemas de BIST são designados como determinı́sticos ou pseudo aleatórios.
O registo MISR é utilizado no teste de memórias ROM onde fornece uma assinatura
no final do teste de todos os endereços, que é comparada com a assinatura de referência
obtida numa ROM sem falhas.
A utilização de MISR no teste de RAM obriga a que se escreva na memória valores
conhecidos para se obter a assinatura de referência.
Se o MISR não possuir dimensões suficientes podem ocorrer erros de mascaração (alias)
e também podemos obter falsas unidades sem falhas, se ocorrerem duas falhas iguais.
As técnicas pseudo aleatórias são úteis para compressão dos resultados de teste das
saı́das de sistemas BIST, mas muito pouco eficazes para geração de vectores de estı́mulo
devido à natureza fı́sica das falhas. Em sistemas BIST transparentes [17] que correm em
simultâneo com o normal funcionamento da memória, o uso de memórias CAM na geração
de vectores de teste é uma alternativa para geração de topologias pseudo aleatórias e
clássicas.
44 Dispositivos de memória: evolução e fabrico
Na figura 2.26 está representado uma implementação tı́pica [18] de uma solução BIST
para memórias.
Podemos verificar a enorme intrusão que este sistema causa na memória:
Esta implementação pode ser integrada em um ASIC porque não existe acesso directo
aos sinais de dados, endereços e controlo da memória embutida; mas não é apropriada
para se utilizar em memórias discretas devido à intrusão que o colar causa.
O controlador de BIST pode ser realizado utilizando máquinas de estado (figura 2.27),
e é projectado para controlar o contador de endereços, gerador de dados e o controlador
de memória.
A complexidade deste controlador pode ser muito baixa, se este tiver como objectivo
realizar operações lineares de escrita e leitura, e se o vector de teste (dados a escrever) for
fornecido do exterior.
Se existir a necessidade de realizar testes com topologias utilizadas para detectar falhas
muito especı́ficas, terá de se implementar neste controlador algumas operações complexas
para geração de endereços e vectores de teste.
A principal vantagem de uma solução de BIST por máquina de estados é a simplicidade,
mas esta solução é pouco flexı́vel quando existe a necessidade de adicionar topologias de
teste para se aumentar a cobertura de teste em novos problemas do dispositivo de memória.
2.4 Teste de dispositivos de memória 45
Neste BIST com compressão de resultados é utilizada uma memória CAM (figura 2.30)
no acumulador de sı́ndromas, enquanto que na solução BIST em espelho desenvolvida nesta
dissertação os resultados (endereços que falharam) são colocados em zonas pré-testadas
2.4 Teste de dispositivos de memória 47
da memória.
O registo WBR serve para aceder ao sinais internos do core utilizando os eventos
definidos para essas operações: shift, capture, update, transfer.
Esta interface de teste é bastante versátil para o controlo e integração de mecanismos
de teste nos actuais ASIC SOC, existindo no mercado [21] algumas soluções de BIST para
memórias embutidas (figura 2.33) utilizando este interface.
50 Dispositivos de memória: evolução e fabrico
Resumo:
O BIST por microcódigo é o método mais eficaz para se obter uma cobertura mais ampla
da diversidade de falhas que afectam os actuais dispositivos de memória.
Estruturas MISR são úteis na compressão de vectores de resultados, mas quando se
necessita de uma lista de endereços que falham para configuração do BISR, os resulta-
dos do MISR são insuficientes e a utilização de uma memória de resultados é imperativa.
Guardar os resultados de teste em memórias CAM é vantajoso, porque se a CAM for
implementada em flash pode ser utilizada pelo BISR no powerup.
Capı́tulo 3
Esta solução de BIST foi desenvolvida com base no extenso paralelismo que caracteriza
os actuais dispositivos de memória e sistemas de microprocessadores.
A utilização de 2, 4 e 8 canais no interior das memórias DDR (prefetch), canais de
módulos nas motherboards e o paralelismo das memórias XDR são disso exemplo.
Tirando partido da simetria que existe nestas arquitecturas paralelas, foi desenvolvida
uma solução que consiste em pequenas alterações no datapath original e na adição de um
controlador de BIST.
Foi desenvolvido um datapath do kit FPGA para um PC exterior tentando replicar a
interface com as memórias DRAM: poucos pinos de controlo, endereços multiplexados e
implementação de um contador de endereços para operações em burst.
51
52 Avaliação dos mecanismos BIST desenvolvidos
Foi desenvolvido um bloco em Verilog (anexo B) do datapath sem BIST para servir de
referência no cálculo da área no die que o BIST em espelho vai adicionar.
Este bloco foi testado utilizando o módulo de topo no Xilinx ISE, representado na
figura 3.1:
assign AD1red=AddrRAM1[7:0];
assign AD2red=AddrRAM2[7:0]; //reduç~
ao de granularidade
Utilizando o Chipscope (com o setup 3.6) para analisar a máquina de estados desta
solução de BIST, podemos verificar na figura 3.7 o estado nulo antes do inı́cio do BIST e
o estado final comum a ambos os testes (figura 3.8).
3.1 Solução de BIST por teste em espelho 59
3.2 Conclusões
A utilização deste mecanismo de BIST permite realizar o seguinte cenário no produto
final:
Apresentação de sistemas de
auto-reparação
No capı́tulo 13, do livro de Dean Adams [16] podemos verificar a diversidade de defeitos
que afectam as memórias fabricadas com as tecnologias mais densas.
Com a utilização de novas tecnologias CMOS na fabricação de dispositivos cada vez
mais densos, e se os actuais problemas de processo não se resolverem, a redundância
necessária para recuperar dispositivos de wafers com Yield 0 terá que aumentar na pro-
porção do aumento do número de falhas; se a indústria continuar a utilizar os mesmos
esquemas de reparação na wafer poderemos atingir em breve valores de redundância su-
periores a 50%.
Se a qualidade de fabricação não se degradar e o valor de redundância permanecer
constante (em percentagem ) significa que nos futuros dispositivos de 8 Gigabit poderá
existir mais de 400Mbit em redundância.
A utilização de mecanismos BISR iguais ou equivalentes aos apresentados nesta dis-
sertação poderá proporcionar um aumento de yield com a introdução de produtos sem
teste completo na matriz.
Não foi feito um estudo de um caso de referência (case study) para comparação com esta
técnica BISR por manipulação de granularidade, porque todos os fabricantes de DRAM
ocultam (por motivos de concorrência) o seu Yield antes da reparação na wafer, qual o
valor de redundância que o dispositivo contém e o valor de Yield depois da reparação.
Os fabricantes também mantêm sob segredo industrial o número de fusı́veis utilizados
na reparação a laser e a quantidade de antifusı́veis existentes.
Esses valores seriam interessantes para comparar a granularidade existente nas soluções
de BISR utilizadas pela indústria de DRAM e a ideia proposta nesta solução de BISR por
manipulação de granularidade.
61
62 Apresentação de sistemas de auto-reparação
As zonas de falha definem a granularidade deste sistema BISR, para permitir substituir
os elementos em falha utilizando menos recursos de redundância.
Os elementos de redundância que sobrarem podem ser utilizados em operações BISR
transparentes, ou como capacidade adicional.
O sistema BIST em espelho, descrito no capı́tulo anterior, e este BISR por manipulação
de granularidade permitem um mapeamento dinâmico da memória, que na prática se pode
revelar com a disponibilização da redundância não utilizada para reparações, como blocos
extra para o sistema operativo.
Desconhecendo se o BISR que é proposto existe nestes produtos PSRAM, vai ser
descrito o componente chave deste mecanismo de BISR por refrescamento adaptativo:
unidade de medida de tempo TMU (Time Measurement Unit).
Este TMU é utilizado para caracterizar os tempos de retenção das células que falham
com as frequências normais de refrescamento.
64 Apresentação de sistemas de auto-reparação
Se existirem células que possam ser recuperadas utilizando uma frequência mais ele-
vada de refrescamento permitida pelas microunidades distribuı́das pela matriz, esse valor
será programado nos registos de refrescamento.
Este valor especificado no datasheet possui uma grande margem de segurança devido
a uma diminuição muito elevada do tempo de retenção da célula 1C1T com o aumento da
temperatura de funcionamento.
Por esse facto foi escolhido para resolução mı́nima t=8ms (metade de tREF)
Como o sistema de sı́ntese digital de relógios DCM da Xilinx não alcança tais valores,
vai ser utilizado um contador binário de 18 bits para divisão de frequência.
O DCM tem que ser programado com uma frequência de:
O teste é iniciado com SW1 a zero e o sistema de medida de tempo baseado num
watchdog que é incrementado ciclo a ciclo vai parar quando o conteúdo da célula se degrada
(ou no overflow do contador).
Este TMU foi idealizado para ser incluı́do no datapath depois dos comutadores dos
amplificadores de sentido (figura 4.7).
A unidade de medida de tempo (TMU) de retenção foi implementada com uma máquina
de 16 estados, que podem ser descritos da seguinte forma:
• Estado 13; detecta se foi atingido o máximo do contador do TMU, ou arranca com
watchdog
Neste módulo Verilog existem 3 dispositivos embebidos com esta máquina de estados:
begin
if (reset)
contar <= 0;
else
contar <= contar + 1;
end
// contador de c~
ao de guarda (watchdog timer)
always @(posedge clk_TMU or posedge zeraTempo)
68 Apresentação de sistemas de auto-reparação
begin
if (zeraTempo)
watchdog <= 0;
else
if (enableDog)
watchdog <= watchdog + 1;
end
Resumo:
Pretendia-se apresentar neste trabalho um histograma com o valor de retenção das
células de alguns sectores dos dispositivos de memória dinâmica utilizados no sistema de
desenvolvimento.
Este histograma teria no eixo horizontal colunas, representando intervalos de tempo de
retenção, cuja altura seria o número de endereços que possuı́am esse valor de retenção.
Este histograma deveria tomar uma forma em sino (distribuição normal) centrado na
média de tempo retenção, representando a qualidade do óxido no dieléctrico dos conden-
sadores das células 1T1C.
Esta experiência iria ser repetida com uma temperatura superior a 90◦ C, com o ob-
jectivo de caracterizar os controladores de refrescamento compensados em temperatura
utilizados em memórias PSRAM.
Não foi possı́vel concretizar este objectivo em tempo útil, devido a caracterı́sticas das
memórias dinâmicas utilizadas no sistema de desenvolvimento.
Os dispositivos HY514400 durante o teste de tRET entravam em modo de teste, ficando
com um comportamento de uma latch.
Foram realizadas várias experiências para tentar descobrir o instante em que o conteúdo
da memória se degradou, sem resultados práticos (Módulo Verilog do controlador externo
em anexo).
Depois de consultar diversas informações técnicas dos antigos fabricantes deste tipo de
dispositivo dinâmico FPM, conclui-se que deverá existir um procedimento especı́fico para
realizar testes de retenção.
O módulo TMU para o BISR por refrescamento adaptativo foi desenvolvido para ser
integrado no datapath do dispositivo de memória e não foi possı́vel o seu teste no exterior
das memórias dinâmicas utilizadas no sistema de simulação.
Na página 4-6 do databook da Micron de 1995 existe uma nota que descreve a operação
de inicialização da memória com oito ciclos RAS para que esta possa sair do modo de teste
inicial. O dispositivo entra em modo de teste inicial no powerup e sempre que se violar o
tREF.
72 Apresentação de sistemas de auto-reparação
Capı́tulo 5
Conclusões
Esta dissertação procurou analisar os problemas que afectam a qualidade dos dispos-
itivos de memória fabricados em tecnologias CMOS e desenvolver algumas soluções de
BIST e BISR como solução para os problemas descritos neste trabalho.
Depois de uma breve apresentação sobre produtos e fabricantes de DRAM, foi feita
uma avaliação de uma solução de BIST e proposta uma solução alternativa ao uso de
redundância como BISR.
Com os objectivos de um acréscimo de área mı́nima no circuito integrado e de permitir o
teste no produto final, foram analisadas algumas ideias disponibilizadas por vários autores
para medir estes parâmetros.
Foi decidido sintetizar um datapath sem BIST e utilizar a sua área de implementação
como referência.
Nos resultados obtidos de die overhead, o valor de 184% baseado nos relatórios de
sı́ntese XST da Xilinx não deve ser real e a imprecisão deste número deve estar rela-
cionada com a utilização de unidades CLB como granularidade mı́nima de implementação
lógica.
Desenvolvimentos futuros:
O desenvolvimento da tecnologia CMOS está a permitir um grau de integração bastante
elevado, permitindo desenvolver produtos cuja complexidade e desempenho começam a
causar problemas de cobertura de teste utilizando os convencionais equipamentos ATE.
Começa a ser impraticável não integrar soluções de BIST e BISR em ASICs nas actuais
tecnologias inferiores a 45nm, porque existem demasiados blocos lógicos isolados no interior
do SOC que necessitam de recursos internos de teste.
73
74 Conclusões
Esquemas eléctricos
75
76 Esquemas eléctricos
93
94 Código Verilog desenvolvido
*****************************************************************************
module DataPathSemBIST(reset,F18rdwrRAM, D19selRAM, W17AUTOfeed,SRAM0_LB,
SRAM1_LB,SRAM0_WE, SRAM1_WE, LPTdata, RAM0data, RAM1data,AddrRAM1,AddrRAM2);
// modulo utilizado como refer^
encia para calculo de overhead
input reset,F18rdwrRAM,D19selRAM,W17AUTOfeed;
output SRAM0_LB,SRAM1_LB,SRAM0_WE,SRAM1_WE;
output [18:0] AddrRAM1,AddrRAM2;
endmodule
****************************************************************
module DataPathComBIST(clk,reset,STBIST1,STBIST2,F18rdwrRAM, D19selRAM, W17AUTOfeed, W16strobe, xptdata,
BISTbusy,BISTdone,BISTfail, SRAM0_LB, SRAM1_LB, SRAM0_WE, SRAM1_WE, SRAM0_CS, SRAM1_CS, LPTdata, RAM0data,
RAM1data,AddrRAM1,AddrRAM2);
input clk,reset,STBIST1,STBIST2,F18rdwrRAM,D19selRAM,W17AUTOfeed,W16strobe;
input [7:0] xptdata; //registo do BIST com os dados esperados
output SRAM0_LB,SRAM1_LB,SRAM0_WE,SRAM1_WE,SRAM0_CS,SRAM1_CS,BISTbusy,BISTdone,BISTfail;
output [18:0] AddrRAM1,AddrRAM2;
// input clk,reset,STBIST1,STBIST2,RAMfail,AdMax0,AdMax1;
// output blocoSEL,incrAD0,incrAD1,BISTbusy,BISTdone,BISTfail,RST,RAM0we,RAM1we,RAM0cs,RAM1cs;
Código Verilog desenvolvido 95
reg blocoSEL,incrAD0,incrAD1,BISTbusy,BISTdone,BISTfail,RST,RAM0we,RAM1we,RAM0cs,RAM1cs;
reg [4:0] estado;
wire F18rdwrRAM, D19selRAM, W17AUTOfeed, W16strobe, SRAM0_LB, SRAM1_LB, SRAM0_WE, SRAM1_WE, SRAM0_CS, SRAM1_CS,
RAMfail, AdMax0, AdMax1, CounterReset,Cnt0clk,Cnt1clk,RAM_select,BIST3state,RAMallSEL;
wire [7:0] LPTdata, RAM0data, RAM1data, dadosW, dadosR, dadosRAM0, dadosRAM1, xptdata, AD1red, AD2red;
//datapath busses
assign RAMfail=~(xptdata==dadosR);
assign AdMax0=(AddrRAM1==19’b1111111111111111111);
assign AdMax1=(AddrRAM2==19’b1111111111111111111);
assign AD1red=AddrRAM1[7:0];
assign AD2red=AddrRAM2[7:0]; //reduç~
ao de granularidade
assign CounterReset=reset|RST;
assign Cnt0clk=BISTbusy?incrAD0:W17AUTOfeed;
assign Cnt1clk=BISTbusy?incrAD1:W17AUTOfeed;
assign BIST3state=BISTbusy?1’b1:F18rdwrRAM;
assign LPTdata = BIST3state?8’bZ:dadosR; // inferir IOBUF ;tristate@LPT
assign dadosW = LPTdata;
assign RAMallSEL=BISTbusy?1’b0:F18rdwrRAM;
assign RAM0data = RAMallSEL?dadosW:8’bZ; // inferir IOBUF ;tristate@SRAM1
assign RAM0data=(BISTbusy&RAM0cs)?AD2red:8’bZ; // path de escrita dos endereços que falham
assign dadosRAM0 = RAM0data;
assign RAM_select=BISTbusy?blocoSEL:SRAM1_LB;
assign dadosR = RAM_select?dadosRAM0:dadosRAM1; // inferir databus MUX 2:1
// MaquinaEstadosBIST(clk,reset,STBIST1,STBIST2,RAMfail,AdMax0,AdMax1,blocoSEL,incrAD0,incrAD1,BISTbusy,BISTdone,
// BISTfail,RST,RAM0we,RAM1we,RAM0cs,RAM1cs);
begin
if (reset) begin
96 Código Verilog desenvolvido
estado<=5’b00000;
blocoSEL<=0; //0 = primeiro bloco
incrAD0<=1;
incrAD1<=1;
BISTbusy<=0;
BISTdone<=0;
BISTfail<=0;
RST<=0;
RAM0we<=1;
RAM1we<=1;
RAM0cs<=1;
RAM1cs<=1;
end
end
5’b10010: begin
blocoSEL<=1; //1 = segundo bloco *****************************************
RAM1cs<=0; // CS0=low enable para leitura, LB1/2 a low com BISTbusy
RAM0we<=0; // bloco1 de resultados fica em modo da escrita
estado <= 5’b10011;
end
5’b10011: begin
incrAD1<=0;
estado <= 5’b10100;
end
5’b10100: begin
if (RAMfail) // esperou pelo tempo de acesso (TAA=10ns)
estado <= 5’b10111; //falhou
else
estado <= 5’b10101; //passou
end
5’b10101: begin
if (AdMax1)
estado <= 5’b00110; //endereço máximo e fim de teste
else
begin
incrAD1<=1; // incrementa endereço do bloco em teste
estado <= 5’b10011; //continua
end
end
default: begin
estado <= 5’b00000;
end
endcase
end
endmodule
***************************************************************************************
module RefreshBISR(clk, DCMclk, reset, teste, F18rd, vector, RAMdata, ras, cas, we, busy, done, LPTdata,sswitch);
assign clk_TMU=contar[17]; // divide 32.768MHz por 2^18 = 125Hz <=> 8ms de resoluç~
ao do TMU
assign RAMdata =we?8’bZ:vector; // we=0 coloca o vector de teste no bus de dados para escrita
assign Rdados = RAMdata;
begin
if (reset) begin
estado<=4’b0000;
we<=0; // manter a DRAM com [d0:d7] em 3state
busy<=0;
done<=0;
zeraTempo<=0;
lerEN<=0;
ValorMax<=0;
end
4’b0010: begin
ras<=0; // inicio do tRC (random read/write cycle time)
estado <= 4’b0011;
end
4’b0011: begin
we<=0;
estado <= 4’b0100;
end
4’b0100: begin
cas<=0; //tRCD=40ns (row to column delay)
estado <= 4’b0101;
end
4’b0101: begin
we<=1; // tWCH=20ns (write command hold time); dados escritos na DRAM
estado <= 4’b0110;
end
4’b0110: begin
ras<=1; // tRAS=80ns (RAS pulse width) MAX=10us *******
cas<=1; // tCAS=40ns (CAS pulse width) MAX=10us
estado <= 4’b0111;
end
4’b1000: begin
cas<=0; // tRCD=20ns (RAS to CAS delay time) *****
estado <= 4’b1001;
end
Código Verilog desenvolvido 99
4’b1001: begin
zeraTempo<=1; //limpa contador do c~
ao de guarda
estado <= 4’b1010; // +40 para cumprir os 80ns de tRAS
end
4’b1010: begin
lerEN <= 1; // amostrar RAM data para o comparador
zeraTempo<=0; // c~
ao de guarda "ready"
estado <= 4’b1011; // +60 para cumprir os 80ns de tRAS
end
4’b1100: begin
cas<=1; // tOFF=20ns (output buffer turn off delay) data out =3state
if (passou)
estado <= 4’b1101;
else
estado <= 4’b1111; // valor lido <> do escrito .. dados degradados
end
4’b1101: begin
if (ValorMax==8’b11111111)
estado <= 4’b1111; // retenç~
ao máxima atingida : overload STOP
else
begin
ValorMax <= ValorMax + 1;
enableDog <=1; // enable c~ao de guarda
estado <= 4’b1110;
end
end
4’b1110: begin
if
(dogbark&sswitch) // c~
ao de guarda disparou
begin
enableDog<=0;
estado <= 4’b0110; // volta a l^
er e a realizar um refrescamento escondido
end
else
estado <= 4’b1110; // repetir até ao disparo do Dog, esperando pela violaç~
ao de tRet.
end
default: begin
estado <= 4’b0000;
end
endcase
end
always @(posedge lerEN) RAMread<= Rdados; //Dff para amostragem de dados da RAM
else
if (enableDog)
watchdog <= watchdog + 1;
end
endmodule
***********************************************************************
module LEDroda(increment, reset, saida);
// detector de actividade utilizado como ferramenta de debug
input increment, reset;
output [5:0] saida;
reg [5:0] saida;
reg [2:0] estado;
default: begin
estado <= 3’b000;
saida <= 6’b000001;
end
endcase
end
endmodule
*************************************************************
module RefreshBISR(clk, DCMclk, clockAC, reset, resetAC, teste, F18rd, vector, RAMdata,
ras, cas, we, busy, done, LPTdata,RAMaddr,sswitch);
Código Verilog desenvolvido 101
reg ras, cas, we, busy, done, enableDog, zeraTempo, lerEN, invADDR, invDATA, invFlag;
reg [4:0] estado;
reg [3:0] Icnt;
reg [17:0] contar;
reg [9:0] ACdata;
reg [7:0] watchdog, ValorMax, RAMread;
assign clk_TMU=contar[17]; // divide 32.768MHz por 2^18 = 125Hz <=> 8ms de resoluç~
ao do TMU
assign RAMaddr=invADDR?~ACdata:ACdata; // inferir um inversor programável (XOR)
assign vectorW =invDATA?~vector:vector;
assign RAMdata =we?8’bZ:vectorW; // we=0 coloca o vector de teste no bus de dados para escrita
assign Rdados = RAMdata;
begin
if (reset) begin
estado<=5’b00000;
Icnt<=0;
we<=1;
ras<=1;
cas<=1;
busy<=0;
done<=0;
zeraTempo<=0;
lerEN<=0;
ValorMax<=0;
invADDR<=0;
invDATA<=0;
invFlag<=1;
end
5’b00010: begin
ras<=0; // inicio do tRC (random read/write cycle time)
estado <= 5’b00011;
end
5’b00011: begin
we<=0;
estado <= 5’b00100;
end
5’b00100: begin
102 Código Verilog desenvolvido
5’b00110: begin
ras<=1; // tRAS=80ns (RAS pulse width) MAX=10us *******
cas<=1; // tCAS=40ns (CAS pulse width) MAX=10us
if (invFlag)
estado <= 5’b00111;
else
estado <=5’b10000; // escreve dados opostos nos ADDR opostos
end
5’b01000: begin
cas<=0; // tRCD=20ns (RAS to CAS delay time) *****
estado <= 5’b01001;
end
5’b01001: begin
zeraTempo<=1; //limpa contador do c~
ao de guarda
estado <= 5’b01010; // +40 para cumprir os 80ns de tRAS
end
5’b01010: begin
lerEN <= 1; // amostrar RAM data para o comparador
zeraTempo<=0; // c~
ao de guarda "ready"
estado <= 5’b01011; // +60 para cumprir os 80ns de tRAS
end
5’b01100: begin
cas<=1; // tOFF=20ns (output buffer turn off delay) data out =3state
if (passou)
begin
estado <= 5’b01101;
end
else
estado <= 5’b01111; // valor lido <> do escrito .. dados degradados
end
5’b01101: begin
if (ValorMax==8’b11111111)
estado <= 5’b01111; // retenç~
ao máxima atingida : overload STOP
else
begin
ValorMax <= ValorMax + 1;
enableDog <=1; // enable c~ao de guarda
estado <= 5’b01110;
end
end
5’b01110: begin
if
(dogbark&sswitch) // c~
ao de guarda disparou
begin
enableDog<=0;
estado <= 5’b00110; // volta a l^
er e a realizar um refrescamento escondido
end
else
estado <= 5’b01110; // repetir até ao disparo do Dog, esperando pela violaç~
ao de tRet.
Código Verilog desenvolvido 103
end
5’b10000: begin
invADDR<=1; // inverte os endereços
invDATA<=0; // inverte os dados
invFlag<=1; //done
estado <= 5’b00001; // volta a escrever
end
5’b10010: begin
cas<=0; //CBR refresh
ras<=1;
estado <= 5’b10011;
end
5’b10011: begin
ras<=1; //tRP=20ns
estado <= 5’b10100;
end
5’b10100: begin
ras<=1; //tRP=40ns
estado <= 5’b10101;
end
5’b10101: begin
ras<=1; //tRP=60ns
estado <= 5’b10110;
end
5’b10110: begin
ras<=0;
estado <= 5’b10111;
end
5’b10111: begin
ras<=0; //tRAS=20ns
estado <= 5’b11000;
end
5’b11000: begin
ras<=0; //tRAS=40ns
estado <= 5’b11001;
end
5’b11001: begin
ras<=0; //tRAS=60ns
estado <= 5’b11010;
end
5’b11010: begin
ras<=0; //tRAS=80ns
estado <= 5’b11011;
Icnt<=Icnt+1;
end
5’b11011: begin
ras<=1;
if (Icnt==4’b1010)
begin
cas<=1;
estado <= 5’b00010;
end
else
104 Código Verilog desenvolvido
end
default: begin
estado <= 5’b00000;
end
endcase
end
always @(posedge lerEN) RAMread<= Rdados; //Dff para amostragem de dados da RAM
end
endmodule
Anexo C
105
106 Módulos TOP e relatórios gerados pelas ferramentas CAD utilizadas
########################
Synopsys Design Compiler
########################
****************************************
Report : area
Design : DataPathSemBIST
Version: Y-2006.06
Date : Thu Jun 26 11:29:06 2008
****************************************
Library(s) Used:
Number of ports: 70
Number of nets: 134
Number of cells: 94
Number of references: 10
****************************************
########################
Cadence SOC Encounter
########################
DataPathSemBIST:
########################
Synopsys Design Compiler
########################
****************************************
Report : area
Design : DataPathComBIST
Version: Y-2006.06
Date : Thu Jun 26 12:03:36 2008
****************************************
Library(s) Used:
Number of ports: 87
Number of nets: 307
Number of cells: 246
Number of references: 33
***************************************************************************
########################
Cadence SOC Encounter
########################
DataPathComBIST:
117
118 Programa em linguagem C para comunicações IEEE1284
/**************************************************/
/*** Alberto Barroso MIEEC FEUP 2008 ***/
/*** comunicaç~
ao por porta paralela ***/
/*** Windows 9x, NT,W2K,XP ***/
/*** ***/
/*** Código baseado na libraria inpout32.dll; ***/
/*** mais detalhes em: ***/
/*** http://www.logix4u.net/inpout32.htm ***/
/*** ***/
/*** Copyright (C) 2006, Douglas Beattie Jr. ***/
/*** ***/
/*** <beattidp@ieee.org> ***/
/*** http://www.hytherion.com/beattidp/ ***/
/*** ***/
/**************************************************/
/* Last change: ARFB 2008.06.07 */
/*******************************************************/
/* */
/* Builds with Microsoft’s Visual C v6.0 Compiler */
/* */
/* Compile as Visual Studio Project, */
/* */
/* Create new ’blank’ project, add this file, */
/* Press F7 to build, ctrl+F5 to run. */
/* */
/*******************************************************/
#include <stdio.h>
#include <conio.h>
#include <windows.h>
/*******************************************************/
/* */
/* Be sure to change PPORT_BASE (Port Base address) */
/* accordingly if your LPT port is addressed */
/* elsewhere. */
/* */
/*******************************************************/
int ii;
short x;
int main(void)
{
HINSTANCE hLib;
//short x;
//int i;
if (hLib == NULL) {
fprintf(stderr,"LoadLibrary Failed.\n");
return -1;
}
if (inp32fp == NULL) {
fprintf(stderr,"GetProcAddress for Inp32 Failed.\n");
return -1;
}
if (oup32fp == NULL) {
fprintf(stderr,"GetProcAddress for Oup32 Failed.\n");
return -1;
}
{
//Out32(PPORT_BASE+2,0x4);
//printf("Programmed 0\n");
//getch();
//Out32(PPORT_BASE+2,0x0c);
//printf("Programmed 1\n");
//getch();
x=ReadRAM1();
printf("Port read = %04X\n",x);
}
/*************************************************************************************/
/***************************** Functions and Procedures ******************************/
/*************************************************************************************/
short ReadRAM0(void)
{
short rdata;
Out32(PPORT_BASE+2,0x21); // activate bi-directional, RAM_CS=0, incaddr=low
rdata = Inp32(PPORT_BASE);
Out32(PPORT_BASE+2,0x23); // incaddr=High; inc address counter in the rising edge
return rdata;
}
/* ________________________________________________________________________________________ */
short ReadRAM1(void)
{
short rdata;
Out32(PPORT_BASE+2,0x29); // activate bi-directional, RAM_CS=0, incaddr=low
rdata = Inp32(PPORT_BASE);
Out32(PPORT_BASE+2,0x2B); // incaddr=High; inc address counter in the rising edge
return rdata;
}
/* ________________________________________________________________________________________ */
/*
TEST: Read inputs of 8 registers from PORT_BASE address
*/
void test_read8(void) {
short x;
short i;
x = Inp32(i);
/*
TEST: Write constant 0x77 to PORT_BASE (Data register)
*/
void test_write(void) {
short x;
short i;
i=PPORT_BASE;
x=0x33;
x = Inp32(i);
printf("Set Input, read (%04X)= %04X\n",i,x);
/*
TEST: Write data from parameter
*/
void test_write_datum(short datum) {
short x;
short i;
i=PPORT_BASE;
x = datum;
122 Programa em linguagem C para comunicações IEEE1284
[1] Gary S. May and Simon M. Sze. Fundamentals of Semiconductor Fabrication. Wiley,
1st edition, 2003.
[2] CPU Ukraine. Cpu collector from ukraine, June 2008. http://www.cpu-ukraine.
com/.
[13] Alexander Miczo. Digital Logic Testing and Simulation. Wiley, 2nd edition, 2003.
[14] Ian A. Grout. Integrated Circuit Test Engineering, Modern Techniques. Springer, 1st
edition, 2006.
[15] Chang Huang, Wu. A programmable bist core for embedded dram. IEEE Design and
Test of Computers, pages 59–70, March 1999.
[16] R.Dean Adams. High Performance Memory Testing. Kluwer Academic Publishers,
1st edition, 2002.
123
124 REFERÊNCIAS
[17] A. Steininger K. Thaller. A transparent online memory test for simultaneous detection
of functional faults and soft errors in memories. IEEE Transactions on Reliability,
pages 413–422, Dezembro 2003.
[19] Ruey-Shing Tzeng Jin-Fu Li and Cheng-Wen Wu. Diagnostic data compression tech-
niques for embedded memories with built-in self-test. Journal of electronic testing,
pages 516–527, August 2002.
[20] IEEE. Ieee std 1500 - standard for embedded core test, June 2008. http://grouper.
ieee.org/groups/1500/.
[22] Volker Schober and Olivier Picot. Memory built-in self-repair. Infineon, pages 103–
114, June 2005.