Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Controlador de display duplo VHDL de 7 segmentos para SSD Pmod – Fácil integração com FPGA


Neste artigo, apresentarei um módulo VHDL que pode exibir um número de dois dígitos no SSD Pmod:Display de sete segmentos da Digilent. O display duplo de 7 segmentos é compatível com a interface Pmod, o que significa que você pode usá-lo sem solda. Ele se encaixa no conector Pmod, que é padrão em muitas placas de desenvolvimento FPGA.

Para testar a implementação do VHDL, estou usando a Lattice iCEstick, uma placa de desenvolvimento FPGA de baixo custo com conector Pmod. Além do iCEstick, você precisa de um cabo divisor Pmod duplo de 2 × 6 pinos para 6 pinos para converter do conector Pmod paralelo no iCEstick para a versão em série do plugue que o display de 7 segmentos espera. Por fim, recomendo adquirir um cabo de extensão USB tipo A porque conectar o iCEstick diretamente à porta USB do computador é impraticável.

Como funcionam os monitores de 7 segmentos


Existem muitos monitores de 7 segmentos diferentes no mercado. O número de dígitos varia entre eles, assim como a interface física e a pinagem. Uma solução genérica que cubra todos os monitores de 7 segmentos possíveis que você possa encontrar provavelmente não seria muito fácil de usar. No entanto, você pode usar o código apresentado neste artigo como base e modificá-lo para atender às suas necessidades.

A imagem acima é da ficha técnica do módulo Digilent Pmod. Mostra como o display de 7 segmentos se conecta aos pinos Pmod. Esses pinos são diretamente acessíveis ao FPGA no iCEstick.

Sete dos pinos controlam um segmento cada no display. Ao acionar um valor lógico alto em tal pino, o segmento correspondente acenderá no display. Mas existem dois dígitos neste display e só podemos controlar um de cada vez. O pino P4/C no conector J2 seleciona um ou outro dígito. Quando a tensão lógica neste pino é 09 , o dígito direito acende, se for 19 , o dígito esquerdo é ativado.

O ponto decimal “DP” não está conectado e não pode ser acessado.

A entidade


O código abaixo mostra a entidade do nosso módulo VHDL seg7. A entidade possui uma porta genérica com uma constante chamada 27 . Define o comprimento de um contador interno que controla a taxa de atualização do display, a frequência de alternância entre os dígitos esquerdo e direito.

A frequência exata não é essencial. Selecione um comprimento de contador que esteja na faixa de 50 a algumas centenas de Hertz. A fórmula que determina a taxa de atualização é refresh_hz =2clk_cnt_bits / clk_hz .
01 
Além do relógio e do reset, a entidade possui um sinal de entrada:o valor a ser exibido no display de 7 segmentos. O 34 signal é um tipo inteiro restrito ao intervalo de 0 a 99 porque esses são os únicos valores numéricos que é possível mostrar usando apenas dois dígitos.

Os sinais de saída são os sete segmentos como um vetor e o sinal do seletor de dígitos para escolher o dígito esquerdo ou direito para iluminar.

Representando um decimal codificado em binário


Para representar os dígitos mostrados no display usaremos o formato conhecido como decimal codificado em binário (BCD). Embora uma representação binária seja a maneira mais eficiente de armazenar o número decimal, encontramos problemas ao tentar dividi-lo nos dígitos esquerdo e direito para mostrar no display. Não podemos distinguir entre os dígitos decimais simplesmente fatiando o vetor usado para armazenar o número.
10 
Conforme mostrado no código acima, declaramos um subtipo do inteiro no intervalo de 0 a 9 para descrever o valor que pode ser representado por um dígito decimal. Em seguida, declaramos um novo tipo de array que pode conter dois desses valores BCD. O 40 O sinal contém o número que está sendo mostrado no lado esquerdo ou direito do display. Por outro lado, o 54 O sinal contém os caracteres decimais individuais para os dois dígitos, conforme eles aparecerão para uma pessoa que estiver visualizando a tela.

Converter decimal em BCD


A entrada para este módulo, 66 , é um número inteiro no intervalo de 0 a 99, uma representação binária do número. Precisamos converter esse único número inteiro em dois inteiros no intervalo de 0 a 9, os BCDs.

O algoritmo padrão para isso é Double Dabble, também conhecido como shift-and-add-3 algoritmo. Embora seja bom usar isso, optarei por uma solução mais curta em nosso caso, porque só temos dois dígitos para separar.
28 
Usando a divisão inteira conforme mostrado no código acima, podemos isolar o dígito decimal mais significativo e atribuí-lo ao 79 sinal. Para obter o dígito menos significativo, podemos subtrair o dígito mais significativo de 85 sinal, deixando-nos apenas o número para atribuir ao 99 sinal.

Contando ciclos de clock


Atrasar o tempo em FPGAs é simplesmente uma questão de contar os ciclos de clock. O período do relógio é o único intervalo de tempo previsível no qual você pode confiar em seu código VHDL. O código abaixo mostra o 106 sinal, que estamos usando para contar os ciclos do clock. O 117 genérico determina quantos bits reservar para este sinal não assinado.
32 
A taxa de atualização exata da tela é menos importante, por isso optei por um tipo não assinado aqui. Isso nos permite utilizar o comportamento de auto-envolvimento do sinal não assinado. Tudo o que precisamos fazer é incrementar o contador em cada transição ascendente do relógio. O código abaixo mostra o processo síncrono com reset que cuida disso.
40 

