UDB. O que é isso? Parte 3. Datapath FIFO



Continuamos a traduzir a documentação proprietária do Cypress para blocos UDB. Além disso, tudo coincide muito bem. Para continuar o artigo prático sobre UDB, você precisará usar o FIFO e, na parte teórica, chegamos à própria descrição deles. Portanto, começamos a estudá-los em detalhes.

O conteúdo geral do ciclo “UDB. O que é isso? "
Parte 1. Introdução. Pld.
Parte 2. Datapath.
Parte 3. Datapath FIFO. (Artigo atual)
Parte 4. Datapath ALU.
Parte 5. Caminho de Dados. Pequenas coisas úteis.
Parte 6. Módulo de gerenciamento e status.
Parte 7. Módulo de controle de tempo e redefinição
Parte 8. Endereçando UDB

21.3.2.2 FIFO do Datapath


Modos e configurações FIFO


Cada buffer FIFO possui vários modos e configurações operacionais disponíveis:

Tabela 21-2. Modos e configurações FIFO.
ModeDescrição do produto
Entrada / saída
(Buffer de entrada / saída)
No modo de buffer de entrada, a CPU ou DMA grava
dados no FIFO e o Datapath os lê. No modo
dados do buffer de saída entram no FIFO de
Datapath e os lê de lá CPU ou DMA.
Buffer único
(Buffer único)
O FIFO funciona como um buffer único sem status.
Os dados registrados no FIFO são imediatamente legíveis e podem
ser substituído a qualquer momento.
Nível / borda
(Nível / Delta)
O parâmetro responsável por carregar o FIFO do Datapath,
pode ser acionado por nível ou diferencial.
Normal / rápido
(Normal / rápido)
Parâmetro responsável por carregar o FIFO da fonte
Caminho de dados: é cronometrado na frequência do caminho de dados selecionado.
fonte de relógio (normal) ou frequência de barramento (rápida).
Isso permite capturar na frequência mais alta.
no sistema (frequência do barramento), independentemente da frequência do relógio do Datapath.
Captura de software
(Captura de software)
Quando este modo está ativado e o FIFO está no modo
buffer de saída, leia CPU ou DMA relacionado
bateria (A0 para F0, A1 para F1), inicializa
Transfira sincronicamente o valor da bateria para FIFO.
O valor capturado é imediatamente legível no FIFO.
Se o suporte de encadeamento estiver ativado,
a operação seguirá a cadeia até o bloco MS para que
Datapath poderia executar leitura atômica de multibyte
valores.
Assíncrono
(Assíncrono)
Quando os relógios do Datapach e do barramento do sistema não são
sincronizados, os sinais de status FIFO podem ser
encaminhado para o resto do caminho de dados
diretamente, com freqüência da freqüência do relógio do Datapath,
ou com sincronização dupla, no modo assíncrono.
Polaridade do relógio independente
(Polaridade do relógio independente)
Cada FIFO possui um bit de controle para inverter
Polaridade do relógio FIFO versus relógio do Datapath.

A Figura 21-7 mostra as opções de configuração possíveis para o par FIFO, dependendo dos modos de entrada / saída selecionados para cada um deles. Se um FIFO estiver no modo de entrada e outro no modo de saída, obteremos a configuração RX / TX. Um exemplo típico em que essa configuração é necessária é o controlador de barramento SPI. A configuração Dual Capture (ambos os FIFOs estão configurados para saída) fornece captura independente dos pares A0 e A1 ou duas capturas independentes dos registros A0 ou A1. Finalmente, no modo Dual Buffer (ambos na entrada), é possível usar um par de registradores ou dois registradores independentes para carregar ou comparar.



Figura 21-7. Configurações FIFO.

A Figura 21-8 mostra em detalhes as fontes e receptores do FIFO.



Figura 21-8. Fontes e receptores FIFO.

Quando o FIFO opera no modo de buffer de entrada, a fonte é o barramento do sistema e os receptores são os registros Dx e Ax. Ao trabalhar no modo de buffer de saída, as fontes são os registros Ax e ALU e o receptor é o barramento do sistema. A seleção do multiplexador é definida estaticamente no registro de configuração do UDB CFG15, conforme mostrado na tabela para F0_INSEL [1: 0] ou F1_INSEL [1: 0]:

