Projeto LFSR eficiente em FPGA usando VHDL e Verilog
LFSR em um FPGA – Código VHDL e Verilog
Como funciona um registrador de mudança de realimentação linear dentro de um FPGA
LFSR significa Linear Feedback Shift Register e é um design útil dentro de FPGAs. Os LFSRs são simples de sintetizar, o que significa que consomem relativamente poucos recursos e podem ser executados em taxas de clock muito altas dentro de um FPGA. Existem muitos aplicativos que se beneficiam do uso de um LFSR, incluindo:
- Contadores
- Geradores de padrões de teste
- Embaralhamento de dados
- Criptografia
O registrador de deslocamento de feedback linear é implementado como uma série de flip-flops dentro de um FPGA que são conectados como um registrador de deslocamento. Várias derivações da cadeia de registradores de deslocamento são usadas como entradas para um XOR ou XNOR portão. A saída deste portão é então usada como feedback ao início da cadeia do registrador de deslocamento, daí o Feedback no LFSR.
LFSR de 5 bits usando portas XNOR
Quando um LFSR está em execução, o padrão gerado pelos flip-flops individuais é pseudo-aleatório, o que significa que é quase aleatório. Não é completamente aleatório porque, a partir de qualquer estado do padrão LFSR, você pode prever o próximo estado. Existem algumas propriedades dos registradores de deslocamento que são importantes observar:
- Os padrões LFSR são pseudoaleatórios.
- Os padrões de saída são determinísticos. Você pode descobrir o próximo estado conhecendo a posição das portas XOR, bem como o padrão atual.
- Um padrão com apenas 0 não pode aparecer quando os taps usam portas XOR. Como 0 XOR com 0 sempre produzirá 0, o LFSR irá parar de funcionar.
- Um padrão com apenas 1 não pode aparecer quando os taps usam portas XNOR. Como 1 XNOR com 1 sempre produzirá 1, o LFSR irá parar de funcionar.
- O número máximo possível de iterações de qualquer LFSR =2Bits-1
LFSRs mais longos levarão mais tempo para serem executados em todas as iterações. O maior número possível de iterações para um LFSR de N bits é 2N-1. Se você pensar bem, todos os padrões possíveis de algo com N bits de comprimento são 2N. Portanto, existe apenas um padrão que não pode ser expresso usando um LFSR. Esse padrão é todo 0 ao usar portas XOR, ou todo 1 ao usar portas XNOR como porta de feedback.
O código VHDL e Verilog cria qualquer LFSR de N bits que você desejar. Ele usa polinômios (que é a matemática por trás do LFSR) para criar o comprimento máximo possível do LFSR para cada largura de bit. Portanto, para 3 bits, são necessários 23-1=7 clocks para percorrer todas as combinações possíveis, para 4 bits:24-1=15, para 5 bits:25-1=31, etc. Baseei isso em uma implementação XNOR para permitir que o FPGA inicialize em um estado totalmente zero no LFSR. Aqui está a tabela completa de todos os padrões LFSR publicados pela Xilinx.
Implementação VHDL:
LFSR.vhd
02
Teste (LFSR_TB.vhd)
11Implementação Verilog:
LFSR.v
29
Teste (LFSR_TB.v)
33
Verilog