Tuesday 1 August 2017

Vhdl Moving Average Example


Tenho uma questão relacionada à média contínua do valor de ADCs. A abordagem que usei é a média contínua do exemplo 256 amostras. O valor adcaout (mostrado no código abaixo) que recebo na minha GUI aumenta lentamente. Como exemplo, se eu estou esperando o valor 100mA, My GUI mostra 4mA, 8mA, 15mA. E depois, depois de 2 minutos, obtenho um valor de 100mA estável. Eu quero ver o 100mA diretamente na minha GUI de adcaout em vez de valores de incremento e estabilizando depois de algum tempo. Outra pergunta é que, eu posso de alguma forma tornar este processo rápido, de modo que eu não tenho que esperar por 3 minutos para receber 100 mA estável de adcaout. O clock clk no design digital abaixo é de 20 MHz. O relógio para receber valores ADC na placa FPGA é de 15 KHz. - o arquivo adc. vhd está abaixo: Seu código é modificado da seguinte forma: A saída final que eu estou visualizando na minha GUI é slvvalue1 e slvvalue2 Como sobre isso: na reinicialização (ou em qualquer outro momento, se desejar), atribua a Valor de dados para todos os elementos em sua matriz de estágio. Isso deve definir instantaneamente sua média para o valor atual: o exemplo abaixo mostra o código completo para uma calculadora média móvel. Minha sugestão é que você estuda até que você entenda isso. Em seguida, tente usá-lo em seu projeto. Finalmente, e somente depois de ter um circuito básico funcionando, você pode mudá-lo para satisfazer suas restrições de design (largura de dados, número de amostras, intervalo de inteiros, uso de assinado versus inteiro, etc.). Finalmente, se você quiser usar O código acima para manter duas médias separadas para duas sinais distintas, simplesmente instanciar a entidade de média duas vezes: Editar: Como eu entendo dos seus comentários, você pode precisar de uma entrada extra para definir a média instantaneamente para o valor de entrada atual. Nesse caso, você pode usar uma entrada de carga como mostrado abaixo: respondido em 26 de novembro às 15: 45. Estou tentando escrever um módulo VHDL em média móvel (uniformemente ponderado) que usa FSMD (ata). Pelo que entendi, os estados necessários seria algo como buscar, dividir, produzir. Abaixo está o processo que escrevi, mas sinto que minha lógica está um pouco fora. Note-se que a média de dados Im é apenas uma matriz constante de números de 8 bits, então pensei que deveria ser bom usar um projeto não causal. Os dados têm 64 entradas e, no momento, a janela para a média é 4. Quão errado isso parece Alguns problemas que posso ver imediatamente: você não reinicia a temperatura em qualquer lugar. Você não tem nenhum limite de verificação de contagem (é um subtipo ou apenas um inteiro natural. O que acontece com o padrão (counti) quando você se aproxima do limite Como você rola) O seu loop for 0 é len - você tem certeza que você Não significou 0 para (len - 1) Uma vez que seu processo de decodificação do estado inteiro é sincronizado, você realmente não precisa de nstate. Note que você não está inicializando o cstate (mas você ainda está descodificando). Ou faça seu estado decodificar um processo combinacional separado ou simplesmente se livrar de nstate e atribuir diretamente ao cstate. Caso contrário, depende dos seus objetivos de design. Se você não se preocupa com a taxa de transferência, mas precisa ser executado em uma taxa de clock muito alta, você pode querer executar sua adição, seqüencialmente em vez de em paralelo, por exemplo. Respondeu 5 de setembro 14 às 13:32 obrigado, isso definitivamente faz as coisas melhor. Sobre o rollover do conteudo, não tenho certeza de como fazer isso porque, para cada padrão (contagem) até 63, eu quero exibir seu valor e a média da janela em torno dele. Então, se eu mudar de direção, não deve sair dos limites, mas não mostrará dados completos. Se eu estivesse fazendo uma implementação causal eu teria algum atraso no começo, é uma coisa semelhante que eu preciso aqui, mas no final do usuário ndash1710566 5 de setembro às 23:23 minha solução era: elsif (evento clk), então, se contar 64 Então conta lt 0 else calcula end if. And no loop for eu coloco uma saída se count i for maior que 63. ndash user1710566 6 de setembro 14 às 0:05

No comments:

Post a Comment