Tabela 21-3. Um conjunto de multiplexadores FIFO no registro de configuração do UDB.
Fx_INSEL [1: 0]Descrição do produto
00Modo buffer de entrada: o barramento do sistema grava no FIFO, enquanto o receptor
FIFO é Ax ou Dx.
01Modo buffer de saída: a fonte FIFO é A0 e o receptor
FIFO - barramento do sistema.
10Modo Buffer de Saída: A fonte do FIFO é A1 e o receptor
FIFO - barramento do sistema.
11Modo Buffer de Saída: A fonte FIFO é uma saída ALU e o receptor
FIFO - barramento do sistema.

Status FIFO


Cada FIFO gera dois sinais de status, "barramento" e "bloco", que são transmitidos aos recursos de rastreio do UDB por meio do multiplexador de saída do Datapath. O status do barramento pode ser usado para interromper ou solicitar uma leitura / gravação de DMA ao FIFO. O estado "bloco" é destinado principalmente a passar o estado FIFO para entidades internas do UDB. a finalidade dos bits de status depende da direção configurada (Fx_INSEL [1: 0]) e dos bits de nível FIFO. Os bits de nível FIFO (Fx_LVL) são definidos no registro de Controle Auxiliar no espaço de registro de trabalho. As opções de status são mostradas na tabela a seguir:

Tabela 21-4. Opções de status FIFO.
Fx_INSEL [1: 0]Fx_lvlCondiçãoSignalDescrição do produto
Entrar0 0Não está cheioStatus do barramentoArmado quando existe um FIFO
coloque por pelo menos um byte.
Entrar1Devastado
pelo menos
metade
Status do barramentoArmado quando existe um FIFO
espaço para pelo menos 2 bytes.
EntrarN / AEstá vazioStatus do blocoArmado quando nenhum FIFO
nem um único byte.
Quando o FIFO não está vazio, o Datapath
pode ler bytes.
Quando o FIFO está vazio, o Datapath
pode ser capaz
expectativas geram
estado de devastação.
Conclusão0 0Não está vazioStatus do barramentoArmado quando em FIFO
pelo menos 1 byte disponível
para leitura.
Conclusão1Está cheio
pelo menos
metade
Status do barramentoArmado quando disponível no FIFO
pelo menos 2 bytes para ler.
ConclusãoN / AEstá cheioStatus do blocoArmado quando o FIFO está cheio.
Quando o FIFO não está completo, o Datapath
pode escrever bytes em FIFO.
Quando FIFO está cheio, Datapath
pode estar em
em espera ou
gerar condição
estouro.

Ilustração de trabalho FIFO


A Figura 21-9 mostra uma sequência típica de leitura e escrita, bem como a geração de status associados a essas operações. Na figura, a leitura e a escrita ocorrem em momentos diferentes, mas podem ser realizadas simultaneamente.



Figura 21-9 Operação dos receptores FIFO.

Modo rápido FIFO (FIFO RÁPIDO)


Quando o FIFO está no modo de buffer de saída, a operação de inicialização do FIFO normalmente usa a frequência do clock do Datapath selecionado para registrar o sinal de gravação. Como mostra a Figura 21-10, ao selecionar o modo rápido FIFO (FIFO FAST), você pode selecionar a frequência do barramento para esta operação específica. Quando usada em conjunto com o modo Nível / Borda = Borda , essa operação reduz o atraso da transmissão da bateria para o FIFO do período do relógio do Datapath para o período do relógio do barramento, pois a frequência do barramento pode ser muito maior. Isso permite que a CPU ou o DMA leia o resultado FIFO recebido com um atraso mínimo.

Conforme mostrado na Figura 21-10, a operação de inicialização rápida é executada independentemente do relógio atual do Datapath, no entanto, o uso da velocidade do relógio do barramento pode aumentar o consumo de energia.