Alternar entre dígitos


Agora que temos o contador funcionando livremente, podemos usar o bit mais significativo (MSB) do sinal do contador não assinado para alternar entre os dois dígitos. O MSB alterna entre 122 e 130 com um ciclo de trabalho de 50%. A primeira linha do código abaixo define o 149 sinal com base no valor do MSB. A segunda linha implementa um multiplexador com o MSB usado como seletor. Ele encaminhará o valor do dígito ativo do 158 matriz para o 161 sinal.
58 

BCD para codificador de 7 segmentos



A etapa final do módulo seg7 é traduzir o BCD armazenado no 171 sinal para uma representação visual no display de 7 segmentos. O código abaixo mostra um processo que consegue isso usando uma instrução case.

A posição no vetor de cada literal de bit corresponde a um segmento no display. O índice 0 é igual ao segmento A, o índice 1 é B e assim por diante, até o índice 6, que controla o segmento G. Os mapeamentos de segmentos para índices vetoriais são derivados da folha de dados do display Digilent de 7 segmentos.
61 

A saída


O módulo VHDL seg7 renderizará no display tudo o que você atribuir ao 185 sinal de entrada. No testbench, incrementamos o 199 sinal uma vez a cada segundo. Em seguida, simulamos um pouco mais de 100 segundos para que possamos observar o ponto de quebra do 204 contador.

A forma de onda acima é do ModelSim. Mostra a primeira parte da simulação, onde o valor foi contado de 0 a 15. Podemos ver que os números no 215 array também estão contando. Aqueles 225 estão contando toda vez que o 237 o sinal muda, enquanto as dezenas 247 incremento a cada décimo número.

Você pode baixar o projeto ModelSim, incluindo o testbench, usando o formulário abaixo.

Se você implementar o módulo seg7 como o módulo superior no FPGA, o display provavelmente mostrará um “00” estável. Isso porque 250 é o valor padrão mais comum dado a sinais não inicializados em FPGAs. Quando o 264 sinal for definido como zero, o display mostrará exatamente isso.

Para percorrer todos os números de entrada possíveis, criei um módulo VHDL wrapper que incrementa o 275 sinal dez vezes por segundo. Em seguida, instanciei o módulo seg7 no wrapper antes de implementar o design no Lattice iCEstick. O vídeo Gif em loop abaixo mostra a aparência do design implementado na tela de 7 segmentos.

Comprando o SSD Pmod:display de sete segmentos


O display de 7 segmentos usado nesta postagem do blog vem da Digilent. Você pode comprar o módulo Pmod na loja virtual da Digilent ou obtê-lo em um dos muitos revendedores. Na listagem abaixo, criei um link para a página do produto para exibição em algumas lojas de eletrônicos online que vendem o item.
  • Digilent
  • Digi Key
  • Mouse
  • RS Electronics (Reino Unido)
    (Vá para a página principal da RS Electronics para selecionar o site do seu país)
  • Farnell (Reino Unido)
    (Vá para a página principal da Farnell para selecionar o site do seu país)

Observe que se você quiser usar o display Digilent de 7 segmentos com o Lattice iCEstick , ou qualquer outra placa de desenvolvimento FPGA que tenha um conector Pmod de 6 × 2 pinos, você também precisa de um cabo divisor. O cabo está disponível na Digilent , Chave digital , Mouse e RS Eletrônica .

Além disso, todos os componentes estão disponíveis em vários vendedores na Amazon e no eBay.

Curso VHDL usando o display Digilent de 7 segmentos


Lancei um novo curso de VHDL e FPGA para iniciantes. No curso, utilizo o display de 7 segmentos da Digilent e a placa de desenvolvimento Lattice iCEstick FPGA para ensino de VHDL. Clique no link abaixo para ler mais sobre o curso!

Fast Track de FPGA e VHDL:

Prática para iniciantes absolutos



Você está familiarizado com programação, mas é novo em VHDL?

Você precisa de uma breve introdução a este assunto desconhecido?

Sua agenda está lotada e não sobra tempo para estudar?

Entenda os fundamentos do desenvolvimento de FPGA usando VHDL em algumas noites! Este curso é para profissionais e estudantes de TI que precisam de um rápido resumo do assunto. Com este curso e a placa de desenvolvimento Lattice iCEstick de baixo custo, você estará desenvolvendo hardware real em poucas horas.

Clique aqui para ler mais e se inscrever:
FPGA e VHDL Fast-Track:Prática para Iniciantes Absolutos


VHDL

  1. Controlador de display duplo VHDL de 7 segmentos para SSD Pmod – Fácil integração com FPGA
  2. Verificação formal em VHDL usando PSL
  3. Como usar um procedimento em um processo em VHDL
  4. Como criar um processo cronometrado em VHDL
  5. Como usar um while-loop em VHDL
  6. Guia para iniciantes no uso do Modelsim para simulação FPGA e ASIC
  7. Questionário básico de VHDL – parte 3
  8. Questionário básico de VHDL - parte 1
  9. Master VHDL:introdução abrangente para design FPGA e ASIC
  10. Como fazer um AXI FIFO na RAM do bloco usando o handshake pronto/válido