Figura 21-10. Receptores de configuração rápida FIFO.

Modo de gravação FIFO Edge / Level (diferencial / nível)


Existem dois modos de gravação no FIFO do Datapath. No primeiro modo, os dados são transferidos de forma síncrona das baterias para o FIFO. O sinal de controle desse registro (FX_LD) geralmente é gerado por uma máquina de estado ou por uma condição sincronizada com o relógio do Datapath. A gravação no FIFO será realizada em qualquer ciclo em que o sinal de controle de carga de entrada seja '1'. No segundo modo, o FIFO é usado para capturar os valores da bateria em resposta a uma margem positiva do sinal FX_LD. Nesse modo, o formato do sinal é arbitrário (no entanto, seu período deve ser igual a pelo menos um ciclo de relógio do Datapath). Um exemplo desse modo é capturar o valor da bateria usando a entrada do pé externo como gatilho. Uma limitação deste modo é que o parâmetro de entrada deve retornar ao valor '0' pelo menos um ciclo antes que outra diferença positiva seja detectada.

A Figura 21-11 mostra a implementação do modo de detecção diferencial na entrada FX_LD. O modo de ambos os FIFOs no UDB é controlado pelo mesmo bit, alternando esta opção. Observe que a detecção diferencial é cronometrada em uma frequência igual à frequência do FIFO selecionado.



Figura 21-11. Detecção diferencial para receptores de gravação FIFO internos.

Modo de captura de software FIFO


Um requisito comum e importante é permitir que a CPU e o DMA leiam de forma confiável o conteúdo da bateria durante a operação normal. Isso é feito usando a captura de software e ativado usando o bit de configuração FIFO Cap. Este bit se aplica a ambos os FIFOs no UDB, mas só funciona quando o FIFO está no modo de buffer de saída. Ao usar a captura de software, F0 deve ler de A0 e F1 de A1.

Como mostra a Figura 21-12, a leitura da bateria inicia a gravação no FIFO a partir da bateria. O sinal é vinculado em uma cadeia, de modo que a leitura de um byte específico captura ao mesmo tempo os valores da bateria de todos os UDBs da cadeia. Isso permite que o processador de 8 bits leia com êxito 16 bits ou mais ao mesmo tempo. Os dados retornados ao ler a bateria devem ser ignorados e o valor capturado pode ser lido imediatamente no FIFO.

O sinal FX_LD rastreado, que gera a carga FIFO, é enviado para o termo OR junto com o sinal de captura do programa. Quando a captura de hardware e software é usada ao mesmo tempo, o resultado pode ser imprevisível. Como regra, essas funções devem ser mutuamente exclusivas, no entanto, a captura de hardware e software pode ser usada simultaneamente nas seguintes condições:

  • O modo de relógio de captura FIFO está definido como FIFO FAST.
  • O modo de gravação FIFO está definido como FIFO EDGE.

Sob as condições descritas acima, as capturas de hardware e software funcionam essencialmente da mesma maneira e, durante qualquer ciclo de clock do barramento, qualquer um desses sinais pode desencadear uma captura.

Também é recomendável que você limpe o FIFO de destino no código do programa (registro ACTL) antes do início da captura do programa. Graças a isso, os indicadores de leitura e gravação FIFO serão configurados para um estado conhecido.



Figura 21-12. Configuração de captura de software.

Nota do tradutor:
Durante muito tempo, não consegui entender o significado desta seção. Por um longo tempo, tive certeza de que a seção foi escrita para o PSoC3, cujo núcleo de oito bits não pode acessar mais do que byte. Mas, ao criar a oitava parte da tradução , descobriu-se que, mesmo no PSoC5LP, para todo o núcleo do processador ARM de 32 bits, o acesso aos registros UDB em funcionamento pode ser realizado no modo de oito ou dezesseis bits. A julgar pelo documento, não mais. É aqui que a funcionalidade descrita é útil.


Bocados de controle FIFO


O registro do Controle Auxiliar, que pode ser usado para controlar o FIFO durante a operação normal, contém 4 bits.

Os bits FIFO0 CLR e FIFO1 CLR são usados ​​para redefinir ou limpar FIFOs. Quando um desses bits recebe o valor '1', o FIFO associado é redefinido. O bit deve ser restaurado ao seu valor original ('0') para que o FIFO continue trabalhando. Se o valor do bit permanecer igual a um, o FIFO correspondente será desativado e funcionará como um buffer de byte único sem status. Os dados podem ser gravados no FIFO, os dados são imediatamente legíveis e podem ser substituídos a qualquer momento. A direção dos dados com os bits de configuração FX INSEL [1: 0] ainda pode ser definida.

Os bits FIFO0 LVL e FIFO1 LVL determinam o nível em que o FIFO armará o bit de status "bus" (quando o barramento lê ou grava no FIFO). Ou seja, o status do "barramento" depende da direção especificada, conforme mostrado na tabela abaixo.

Tabela 21-5. Bocados de controle de nível FIFO
FIFO LVLModo de buffer de entrada
(o barramento grava no FIFO)
Modo de buffer de saída
(o barramento lê do FIFO)
0 0Não está cheio
Pelo menos 1 byte pode ser gravado.
Não está vazio
Pelo menos 1 byte pode ser lido.
1Esvazie pelo menos a meio caminho
Pelo menos 2 bytes podem ser gravados.
Meio cheio
Pelo menos 2 bytes podem ser lidos.

Operação assíncrona FIFO


A Figura 21-13 mostra o princípio da operação assíncrona de FIFO. Como exemplo, imagine que F0 opere no modo buffer de entrada e F1 no modo buffer de saída, que é uma configuração típica dos registros TX e RX.



Figura 21-13. Operação FIFO assíncrona.

No lado TX, a máquina de estado Datapath usa o sinalizador Vazio para determinar se existem bytes disponíveis para recebimento. O valor Vazio é definido de forma síncrona com a máquina de estado Datapath e é limpo de forma assíncrona devido à gravação do barramento. Após a limpeza, o status é novamente sincronizado com a máquina de estado do Datapath.

No lado do RX, a máquina de estado do RX usa Full para determinar se há espaço livre para gravar no FIFO. O valor Total é configurado de forma síncrona com a máquina de estado Datapath e é limpo de forma assíncrona devido à leitura do barramento. Após a limpeza, o status é novamente sincronizado com a máquina de estado do Datapath.

Um bit FIFO ASYNCH é usado para habilitar esse método de sincronização; após a ativação, esse método é aplicado aos dois FIFOs.

Aplica-se apenas ao status do bloco , pois é assumido que o status do barramento é naturalmente sincronizado pelo processo de interrupção.

Tabela 21-6. Bloquear opções de sincronização de status FIFO.
AssíncronoADICIONAR SINCRONIZAÇÃOOperaçãoModelo de uso
0 00 0Sincronizado com o tempo do barramentoAlterações no status de gravação / leitura da CPU
ocorrem na frequência do barramento. Pode
use para o mínimo
atrasos se você pode conseguir
Frequências do relógio do datapatch
igual à frequência do barramento.
0 01Ressincronização de frequência
pneus à frequência do Datapath.
Este modo deve ser
modo de operação padrão. Quando
A CPU realiza operações de leitura / gravação,
mudança de status será ressincronizada
com a frequência usada no Datapath.
Ele permite que você use o
Período de frequência do caminho de dados a ser configurado
sinal para lógica UDB.
10 0Reservado-
11Sincronização de dupla frequência
pneus à frequência do Datapath.
Quando o relógio pulsa para o Datapath
não apenas não sincronizado com
sistêmica em frequência, mas também
produzido separadamente
gerador independente
esse parâmetro pode ser
usado para o dobro
operações de sincronização
ler e escrever CPU
com relógio do Datapath.

Excesso de FIFO durante a operação


Para a implementação segura de operações de leitura e gravação internas (Datapath) e externas (CPU ou DMA), devem ser utilizados sinais de status FIFO. Não há proteção integrada contra condições de esvaziamento e transbordamento. Se o FIFO estiver cheio e as operações de gravação subseqüentes forem executadas (estouro), os novos dados substituirão o início do FIFO (os dados que estão sendo produzidos no momento são os próximos na fila de leitura). Se o FIFO estiver vazio e as leituras subsequentes forem executadas (esvaziamento ou exaustão), o valor da leitura será indefinido. Os indicadores FIFO permanecem precisos, independentemente do fluxo insuficiente e insuficiente.

Inversão do Relógio FIFO


Cada FIFO possui um bit de controle Fx CK INV, responsável pela polaridade do relógio FIFO Em relação à polaridade do relógio Datapath. Por padrão, o FIFO trabalha com a mesma polaridade que o relógio do Datapath. Quando esse bit é 1, o FIFO opera com polaridade reversa em relação ao Datapath. Isso fornece suporte de protocolo para troca de dados em ambas as frentes, como SPI.

Controle FIFO dinâmico


Normalmente, os FIFOs são configurados estaticamente no modo de buffer de entrada ou no modo de buffer de saída. Como alternativa, cada FIFO pode ser configurado para operar em um modo no qual a direção é controlada dinamicamente (sob a influência de sinais externos). Um bit de configuração por FIFO (Fx DYN) é responsável por ativar este modo. A Figura 21-14 mostra as configurações disponíveis no modo dinâmico FIFO.



Figura 21-14. Modo FIFO dinâmico.

No modo de Acesso Interno, o Datapath pode ler e gravar no FIFO. Nesta configuração, para selecionar a fonte de operações de gravação no FIFO, os bits Fx INSEL devem ser definidos como 1. Fx INSEL = 0 (fonte do barramento da CPU) neste modo está incorreto, pode apenas assumir os valores 1, 2 ou 3 (A0, A1 ou ALU ) Vale ressaltar que a leitura tem acesso apenas à bateria apropriada, a direção dos registros de dados neste modo não está disponível.

No modo de acesso externo, a CPU ou o DMA pode ler ou gravar no FIFO.

A configuração alterna dinamicamente entre o acesso externo e interno, encaminhando sinais do Datapath. Para isso, os sinais de entrada Datapath d0_load e d1_load são usados. Vale ressaltar que no modo de controle dinâmico, d0_load e d1_load não estão disponíveis para seu uso normal ao carregar os registros D0 / D1 de F0 / F1. Os sinais Dx_load podem ser acionados por qualquer sinal de rastreamento, incluindo constantes.

Considere um exemplo no qual, começando com o acesso externo (dx_load == 1), a CPU ou o DMA pode gravar um ou mais bytes de dados no FIFO. Em seguida, ao alternar para o acesso interno (dx_load == 0), o Datapath pode executar operações nos dados. Depois disso, ao alternar para acesso externo, a CPU ou o DMA pode ler o resultado dos cálculos.
Como o Fx INSEL sempre deve ser 01, 10 ou 11 (A0, A1 ou ALU), que corresponde ao "modo de buffer de saída" durante a operação normal, os sinais de status FIFO têm as seguintes definições (dependendo do parâmetro Fx LVL):

Tabela 21-7. Status FIFO.
Sinal de statusValorFx LVL = 0Fx LVL = 1
fx_blk_statStatus do registroFIFO está cheioFIFO está cheio
fx_bus_statStatus de leituraFIFO não está completoMeio cheio

Como o Datapath e a CPU podem gravar e ler a partir de FIFOs, esses sinais não são mais considerados status de bloco e barramento. O sinal blk_stat é usado para o status de gravação e o sinal bus_stat para o status de leitura

21.3.2.3 Status FIFO


Existem quatro sinais de status FIFO, dois para cada FIFO: fifo0_bus_stat, fifo0_blk_stat, fifo1_bus_stat e fifo1_blk_stat. O significado desses sinais depende da direção do FIFO específico, que é determinado pela configuração estática. O status FIFO é descrito em detalhes na seção 21.3.2.2 FIFO do Datapath .

Na próxima parte, passaremos para a análise da Unidade Lógica Aritmética (ALU).

Source: https://habr.com/ru/post/pt434706/


All Articles